bugs squished
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
extends PanelContainer
|
||||
extends Control
|
||||
|
||||
var config: ConfigManager = preload("res://config_manager.tres")
|
||||
|
||||
@ -26,11 +26,13 @@ func _ready() -> void:
|
||||
# warning-ignore:return_value_discarded
|
||||
file_path_file_dialog.connect("file_selected", self, "_on_current_file_selected")
|
||||
# warning-ignore:return_value_discarded
|
||||
file_path_line_edit.connect("text_submitted", self, "_on_current_file_selected")
|
||||
file_path_line_edit.connect("text_entered", self, "_on_current_file_selected")
|
||||
|
||||
theme_path_button.connected("pressed", self, "_on_theme_path_button_pressed")
|
||||
# warning-ignore:return_value_discarded
|
||||
theme_path_button.connect("pressed", self, "_on_theme_path_button_pressed")
|
||||
|
||||
theme_path_file_dialog.connected("file_selected", self, "_on_new_theme_selected")
|
||||
# warning-ignore:return_value_discarded
|
||||
theme_path_file_dialog.connect("file_selected", self, "_on_new_theme_selected")
|
||||
|
||||
theme_path_file_dialog.hide()
|
||||
file_path_file_dialog.hide()
|
||||
@ -46,6 +48,7 @@ func _ready() -> void:
|
||||
# warning-ignore:return_value_discarded
|
||||
open_data_dir_button.connect("pressed", self, "_on_open_data_dir_button_pressed")
|
||||
|
||||
_on_current_file_changed()
|
||||
|
||||
|
||||
func _on_current_file_changed() -> void:
|
||||
|
@ -116,19 +116,31 @@ This game uses Godot Engine, available under the following license:
|
||||
THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
"
|
||||
|
||||
[node name="FilePathFileDialog" type="FileDialog" parent="."]
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="FilePathFileDialog" type="FileDialog" parent="CanvasLayer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 442.0
|
||||
margin_bottom = 760.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
window_title = "Pick a file"
|
||||
resizable = true
|
||||
dialog_hide_on_ok = true
|
||||
mode_overrides_title = false
|
||||
access = 2
|
||||
filters = PoolStringArray( "*.csv ; Comma Separated Files" )
|
||||
|
||||
[node name="ThemePathFileDialog" type="FileDialog" parent="."]
|
||||
[node name="ThemePathFileDialog" type="FileDialog" parent="CanvasLayer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 360.0
|
||||
margin_bottom = 760.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
window_title = "Open a File"
|
||||
resizable = true
|
||||
dialog_hide_on_ok = true
|
||||
mode_overrides_title = false
|
||||
mode = 0
|
||||
access = 2
|
||||
filters = PoolStringArray( "*.theme ; Theme Files" )
|
||||
|
@ -18,16 +18,14 @@ func _ready() -> void:
|
||||
# warning-ignore:return_value_discarded
|
||||
_timer.connect("timeout", self, "_on_timer_timeout")
|
||||
# warning-ignore:return_value_discarded
|
||||
config.connect("file_changed", self, "populate_entries")
|
||||
# warning-ignore:return_value_discarded
|
||||
config.connect("time_sheet_reloaded", self, "populate_entries")
|
||||
config.connect("time_sheet_loaded", self, "populate_entries")
|
||||
populate_entries()
|
||||
|
||||
|
||||
func populate_entries() -> void:
|
||||
clear()
|
||||
var tree_items_root := create_item()
|
||||
var item_entries_tree := config.timesheet.tree
|
||||
var item_entries_tree := config.timesheet.make_items_tree()
|
||||
_populate_from_entry(tree_items_root, item_entries_tree)
|
||||
_timer.start()
|
||||
#for item in entries:
|
||||
@ -56,18 +54,23 @@ func _populate_from_entry(tree_item_root: TreeItem, time_entry_item_root: TimeEn
|
||||
for time_entry_name in children:
|
||||
var time_entry_item: TimeEntryTreeItem = children[time_entry_name]
|
||||
var item := find_or_create_item(tree_item_root, time_entry_name)
|
||||
item.set_metadata(COL.TEXT, time_entry_item)
|
||||
item.set_metadata(COL.TEXT, time_entry_name)
|
||||
item.set_text(COL.TIME, time_entry_item.get_period())
|
||||
# warning-ignore:return_value_discarded
|
||||
time_entry_item.connect("end_time_updated", self, "_on_time_entry_changed_update_item", [time_entry_item, item])
|
||||
_populate_from_entry(item, time_entry_item)
|
||||
var has_at_least_one_running_entry := time_entry_item.find_active_time_entry() != null
|
||||
var texture := preload("res://assets/stop_small.svg") \
|
||||
if has_at_least_one_running_entry \
|
||||
else preload("res://assets/play_small.svg")
|
||||
item.add_button(COL.TIME, texture)
|
||||
var entries = time_entry_item_root.time_entries
|
||||
for entry_item in entries:
|
||||
var time_entry_item := entry_item as TimeEntryTreeItem
|
||||
var item := create_item(tree_item_root)
|
||||
var time_entry := time_entry_item.time_entry
|
||||
item.set_text(COL.TEXT, time_entry.start_time.to_string())
|
||||
item.set_metadata(COL.TEXT, time_entry_item)
|
||||
item.set_metadata(COL.TEXT, time_entry_item.time_entry.name)
|
||||
item.set_text(COL.TIME, time_entry_item.get_period())
|
||||
if time_entry.is_closed == false:
|
||||
var texture := preload("res://assets/stop_small.svg")
|
||||
@ -81,17 +84,10 @@ func _on_time_entry_changed_update_item(time_entry_item: TimeEntryTreeItem, item
|
||||
|
||||
|
||||
func _on_button_pressed(item: TreeItem, _column: int, _id: int) -> void:
|
||||
var time_entry_tree_item: TimeEntryTreeItem = item.get_metadata(COL.TEXT)
|
||||
if time_entry_tree_item == null:
|
||||
var task_name: String = item.get_metadata(COL.TEXT)
|
||||
if task_name == "":
|
||||
return
|
||||
var time_entry := time_entry_tree_item.time_entry
|
||||
if time_entry == null:
|
||||
return
|
||||
if time_entry.is_closed:
|
||||
return
|
||||
else:
|
||||
time_entry.close()
|
||||
item.erase_button(COL.TIME, 0)
|
||||
config.timesheet.toggle_entry(task_name)
|
||||
|
||||
|
||||
## Unecessary in Godot 4, can bre replaced with get_children()
|
||||
|
@ -10,6 +10,7 @@ onready var start_button := $"%StartButton" as Button
|
||||
onready var timer := $"%Timer" as Timer
|
||||
onready var audio_stream_player := $"%AudioStreamPlayer" as AudioStreamPlayer
|
||||
|
||||
var current_time_entry: TimeEntry
|
||||
|
||||
func _ready() -> void:
|
||||
# warning-ignore:return_value_discarded
|
||||
@ -18,13 +19,16 @@ func _ready() -> void:
|
||||
start_button.toggle_mode = true
|
||||
# warning-ignore:return_value_discarded
|
||||
start_button.connect("toggled", self, "_on_start_button_toggled")
|
||||
task_name_line_edit.text = config.last_task_name
|
||||
task_name_line_edit.text = config.current_task_name
|
||||
# warning-ignore:return_value_discarded
|
||||
task_name_line_edit.connect("text_changed", self, "_on_task_name_line_edit_text_changed")
|
||||
# warning-ignore:return_value_discarded
|
||||
config.connect("entry_started", self, "set_button_as_started")
|
||||
config.connect("time_sheet_loaded", self, "_on_time_sheet_loaded")
|
||||
update_timer_state()
|
||||
# warning-ignore:return_value_discarded
|
||||
config.connect("entry_stopped", self, "set_button_as_stopped")
|
||||
#config.connect("entry_started", self, "set_button_as_started")
|
||||
# warning-ignore:return_value_discarded
|
||||
#config.connect("entry_stopped", self, "set_button_as_stopped")
|
||||
# TODO: connect this:
|
||||
#time_entries_items_tree.item_selected.connect(
|
||||
# func item_selected() -> void:
|
||||
@ -34,25 +38,33 @@ func _ready() -> void:
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
config.timesheet.update()
|
||||
|
||||
time_label.text = config.timesheet.get_period()
|
||||
|
||||
## TODO: change this
|
||||
# var total_elapsed: int = config.timesheet.get_total_elapsed_seconds()
|
||||
# time_entries_items_tree.set_time_elapsed(total_elapsed)
|
||||
time_label.text = current_time_entry.get_period()
|
||||
|
||||
|
||||
func _on_start_button_toggled(is_on: bool) -> void:
|
||||
func _on_start_button_toggled(_is_on: bool) -> void:
|
||||
if config.sound_fx_on:
|
||||
audio_stream_player.play()
|
||||
if is_on:
|
||||
config.timesheet.start_entry(task_name_line_edit.text)
|
||||
if current_time_entry != null:
|
||||
config.timesheet.stop_entry(task_name_line_edit.text)
|
||||
else:
|
||||
config.timesheet.close_entry()
|
||||
config.timesheet.add_entry(task_name_line_edit.text)
|
||||
|
||||
|
||||
func _on_task_name_line_edit_text_changed(new_text: String) -> void:
|
||||
config.last_task_name = new_text
|
||||
config.current_task_name = new_text
|
||||
update_timer_state()
|
||||
|
||||
|
||||
func _on_time_sheet_loaded():
|
||||
print("loaded")
|
||||
update_timer_state()
|
||||
|
||||
func update_timer_state() -> void:
|
||||
current_time_entry = config.timesheet.get_active_entry_from_name(config.current_task_name)
|
||||
if current_time_entry:
|
||||
set_button_as_started()
|
||||
else:
|
||||
set_button_as_stopped()
|
||||
|
||||
|
||||
func set_button_as_stopped() -> void:
|
||||
@ -70,9 +82,3 @@ func set_button_as_started() -> void:
|
||||
start_button.hint_tooltip = tr(Consts.STOP)
|
||||
start_button.theme_type_variation = Consts.THEME_OVERRIDE_STOP
|
||||
timer.start()
|
||||
|
||||
|
||||
func set_initial_state() -> void:
|
||||
if config.timesheet.current_entry != null and config.timesheet.current_entry.closed == false:
|
||||
start_button.set_pressed_no_signal(true)
|
||||
set_button_as_started()
|
||||
|
Reference in New Issue
Block a user