GPv3: Add rename function for layer groups
This adds core functions to rename layer groups while preserving name uniqueness.
This commit is contained in:
@@ -286,10 +286,8 @@ class LayerGroup : public ::GreasePencilLayerTreeGroup {
|
||||
~LayerGroup();
|
||||
|
||||
public:
|
||||
StringRefNull name() const
|
||||
{
|
||||
return this->base.name;
|
||||
}
|
||||
StringRefNull name() const;
|
||||
void set_name(StringRefNull new_name);
|
||||
|
||||
bool is_visible() const;
|
||||
bool is_locked() const;
|
||||
@@ -374,6 +372,15 @@ class LayerGroup : public ::GreasePencilLayerTreeGroup {
|
||||
void tag_nodes_cache_dirty() const;
|
||||
};
|
||||
|
||||
inline const TreeNode &Layer::as_node() const
|
||||
{
|
||||
return *reinterpret_cast<const TreeNode *>(this);
|
||||
}
|
||||
inline TreeNode &Layer::as_node()
|
||||
{
|
||||
return *reinterpret_cast<TreeNode *>(this);
|
||||
}
|
||||
|
||||
inline StringRefNull Layer::name() const
|
||||
{
|
||||
return this->base.name;
|
||||
@@ -384,13 +391,9 @@ inline LayerGroup &Layer::parent_group() const
|
||||
return this->base.parent->wrap();
|
||||
}
|
||||
|
||||
inline const TreeNode &Layer::as_node() const
|
||||
inline StringRefNull LayerGroup::name() const
|
||||
{
|
||||
return *reinterpret_cast<const TreeNode *>(this);
|
||||
}
|
||||
inline TreeNode &Layer::as_node()
|
||||
{
|
||||
return *reinterpret_cast<TreeNode *>(this);
|
||||
return this->base.name;
|
||||
}
|
||||
|
||||
namespace convert {
|
||||
|
||||
@@ -616,6 +616,11 @@ LayerGroup::~LayerGroup()
|
||||
this->runtime = nullptr;
|
||||
}
|
||||
|
||||
void LayerGroup::set_name(StringRefNull new_name)
|
||||
{
|
||||
this->base.name = BLI_strdup(new_name.c_str());
|
||||
}
|
||||
|
||||
bool LayerGroup::is_visible() const
|
||||
{
|
||||
if (this->base.parent) {
|
||||
@@ -1406,6 +1411,19 @@ void GreasePencil::rename_layer(blender::bke::greasepencil::Layer &layer,
|
||||
layer.set_name(unique_name);
|
||||
}
|
||||
|
||||
void GreasePencil::rename_group(blender::bke::greasepencil::LayerGroup &group,
|
||||
blender::StringRefNull new_name)
|
||||
{
|
||||
using namespace blender;
|
||||
if (group.name() == new_name) {
|
||||
return;
|
||||
}
|
||||
VectorSet<StringRefNull> names = get_node_names(*this);
|
||||
std::string unique_name(new_name.c_str());
|
||||
unique_layer_group_name(names, unique_name.data());
|
||||
group.set_name(unique_name);
|
||||
}
|
||||
|
||||
void GreasePencil::remove_layer(blender::bke::greasepencil::Layer &layer)
|
||||
{
|
||||
using namespace blender::bke::greasepencil;
|
||||
|
||||
@@ -99,9 +99,10 @@ class LayerViewItem : public AbstractTreeViewItem {
|
||||
|
||||
class LayerGroupViewItem : public AbstractTreeViewItem {
|
||||
public:
|
||||
LayerGroupViewItem(/*GreasePencil &grease_pencil, */ LayerGroup &group)
|
||||
: /*grease_pencil_(grease_pencil),*/ group_(group)
|
||||
LayerGroupViewItem(GreasePencil &grease_pencil, LayerGroup &group)
|
||||
: grease_pencil_(grease_pencil), group_(group)
|
||||
{
|
||||
this->disable_activatable();
|
||||
this->label_ = group_.name();
|
||||
}
|
||||
|
||||
@@ -111,8 +112,29 @@ class LayerGroupViewItem : public AbstractTreeViewItem {
|
||||
uiItemL(sub, IFACE_(group_.name().c_str()), ICON_FILE_FOLDER);
|
||||
}
|
||||
|
||||
bool supports_collapsing() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool supports_renaming() const override
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool rename(StringRefNull new_name) override
|
||||
{
|
||||
grease_pencil_.rename_group(group_, new_name);
|
||||
return true;
|
||||
}
|
||||
|
||||
StringRef get_rename_string() const override
|
||||
{
|
||||
return group_.name();
|
||||
}
|
||||
|
||||
private:
|
||||
/* GreasePencil &grease_pencil_; */
|
||||
GreasePencil &grease_pencil_;
|
||||
LayerGroup &group_;
|
||||
};
|
||||
|
||||
@@ -134,7 +156,9 @@ void LayerTreeView::build_tree_node_recursive(TreeNode &node)
|
||||
add_tree_item<LayerViewItem>(this->grease_pencil_, node.as_layer_for_write());
|
||||
}
|
||||
else if (node.is_group()) {
|
||||
add_tree_item<LayerGroupViewItem>(/*this->grease_pencil_, */ node.as_group_for_write());
|
||||
LayerGroupViewItem &group_item = parent.add_tree_item<LayerGroupViewItem>(
|
||||
this->grease_pencil_, node.as_group_for_write());
|
||||
group_item.set_collapsed(false);
|
||||
LISTBASE_FOREACH_BACKWARD (GreasePencilLayerTreeNode *, node_, &node.as_group().children) {
|
||||
build_tree_node_recursive(node_->wrap());
|
||||
}
|
||||
|
||||
@@ -465,6 +465,8 @@ typedef struct GreasePencil {
|
||||
blender::bke::greasepencil::Layer *find_layer_by_name(blender::StringRefNull name);
|
||||
|
||||
void rename_layer(blender::bke::greasepencil::Layer &layer, blender::StringRefNull new_name);
|
||||
void rename_group(blender::bke::greasepencil::LayerGroup &group,
|
||||
blender::StringRefNull new_name);
|
||||
|
||||
void remove_layer(blender::bke::greasepencil::Layer &layer);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user