aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--date_picker/date_picker.gd6
-rw-r--r--date_picker/value_picker.gd8
-rw-r--r--logic/database.gd30
-rw-r--r--logic/stage.gd72
-rw-r--r--menu/menu.gd23
-rw-r--r--readme.md4
6 files changed, 89 insertions, 54 deletions
diff --git a/date_picker/date_picker.gd b/date_picker/date_picker.gd
index fb9cca2..e2a793f 100644
--- a/date_picker/date_picker.gd
+++ b/date_picker/date_picker.gd
@@ -16,9 +16,9 @@ const days_per_month: Dictionary = {
12: 31,
}
-onready var year_picker: ValuePicker = get_node("year")
-onready var month_picker: ValuePicker = get_node("month")
-onready var day_picker: ValuePicker = get_node("day")
+onready var year_picker := get_node("year") as ValuePicker
+onready var month_picker := get_node("month") as ValuePicker
+onready var day_picker := get_node("day") as ValuePicker
func _process(delta: float):
diff --git a/date_picker/value_picker.gd b/date_picker/value_picker.gd
index fcd7dff..7429edd 100644
--- a/date_picker/value_picker.gd
+++ b/date_picker/value_picker.gd
@@ -10,10 +10,10 @@ const DRAG_THRESHOLD_CM: float = 0.250
export var min_value: int
export var max_value: int
-onready var input: LineEdit = get_node("current/input")
-onready var label_previous: Label = get_node("previous")
-onready var label_current: Label = get_node("current")
-onready var label_next: Label = get_node("next")
+onready var input := get_node("current/input") as LineEdit
+onready var label_previous := get_node("previous") as Label
+onready var label_current := get_node("current") as Label
+onready var label_next := get_node("next") as Label
var pointer: Dictionary
var anchor: float
diff --git a/logic/database.gd b/logic/database.gd
index 2285470..47cddbc 100644
--- a/logic/database.gd
+++ b/logic/database.gd
@@ -30,12 +30,12 @@ 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()
-onready var drag_sensor: PointerInputSensor = get_node("drag_sensor")
+onready var stage := get_node("/root/main/stage") #as Stage # @DAM Solve cyclic load.
+onready var delete_button := get_node("actions/delete") as Button
+onready var edit_button := get_node("actions/edit") as Button
+onready var add_button := get_node("actions/add") as Button
+onready var v_scroll_bar := get_v_scroll() as ScrollBar
+onready var drag_sensor := get_node("drag_sensor") as PointerInputSensor
func _init():
@@ -53,8 +53,8 @@ func _ready():
edit_button.connect("pressed", self, "edit_action")
add_button.connect("pressed", self, "add_action")
- stage.connect("save", self, "save")
- stage.connect("discard", self, "discard")
+ stage.connect("save", self, "save_stage")
+ stage.connect("discard", self, "discard_stage")
drag_sensor.connect("on_press", self, "pointer_input_handler")
drag_sensor.connect("on_drag", self, "pointer_input_handler")
@@ -128,15 +128,15 @@ func scroll_down():
v_scroll_bar.value = v_scroll_bar.max_value
-func save(database_entry: Dictionary):
- database_entry = instance_entry(database_entry) # @DAM Maybe we could not be creating endless dictionaries?
+func save_stage(entry: Dictionary):
+ entry = instance_entry(entry) # @DAM Maybe we could not be creating endless dictionaries?
var next_selected_idx: int
if staged_idx >= 0:
- db[staged_idx] = database_entry
+ db[staged_idx] = entry
next_selected_idx = staged_idx
else:
- db.append(database_entry)
- add_item(get_entry_view(database_entry))
+ db.append(entry)
+ add_item(get_entry_view(entry))
call_deferred("scroll_down")
next_selected_idx = db.size() - 1
@@ -152,7 +152,7 @@ func save(database_entry: Dictionary):
grab_focus()
-func discard():
+func discard_stage():
staged_idx = -1
self.visible = true
grab_focus()
@@ -163,7 +163,7 @@ func load_database(file_path: String = DATABASE_FILE_PATH):
file.open(file_path, File.READ_WRITE)
var headers: PoolStringArray
var is_first_line := true
-# while database_file.eof_reached() == false: # @DAM Why this?
+# while file.eof_reached() == false: # @DAM Why this?
while file.get_position() < file.get_len():
var csv_entry := file.get_csv_line()
if is_first_line:
diff --git a/logic/stage.gd b/logic/stage.gd
index 73d905e..dd345e8 100644
--- a/logic/stage.gd
+++ b/logic/stage.gd
@@ -4,27 +4,29 @@ 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 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")
-onready var date: DatePicker = get_node("controls/date_picker")
-onready var place: LineEdit = get_node("controls/place")
-onready var anesthesia: LineEdit = get_node("controls/anesthesia")
-onready var first_assistant: LineEdit = get_node("controls/first_assistant")
-onready var type: LineEdit = get_node("controls/type")
-onready var sub_type: LineEdit = get_node("controls/sub_type")
-onready var sub_sub_type: LineEdit = get_node("controls/sub_sub_type")
-onready var pathology: LineEdit = get_node("controls/pathology")
-onready var intervention: LineEdit = get_node("controls/intervention")
-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()
+var filters := {}
+
+onready var process_id := get_node("controls/process_id") as LineEdit
+onready var surgery_id := get_node("controls/surgery_id") as LineEdit
+onready var date := get_node("controls/date_picker") as DatePicker
+onready var place := get_node("controls/place") as LineEdit
+onready var anesthesia := get_node("controls/anesthesia") as LineEdit
+onready var first_assistant := get_node("controls/first_assistant") as LineEdit
+onready var type := get_node("controls/type") as LineEdit
+onready var sub_type := get_node("controls/sub_type") as LineEdit
+onready var sub_sub_type := get_node("controls/sub_sub_type") as LineEdit
+onready var pathology := get_node("controls/pathology") as LineEdit
+onready var intervention := get_node("controls/intervention") as LineEdit
+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 _ready():
@@ -159,3 +161,39 @@ func pointer_input_handler(pointer: PointerInputSensor.PointerInputData):
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)
+ var headers: PoolStringArray
+ var is_first_line := true
+# while file.eof_reached() == false: # @DAM Why this?
+ while file.get_position() < file.get_len():
+ var csv_entry := file.get_csv_line()
+ if is_first_line:
+ is_first_line = false
+ headers = csv_entry
+ continue
+ var entry = Database.ENTRY_PROTOTYPE.duplicate(true)
+# for idx in headers.size():
+# var field_name := headers[idx]
+# var field_value := csv_entry[idx]
+# match field_name:
+# "date_year", "date_month", "date_day":
+# entry[field_name] = int(field_value)
+# "is_urgency":
+# entry[field_name] = true if field_value.strip_edges().to_lower() == "true" else false
+# _:
+# entry[field_name] = field_value
+# filters.append(entry)
+
+
+func store_filters(file_path: String = FILTERS_FILE_PATH):
+ pass # @DAM TODO
+
+
+func clear_filters(save_changes: bool = false):
+ pass # @DAM TODO
+ if save_changes:
+ store_filters()
+
+
diff --git a/menu/menu.gd b/menu/menu.gd
index 3384436..b5e1ef2 100644
--- a/menu/menu.gd
+++ b/menu/menu.gd
@@ -16,6 +16,7 @@ onready var popup := get_popup() as PopupMenu
onready var confirm_action := get_node("/root/main/confirm_action") as ConfirmationDialog
onready var file_picker := get_node("/root/main/file_picker") as FileDialog
onready var database := get_node("/root/main/database") as Database
+onready var stage := get_node("/root/main/stage") as Stage
func _ready():
@@ -37,31 +38,28 @@ func dialog_cancelled(confirmation_signal_name: String):
func _menu_import_filters_action():
- return
file_picker.window_title = "IMPORT FILTERS"
file_picker.mode = FileDialog.MODE_OPEN_FILE
file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)
-# file_picker.connect("file_selected", filters, "TODO", [], CONNECT_ONESHOT)
-# file_picker.show_modal(true)
-# file_picker.invalidate()
+ file_picker.connect("file_selected", stage, "load_filters", [], CONNECT_ONESHOT)
+ file_picker.show_modal(true)
+ file_picker.invalidate()
func _menu_export_filters_action():
- return
file_picker.window_title = "EXPORT FILTERS"
file_picker.mode = FileDialog.MODE_SAVE_FILE
file_picker.current_dir = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)
-# file_picker.connect("file_selected", filters, "TODO", [], CONNECT_ONESHOT)
-# file_picker.show_modal(true)
-# file_picker.invalidate()
+ file_picker.connect("file_selected", stage, "store_filters", [], CONNECT_ONESHOT)
+ file_picker.show_modal(true)
+ file_picker.invalidate()
func _menu_clear_filters_action():
- return
confirm_action.window_title = "CLEAR FILTERS"
confirm_action.dialog_text = "Do you want to delete all filters?"
-# confirm_action.connect("confirmed", filters, "TDO", [true], CONNECT_ONESHOT)
-# confirm_action.show_modal(true)
+ confirm_action.connect("confirmed", stage, "clear_filters", [true], CONNECT_ONESHOT)
+ confirm_action.show_modal(true)
func _menu_export_data_action():
@@ -83,11 +81,10 @@ func _menu_clear_data_action():
func _menu_about_action():
confirm_action.window_title = "FAKE DB"
confirm_action.dialog_text = "About text here!"
-# confirm_action.connect("confirmed", database, "fake_database", [true], CONNECT_ONESHOT)
confirm_action.show_modal(true)
-
+# @DAM Hide this debug method before release.
func _menu_fake_db_action():
confirm_action.window_title = "FAKE DB"
confirm_action.dialog_text = "Do you want to delete all entries from the database and replace by fake entries?"
diff --git a/readme.md b/readme.md
index fc33cf1..0a85447 100644
--- a/readme.md
+++ b/readme.md
@@ -16,6 +16,8 @@ Surgery Log
- [x] load/store database CSV file;
- [x] export database to CSV file;
- [x] allow to reset database;
+- [ ] load/store filters CSV file;
+- [ ] import/export filters to CSV file;
- [ ] Implement file access permission check on Android:
```py
if OS.get_name() == "Android":
@@ -30,8 +32,6 @@ Surgery Log
else:
has_permissions = true
```
-- [ ] load/store filters CSV file;
-- [ ] import/export filters to CSV file;
- [ ] add auto-fill buttons on stage screen:
- should show a pop-up with multiple options filtered according to current filters;
- allow options to be scrolled by dragging;