diff options
author | Julian Eisel <julian@blender.org> | 2021-09-30 17:26:56 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2021-09-30 17:39:09 +0300 |
commit | 4ee2d9df428d16f07e351f5554b951ae75804ea0 (patch) | |
tree | a10641e618b9de7aeec38248ebf3a1dfad257abc /source/blender/editors/include/UI_tree_view.hh | |
parent | 42ce88f15cb77c859c6b2fed119934836235b961 (diff) |
UI: Support easy dropping into/onto rows in new tree-view API
Adds an easy way to add drop support for tree-view rows.
Most of the work is handled by the tree-view UI code. The tree items can
simply override a few functions (`can_drop()`, `on_drop()`,
`drop_tooltip()`) to implement their custom drop behavior.
While dragging over a tree-view item that can be dropped into/onto, the
item can show a custom and dynamic tooltip explaining what's gonna
happen on drop.
This isn't used yet, but will soon be for asset catalogs.
See documentation here:
https://wiki.blender.org/wiki/Source/Interface/Views#Further_Customizations
Diffstat (limited to 'source/blender/editors/include/UI_tree_view.hh')
-rw-r--r-- | source/blender/editors/include/UI_tree_view.hh | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/source/blender/editors/include/UI_tree_view.hh b/source/blender/editors/include/UI_tree_view.hh index 81a614cd195..d36e688dd65 100644 --- a/source/blender/editors/include/UI_tree_view.hh +++ b/source/blender/editors/include/UI_tree_view.hh @@ -29,11 +29,14 @@ #include "UI_resources.h" +struct bContext; struct PointerRNA; struct uiBlock; struct uiBut; struct uiButTreeRow; struct uiLayout; +struct wmEvent; +struct wmDrag; namespace blender::ui { @@ -185,10 +188,19 @@ class AbstractTreeViewItem : public TreeViewItemContainer { virtual void build_row(uiLayout &row) = 0; virtual void on_activate(); - - /** Copy persistent state (e.g. is-collapsed flag, selection, etc.) from a matching item of the - * last redraw to this item. If sub-classes introduce more advanced state they should override - * this and make it update their state accordingly. */ + virtual bool on_drop(const wmDrag &drag); + virtual bool can_drop(const wmDrag &drag) const; + /** Custom text to display when dragging over a tree item. Should explain what happens when + * dropping the data onto this item. Will only be used if #AbstractTreeViewItem::can_drop() + * returns true, so the implementing override doesn't have to check that again. + * The returned value must be a translated string. */ + virtual std::string drop_tooltip(const bContext &C, + const wmDrag &drag, + const wmEvent &event) const; + + /** Copy persistent state (e.g. is-collapsed flag, selection, etc.) from a matching item of + * the last redraw to this item. If sub-classes introduce more advanced state they should + * override this and make it update their state accordingly. */ virtual void update_from_old(const AbstractTreeViewItem &old); /** Compare this item to \a other to check if they represent the same data. This is critical for * being able to recognize an item from a previous redraw, to be able to keep its state (e.g. |