aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordam <dam@gudinoff>2022-01-10 17:56:30 +0000
committerdam <dam@gudinoff>2022-01-10 17:56:30 +0000
commit81b602620412fbad0429e841051c30c537a1b461 (patch)
tree780bf47204aa13e41bd5c22e527f7c69f05e5bcc
parent5ba40857cdc770841d216a27e2a9e8bb3ebf3186 (diff)
downloadsurgery-log-81b602620412fbad0429e841051c30c537a1b461.tar.zst
surgery-log-81b602620412fbad0429e841051c30c537a1b461.zip
Split touch logic from stage
-rw-r--r--logic/stage.gd99
-rw-r--r--main.tscn48
-rw-r--r--project.godot8
-rw-r--r--readme.md5
-rw-r--r--touch_item_list/touch_item_list.gd96
-rw-r--r--touch_item_list/touch_item_list.tscn2
-rw-r--r--touch_vertical_container/touch_vertical_container.gd78
-rw-r--r--touch_vertical_container/touch_vertical_container.tscn18
8 files changed, 183 insertions, 171 deletions
diff --git a/logic/stage.gd b/logic/stage.gd
index dc42273..12457c9 100644
--- a/logic/stage.gd
+++ b/logic/stage.gd
@@ -1,11 +1,10 @@
-extends ScrollContainer
+extends TouchVerticalContainer
class_name Stage
signal save # (database_entry: Dictionary)
signal discard # ()
const FILTERS_FILE_PATH: String = "user://filters.csv"
-const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5
var staged_entry := {}
var filters := {
@@ -44,8 +43,6 @@ var filters := {
"xpto_29": null,
},
}
-var is_pointer_dragging := false
-var pointer_drag_velocity := 0.0
onready var process_id := get_node("controls/process_id") as LineEdit
onready var surgery_id := get_node("controls/surgery_id") as LineEdit
@@ -62,40 +59,16 @@ onready var is_urgency := get_node("controls/is_urgency") as Button
onready var notes := get_node("controls/notes") as LineEdit
onready var save_button := get_node("controls/save") as Button
onready var discard_button := get_node("controls/discard") as Button
-onready var v_scroll_bar := get_v_scrollbar() as VScrollBar
+
+
+func _init():
+ exclude_controls = ["date_picker", "save", "discard"]
func _ready():
save_button.connect("pressed", self, "save_action")
discard_button.connect("pressed", self, "discard_action")
- for it in get_node("controls").get_children():
- it = it as Control
- match it.name:
- "date_picker", "save", "discard":
- pass
-
- _:
- var drag_sensor = PointerInputSensor.new()
- it.add_child(drag_sensor)
-
- drag_sensor.name = "drag_sensor"
- drag_sensor.anchor_right = 1.0
- drag_sensor.anchor_bottom = 1.0
-
- 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")
-
var auto_place := place.get_node("auto") as Button
auto_place.connect("pressed", self, "auto_populate", ["place"])
@@ -112,14 +85,6 @@ func auto_selected(index: int, field: String):
field_input.caret_position = field_input.text.length()
-
-func _process(delta: float):
- # 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():
self.visible = false
emit_signal("save", get_stage())
@@ -167,60 +132,6 @@ func get_stage() -> Dictionary:
return staged_entry
-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:
-
- # @DAM Try this approach on the TouchItemList
-
- var target: Control = pointer.target.get_parent()
- var position := target.get_global_mouse_position() - target.rect_global_position
-
- var button: Button = target.get_node("auto")
- if button != null && button.get_rect().has_point(position):
- button.grab_focus()
-# button.emit_signal("button_down")
- button.emit_signal("pressed")
-# button.emit_signal("button_up")
- else:
- target.grab_focus()
- return
-
-
- 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 load_filters(file_path: String = FILTERS_FILE_PATH):
var file := File.new()
file.open(file_path, File.READ_WRITE)
diff --git a/main.tscn b/main.tscn
index 52d9ccf..45cacd4 100644
--- a/main.tscn
+++ b/main.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=12 format=2]
+[gd_scene load_steps=13 format=2]
[ext_resource path="res://main.gd" type="Script" id=1]
[ext_resource path="res://date_picker/date_picker.tscn" type="PackedScene" id=2]
@@ -11,6 +11,7 @@
[ext_resource path="res://logic/stage.gd" type="Script" id=9]
[ext_resource path="res://logic/popup_list.gd" type="Script" id=10]
[ext_resource path="res://touch_item_list/touch_item_list.tscn" type="PackedScene" id=11]
+[ext_resource path="res://touch_vertical_container/touch_vertical_container.tscn" type="PackedScene" id=12]
[node name="main" type="Control"]
anchor_right = 1.0
@@ -70,31 +71,22 @@ __meta__ = {
"_edit_use_anchors_": false
}
-[node name="stage" type="ScrollContainer" parent="."]
+[node name="stage" parent="." instance=ExtResource( 12 )]
visible = false
-anchor_right = 1.0
-anchor_bottom = 1.0
margin_top = 60.0
-scroll_horizontal_enabled = false
script = ExtResource( 9 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-[node name="controls" type="VBoxContainer" parent="stage"]
-margin_right = 1080.0
+[node name="controls" parent="stage" index="0"]
margin_bottom = 1860.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-[node name="process_id" type="LineEdit" parent="stage/controls"]
+[node name="process_id" type="LineEdit" parent="stage/controls" index="0"]
margin_right = 1080.0
margin_bottom = 49.0
placeholder_text = "Nº Processo"
caret_blink = true
caret_blink_speed = 0.5
-[node name="surgery_id" type="LineEdit" parent="stage/controls"]
+[node name="surgery_id" type="LineEdit" parent="stage/controls" index="1"]
margin_top = 53.0
margin_right = 1080.0
margin_bottom = 102.0
@@ -102,7 +94,7 @@ placeholder_text = "Nº Cirurgia"
caret_blink = true
caret_blink_speed = 0.5
-[node name="date_picker" parent="stage/controls" instance=ExtResource( 2 )]
+[node name="date_picker" parent="stage/controls" index="2" instance=ExtResource( 2 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 106.0
@@ -110,7 +102,7 @@ margin_right = 1080.0
margin_bottom = 306.0
rect_min_size = Vector2( 400, 200 )
-[node name="place" type="LineEdit" parent="stage/controls"]
+[node name="place" type="LineEdit" parent="stage/controls" index="3"]
margin_top = 310.0
margin_right = 1080.0
margin_bottom = 359.0
@@ -124,7 +116,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
text = "X"
-[node name="anesthesia" type="LineEdit" parent="stage/controls"]
+[node name="anesthesia" type="LineEdit" parent="stage/controls" index="4"]
margin_top = 363.0
margin_right = 1080.0
margin_bottom = 412.0
@@ -132,7 +124,7 @@ placeholder_text = "Anestesia"
caret_blink = true
caret_blink_speed = 0.5
-[node name="first_assistant" type="LineEdit" parent="stage/controls"]
+[node name="first_assistant" type="LineEdit" parent="stage/controls" index="5"]
margin_top = 416.0
margin_right = 1080.0
margin_bottom = 465.0
@@ -140,7 +132,7 @@ placeholder_text = "1º Ajudante"
caret_blink = true
caret_blink_speed = 0.5
-[node name="type" type="LineEdit" parent="stage/controls"]
+[node name="type" type="LineEdit" parent="stage/controls" index="6"]
margin_top = 469.0
margin_right = 1080.0
margin_bottom = 518.0
@@ -148,7 +140,7 @@ placeholder_text = "Tipo"
caret_blink = true
caret_blink_speed = 0.5
-[node name="sub_type" type="LineEdit" parent="stage/controls"]
+[node name="sub_type" type="LineEdit" parent="stage/controls" index="7"]
margin_top = 522.0
margin_right = 1080.0
margin_bottom = 571.0
@@ -156,7 +148,7 @@ placeholder_text = "Subtipo"
caret_blink = true
caret_blink_speed = 0.5
-[node name="sub_sub_type" type="LineEdit" parent="stage/controls"]
+[node name="sub_sub_type" type="LineEdit" parent="stage/controls" index="8"]
margin_top = 575.0
margin_right = 1080.0
margin_bottom = 624.0
@@ -164,7 +156,7 @@ placeholder_text = "Sub-Subtipo"
caret_blink = true
caret_blink_speed = 0.5
-[node name="pathology" type="LineEdit" parent="stage/controls"]
+[node name="pathology" type="LineEdit" parent="stage/controls" index="9"]
margin_top = 628.0
margin_right = 1080.0
margin_bottom = 677.0
@@ -172,7 +164,7 @@ placeholder_text = "Patologia"
caret_blink = true
caret_blink_speed = 0.5
-[node name="intervention" type="LineEdit" parent="stage/controls"]
+[node name="intervention" type="LineEdit" parent="stage/controls" index="10"]
margin_top = 681.0
margin_right = 1080.0
margin_bottom = 730.0
@@ -180,13 +172,13 @@ placeholder_text = "Intervenção"
caret_blink = true
caret_blink_speed = 0.5
-[node name="is_urgency" type="CheckBox" parent="stage/controls"]
+[node name="is_urgency" type="CheckBox" parent="stage/controls" index="11"]
margin_top = 734.0
margin_right = 1080.0
margin_bottom = 781.0
text = "Urgência"
-[node name="notes" type="LineEdit" parent="stage/controls"]
+[node name="notes" type="LineEdit" parent="stage/controls" index="12"]
margin_top = 785.0
margin_right = 1080.0
margin_bottom = 834.0
@@ -194,7 +186,7 @@ placeholder_text = "Notas"
caret_blink = true
caret_blink_speed = 0.5
-[node name="discard" type="Button" parent="stage/controls"]
+[node name="discard" type="Button" parent="stage/controls" index="13"]
margin_top = 838.0
margin_right = 1080.0
margin_bottom = 888.0
@@ -206,7 +198,7 @@ __meta__ = {
"_edit_use_anchors_": false
}
-[node name="save" type="Button" parent="stage/controls"]
+[node name="save" type="Button" parent="stage/controls" index="14"]
margin_top = 892.0
margin_right = 1080.0
margin_bottom = 942.0
@@ -271,3 +263,5 @@ valign = 2
__meta__ = {
"_edit_use_anchors_": false
}
+
+[editable path="stage"]
diff --git a/project.godot b/project.godot
index d630b8d..9067744 100644
--- a/project.godot
+++ b/project.godot
@@ -29,7 +29,7 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://pointer_input_sensor.gd"
}, {
-"base": "ScrollContainer",
+"base": "TouchVerticalContainer",
"class": "Stage",
"language": "GDScript",
"path": "res://logic/stage.gd"
@@ -39,6 +39,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://touch_item_list/touch_item_list.gd"
}, {
+"base": "ScrollContainer",
+"class": "TouchVerticalContainer",
+"language": "GDScript",
+"path": "res://touch_vertical_container/touch_vertical_container.gd"
+}, {
"base": "Control",
"class": "ValuePicker",
"language": "GDScript",
@@ -51,6 +56,7 @@ _global_script_class_icons={
"PointerInputSensor": "",
"Stage": "",
"TouchItemList": "",
+"TouchVerticalContainer": "",
"ValuePicker": ""
}
diff --git a/readme.md b/readme.md
index 6a341e3..ccfbca1 100644
--- a/readme.md
+++ b/readme.md
@@ -17,7 +17,10 @@ Surgery Log
- [x] export database to CSV file;
- [x] allow to reset database;
- [x] split touch logic from database (create TouchItemList);
-- [ ] split touch logic from stage (create TouchVerticalContainer);
+- [x] split touch logic from stage (create TouchVerticalContainer);
+- [ ] on-press:
+ - highlight item on lists
+ - mark auto buttons as pressed
- [ ] load/store filters CSV file;
- [ ] import/export filters to CSV file;
- [ ] Implement file access permission check on Android:
diff --git a/touch_item_list/touch_item_list.gd b/touch_item_list/touch_item_list.gd
index d2d0d37..0534bb2 100644
--- a/touch_item_list/touch_item_list.gd
+++ b/touch_item_list/touch_item_list.gd
@@ -6,16 +6,16 @@ const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5
var is_pointer_dragging := false
var pointer_drag_velocity := 0.0
-onready var drag_sensor := get_node("drag_sensor") as PointerInputSensor
+onready var sensor := get_node("sensor") as PointerInputSensor
onready var v_scroll_bar := get_v_scroll() as ScrollBar
func _ready():
- 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")
- drag_sensor.connect("on_scroll", self, "pointer_input_handler")
+ sensor.connect("on_press", self, "pointer_input_on_press_handler")
+ sensor.connect("on_drag", self, "pointer_input_on_drag_handler")
+ sensor.connect("on_end_drag", self, "pointer_input_on_end_drag_handler")
+ sensor.connect("on_click", self, "pointer_input_on_click_handler")
+ sensor.connect("on_scroll", self, "pointer_input_on_scroll_handler")
func _process(delta: float):
@@ -25,46 +25,48 @@ func _process(delta: float):
v_scroll_bar.value -= pointer_drag_velocity * delta
-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_SCROLL:
- var target := self
- target._gui_input(pointer.event)
-
- 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)
+func pointer_input_on_press_handler(pointer: PointerInputSensor.PointerInputData):
+ is_pointer_dragging = true
+
+
+func pointer_input_on_drag_handler(pointer: PointerInputSensor.PointerInputData):
+ is_pointer_dragging = true
+ pointer_drag_velocity = pointer.velocity.y
+ v_scroll_bar.value -= pointer.relative_position.y
+
+
+func pointer_input_on_end_drag_handler(pointer: PointerInputSensor.PointerInputData):
+ is_pointer_dragging = false
+
+
+func pointer_input_on_click_handler(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 pointer_input_on_scroll_handler(pointer: PointerInputSensor.PointerInputData):
+ var target := self
+ target._gui_input(pointer.event)
diff --git a/touch_item_list/touch_item_list.tscn b/touch_item_list/touch_item_list.tscn
index 6022ed4..6207e7d 100644
--- a/touch_item_list/touch_item_list.tscn
+++ b/touch_item_list/touch_item_list.tscn
@@ -13,7 +13,7 @@ __meta__ = {
"_edit_use_anchors_": false
}
-[node name="drag_sensor" type="Control" parent="."]
+[node name="sensor" type="Control" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_right = -8.0
diff --git a/touch_vertical_container/touch_vertical_container.gd b/touch_vertical_container/touch_vertical_container.gd
new file mode 100644
index 0000000..10462fd
--- /dev/null
+++ b/touch_vertical_container/touch_vertical_container.gd
@@ -0,0 +1,78 @@
+extends ScrollContainer
+class_name TouchVerticalContainer
+
+const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5
+
+var is_pointer_dragging := false
+var pointer_drag_velocity := 0.0
+var exclude_controls := []
+
+
+func _ready():
+
+ for it in get_node("controls").get_children():
+ it = it as Control
+ if exclude_controls.has(it.name):
+ continue
+
+ var sensor = PointerInputSensor.new()
+ it.add_child(sensor)
+
+ sensor.name = "sensor"
+ sensor.anchor_right = 1.0
+ sensor.anchor_bottom = 1.0
+
+ sensor.connect("on_press", self, "pointer_input_on_press_handler")
+ sensor.connect("on_drag", self, "pointer_input_on_drag_handler")
+ sensor.connect("on_end_drag", self, "pointer_input_on_end_drag_handler")
+ sensor.connect("on_click", self, "pointer_input_on_click_handler")
+
+ it.connect("focus_entered", sensor, "set_mouse_filter", [Control.MOUSE_FILTER_IGNORE])
+ it.connect("focus_entered", sensor, "mouse_default_cursor_shape", [Control.CURSOR_IBEAM])
+ it.connect("focus_exited", sensor, "set_mouse_filter", [Control.MOUSE_FILTER_STOP])
+ it.connect("focus_exited", sensor, "mouse_default_cursor_shape", [Control.CURSOR_ARROW])
+
+ if it is LineEdit:
+ it.connect("focus_exited", it, "deselect")
+
+
+func _process(delta: float):
+ # 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)
+ self.scroll_vertical -= pointer_drag_velocity * delta
+
+
+func pointer_input_on_press_handler(pointer: PointerInputSensor.PointerInputData):
+ is_pointer_dragging = true
+
+
+func pointer_input_on_drag_handler(pointer: PointerInputSensor.PointerInputData):
+ is_pointer_dragging = true
+ pointer_drag_velocity = pointer.velocity.y
+ self.scroll_vertical -= pointer.relative_position.y
+
+
+func pointer_input_on_end_drag_handler(pointer: PointerInputSensor.PointerInputData):
+ is_pointer_dragging = false
+
+
+func pointer_input_on_click_handler(pointer: PointerInputSensor.PointerInputData):
+ var target: Control = pointer.target.get_parent()
+ var position := target.get_global_mouse_position()
+ target.grab_focus()
+
+ var button: Button
+ if target is Button:
+ button = target
+ elif target.get_node("auto") is Button:
+ button = target.get_node("auto")
+
+ if button != null && button.get_global_rect().has_point(position):
+ if button is CheckBox || button is CheckButton:
+ button.pressed = !button.pressed
+ button.emit_signal("button_down")
+ button.emit_signal("pressed")
+ button.emit_signal("button_up")
+
+
diff --git a/touch_vertical_container/touch_vertical_container.tscn b/touch_vertical_container/touch_vertical_container.tscn
new file mode 100644
index 0000000..770ac38
--- /dev/null
+++ b/touch_vertical_container/touch_vertical_container.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://touch_vertical_container/touch_vertical_container.gd" type="Script" id=1]
+
+[node name="scroll_container" type="ScrollContainer"]
+anchor_right = 1.0
+anchor_bottom = 1.0
+scroll_horizontal_enabled = false
+script = ExtResource( 1 )
+__meta__ = {
+"_edit_use_anchors_": false
+}
+
+[node name="controls" type="VBoxContainer" parent="."]
+margin_right = 1080.0
+margin_bottom = 1920.0
+size_flags_horizontal = 3
+size_flags_vertical = 3