diff options
| author | dam <dam@gudinoff> | 2022-01-06 11:19:43 +0000 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2022-01-06 11:19:43 +0000 |
| commit | 6a2887783f19e0a94db00dea014e1065b87e626c (patch) | |
| tree | 0b71e7c0c1d5bdfcda6a5ca7af0bb10c9d37bb8c | |
| parent | 06b2f34ba64726028f494060376044531d763668 (diff) | |
| download | surgery-log-6a2887783f19e0a94db00dea014e1065b87e626c.tar.zst surgery-log-6a2887783f19e0a94db00dea014e1065b87e626c.zip | |
Prepare filters' logic.
| -rw-r--r-- | date_picker/date_picker.gd | 6 | ||||
| -rw-r--r-- | date_picker/value_picker.gd | 8 | ||||
| -rw-r--r-- | logic/database.gd | 30 | ||||
| -rw-r--r-- | logic/stage.gd | 72 | ||||
| -rw-r--r-- | menu/menu.gd | 23 | ||||
| -rw-r--r-- | readme.md | 4 |
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?" @@ -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; |
