|
@@ -2061,322 +2061,318 @@ void Tree::popup_select(int p_option) {
|
|
item_edited(popup_edited_item_col, popup_edited_item);
|
|
item_edited(popup_edited_item_col, popup_edited_item);
|
|
}
|
|
}
|
|
|
|
|
|
-void Tree::_gui_input(Ref<InputEvent> p_event) {
|
|
|
|
-
|
|
|
|
- Ref<InputEventKey> k = p_event;
|
|
|
|
|
|
+void Tree::_go_left() {
|
|
|
|
+ if (selected_col == 0) {
|
|
|
|
+ if (selected_item->get_children() != NULL && !selected_item->is_collapsed()) {
|
|
|
|
+ selected_item->set_collapsed(true);
|
|
|
|
+ } else {
|
|
|
|
+ if (columns.size() == 1) { // goto parent with one column
|
|
|
|
+ TreeItem *parent = selected_item->get_parent();
|
|
|
|
+ if (selected_item != get_root() && parent && parent->is_selectable(selected_col) && !(hide_root && parent == get_root())) {
|
|
|
|
+ select_single_item(parent, get_root(), selected_col);
|
|
|
|
+ }
|
|
|
|
+ } else if (selected_item->get_prev_visible()) {
|
|
|
|
+ selected_col = columns.size() - 1;
|
|
|
|
+ _go_up(); // go to upper column if possible
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
+ selected_col--;
|
|
|
|
+ emit_signal("cell_selected");
|
|
|
|
+ } else {
|
|
|
|
|
|
- if (k.is_valid()) {
|
|
|
|
|
|
+ selected_item->select(selected_col - 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ update();
|
|
|
|
+ accept_event();
|
|
|
|
+ ensure_cursor_is_visible();
|
|
|
|
+}
|
|
|
|
|
|
- if (!k->is_pressed())
|
|
|
|
- return;
|
|
|
|
- if (k->get_command() || (k->get_shift() && k->get_unicode() == 0) || k->get_metakey())
|
|
|
|
- return;
|
|
|
|
- if (!root)
|
|
|
|
|
|
+void Tree::_go_right() {
|
|
|
|
+ if (selected_col == (columns.size() - 1)) {
|
|
|
|
+ if (selected_item->get_children() != NULL && selected_item->is_collapsed()) {
|
|
|
|
+ selected_item->set_collapsed(false);
|
|
|
|
+ } else if (selected_item->get_next_visible()) {
|
|
|
|
+ selected_item->select(0);
|
|
|
|
+ _go_down();
|
|
return;
|
|
return;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
+ selected_col++;
|
|
|
|
+ emit_signal("cell_selected");
|
|
|
|
+ } else {
|
|
|
|
|
|
- if (hide_root && !root->get_next_visible())
|
|
|
|
|
|
+ selected_item->select(selected_col + 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ update();
|
|
|
|
+ ensure_cursor_is_visible();
|
|
|
|
+ accept_event();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void Tree::_go_up() {
|
|
|
|
+ TreeItem *prev = NULL;
|
|
|
|
+ if (!selected_item) {
|
|
|
|
+ prev = get_last_item();
|
|
|
|
+ selected_col = 0;
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ prev = selected_item->get_prev_visible();
|
|
|
|
+ if (last_keypress != 0) {
|
|
|
|
+ //incr search next
|
|
|
|
+ int col;
|
|
|
|
+ prev = _search_item_text(prev, incr_search, &col, true, true);
|
|
|
|
+ if (!prev) {
|
|
|
|
+ accept_event();
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
+
|
|
|
|
+ if (!prev)
|
|
return;
|
|
return;
|
|
|
|
+ selected_item = prev;
|
|
|
|
+ emit_signal("cell_selected");
|
|
|
|
+ update();
|
|
|
|
+ } else {
|
|
|
|
|
|
- switch (k->get_scancode()) {
|
|
|
|
-#define EXIT_BREAK \
|
|
|
|
- { \
|
|
|
|
- if (!cursor_can_exit_tree) accept_event(); \
|
|
|
|
- break; \
|
|
|
|
|
|
+ int col = selected_col < 0 ? 0 : selected_col;
|
|
|
|
+ while (prev && !prev->cells[col].selectable)
|
|
|
|
+ prev = prev->get_prev_visible();
|
|
|
|
+ if (!prev)
|
|
|
|
+ return; // do nothing..
|
|
|
|
+ prev->select(col);
|
|
}
|
|
}
|
|
- case KEY_RIGHT: {
|
|
|
|
- bool dobreak = true;
|
|
|
|
|
|
|
|
- //TreeItem *next = NULL;
|
|
|
|
- if (!selected_item)
|
|
|
|
- break;
|
|
|
|
- if (select_mode == SELECT_ROW) {
|
|
|
|
- EXIT_BREAK;
|
|
|
|
- }
|
|
|
|
- if (selected_col > (columns.size() - 1)) {
|
|
|
|
- EXIT_BREAK;
|
|
|
|
- }
|
|
|
|
- if (k->get_alt()) {
|
|
|
|
- selected_item->set_collapsed(false);
|
|
|
|
- TreeItem *next = selected_item->get_children();
|
|
|
|
- while (next && next != selected_item->next) {
|
|
|
|
- next->set_collapsed(false);
|
|
|
|
- next = next->get_next_visible();
|
|
|
|
- }
|
|
|
|
- } else if (selected_col == (columns.size() - 1)) {
|
|
|
|
- if (selected_item->get_children() != NULL && selected_item->is_collapsed()) {
|
|
|
|
- selected_item->set_collapsed(false);
|
|
|
|
- } else {
|
|
|
|
- selected_col = 0;
|
|
|
|
- dobreak = false; // fall through to key_down
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
- selected_col++;
|
|
|
|
- emit_signal("cell_selected");
|
|
|
|
- } else {
|
|
|
|
|
|
+ ensure_cursor_is_visible();
|
|
|
|
+ accept_event();
|
|
|
|
+}
|
|
|
|
|
|
- selected_item->select(selected_col + 1);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- update();
|
|
|
|
- ensure_cursor_is_visible();
|
|
|
|
|
|
+void Tree::_go_down() {
|
|
|
|
+ TreeItem *next = NULL;
|
|
|
|
+ if (!selected_item) {
|
|
|
|
+
|
|
|
|
+ next = hide_root ? root->get_next_visible() : root;
|
|
|
|
+ selected_item = 0;
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ next = selected_item->get_next_visible();
|
|
|
|
+
|
|
|
|
+ if (last_keypress != 0) {
|
|
|
|
+ //incr search next
|
|
|
|
+ int col;
|
|
|
|
+ next = _search_item_text(next, incr_search, &col, true);
|
|
|
|
+ if (!next) {
|
|
accept_event();
|
|
accept_event();
|
|
- if (dobreak) {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
- case KEY_DOWN: {
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- TreeItem *next = NULL;
|
|
|
|
- if (!selected_item) {
|
|
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
- next = hide_root ? root->get_next_visible() : root;
|
|
|
|
- selected_item = 0;
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (!next) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- next = selected_item->get_next_visible();
|
|
|
|
|
|
+ selected_item = next;
|
|
|
|
+ emit_signal("cell_selected");
|
|
|
|
+ update();
|
|
|
|
+ } else {
|
|
|
|
|
|
- //if (diff < uint64_t(GLOBAL_DEF("gui/incr_search_max_interval_msec",2000))) {
|
|
|
|
- if (last_keypress != 0) {
|
|
|
|
- //incr search next
|
|
|
|
- int col;
|
|
|
|
- next = _search_item_text(next, incr_search, &col, true);
|
|
|
|
- if (!next) {
|
|
|
|
- accept_event();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ int col = selected_col < 0 ? 0 : selected_col;
|
|
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
+ while (next && !next->cells[col].selectable)
|
|
|
|
+ next = next->get_next_visible();
|
|
|
|
+ if (!next) {
|
|
|
|
+ return; // do nothing..
|
|
|
|
+ }
|
|
|
|
+ next->select(col);
|
|
|
|
+ }
|
|
|
|
|
|
- if (!next)
|
|
|
|
- EXIT_BREAK;
|
|
|
|
|
|
+ ensure_cursor_is_visible();
|
|
|
|
+ accept_event();
|
|
|
|
+}
|
|
|
|
|
|
- selected_item = next;
|
|
|
|
- emit_signal("cell_selected");
|
|
|
|
- update();
|
|
|
|
- } else {
|
|
|
|
|
|
+void Tree::_gui_input(Ref<InputEvent> p_event) {
|
|
|
|
|
|
- int col = selected_col < 0 ? 0 : selected_col;
|
|
|
|
|
|
+ Ref<InputEventKey> k = p_event;
|
|
|
|
|
|
- while (next && !next->cells[col].selectable)
|
|
|
|
- next = next->get_next_visible();
|
|
|
|
- if (!next)
|
|
|
|
- EXIT_BREAK; // do nothing..
|
|
|
|
- next->select(col);
|
|
|
|
- }
|
|
|
|
|
|
+ if (p_event->is_action("ui_right") && p_event->is_pressed()) {
|
|
|
|
|
|
- ensure_cursor_is_visible();
|
|
|
|
- accept_event();
|
|
|
|
|
|
+ if (!cursor_can_exit_tree) accept_event();
|
|
|
|
|
|
- } break;
|
|
|
|
- case KEY_LEFT: {
|
|
|
|
- bool dobreak = true;
|
|
|
|
|
|
+ if (!selected_item || select_mode == SELECT_ROW || selected_col > (columns.size() - 1)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (k.is_valid() && k->get_alt()) {
|
|
|
|
+ selected_item->set_collapsed(false);
|
|
|
|
+ TreeItem *next = selected_item->get_children();
|
|
|
|
+ while (next && next != selected_item->next) {
|
|
|
|
+ next->set_collapsed(false);
|
|
|
|
+ next = next->get_next_visible();
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ _go_right();
|
|
|
|
+ }
|
|
|
|
+ } else if (p_event->is_action("ui_left") && p_event->is_pressed()) {
|
|
|
|
|
|
- //TreeItem *next = NULL;
|
|
|
|
- if (!selected_item)
|
|
|
|
- break;
|
|
|
|
- if (select_mode == SELECT_ROW) {
|
|
|
|
- EXIT_BREAK;
|
|
|
|
- }
|
|
|
|
- if (selected_col < 0) {
|
|
|
|
- EXIT_BREAK;
|
|
|
|
- }
|
|
|
|
- if (k->get_alt()) {
|
|
|
|
- selected_item->set_collapsed(true);
|
|
|
|
- TreeItem *next = selected_item->get_children();
|
|
|
|
- while (next && next != selected_item->next) {
|
|
|
|
- next->set_collapsed(true);
|
|
|
|
- next = next->get_next_visible();
|
|
|
|
- }
|
|
|
|
- } else if (selected_col == 0) {
|
|
|
|
- if (selected_item->get_children() != NULL && !selected_item->is_collapsed()) {
|
|
|
|
- selected_item->set_collapsed(true);
|
|
|
|
- } else {
|
|
|
|
- if (columns.size() == 1) { // goto parent with one column
|
|
|
|
- TreeItem *parent = selected_item->get_parent();
|
|
|
|
- if (selected_item != get_root() && parent && parent->is_selectable(selected_col) && !(hide_root && parent == get_root())) {
|
|
|
|
- select_single_item(parent, get_root(), selected_col);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- selected_col = columns.size() - 1;
|
|
|
|
- dobreak = false; // fall through to key_up
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
- selected_col--;
|
|
|
|
- emit_signal("cell_selected");
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (!cursor_can_exit_tree) accept_event();
|
|
|
|
|
|
- selected_item->select(selected_col - 1);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- update();
|
|
|
|
- accept_event();
|
|
|
|
- ensure_cursor_is_visible();
|
|
|
|
|
|
+ if (!selected_item || select_mode == SELECT_ROW || selected_col < 0) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- if (dobreak) {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ if (k.is_valid() && k->get_alt()) {
|
|
|
|
+ selected_item->set_collapsed(true);
|
|
|
|
+ TreeItem *next = selected_item->get_children();
|
|
|
|
+ while (next && next != selected_item->next) {
|
|
|
|
+ next->set_collapsed(true);
|
|
|
|
+ next = next->get_next_visible();
|
|
}
|
|
}
|
|
- case KEY_UP: {
|
|
|
|
|
|
+ } else {
|
|
|
|
+ _go_left();
|
|
|
|
+ }
|
|
|
|
|
|
- TreeItem *prev = NULL;
|
|
|
|
- if (!selected_item) {
|
|
|
|
- prev = get_last_item();
|
|
|
|
- selected_col = 0;
|
|
|
|
- } else {
|
|
|
|
|
|
+ } else if (p_event->is_action("ui_up") && p_event->is_pressed()) {
|
|
|
|
|
|
- prev = selected_item->get_prev_visible();
|
|
|
|
- if (last_keypress != 0) {
|
|
|
|
- //incr search next
|
|
|
|
- int col;
|
|
|
|
- prev = _search_item_text(prev, incr_search, &col, true, true);
|
|
|
|
- if (!prev) {
|
|
|
|
- accept_event();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ if (!cursor_can_exit_tree) accept_event();
|
|
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
+ _go_up();
|
|
|
|
|
|
- if (!prev)
|
|
|
|
- break;
|
|
|
|
- selected_item = prev;
|
|
|
|
- emit_signal("cell_selected");
|
|
|
|
- update();
|
|
|
|
- } else {
|
|
|
|
|
|
+ } else if (p_event->is_action("ui_down") && p_event->is_pressed()) {
|
|
|
|
|
|
- int col = selected_col < 0 ? 0 : selected_col;
|
|
|
|
- while (prev && !prev->cells[col].selectable)
|
|
|
|
- prev = prev->get_prev_visible();
|
|
|
|
- if (!prev)
|
|
|
|
- break; // do nothing..
|
|
|
|
- prev->select(col);
|
|
|
|
- }
|
|
|
|
|
|
+ if (!cursor_can_exit_tree) accept_event();
|
|
|
|
|
|
- ensure_cursor_is_visible();
|
|
|
|
- accept_event();
|
|
|
|
|
|
+ _go_down();
|
|
|
|
|
|
- } break;
|
|
|
|
- case KEY_PAGEDOWN: {
|
|
|
|
|
|
+ } else if (p_event->is_action("ui_page_down") && p_event->is_pressed()) {
|
|
|
|
|
|
- TreeItem *next = NULL;
|
|
|
|
- if (!selected_item)
|
|
|
|
- break;
|
|
|
|
- next = selected_item;
|
|
|
|
|
|
+ if (!cursor_can_exit_tree) accept_event();
|
|
|
|
|
|
- for (int i = 0; i < 10; i++) {
|
|
|
|
|
|
+ TreeItem *next = NULL;
|
|
|
|
+ if (!selected_item)
|
|
|
|
+ return;
|
|
|
|
+ next = selected_item;
|
|
|
|
|
|
- TreeItem *_n = next->get_next_visible();
|
|
|
|
- if (_n) {
|
|
|
|
- next = _n;
|
|
|
|
- } else {
|
|
|
|
|
|
+ for (int i = 0; i < 10; i++) {
|
|
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (next == selected_item)
|
|
|
|
- break;
|
|
|
|
|
|
+ TreeItem *_n = next->get_next_visible();
|
|
|
|
+ if (_n) {
|
|
|
|
+ next = _n;
|
|
|
|
+ } else {
|
|
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (next == selected_item)
|
|
|
|
+ return;
|
|
|
|
|
|
- selected_item = next;
|
|
|
|
- emit_signal("cell_selected");
|
|
|
|
- update();
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
- while (next && !next->cells[selected_col].selectable)
|
|
|
|
- next = next->get_next_visible();
|
|
|
|
- if (!next)
|
|
|
|
- EXIT_BREAK; // do nothing..
|
|
|
|
- next->select(selected_col);
|
|
|
|
- }
|
|
|
|
|
|
+ selected_item = next;
|
|
|
|
+ emit_signal("cell_selected");
|
|
|
|
+ update();
|
|
|
|
+ } else {
|
|
|
|
|
|
- ensure_cursor_is_visible();
|
|
|
|
- } break;
|
|
|
|
- case KEY_PAGEUP: {
|
|
|
|
|
|
+ while (next && !next->cells[selected_col].selectable)
|
|
|
|
+ next = next->get_next_visible();
|
|
|
|
+ if (!next) {
|
|
|
|
+ return; // do nothing..
|
|
|
|
+ }
|
|
|
|
+ next->select(selected_col);
|
|
|
|
+ }
|
|
|
|
|
|
- TreeItem *prev = NULL;
|
|
|
|
- if (!selected_item)
|
|
|
|
- break;
|
|
|
|
- prev = selected_item;
|
|
|
|
|
|
+ ensure_cursor_is_visible();
|
|
|
|
+ } else if (p_event->is_action("ui_page_up") && p_event->is_pressed()) {
|
|
|
|
|
|
- for (int i = 0; i < 10; i++) {
|
|
|
|
|
|
+ if (!cursor_can_exit_tree) accept_event();
|
|
|
|
|
|
- TreeItem *_n = prev->get_prev_visible();
|
|
|
|
- if (_n) {
|
|
|
|
- prev = _n;
|
|
|
|
- } else {
|
|
|
|
|
|
+ TreeItem *prev = NULL;
|
|
|
|
+ if (!selected_item)
|
|
|
|
+ return;
|
|
|
|
+ prev = selected_item;
|
|
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (prev == selected_item)
|
|
|
|
- break;
|
|
|
|
|
|
+ for (int i = 0; i < 10; i++) {
|
|
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
+ TreeItem *_n = prev->get_prev_visible();
|
|
|
|
+ if (_n) {
|
|
|
|
+ prev = _n;
|
|
|
|
+ } else {
|
|
|
|
|
|
- selected_item = prev;
|
|
|
|
- emit_signal("cell_selected");
|
|
|
|
- update();
|
|
|
|
- } else {
|
|
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (prev == selected_item)
|
|
|
|
+ return;
|
|
|
|
|
|
- while (prev && !prev->cells[selected_col].selectable)
|
|
|
|
- prev = prev->get_prev_visible();
|
|
|
|
- if (!prev)
|
|
|
|
- EXIT_BREAK; // do nothing..
|
|
|
|
- prev->select(selected_col);
|
|
|
|
- }
|
|
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
|
|
- ensure_cursor_is_visible();
|
|
|
|
|
|
+ selected_item = prev;
|
|
|
|
+ emit_signal("cell_selected");
|
|
|
|
+ update();
|
|
|
|
+ } else {
|
|
|
|
|
|
- } break;
|
|
|
|
- case KEY_F2:
|
|
|
|
- case KEY_ENTER:
|
|
|
|
- case KEY_KP_ENTER: {
|
|
|
|
-
|
|
|
|
- if (selected_item) {
|
|
|
|
- //bring up editor if possible
|
|
|
|
- if (!edit_selected()) {
|
|
|
|
- emit_signal("item_activated");
|
|
|
|
- incr_search.clear();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- accept_event();
|
|
|
|
|
|
+ while (prev && !prev->cells[selected_col].selectable)
|
|
|
|
+ prev = prev->get_prev_visible();
|
|
|
|
+ if (!prev) {
|
|
|
|
+ return; // do nothing..
|
|
|
|
+ }
|
|
|
|
+ prev->select(selected_col);
|
|
|
|
+ }
|
|
|
|
+ ensure_cursor_is_visible();
|
|
|
|
+ } else if (p_event->is_action("ui_accept") && p_event->is_pressed()) {
|
|
|
|
|
|
- } break;
|
|
|
|
- case KEY_SPACE: {
|
|
|
|
- if (select_mode == SELECT_MULTI) {
|
|
|
|
- if (!selected_item)
|
|
|
|
- break;
|
|
|
|
- if (selected_item->is_selected(selected_col)) {
|
|
|
|
- selected_item->deselect(selected_col);
|
|
|
|
- emit_signal("multi_selected", selected_item, selected_col, false);
|
|
|
|
- } else if (selected_item->is_selectable(selected_col)) {
|
|
|
|
- selected_item->select(selected_col);
|
|
|
|
- emit_signal("multi_selected", selected_item, selected_col, true);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- accept_event();
|
|
|
|
|
|
+ if (selected_item) {
|
|
|
|
+ //bring up editor if possible
|
|
|
|
+ if (!edit_selected()) {
|
|
|
|
+ emit_signal("item_activated");
|
|
|
|
+ incr_search.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ accept_event();
|
|
|
|
+ } else if (p_event->is_action("ui_select") && p_event->is_pressed()) {
|
|
|
|
|
|
- } break;
|
|
|
|
- default: {
|
|
|
|
|
|
+ if (select_mode == SELECT_MULTI) {
|
|
|
|
+ if (!selected_item)
|
|
|
|
+ return;
|
|
|
|
+ if (selected_item->is_selected(selected_col)) {
|
|
|
|
+ selected_item->deselect(selected_col);
|
|
|
|
+ emit_signal("multi_selected", selected_item, selected_col, false);
|
|
|
|
+ } else if (selected_item->is_selectable(selected_col)) {
|
|
|
|
+ selected_item->select(selected_col);
|
|
|
|
+ emit_signal("multi_selected", selected_item, selected_col, true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ accept_event();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (k.is_valid()) { // Incremental search
|
|
|
|
+
|
|
|
|
+ if (!k->is_pressed())
|
|
|
|
+ return;
|
|
|
|
+ if (k->get_command() || (k->get_shift() && k->get_unicode() == 0) || k->get_metakey())
|
|
|
|
+ return;
|
|
|
|
+ if (!root)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ if (hide_root && !root->get_next_visible())
|
|
|
|
+ return;
|
|
|
|
|
|
- if (k->get_unicode() > 0) {
|
|
|
|
|
|
+ if (k->get_unicode() > 0) {
|
|
|
|
|
|
- _do_incr_search(String::chr(k->get_unicode()));
|
|
|
|
- accept_event();
|
|
|
|
|
|
+ _do_incr_search(String::chr(k->get_unicode()));
|
|
|
|
+ accept_event();
|
|
|
|
|
|
- return;
|
|
|
|
- } else {
|
|
|
|
- if (k->get_scancode() != KEY_SHIFT)
|
|
|
|
- last_keypress = 0;
|
|
|
|
- }
|
|
|
|
- } break;
|
|
|
|
|
|
+ return;
|
|
|
|
+ } else {
|
|
|
|
+ if (k->get_scancode() != KEY_SHIFT)
|
|
|
|
+ last_keypress = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|