Outliner: Add range extend select
Add support for ctrl+shift+lmb to default and industry compatible keymaps to select a range without removing the existing selection.
This commit is contained in:
parent
74d05eb71a
commit
4421eb684d
|
@ -707,6 +707,8 @@ def km_outliner(params):
|
|||
{"properties": [("extend", True), ("deselect_all", not params.legacy)]}),
|
||||
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True},
|
||||
{"properties": [("extend", False), ("extend_range", True), ("deselect_all", not params.legacy)]}),
|
||||
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK', "ctrl": True, "shift": True},
|
||||
{"properties": [("extend", True), ("extend_range", True), ("deselect_all", not params.legacy)]}),
|
||||
("outliner.select_box", {"type": 'B', "value": 'PRESS'}, None),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, {"properties": [("tweak", True)]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True},
|
||||
|
|
|
@ -450,6 +450,8 @@ def km_outliner(params):
|
|||
{"properties": [("extend", True), ("deselect_all", True)]}),
|
||||
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True},
|
||||
{"properties": [("extend", False), ("extend_range", True), ("deselect_all", True)]}),
|
||||
("outliner.item_activate", {"type": 'LEFTMOUSE', "value": 'CLICK', "ctrl": True, "shift": True},
|
||||
{"properties": [("extend", True), ("extend_range", True), ("deselect_all", True)]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, {"properties": [("tweak", True)]}),
|
||||
("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True},
|
||||
{"properties": [("tweak", True), ("mode", "ADD")]}),
|
||||
|
|
|
@ -1269,7 +1269,10 @@ static void do_outliner_range_select_recursive(ListBase *lb,
|
|||
}
|
||||
|
||||
/* Select a range of items between cursor and active element */
|
||||
static void do_outliner_range_select(bContext *C, SpaceOutliner *soops, TreeElement *cursor)
|
||||
static void do_outliner_range_select(bContext *C,
|
||||
SpaceOutliner *soops,
|
||||
TreeElement *cursor,
|
||||
const bool extend)
|
||||
{
|
||||
TreeElement *active = outliner_find_element_with_flag(&soops->tree, TSE_ACTIVE);
|
||||
outliner_flag_set(&soops->tree, TSE_ACTIVE_WALK, false);
|
||||
|
@ -1283,7 +1286,9 @@ static void do_outliner_range_select(bContext *C, SpaceOutliner *soops, TreeElem
|
|||
TreeStoreElem *tselem = TREESTORE(active);
|
||||
const bool active_selected = (tselem->flag & TSE_SELECTED);
|
||||
|
||||
outliner_flag_set(&soops->tree, TSE_SELECTED | TSE_ACTIVE_WALK, false);
|
||||
if (!extend) {
|
||||
outliner_flag_set(&soops->tree, TSE_SELECTED | TSE_ACTIVE_WALK, false);
|
||||
}
|
||||
|
||||
/* Select active if under cursor */
|
||||
if (active == cursor) {
|
||||
|
@ -1298,8 +1303,6 @@ static void do_outliner_range_select(bContext *C, SpaceOutliner *soops, TreeElem
|
|||
return;
|
||||
}
|
||||
|
||||
outliner_flag_set(&soops->tree, TSE_SELECTED, false);
|
||||
|
||||
bool selecting = false;
|
||||
do_outliner_range_select_recursive(&soops->tree, active, cursor, &selecting);
|
||||
}
|
||||
|
@ -1380,7 +1383,7 @@ static int outliner_item_do_activate_from_cursor(bContext *C,
|
|||
TreeStoreElem *activate_tselem = TREESTORE(activate_te);
|
||||
|
||||
if (use_range) {
|
||||
do_outliner_range_select(C, soops, activate_te);
|
||||
do_outliner_range_select(C, soops, activate_te, extend);
|
||||
}
|
||||
else {
|
||||
outliner_item_select(soops, activate_te, extend, extend);
|
||||
|
|
Loading…
Reference in New Issue