22#include "RNA_prototypes.hh"
72 int selected_count = [&]() ->
int {
81 "Selected Key Blocks");
92 selected_keys_[selected_count] = kb;
96 return selected_keys_;
121 if (!drag_shapekey || !drag_shapekey[0]) {
131 const StringRef drop_name = drop_kb_.name;
138 if (drop_index_ == 0) {
139 return TIP_(
"Cannot move above basis shape key");
141 return fmt::format(fmt::runtime(
TIP_(
"Move {} above {}")), drag_name, drop_name);
143 return fmt::format(fmt::runtime(
TIP_(
"Move {} below {}")), drag_name, drop_name);
158 for (int8_t
i = 0; drag_shapekey[
i] !=
nullptr;
i++) {
162 if (drag_index == -1) {
171 if (drop_index == 0) {
174 drop_index -= int(drag_index < drop_index);
177 drop_index += int(drag_index > drop_index) +
i;
200 shape_key_.object =
object;
201 shape_key_.key = key;
203 shape_key_.index = index;
212 &shape_key_.key->id, &RNA_ShapeKey, shape_key_.kb);
214 if (shape_key_.index > 0) {
227 return shape_key_.object->shapenr == shape_key_.index + 1;
233 &shape_key_.object->id, &RNA_Object, shape_key_.object);
248 AbstractViewItem::set_selected(
select);
260 &shape_key_.key->id, &RNA_ShapeKey, shape_key_.kb);
291 return std::make_unique<ShapeKeyDragController>(
297 return std::make_unique<ShapeKeyDropTarget>(
305 if (key ==
nullptr) {
325 "Shape Key Tree View",
326 std::make_unique<ed::object::shapekey::ShapeKeyTreeView>(*ob));
Object * CTX_data_active_object(const bContext *C)
Main * CTX_data_main(const bContext *C)
bool BKE_keyblock_move(Object *ob, int org_index, int new_index)
Key * BKE_key_from_object(Object *ob)
General operations, lookup, etc. for blender objects.
bool BKE_object_shapekey_remove(Main *bmain, Object *ob, KeyBlock *kb)
#define BLI_assert_unreachable()
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
#define SET_FLAG_FROM_TEST(value, test, flag)
void DEG_id_tag_update(ID *id, unsigned int flags)
void ED_undo_push(bContext *C, const char *str)
void ED_undo_grouped_push(bContext *C, const char *str)
blender::ui::AbstractGridView * UI_block_add_view(uiBlock &block, blender::StringRef idname, std::unique_ptr< blender::ui::AbstractGridView > grid_view)
void UI_menutype_draw(bContext *C, MenuType *mt, uiLayout *layout)
uiBut * uiItemL_ex(uiLayout *layout, blender::StringRef name, int icon, bool highlight, bool redalert)
constexpr const char * c_str() const
ShapeKeyDragController(ShapeKeyTreeView &view, ShapeKey drag_key)
std::optional< eWM_DragDataType > get_drag_type() const override
void * create_drag_data() const override
std::string drop_tooltip(const ui::DragInfo &drag_info) const override
bool on_drop(bContext *C, const ui::DragInfo &drag_info) const override
bool can_drop(const wmDrag &drag, const char **) const override
ShapeKeyDropTarget(ui::AbstractTreeViewItem &item, ui::DropBehavior behavior, KeyBlock &drop_kb, int index)
std::unique_ptr< ui::AbstractViewItemDragController > create_drag_controller() const override
void set_selected(const bool select) override
bool rename(const bContext &C, StringRefNull new_name) override
void build_context_menu(bContext &C, uiLayout &layout) const override
void delete_item(bContext *C) override
std::unique_ptr< ui::TreeViewItemDropTarget > create_drop_target() override
void on_activate(bContext &C) override
void build_row(uiLayout &row) override
StringRef get_rename_string() const override
std::optional< bool > should_be_active() const override
ShapeKeyItem(Object *object, Key *key, KeyBlock *kb, int index)
std::optional< bool > should_be_selected() const override
bool supports_renaming() const override
void build_tree() override
ShapeKeyTreeView(Object &ob)
Abstract base class for defining a customizable tree-view item.
AbstractTreeView & get_tree_view() const
void set_default_rows(int default_rows)
AbstractViewItemDragController(AbstractView &view)
void allow_multiselect_items()
void set_context_menu_title(const std::string &title)
static void build_tree_view(const bContext &C, AbstractTreeView &tree_view, uiLayout &layout, bool add_box=true)
ItemT & add_tree_item(Args &&...args)
TreeViewItemDropTarget(AbstractTreeViewItem &view_item, DropBehavior behavior=DropBehavior::Insert)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void template_tree(uiLayout *layout, bContext *C)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
const DropLocation drop_location
void use_property_decorate_set(bool is_sep)
void active_set(bool active)
uiLayout & row(bool align)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)