[Bf-blender-cvs] [8a752357d8e] temp-node-error-messages: Rewrite error message API for generality as general "UI storage"
Hans Goudey
noreply at git.blender.org
Tue Feb 16 04:49:25 CET 2021
Commit: 8a752357d8e75194faf8e5601f4177e8e9c8ba48
Author: Hans Goudey
Date: Mon Feb 15 21:49:08 2021 -0600
Branches: temp-node-error-messages
https://developer.blender.org/rB8a752357d8e75194faf8e5601f4177e8e9c8ba48
Rewrite error message API for generality as general "UI storage"
===================================================================
M source/blender/blenkernel/BKE_node.h
A source/blender/blenkernel/BKE_node_ui_storage.hh
M source/blender/blenkernel/CMakeLists.txt
M source/blender/blenkernel/intern/node.cc
A source/blender/blenkernel/intern/node_ui_storage.cc
M source/blender/editors/space_node/node_draw.cc
M source/blender/makesdna/DNA_node_types.h
M source/blender/modifiers/intern/MOD_nodes.cc
M source/blender/nodes/NOD_geometry_exec.hh
M source/blender/nodes/geometry/nodes/node_geo_point_distribute.cc
M source/blender/nodes/geometry/nodes/node_geo_point_instance.cc
M source/blender/nodes/intern/node_geometry_exec.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 06e19a3d190..62c06af0884 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -848,7 +848,7 @@ bool BKE_node_is_connected_to_output(struct bNodeTree *ntree, struct bNode *node
/* ************** COMMON NODES *************** */
#define NODE_UNDEFINED -2 /* node type is not registered */
-#define NODE_CUSTOM -1 /* for dynamically registered custom types */
+#define NODE_CUSTOM -1 /* for dynamically registered custom types */
#define NODE_GROUP 2
// #define NODE_FORLOOP 3 /* deprecated */
// #define NODE_WHILELOOP 4 /* deprecated */
@@ -940,33 +940,6 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree,
struct Scene *scene,
const int layer_index);
-typedef struct NodeWarningContextNodesModifier {
- const Object *object;
- const char *modifier_name;
-} NodeWarningContextNodesModifier;
-
-typedef enum eNodeWarningType {
- NODE_WARNING_ERROR,
- NODE_WARNING_INFO,
-} eNodeWarningType;
-
-typedef struct NodeWarning {
- eNodeWarningType type;
- char *message;
-} NodeWarning;
-
-void BKE_nodetree_error_message_add(struct bNodeTree *ntree,
- const struct Object *object,
- const char *modifier_name,
- const struct bNode *node,
- const eNodeWarningType type,
- const char *message);
-
-void BKE_nodetree_error_messages_clear(struct bNodeTree *ntree);
-
-const NodeWarning *BKE_nodetree_error_message_get(const struct bNodeTree *ntree,
- const bNode *node);
-
/* -------------------------------------------------------------------- */
/** \name Shader Nodes
* \{ */
diff --git a/source/blender/blenkernel/BKE_node_ui_storage.hh b/source/blender/blenkernel/BKE_node_ui_storage.hh
new file mode 100644
index 00000000000..4a50bcf54ce
--- /dev/null
+++ b/source/blender/blenkernel/BKE_node_ui_storage.hh
@@ -0,0 +1,74 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include "BLI_hash.hh"
+#include "BLI_map.hh"
+
+struct bNode;
+struct bNodeTree;
+struct Object;
+struct ModifierData;
+
+struct NodeUIStorageContextModifier {
+ const struct Object *object;
+ const struct ModifierData *modifier;
+
+ uint64_t hash() const
+ {
+ const uint64_t hash1 = blender::DefaultHash<const Object *>{}(object);
+ const uint64_t hash2 = blender::DefaultHash<const ModifierData *>{}(modifier);
+ return hash1 ^ (hash2 * 33);
+ }
+
+ bool operator==(const NodeUIStorageContextModifier &other) const
+ {
+ return other.object == object && other.modifier == modifier;
+ }
+};
+
+enum class NodeWarningType {
+ Error,
+ Warning,
+ Info,
+};
+
+struct NodeWarning {
+ NodeWarningType type;
+ std::string message;
+};
+
+struct NodeUIStorage {
+ blender::Vector<NodeWarning> warnings;
+};
+
+struct NodeTreeUIStorage {
+ blender::Map<const struct bNode *, blender::Map<NodeUIStorageContextModifier, NodeUIStorage>>
+ node_map;
+
+ NodeTreeUIStorage() = default;
+};
+
+void BKE_nodetree_ui_storage_clear(struct bNodeTree &ntree);
+
+void BKE_nodetree_ui_storage_ensure(bNodeTree &ntree);
+
+void BKE_nodetree_error_message_add(struct bNodeTree &ntree,
+ const NodeUIStorageContextModifier &context,
+ const struct bNode &node,
+ const NodeWarningType type,
+ const std::string &message);
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 6b6d2b45d02..67b97cfee4f 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -199,6 +199,7 @@ set(SRC
intern/multires_versioning.c
intern/nla.c
intern/node.cc
+ intern/node_ui_storage.cc
intern/object.c
intern/object_deform.c
intern/object_dupli.c
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 64f15e31c6e..32356671c05 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -69,6 +69,7 @@
#include "BKE_lib_query.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_node_ui_storage.hh"
#include "BLI_ghash.h"
#include "BLI_threads.h"
@@ -99,75 +100,6 @@ bNodeSocketType NodeSocketTypeUndefined;
static CLG_LogRef LOG = {"bke.node"};
-/* -------------------------------------------------------------------- */
-/** \name Runtime (Error Messages)
- * \{ */
-
-class bNodeTreeRuntime {
- public:
- blender::Map<const std::string, NodeWarning> error_messages;
-};
-
-static void nodetree_runtime_ensure(bNodeTree *ntree)
-{
- if (ntree->runtime == nullptr) {
- ntree->runtime = new bNodeTreeRuntime();
- }
-}
-
-void BKE_nodetree_error_message_add(bNodeTree *ntree,
- const Object *object,
- const char *modifier_name,
- const bNode *node,
- const eNodeWarningType type,
- const char *message)
-{
- nodetree_runtime_ensure(ntree);
- bNodeTreeRuntime *runtime = ntree->runtime;
-
- NodeWarning warning = {type, BLI_strdup(message), object, modifier_name};
-
- switch (type) {
- case NODE_WARNING_ERROR:
- CLOG_ERROR(
- &LOG, "Node Tree: \"%s\", Node: \"%s\", %s", ntree->id.name + 2, node->name, message);
- break;
- case NODE_WARNING_INFO:
- CLOG_INFO(
- &LOG, 2, "Node Tree: \"%s\", Node: \"%s\", %s", ntree->id.name + 2, node->name, message);
- break;
- }
-
- runtime->error_messages.add(node->name, warning);
-}
-
-void BKE_nodetree_error_messages_clear(bNodeTree *ntree)
-{
- bNodeTreeRuntime *runtime = ntree->runtime;
- if (runtime != nullptr) {
- runtime->error_messages.clear();
- runtime->error_messages.foreach_item([](const std::string UNUSED(node_name),
- NodeWarning warning) { MEM_freeN(warning.message); });
- }
-}
-
-const NodeWarning *BKE_nodetree_error_message_get(const bNodeTree *ntree, const bNode *node)
-{
- bNodeTreeRuntime *runtime = ntree->runtime;
- if (runtime == nullptr) {
- return nullptr;
- }
-
- const std::string node_name = std::string(node->name);
- if (runtime->error_messages.contains(node_name)) {
- return &runtime->error_messages.lookup(node_name);
- }
-
- return nullptr;
-}
-
-/** \} */
-
static void ntree_set_typeinfo(bNodeTree *ntree, bNodeTreeType *typeinfo);
static void node_socket_copy(bNodeSocket *sock_dst, const bNodeSocket *sock_src, const int flag);
static void free_localized_node_groups(bNodeTree *ntree);
@@ -343,8 +275,7 @@ static void ntree_free_data(ID *id)
BKE_libblock_free_data(&ntree->id, true);
}
- delete ntree->runtime;
- ntree->runtime = nullptr;
+ BKE_nodetree_ui_storage_clear(*ntree);
}
static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
@@ -634,7 +565,7 @@ static void ntree_blend_write(BlendWriter *writer, ID *id, const void *id_addres
ntree->interface_type = nullptr;
ntree->progress = nullptr;
ntree->execdata = nullptr;
- ntree->runtime = nullptr;
+ // ntree->runtime = nullptr;
BLO_write_id_struct(writer, bNodeTree, id_address, &ntree->id);
@@ -666,7 +597,7 @@ void ntreeBlendReadData(BlendDataReader *reader, bNodeTree *ntree)
ntree->progress = nullptr;
ntree->execdata = nullptr;
- ntree->runtime = nullptr;
+ // ntree->runtime = nullptr;
BLO_read_data_address(reader, &ntree->adt);
BKE_animdata_blend_read_data(reader, ntree->adt);
diff --git a/source/blender/blenkernel/intern/node_ui_storage.cc b/source/blender/blenkernel/intern/node_ui_storage.cc
new file mode 100644
index 00000000000..844bf0fbb37
--- /dev/null
+++ b/source/blender/blenkernel/intern/node_ui_storage.cc
@@ -0,0 +1,99 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "CLG_log.h"
+
+#include "BLI_map.hh"
+#include "BLI_string_ref.hh"
+#include "BLI_vector.hh"
+
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
+
+#include "BKE_node_ui_storage.hh"
+
+static CLG_LogRef LOG = {"bke.node_ui_storage"};
+
+using blender::Map;
+using blender::StringRef;
+using blender::Vector;
+
+void BKE_nodetree_ui_storage_ensure(bNodeTree &ntree)
+{
+ if (ntree.runtime == nullptr) {
+ ntree.runtime = new NodeTreeUIStorage();
+ }
+}
+
+void BKE_nodetree_ui_storage_clear(bNodeTree &ntree)
+{
+ NodeTreeUIStorage *ui_storage = ntree.runtime;
+ if (ui_storag
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list