godot-accessibility/addons/accessibility/accessible.gd

143 lines
3.7 KiB
GDScript3
Raw Normal View History

extends Object
var node
2018-06-10 21:14:43 +00:00
func item_or_items(count):
if count == 1:
return "item"
else:
return "items"
2018-07-03 17:01:00 +00:00
func focus_button():
2018-06-10 20:32:27 +00:00
var text = "Unlabelled"
if node.text:
text = node.text
if text:
print("%s: button" % text)
else:
print("button")
2018-06-10 20:32:27 +00:00
var list_pos = 0
2018-07-03 17:01:00 +00:00
func focus_item_list():
var count = node.get_item_count()
var selected = node.get_selected_items()
print("list, %s %s" % [count, item_or_items(count)])
print(selected)
func handle_item_list_item_selected(index):
print("Selected")
func handle_item_list_multi_selected(index, selected):
print("Multiselect")
func handle_item_list_nothing_selected():
print("Nothing selected")
func input_item_list(event):
var old_list_pos = list_pos
if event.echo or not event.pressed:
return
if event.scancode == KEY_UP:
node.get_tree().set_input_as_handled()
if list_pos == 0:
return
list_pos -= 1
elif event.scancode == KEY_DOWN:
node.get_tree().set_input_as_handled()
if list_pos >= node.get_item_count()-1:
return
list_pos += 1
elif event.scancode == KEY_HOME:
list_pos = 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
2018-06-10 21:14:43 +00:00
2018-07-03 17:01:00 +00:00
func focus_line_edit():
2018-06-10 20:32:27 +00:00
var text = "blank"
if node.secret:
text = "password"
elif node.text != "":
text = node.text
elif node.placeholder_text != "":
text = node.placeholder_text
var type = "editable text"
if not node.editable:
type = "text"
print("%s: %s" % [text, type])
func text_deleted(text):
print("%s deleted" % text)
func text_inserted(text):
print(text)
2018-06-18 20:33:03 +00:00
var old_pos
func check_caret_moved():
var pos = node.caret_position
2018-06-18 20:33:03 +00:00
if old_pos != pos:
var text = node.text
if pos > len(text)-1:
print("blank")
else:
print(text[pos])
old_pos = pos
2018-07-03 17:01:00 +00:00
func focus_tree():
2018-06-10 21:02:45 +00:00
var root = node.get_root()
var count = 0
print("tree: %s %s" % [count, item_or_items(count)])
2018-05-28 21:45:13 +00:00
func focused():
2018-06-10 20:18:00 +00:00
if node is Button:
2018-07-03 17:01:00 +00:00
focus_button()
2018-06-10 21:14:43 +00:00
elif node is ItemList:
2018-07-03 17:01:00 +00:00
focus_item_list()
2018-06-10 20:32:27 +00:00
elif node is LineEdit:
2018-07-03 17:01:00 +00:00
focus_line_edit()
2018-06-10 21:02:45 +00:00
elif node is Tree:
2018-07-03 17:01:00 +00:00
focus_tree()
2018-06-10 20:18:00 +00:00
else:
2018-07-03 16:42:00 +00:00
print("Focus entered.", node)
if node.hint_tooltip:
print(node.hint_tooltip)
2018-05-28 21:45:13 +00:00
func unfocused():
if node is ItemList:
unfocus_item_list()
func gui_input(event):
if node is ItemList:
return input_item_list(event)
2018-07-03 16:42:00 +00:00
if node is LineEdit:
return check_caret_moved()
func _init(node):
if node.is_in_group("accessible"):
return
node.add_to_group("accessible")
self.node = node
2018-07-03 16:42:00 +00:00
# node.set_focus_mode(Control.FOCUS_ALL)
node.connect("focus_entered", self, "focused")
node.connect("mouse_entered", self, "focused")
node.connect("focus_exited", self, "unfocused")
node.connect("mouse_exited", self, "unfocused")
node.connect("gui_input", self, "gui_input")
if node is ItemList:
node.connect("item_selected", self, "handle_item_list_item_selected")
node.connect("multi_selected", self, "handle_item_list_multi_selected")
node.connect("nothing_selected", self, "handle_item_list_nothing_selected")
2018-07-03 16:42:00 +00:00
elif node is LineEdit:
node.connect("text_deleted", self, "text_deleted")
node.connect("text_inserted", self, "text_inserted")
node.connect("tree_exiting", self, "free")