aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordam <dam@gudinoff>2022-01-06 11:39:06 +0000
committerdam <dam@gudinoff>2022-01-06 11:39:06 +0000
commit0eeacf3d142b40427ea5ca5b2806fe714c00f9b4 (patch)
tree4371c058fdb67f32508721eb657711a2c1e705d8
parent6a2887783f19e0a94db00dea014e1065b87e626c (diff)
downloadsurgery-log-0eeacf3d142b40427ea5ca5b2806fe714c00f9b4.tar.zst
surgery-log-0eeacf3d142b40427ea5ca5b2806fe714c00f9b4.zip
Isolate database entry code to avoid cyclic references.
-rw-r--r--logic/database.gd73
-rw-r--r--logic/database_entry.gd64
-rw-r--r--logic/stage.gd2
-rw-r--r--project.godot6
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": "",