diff options
| author | dam <dam@gudinoff> | 2022-01-06 11:39:06 +0000 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2022-01-06 11:39:06 +0000 |
| commit | 0eeacf3d142b40427ea5ca5b2806fe714c00f9b4 (patch) | |
| tree | 4371c058fdb67f32508721eb657711a2c1e705d8 | |
| parent | 6a2887783f19e0a94db00dea014e1065b87e626c (diff) | |
| download | surgery-log-0eeacf3d142b40427ea5ca5b2806fe714c00f9b4.tar.zst surgery-log-0eeacf3d142b40427ea5ca5b2806fe714c00f9b4.zip | |
Isolate database entry code to avoid cyclic references.
| -rw-r--r-- | logic/database.gd | 73 | ||||
| -rw-r--r-- | logic/database_entry.gd | 64 | ||||
| -rw-r--r-- | logic/stage.gd | 2 | ||||
| -rw-r--r-- | project.godot | 6 |
4 files changed, 78 insertions, 67 deletions
diff --git a/logic/database.gd b/logic/database.gd index 47cddbc..551b9bf 100644 --- a/logic/database.gd +++ b/logic/database.gd @@ -2,26 +2,6 @@ extends ItemList class_name Database const DATABASE_FILE_PATH: String = "user://database.csv" -const DATE_SEPARATOR: String = "-" -const DATE_FORMAT: String = "%04d-%02d-%02d" -const ENTRY_PROTOTYPE: Dictionary = { - "process_id": "", - "surgery_id": "", - "place": "", - "date": "", - "date_year": 0, - "date_month": 0, - "date_day": 0, - "anesthesia": "", - "first_assistant": "", - "type": "", - "sub_type": "", - "sub_sub_type": "", - "pathology": "", - "intervention": "", - "is_urgency": false, - "notes": "", -} const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5 var db: Array @@ -30,7 +10,7 @@ var staged_idx: int var is_pointer_dragging := false var pointer_drag_velocity := 0.0 -onready var stage := get_node("/root/main/stage") #as Stage # @DAM Solve cyclic load. +onready var stage := get_node("/root/main/stage") as Stage 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 @@ -85,7 +65,7 @@ func _notification(what: int): func get_entry_view(database_entry: Dictionary) -> String: - return "%6s | %6s | %s" % [database_entry.process_id, database_entry.surgery_id, get_entry_date(database_entry)] + return "%6s | %6s | %s" % [database_entry.process_id, database_entry.surgery_id, DatabaseEntry.get_entry_date(database_entry)] func item_selected(index: int): @@ -120,7 +100,7 @@ func edit_action(): func add_action(): self.visible = false stage.visible = true - var staged := instance_entry() + var staged := DatabaseEntry.instance_entry() stage.set_stage(staged) @@ -129,7 +109,7 @@ func scroll_down(): func save_stage(entry: Dictionary): - entry = instance_entry(entry) # @DAM Maybe we could not be creating endless dictionaries? + entry = DatabaseEntry.instance_entry(entry) # @DAM Maybe we could not be creating endless dictionaries? var next_selected_idx: int if staged_idx >= 0: db[staged_idx] = entry @@ -170,7 +150,7 @@ func load_database(file_path: String = DATABASE_FILE_PATH): is_first_line = false headers = csv_entry continue - var entry = ENTRY_PROTOTYPE.duplicate(true) + var entry = DatabaseEntry.instance_entry() for idx in headers.size(): var field_name := headers[idx] var field_value := csv_entry[idx] @@ -187,7 +167,7 @@ func load_database(file_path: String = DATABASE_FILE_PATH): func store_database(file_path: String = DATABASE_FILE_PATH): var file := File.new() file.open(file_path, File.WRITE) - var header := PoolStringArray(ENTRY_PROTOTYPE.keys()) + var header := PoolStringArray(DatabaseEntry.ENTRY_PROTOTYPE.keys()) file.store_csv_line(header) var entry := PoolStringArray() for it in db: @@ -203,52 +183,13 @@ func clear_database(save_changes: bool = false): store_database() -static func instance_entry(params: Dictionary = {}) -> Dictionary: - var new_entry := ENTRY_PROTOTYPE.duplicate(true) - new_entry.process_id = params.get("process_id", "") - new_entry.surgery_id = params.get("surgery_id", "") - new_entry.place = params.get("place", "") - - var today = OS.get_date() - new_entry.date_year = params.get("date_year", today.year) - new_entry.date_month = params.get("date_month", today.month) - new_entry.date_day = params.get("date_day", today.day) - new_entry.date = params.get("date", get_entry_date(new_entry)) # @DAM We should store only one version of the date. - - new_entry.anesthesia = params.get("anesthesia", "") - new_entry.first_assistant = params.get("first_assistant", "") - new_entry.type = params.get("type", "") - new_entry.sub_type = params.get("sub_type", "") - new_entry.sub_sub_type = params.get("sub_sub_type", "") - new_entry.pathology = params.get("pathology", "") - new_entry.intervention = params.get("intervention", "") - new_entry.is_urgency = params.get("is_urgency", false) - new_entry.notes = params.get("notes", "") - - return new_entry - - -static func get_entry_date(entry: Dictionary) -> String: - return DATE_FORMAT % [entry.date_year, entry.date_month, entry.date_day] - - -static func set_entry_date(entry: Dictionary, date: String): - date = date.strip_edges().replace(" ", DATE_SEPARATOR).replace("/", DATE_SEPARATOR).replace("\\", DATE_SEPARATOR) - var year_month_idx := date.find(DATE_SEPARATOR) - var month_day_idx := date.find(DATE_SEPARATOR, year_month_idx + 1) - entry.date = date - entry.date_year = int(date.substr(0, year_month_idx)) - entry.date_month = int(date.substr(year_month_idx + 1, month_day_idx - year_month_idx - 1)) - entry.date_day = int(date.substr(month_day_idx + 1)) - - func fake_database(save_changes: bool = false): clear_database() for idx in range(500): var date_year = 1 + int(float(idx) / 365.0) var date_month = idx % 12 var date_day = idx % 365 - var fake_entry = instance_entry({ + var fake_entry = DatabaseEntry.instance_entry({ "process_id": "%06d" % idx, "surgery_id": "s%05d" % idx, "date": "%04d-%02d-%02d" % [date_year, date_month, date_day] diff --git a/logic/database_entry.gd b/logic/database_entry.gd new file mode 100644 index 0000000..19f2255 --- /dev/null +++ b/logic/database_entry.gd @@ -0,0 +1,64 @@ +extends Reference +class_name DatabaseEntry + +const DATE_SEPARATOR: String = "-" +const DATE_FORMAT: String = "%04d-%02d-%02d" +const ENTRY_PROTOTYPE: Dictionary = { + "process_id": "", + "surgery_id": "", + "place": "", + "date": "", + "date_year": 0, + "date_month": 0, + "date_day": 0, + "anesthesia": "", + "first_assistant": "", + "type": "", + "sub_type": "", + "sub_sub_type": "", + "pathology": "", + "intervention": "", + "is_urgency": false, + "notes": "", +} + + +static func instance_entry(params: Dictionary = {}) -> Dictionary: + var new_entry := ENTRY_PROTOTYPE.duplicate(true) + new_entry.process_id = params.get("process_id", "") + new_entry.surgery_id = params.get("surgery_id", "") + new_entry.place = params.get("place", "") + + var today = OS.get_date() + new_entry.date_year = params.get("date_year", today.year) + new_entry.date_month = params.get("date_month", today.month) + new_entry.date_day = params.get("date_day", today.day) + new_entry.date = params.get("date", get_entry_date(new_entry)) # @DAM We should store only one version of the date. + + new_entry.anesthesia = params.get("anesthesia", "") + new_entry.first_assistant = params.get("first_assistant", "") + new_entry.type = params.get("type", "") + new_entry.sub_type = params.get("sub_type", "") + new_entry.sub_sub_type = params.get("sub_sub_type", "") + new_entry.pathology = params.get("pathology", "") + new_entry.intervention = params.get("intervention", "") + new_entry.is_urgency = params.get("is_urgency", false) + new_entry.notes = params.get("notes", "") + + return new_entry + + +static func get_entry_date(entry: Dictionary) -> String: + return DATE_FORMAT % [entry.date_year, entry.date_month, entry.date_day] + + +static func set_entry_date(entry: Dictionary, date: String): + date = date.strip_edges().replace(" ", DATE_SEPARATOR).replace("/", DATE_SEPARATOR).replace("\\", DATE_SEPARATOR) + var year_month_idx := date.find(DATE_SEPARATOR) + var month_day_idx := date.find(DATE_SEPARATOR, year_month_idx + 1) + entry.date = date + entry.date_year = int(date.substr(0, year_month_idx)) + entry.date_month = int(date.substr(year_month_idx + 1, month_day_idx - year_month_idx - 1)) + entry.date_day = int(date.substr(month_day_idx + 1)) + + diff --git a/logic/stage.gd b/logic/stage.gd index dd345e8..511068e 100644 --- a/logic/stage.gd +++ b/logic/stage.gd @@ -173,7 +173,7 @@ func load_filters(file_path: String = FILTERS_FILE_PATH): is_first_line = false headers = csv_entry continue - var entry = Database.ENTRY_PROTOTYPE.duplicate(true) +# var entry = DatabaseEntry.instance_entry() # for idx in headers.size(): # var field_name := headers[idx] # var field_value := csv_entry[idx] diff --git a/project.godot b/project.godot index f5dbe7a..cfdcbb8 100644 --- a/project.godot +++ b/project.godot @@ -14,6 +14,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://logic/database.gd" }, { +"base": "Reference", +"class": "DatabaseEntry", +"language": "GDScript", +"path": "res://logic/database_entry.gd" +}, { "base": "Control", "class": "DatePicker", "language": "GDScript", @@ -36,6 +41,7 @@ _global_script_classes=[ { } ] _global_script_class_icons={ "Database": "", +"DatabaseEntry": "", "DatePicker": "", "PointerInputSensor": "", "Stage": "", |
