tasks list working
This commit is contained in:
		
							
								
								
									
										112
									
								
								ui/tasks_list.gd
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								ui/tasks_list.gd
									
									
									
									
									
								
							@@ -7,55 +7,91 @@ enum COL{
 | 
			
		||||
 | 
			
		||||
var config: ConfigManager = preload("res://config_manager.tres")
 | 
			
		||||
 | 
			
		||||
var current_item: TreeItem
 | 
			
		||||
var _timer := Timer.new()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func _ready() -> void:
 | 
			
		||||
	hide_root = true
 | 
			
		||||
	add_child(_timer)
 | 
			
		||||
	# warning-ignore:return_value_discarded
 | 
			
		||||
	connect("button_pressed", self, "_on_button_pressed")
 | 
			
		||||
	# 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")
 | 
			
		||||
	populate_entries()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func populate_entries() -> void:
 | 
			
		||||
	clear()
 | 
			
		||||
	var _root := create_item()
 | 
			
		||||
	var entries_names := config.timesheet.entries_names
 | 
			
		||||
	for entry_name in entries_names:
 | 
			
		||||
	var tree_items_root := create_item()
 | 
			
		||||
	var item_entries_tree := config.timesheet.tree
 | 
			
		||||
	_populate_from_entry(tree_items_root, item_entries_tree)
 | 
			
		||||
	_timer.start()
 | 
			
		||||
	#for item in entries:
 | 
			
		||||
		# warning-ignore:return_value_discarded
 | 
			
		||||
		append_name_to_tree(entry_name, entries_names[entry_name])
 | 
			
		||||
	#	set_entry(entry)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# warning-ignore:unused_argument
 | 
			
		||||
func set_time_elapsed(total_elapsed: int) -> void:
 | 
			
		||||
	current_item.set_text(COL.TIME, TimeEntry.time_to_period(total_elapsed))
 | 
			
		||||
	current_item.set_metadata(COL.TIME, total_elapsed)
 | 
			
		||||
	#current_item.set_text(COL.TIME, TimeEntry.time_to_period(total_elapsed))
 | 
			
		||||
	#current_item.set_metadata(COL.TIME, total_elapsed)
 | 
			
		||||
	pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func set_current_item(task_name: String) -> void:
 | 
			
		||||
	current_item = append_name_to_tree(task_name, 0)
 | 
			
		||||
func set_current_item(_task_name: String) -> void:
 | 
			
		||||
	#current_item = append_name_to_tree(task_name, 0)
 | 
			
		||||
	pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func get_current_text() -> String:
 | 
			
		||||
	var item := get_selected()
 | 
			
		||||
	if not item:
 | 
			
		||||
		return ""
 | 
			
		||||
	
 | 
			
		||||
	var resp = item.get_metadata(COL.TEXT)
 | 
			
		||||
	if resp is String:
 | 
			
		||||
		return resp
 | 
			
		||||
	return ""
 | 
			
		||||
func _on_timer_timeout() -> void:
 | 
			
		||||
	config.timesheet.update()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Adds a new item to the tree, or returns the old item if it exists
 | 
			
		||||
func append_name_to_tree(task_name: String, total_elapsed := 0) -> TreeItem:
 | 
			
		||||
	var item := get_root()
 | 
			
		||||
	for item_name in task_name.split("/"):
 | 
			
		||||
		item.collapsed = false
 | 
			
		||||
		item = find_item(item, item_name, true)
 | 
			
		||||
	item.set_metadata(COL.TEXT, task_name)
 | 
			
		||||
	item.set_text(COL.TIME, TimeEntry.time_to_period(total_elapsed))
 | 
			
		||||
	item.set_metadata(COL.TIME, total_elapsed)
 | 
			
		||||
	scroll_to_item(item)
 | 
			
		||||
	return item
 | 
			
		||||
func _populate_from_entry(tree_item_root: TreeItem, time_entry_item_root: TimeEntryTreeItem):
 | 
			
		||||
	var children := time_entry_item_root.children
 | 
			
		||||
	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_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 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_text(COL.TIME, time_entry_item.get_period())
 | 
			
		||||
		if time_entry.is_closed == false:
 | 
			
		||||
			var texture := preload("res://assets/stop_small.svg")
 | 
			
		||||
			item.add_button(COL.TIME, texture)
 | 
			
		||||
		# warning-ignore:return_value_discarded
 | 
			
		||||
		time_entry_item.connect("end_time_updated", self, "_on_time_entry_changed_update_item", [time_entry_item, item])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func _on_time_entry_changed_update_item(time_entry_item: TimeEntryTreeItem, item: TreeItem) -> void:
 | 
			
		||||
	item.set_text(COL.TIME, time_entry_item.get_period())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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:
 | 
			
		||||
		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)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Unecessary in Godot 4, can bre replaced with get_children()
 | 
			
		||||
