Browse Source

Popupmenu now uses UI actions instead of keys

Fabio Alessandrelli 7 years ago
parent
commit
4a71483a65
1 changed files with 47 additions and 66 deletions
  1. 47 66
      scene/gui/popup_menu.cpp

+ 47 - 66
scene/gui/popup_menu.cpp

@@ -211,86 +211,67 @@ void PopupMenu::_scroll(float p_factor, const Point2 &p_over) {
 
 
 void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
 void PopupMenu::_gui_input(const Ref<InputEvent> &p_event) {
 
 
-	Ref<InputEventKey> k = p_event;
-
-	if (k.is_valid()) {
-
-		if (!k->is_pressed())
-			return;
-
-		switch (k->get_scancode()) {
-
-			case KEY_DOWN: {
-
-				int search_from = mouse_over + 1;
-				if (search_from >= items.size())
-					search_from = 0;
-
-				for (int i = search_from; i < items.size(); i++) {
+	if (p_event->is_action("ui_down") && p_event->is_pressed()) {
 
 
-					if (i < 0 || i >= items.size())
-						continue;
+		int search_from = mouse_over + 1;
+		if (search_from >= items.size())
+			search_from = 0;
 
 
-					if (!items[i].separator && !items[i].disabled) {
+		for (int i = search_from; i < items.size(); i++) {
 
 
-						mouse_over = i;
-						update();
-						break;
-					}
-				}
-			} break;
-			case KEY_UP: {
-
-				int search_from = mouse_over - 1;
-				if (search_from < 0)
-					search_from = items.size() - 1;
-
-				for (int i = search_from; i >= 0; i--) {
-
-					if (i < 0 || i >= items.size())
-						continue;
-
-					if (!items[i].separator && !items[i].disabled) {
+			if (i < 0 || i >= items.size())
+				continue;
 
 
-						mouse_over = i;
-						update();
-						break;
-					}
-				}
-			} break;
+			if (!items[i].separator && !items[i].disabled) {
 
 
-			case KEY_LEFT: {
+				mouse_over = i;
+				update();
+				accept_event();
+				break;
+			}
+		}
+	} else if (p_event->is_action("ui_up") && p_event->is_pressed()) {
 
 
-				Node *n = get_parent();
-				if (!n)
-					break;
+		int search_from = mouse_over - 1;
+		if (search_from < 0)
+			search_from = items.size() - 1;
 
 
-				PopupMenu *pm = Object::cast_to<PopupMenu>(n);
-				if (!pm)
-					break;
+		for (int i = search_from; i >= 0; i--) {
 
 
-				hide();
-			} break;
+			if (i < 0 || i >= items.size())
+				continue;
 
 
-			case KEY_RIGHT: {
+			if (!items[i].separator && !items[i].disabled) {
 
 
-				if (mouse_over >= 0 && mouse_over < items.size() && !items[mouse_over].separator && items[mouse_over].submenu != "" && submenu_over != mouse_over)
-					_activate_submenu(mouse_over);
-			} break;
+				mouse_over = i;
+				update();
+				accept_event();
+				break;
+			}
+		}
+	} else if (p_event->is_action("ui_left") && p_event->is_pressed()) {
 
 
-			case KEY_ENTER:
-			case KEY_KP_ENTER: {
+		Node *n = get_parent();
+		if (n && Object::cast_to<PopupMenu>(n)) {
+			hide();
+			accept_event();
+		}
+	} else if (p_event->is_action("ui_right") && p_event->is_pressed()) {
 
 
-				if (mouse_over >= 0 && mouse_over < items.size() && !items[mouse_over].separator) {
+		if (mouse_over >= 0 && mouse_over < items.size() && !items[mouse_over].separator && items[mouse_over].submenu != "" && submenu_over != mouse_over) {
+			_activate_submenu(mouse_over);
+			accept_event();
+		}
+	} else if (p_event->is_action("ui_accept") && p_event->is_pressed()) {
 
 
-					if (items[mouse_over].submenu != "" && submenu_over != mouse_over) {
-						_activate_submenu(mouse_over);
-						break;
-					}
+		if (mouse_over >= 0 && mouse_over < items.size() && !items[mouse_over].separator) {
 
 
-					activate_item(mouse_over);
-				}
-			} break;
+			if (items[mouse_over].submenu != "" && submenu_over != mouse_over) {
+				_activate_submenu(mouse_over);
+			} else {
+				activate_item(mouse_over);
+			}
+			accept_event();
 		}
 		}
 	}
 	}