diff --git a/addons/accessibility/accessible.gd b/addons/accessibility/accessible.gd index d740e5b..2df124f 100644 --- a/addons/accessibility/accessible.gd +++ b/addons/accessibility/accessible.gd @@ -2,6 +2,8 @@ extends Object var node +var position_in_children = 0 + func item_or_items(count): if count == 1: return "item" @@ -17,8 +19,6 @@ func focus_button(): else: print("button") -var list_pos = 0 - func focus_item_list(): var count = node.get_item_count() var selected = node.get_selected_items() @@ -36,29 +36,26 @@ func handle_item_list_nothing_selected(): print("Nothing selected") func input_item_list(event): - var old_list_pos = list_pos + var old_pos = position_in_children if event.echo or not event.pressed: return if event.scancode == KEY_UP: node.get_tree().set_input_as_handled() - if list_pos == 0: + if position_in_children == 0: return - list_pos -= 1 + position_in_children -= 1 elif event.scancode == KEY_DOWN: node.get_tree().set_input_as_handled() - if list_pos >= node.get_item_count()-1: + if position_in_children >= node.get_item_count()-1: return - list_pos += 1 + position_in_children += 1 elif event.scancode == KEY_HOME: - list_pos = 0 + position_in_children = 0 elif event.scancode == KEY_END: - list_pos = node.get_item_count()-1 - if old_list_pos != list_pos: - var text = node.get_item_text(list_pos) - print("%s: %s of %s" % [text, list_pos+1, node.get_item_count()]) - -func unfocus_item_list(): - list_pos = 0 + position_in_children = node.get_item_count()-1 + if old_pos != position_in_children: + var text = node.get_item_text(position_in_children) + print("%s: %s of %s" % [text, position_in_children+1, node.get_item_count()]) func focus_line_edit(): var text = "blank" @@ -91,25 +88,55 @@ func check_caret_moved(): print(text[pos]) old_pos = pos -func render_selected_tree_item(): +func focus_menu_button(): + print(node.text, ": menu") + +func render_popup_menu_item(id): + var item = node.get_item_text(id) + var submenu = node.get_item_submenu(position_in_children) + var tooltip = node.get_item_tooltip(position_in_children) + if submenu: + item = submenu + if item and tooltip: + item += ": " + item += tooltip + elif tooltip: + item = tooltip + var shortcut = node.get_item_shortcut(position_in_children) + if shortcut: + item += ": "+shortcut.get_as_text() + return item + +func focus_popup_menu(): + print("menu") + +func focus_popup_menu_item(id): + print(render_popup_menu_item(id)) + +func render_tree_item(): var item = node.get_selected() var result = item.get_text(0) return result func focus_tree(): - print(render_selected_tree_item(), ": tree item") + print(render_tree_item(), ": tree item") func select_tree(): if node.has_focus(): - print(render_selected_tree_item()) + print(render_tree_item()) func focused(): - if node is Button: + # print(node) + if node is MenuButton: + focus_menu_button() + elif node is Button: focus_button() elif node is ItemList: focus_item_list() elif node is LineEdit: focus_line_edit() + elif node is PopupMenu: + focus_popup_menu() elif node is Tree: focus_tree() else: @@ -118,13 +145,12 @@ func focused(): print(node.hint_tooltip) func unfocused(): - if node is ItemList: - unfocus_item_list() + position_in_children = 0 func gui_input(event): if node is ItemList: return input_item_list(event) - if node is LineEdit: + elif node is LineEdit: return check_caret_moved() func _init(node): @@ -147,6 +173,8 @@ func _init(node): elif node is LineEdit: node.connect("text_deleted", self, "text_deleted") node.connect("text_inserted", self, "text_inserted") + elif node is PopupMenu: + node.connect("id_focused", self, "focus_popup_menu_item") elif node is Tree: node.connect("item_selected", self, "select_tree") node.connect("tree_exiting", self, "free")