@@ -73,13 +109,17 @@ static func _get_tree_item_children(item: TreeItem):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Finds an item in the tree by text
 | 
			
		||||
func find_item(root: TreeItem, item_name: String, or_create: bool) -> TreeItem:
 | 
			
		||||
func find_item(root: TreeItem, item_name: String) -> TreeItem:
 | 
			
		||||
	for child in _get_tree_item_children(root):
 | 
			
		||||
		if child.get_text(COL.TEXT) == item_name:
 | 
			
		||||
			return child
 | 
			
		||||
	if or_create:
 | 
			
		||||
		var child := create_item(root)
 | 
			
		||||
		child.set_text(COL.TEXT, item_name)
 | 
			
		||||
		child.set_text(COL.TIME, Consts.NO_TIME)
 | 
			
		||||
		return child
 | 
			
		||||
	return null
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func find_or_create_item(root: TreeItem, item_name: String) -> TreeItem:
 | 
			
		||||
	var child := find_item(root, item_name)
 | 
			
		||||
	if child != null:
 | 
			
		||||
		return child
 | 
			
		||||
	child = create_item(root)
 | 
			
		||||
	child.set_text(COL.TEXT, item_name)
 | 
			
		||||
	return child
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ onready var audio_stream_player := $"%AudioStreamPlayer" as AudioStreamPlayer
 | 
			
		||||
func _ready() -> void:
 | 
			
		||||
	# warning-ignore:return_value_discarded
 | 
			
		||||
	timer.connect("timeout", self, "_on_timer_timeout")
 | 
			
		||||
	start_button.tooltip_text = tr(Consts.START)
 | 
			
		||||
	start_button.hint_tooltip = tr(Consts.START)
 | 
			
		||||
	start_button.toggle_mode = true
 | 
			
		||||
	# warning-ignore:return_value_discarded
 | 
			
		||||
	start_button.connect("toggled", self, "_on_start_button_toggled")
 | 
			
		||||
@@ -57,7 +57,7 @@ func _on_task_name_line_edit_text_changed(new_text: String) -> void:
 | 
			
		||||
 | 
			
		||||
func set_button_as_stopped() -> void:
 | 
			
		||||
	start_button.set_pressed_no_signal(false)
 | 
			
		||||
	start_button.tooltip_text = tr(Consts.START)
 | 
			
		||||
	start_button.hint_tooltip = tr(Consts.START)
 | 
			
		||||
	time_label.text = Consts.NO_TIME
 | 
			
		||||
	start_button.theme_type_variation = Consts.THEME_OVERRIDE_START
 | 
			
		||||
	timer.stop()
 | 
			
		||||
@@ -67,7 +67,7 @@ func set_button_as_started() -> void:
 | 
			
		||||
	## TODO: make this independent
 | 
			
		||||
	# time_entries_items_tree.set_current_item(config.timesheet.current_entry.name)
 | 
			
		||||
	start_button.set_pressed_no_signal(true)
 | 
			
		||||
	start_button.tooltip_text = tr(Consts.STOP)
 | 
			
		||||
	start_button.hint_tooltip = tr(Consts.STOP)
 | 
			
		||||
	start_button.theme_type_variation = Consts.THEME_OVERRIDE_STOP
 | 
			
		||||
	timer.start()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user