extends ScrollContainer class_name Stage signal save # (database_entry: Dictionary) signal discard # () #onready var process_id: LineEdit = get_node("touch_scroll/controls/process_id") #onready var surgery_id: LineEdit = get_node("touch_scroll/controls/surgery_id") #onready var date: DatePicker = get_node("touch_scroll/controls/date_picker") #onready var place: LineEdit = get_node("touch_scroll/controls/place") #onready var anesthetic: LineEdit = get_node("touch_scroll/controls/anesthetic") #onready var first_assistant: LineEdit = get_node("touch_scroll/controls/first_assistant") #onready var type: LineEdit = get_node("touch_scroll/controls/type") #onready var sub_type: LineEdit = get_node("touch_scroll/controls/sub_type") #onready var sub_sub_type: LineEdit = get_node("touch_scroll/controls/sub_sub_type") #onready var pathology: LineEdit = get_node("touch_scroll/controls/pathology") #onready var intervention: LineEdit = get_node("touch_scroll/controls/intervention") #onready var is_urgency: Button = get_node("touch_scroll/controls/is_urgency") #onready var notes: LineEdit = get_node("touch_scroll/controls/notes") #onready var save_button: Button = get_node("touch_scroll/controls/save") #onready var discard_button: Button = get_node("touch_scroll/controls/discard") 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 anesthetic: LineEdit = get_node("controls/anesthetic") 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") func _ready(): save_button.connect("pressed", self, "save_action") discard_button.connect("pressed", self, "discard_action") for it in get_node("controls").get_children(): # print("%s" % it.name) match it.name: "date_picker", "save", "discard": print("- %s" % it.name) _: # "first_assistant": print("+ %s" % it.name) var drag_sensor = PointerInputSensor.new() drag_sensor.name = "drag_sensor" drag_sensor.mouse_default_cursor_shape = Control.CURSOR_IBEAM (it as Control).add_child(drag_sensor) drag_sensor.anchor_right = 1.0 drag_sensor.anchor_bottom = 1.0 drag_sensor.connect("on_press", self, "on_press") drag_sensor.connect("on_drag", self, "on_drag") drag_sensor.connect("on_end_drag", self, "on_end_drag") drag_sensor.connect("on_click", self, "on_click") drag_sensor.on_process = funcref(self, "bazinga") # @DAM Cleanup this code. onready var v_scroll_bar: VScrollBar = get_v_scrollbar() export var scroll_velocity_decaying_factor: float = 2.5 var drag_velocity := 0.0 var is_dragging := false func bazinga(delta: float, pointer: PointerInputSensor): if (pointer.get_parent() as Control).has_focus(): pointer.mouse_filter = Control.MOUSE_FILTER_IGNORE else: pointer.mouse_filter = Control.MOUSE_FILTER_STOP func _process(delta: float): if is_dragging == false && abs(drag_velocity) > 0.5: drag_velocity *= clamp((1.0 - scroll_velocity_decaying_factor * delta), 0.0, 1.0) v_scroll_bar.value -= drag_velocity * delta func on_click(pointer: PointerInputSensor.PointerInputData): var target: Control = pointer.target.get_parent() 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 on_press(pointer: PointerInputSensor.PointerInputData): is_dragging = true func on_end_drag(pointer: PointerInputSensor.PointerInputData): is_dragging = false func on_drag(pointer: PointerInputSensor.PointerInputData): is_dragging = true drag_velocity = pointer.velocity.y v_scroll_bar.value -= pointer.relative_position.y func save_action(): self.visible = false emit_signal("save", get_stage()) func discard_action(): self.visible = false emit_signal("discard") func set_stage(entry: Dictionary): process_id.text = entry.process_id surgery_id.text = entry.surgery_id date.set_date(entry.date_year, entry.date_month, entry.date_day) place.text = entry.place anesthetic.text = entry.anesthetic first_assistant.text = entry.first_assistant type.text = entry.type sub_type.text = entry.sub_type sub_sub_type.text = entry.sub_sub_type pathology.text = entry.pathology intervention.text = entry.intervention is_urgency.pressed = entry.is_urgency notes.text = entry.notes self.scroll_vertical = 0 # @DAM TODO func get_stage() -> Dictionary: # @DAM Simplify all this... avoid creating multiple entries/dictionaries. var entry: Dictionary = { "process_id": process_id.text, "surgery_id": surgery_id.text, "date_year": date.get_year(), "date_month": date.get_month(), "date_day": date.get_day(), "place": place.text, "anesthetic": anesthetic.text, "first_assistant": first_assistant.text, "type": type.text, "sub_type": sub_type.text, "sub_sub_type": sub_sub_type.text, "pathology": pathology.text, "intervention": intervention.text, "is_urgency": is_urgency.pressed, "notes": notes.text, } return entry func _notification(what: int): if what == MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST: discard_action()