A tree-view item's drop controller can now return a message for the user explaining why dropping isn't possible with the dropped data. This is then displayed in red text next to the cursor. This isn't actually used yet, the follow up commit will do that.
73 lines
2.2 KiB
C++
73 lines
2.2 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
/** \file
|
|
* \ingroup edinterface
|
|
*/
|
|
|
|
#include "BKE_context.h"
|
|
|
|
#include "DNA_space_types.h"
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
#include "WM_api.h"
|
|
|
|
#include "UI_interface.h"
|
|
|
|
static bool ui_tree_view_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
|
{
|
|
const ARegion *region = CTX_wm_region(C);
|
|
const uiTreeViewItemHandle *hovered_tree_item = UI_block_tree_view_find_item_at(region,
|
|
event->xy);
|
|
if (!hovered_tree_item) {
|
|
return false;
|
|
}
|
|
|
|
if (drag->free_disabled_info) {
|
|
MEM_SAFE_FREE(drag->disabled_info);
|
|
}
|
|
|
|
drag->free_disabled_info = false;
|
|
return UI_tree_view_item_can_drop(hovered_tree_item, drag, &drag->disabled_info);
|
|
}
|
|
|
|
static char *ui_tree_view_drop_tooltip(bContext *C,
|
|
wmDrag *drag,
|
|
const int xy[2],
|
|
wmDropBox *UNUSED(drop))
|
|
{
|
|
const ARegion *region = CTX_wm_region(C);
|
|
const uiTreeViewItemHandle *hovered_tree_item = UI_block_tree_view_find_item_at(region, xy);
|
|
if (!hovered_tree_item) {
|
|
return nullptr;
|
|
}
|
|
|
|
return UI_tree_view_item_drop_tooltip(hovered_tree_item, drag);
|
|
}
|
|
|
|
void ED_dropboxes_ui()
|
|
{
|
|
ListBase *lb = WM_dropboxmap_find("User Interface", SPACE_EMPTY, 0);
|
|
|
|
WM_dropbox_add(lb,
|
|
"UI_OT_tree_view_drop",
|
|
ui_tree_view_drop_poll,
|
|
nullptr,
|
|
nullptr,
|
|
ui_tree_view_drop_tooltip);
|
|
}
|