aboutsummaryrefslogtreecommitdiff
path: root/logic
diff options
context:
space:
mode:
Diffstat (limited to 'logic')
-rw-r--r--logic/database.gd144
-rw-r--r--logic/stage.gd150
2 files changed, 119 insertions, 175 deletions
diff --git a/logic/database.gd b/logic/database.gd
index 41ba679..c492321 100644
--- a/logic/database.gd
+++ b/logic/database.gd
@@ -22,16 +22,19 @@ const ENTRY_PROTOTYPE: Dictionary = {
"is_urgency": false,
"notes": "",
}
+const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5
var db: Array
var selected_idx: int
var staged_idx: int
+var is_pointer_dragging := false
+var pointer_drag_velocity := 0.0
onready var stage: Stage = get_node("/root/main/stage")
onready var delete_button: Button = get_node("actions/delete")
onready var edit_button: Button = get_node("actions/edit")
onready var add_button: Button = get_node("actions/add")
-onready var v_scroll_bar: ScrollBar = get_v_scroll() # @DAM Stop scroll inertia when buttons are pressed.
+onready var v_scroll_bar: ScrollBar = get_v_scroll()
onready var drag_sensor: PointerInputSensor = get_node("drag_sensor")
@@ -53,66 +56,25 @@ func _ready():
stage.connect("save", self, "save")
stage.connect("discard", self, "discard")
- drag_sensor.connect("on_press", self, "on_press")
- drag_sensor.connect("on_drag", self, "on_drag")
- drag_sensor.connect("on_end_drag", self, "on_end_drag")
- drag_sensor.connect("on_click", self, "on_click")
+ drag_sensor.connect("on_press", self, "pointer_input_handler")
+ drag_sensor.connect("on_drag", self, "pointer_input_handler")
+ drag_sensor.connect("on_end_drag", self, "pointer_input_handler")
+ drag_sensor.connect("on_click", self, "pointer_input_handler")
for it in db:
self.add_item(get_entry_view(it))
-# @DAM Cleanup this code.
-export var scroll_velocity_decaying_factor: float = 2.5
-var drag_velocity := 0.0
-var is_dragging := false
-
func _process(delta: float):
- if is_dragging == false && abs(drag_velocity) > 0.5:
- drag_velocity *= clamp((1.0 - scroll_velocity_decaying_factor * delta), 0.0, 1.0)
- v_scroll_bar.value -= drag_velocity * delta
-
-func on_click(pointer: PointerInputSensor.PointerInputData):
- var target := self
- var position := target.get_global_mouse_position() - target.rect_global_position
-
- var event_touch := InputEventScreenTouch.new()
- event_touch.index = 0
- event_touch.position = position
-
- var event_mouse := InputEventMouseButton.new()
- event_mouse.button_index = BUTTON_LEFT
- event_mouse.button_mask = BUTTON_MASK_LEFT
- event_mouse.position = position
-
- event_mouse.pressed = true
- event_touch.pressed = true
- target._gui_input(event_mouse)
- target._gui_input(event_touch)
-
- target.grab_focus()
-
- event_mouse.pressed = false
- event_touch.pressed = false
- target._gui_input(event_mouse)
- target._gui_input(event_touch)
-
-func on_press(pointer: PointerInputSensor.PointerInputData):
- is_dragging = true
-
-func on_end_drag(pointer: PointerInputSensor.PointerInputData):
- is_dragging = false
-
-func on_drag(pointer: PointerInputSensor.PointerInputData):
- is_dragging = true
- drag_velocity = pointer.velocity.y
- v_scroll_bar.value -= pointer.relative_position.y
-
-
+ # Apply drag movement inertia.
+ if is_pointer_dragging == false && abs(pointer_drag_velocity) > 0.5:
+ pointer_drag_velocity *= clamp((1.0 - POINTER_VELOCITY_DECAYING_FACTOR * delta), 0.0, 1.0)
+ v_scroll_bar.value -= pointer_drag_velocity * delta
func _notification(what: int):
- if visible == false:
+ # @DAM Yet to be polished.
+ if visible == false || has_focus() == false:
return
if what == MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST:
@@ -127,11 +89,7 @@ func get_entry_view(database_entry: Dictionary) -> String:
func item_selected(index: int):
- if selected_idx >= 0:
- set_item_text(selected_idx, get_entry_view(db[selected_idx]))
selected_idx = index
- set_item_text(selected_idx, "> " + get_entry_view(db[selected_idx]) + " <")
-
func clear_selection():
@@ -223,40 +181,6 @@ func load_database(file_path: String = DATABASE_FILE_PATH):
db.append(entry)
fake_database()
- return
-
- db = [
- instance_entry({
- "process_id": "000001",
- "surgery_id": "100000",
- "place": "central",
- "date": "2020-01-31",
- }),
- instance_entry({
- "process_id": "000002",
- "surgery_id": "200000",
- "place": "central",
- "date": "2020-02-31",
- }),
- instance_entry({
- "process_id": "000003",
- "surgery_id": "300000",
- "place": "central",
- "date": "2020-03-31",
- }),
- instance_entry({
- "process_id": "000004",
- "surgery_id": "400000",
- "place": "central",
- "date": "2020-04-31",
- }),
- instance_entry({
- "process_id": "000012",
- "surgery_id": "210000",
- "place": "central",
- "date": "2020-12-31",
- }),
- ]
func store_database(file_path: String = DATABASE_FILE_PATH):
@@ -321,3 +245,43 @@ func fake_database():
"date": "%04d-%02d-%02d" % [date_year, date_month, date_day]
}))
+
+func pointer_input_handler(pointer: PointerInputSensor.PointerInputData):
+ match pointer.action:
+ PointerInputSensor.PointerInputAction.ON_PRESS:
+ is_pointer_dragging = true
+
+ PointerInputSensor.PointerInputAction.ON_DRAG:
+ is_pointer_dragging = true
+ pointer_drag_velocity = pointer.velocity.y
+ v_scroll_bar.value -= pointer.relative_position.y
+
+ PointerInputSensor.PointerInputAction.ON_END_DRAG:
+ is_pointer_dragging = false
+
+ PointerInputSensor.PointerInputAction.ON_CLICK:
+ var target := self
+ var position := target.get_global_mouse_position() - target.rect_global_position
+
+ var event_touch := InputEventScreenTouch.new()
+ event_touch.index = 0
+ event_touch.position = position
+
+ var event_mouse := InputEventMouseButton.new()
+ event_mouse.button_index = BUTTON_LEFT
+ event_mouse.button_mask = BUTTON_MASK_LEFT
+ event_mouse.position = position
+
+ event_mouse.pressed = true
+ event_touch.pressed = true
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+ target.grab_focus()
+
+ event_mouse.pressed = false
+ event_touch.pressed = false
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+
diff --git a/logic/stage.gd b/logic/stage.gd
index 62e0a58..27962c6 100644
--- a/logic/stage.gd
+++ b/logic/stage.gd
@@ -4,21 +4,10 @@ class_name Stage
signal save # (database_entry: Dictionary)
signal discard # ()
-#onready var process_id: LineEdit = get_node("touch_scroll/controls/process_id")
-#onready var surgery_id: LineEdit = get_node("touch_scroll/controls/surgery_id")
-#onready var date: DatePicker = get_node("touch_scroll/controls/date_picker")
-#onready var place: LineEdit = get_node("touch_scroll/controls/place")
-#onready var anesthetic: LineEdit = get_node("touch_scroll/controls/anesthetic")
-#onready var first_assistant: LineEdit = get_node("touch_scroll/controls/first_assistant")
-#onready var type: LineEdit = get_node("touch_scroll/controls/type")
-#onready var sub_type: LineEdit = get_node("touch_scroll/controls/sub_type")
-#onready var sub_sub_type: LineEdit = get_node("touch_scroll/controls/sub_sub_type")
-#onready var pathology: LineEdit = get_node("touch_scroll/controls/pathology")
-#onready var intervention: LineEdit = get_node("touch_scroll/controls/intervention")
-#onready var is_urgency: Button = get_node("touch_scroll/controls/is_urgency")
-#onready var notes: LineEdit = get_node("touch_scroll/controls/notes")
-#onready var save_button: Button = get_node("touch_scroll/controls/save")
-#onready var discard_button: Button = get_node("touch_scroll/controls/discard")
+const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5
+
+var is_pointer_dragging := false
+var pointer_drag_velocity := 0.0
onready var process_id: LineEdit = get_node("controls/process_id")
onready var surgery_id: LineEdit = get_node("controls/surgery_id")
@@ -35,94 +24,46 @@ onready var is_urgency: Button = get_node("controls/is_urgency")
onready var notes: LineEdit = get_node("controls/notes")
onready var save_button: Button = get_node("controls/save")
onready var discard_button: Button = get_node("controls/discard")
+onready var v_scroll_bar: VScrollBar = get_v_scrollbar()
func _ready():
save_button.connect("pressed", self, "save_action")
discard_button.connect("pressed", self, "discard_action")
-
for it in get_node("controls").get_children():
-# print("%s" % it.name)
+ it = it as Control
match it.name:
"date_picker", "save", "discard":
- print("- %s" % it.name)
-
+ pass
+
_:
-# "first_assistant":
- print("+ %s" % it.name)
var drag_sensor = PointerInputSensor.new()
+ it.add_child(drag_sensor)
+
drag_sensor.name = "drag_sensor"
- drag_sensor.mouse_default_cursor_shape = Control.CURSOR_IBEAM
- (it as Control).add_child(drag_sensor)
drag_sensor.anchor_right = 1.0
drag_sensor.anchor_bottom = 1.0
- drag_sensor.connect("on_press", self, "on_press")
- drag_sensor.connect("on_drag", self, "on_drag")
- drag_sensor.connect("on_end_drag", self, "on_end_drag")
- drag_sensor.connect("on_click", self, "on_click")
- drag_sensor.on_process = funcref(self, "bazinga")
-
-
-# @DAM Cleanup this code.
-onready var v_scroll_bar: VScrollBar = get_v_scrollbar()
-export var scroll_velocity_decaying_factor: float = 2.5
-var drag_velocity := 0.0
-var is_dragging := false
+ drag_sensor.connect("on_press", self, "pointer_input_handler")
+ drag_sensor.connect("on_drag", self, "pointer_input_handler")
+ drag_sensor.connect("on_end_drag", self, "pointer_input_handler")
+ drag_sensor.connect("on_click", self, "pointer_input_handler")
+
+ it.connect("focus_entered", drag_sensor, "set_mouse_filter", [Control.MOUSE_FILTER_IGNORE])
+ it.connect("focus_entered", drag_sensor, "mouse_default_cursor_shape", [Control.CURSOR_IBEAM])
+ it.connect("focus_exited", drag_sensor, "set_mouse_filter", [Control.MOUSE_FILTER_STOP])
+ it.connect("focus_exited", drag_sensor, "mouse_default_cursor_shape", [Control.CURSOR_ARROW])
+
+ if it is LineEdit:
+ it.connect("focus_exited", it, "deselect")
-func bazinga(delta: float, pointer: PointerInputSensor):
- if (pointer.get_parent() as Control).has_focus():
- pointer.mouse_filter = Control.MOUSE_FILTER_IGNORE
- else:
- pointer.mouse_filter = Control.MOUSE_FILTER_STOP
func _process(delta: float):
- if is_dragging == false && abs(drag_velocity) > 0.5:
- drag_velocity *= clamp((1.0 - scroll_velocity_decaying_factor * delta), 0.0, 1.0)
- v_scroll_bar.value -= drag_velocity * delta
-
-func on_click(pointer: PointerInputSensor.PointerInputData):
- var target: Control = pointer.target.get_parent()
- var position := target.get_global_mouse_position() - target.rect_global_position
-
- var event_touch := InputEventScreenTouch.new()
- event_touch.index = 0
- event_touch.position = position
-
- var event_mouse := InputEventMouseButton.new()
- event_mouse.button_index = BUTTON_LEFT
- event_mouse.button_mask = BUTTON_MASK_LEFT
- event_mouse.position = position
-
- event_mouse.pressed = true
- event_touch.pressed = true
- target._gui_input(event_mouse)
- target._gui_input(event_touch)
-
- target.grab_focus()
-
- event_mouse.pressed = false
- event_touch.pressed = false
- target._gui_input(event_mouse)
- target._gui_input(event_touch)
-
-func on_press(pointer: PointerInputSensor.PointerInputData):
- is_dragging = true
-
-func on_end_drag(pointer: PointerInputSensor.PointerInputData):
- is_dragging = false
-
-func on_drag(pointer: PointerInputSensor.PointerInputData):
- is_dragging = true
- drag_velocity = pointer.velocity.y
- v_scroll_bar.value -= pointer.relative_position.y
-
-
-
-
-
-
+ # Apply drag movement inertia.
+ if is_pointer_dragging == false && abs(pointer_drag_velocity) > 0.5:
+ pointer_drag_velocity *= clamp((1.0 - POINTER_VELOCITY_DECAYING_FACTOR * delta), 0.0, 1.0)
+ v_scroll_bar.value -= pointer_drag_velocity * delta
func save_action():
@@ -179,3 +120,42 @@ func _notification(what: int):
discard_action()
+func pointer_input_handler(pointer: PointerInputSensor.PointerInputData):
+ match pointer.action:
+ PointerInputSensor.PointerInputAction.ON_PRESS:
+ is_pointer_dragging = true
+
+ PointerInputSensor.PointerInputAction.ON_DRAG:
+ is_pointer_dragging = true
+ pointer_drag_velocity = pointer.velocity.y
+ v_scroll_bar.value -= pointer.relative_position.y
+
+ PointerInputSensor.PointerInputAction.ON_END_DRAG:
+ is_pointer_dragging = false
+
+ PointerInputSensor.PointerInputAction.ON_CLICK:
+ var target: Control = pointer.target.get_parent()
+ var position := target.get_global_mouse_position() - target.rect_global_position
+
+ var event_touch := InputEventScreenTouch.new()
+ event_touch.index = 0
+ event_touch.position = position
+
+ var event_mouse := InputEventMouseButton.new()
+ event_mouse.button_index = BUTTON_LEFT
+ event_mouse.button_mask = BUTTON_MASK_LEFT
+ event_mouse.position = position
+
+ event_mouse.pressed = true
+ event_touch.pressed = true
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+ target.grab_focus()
+
+ event_mouse.pressed = false
+ event_touch.pressed = false
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+