remove native dialogs
This commit is contained in:
		@@ -28,15 +28,9 @@ func load_file() -> bool:
 | 
			
		||||
		entries.append(entry)
 | 
			
		||||
	file.close()
 | 
			
		||||
	
 | 
			
		||||
	entries.sort_custom(self, "_sort_entries")
 | 
			
		||||
	
 | 
			
		||||
	return true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func _sort_entries(a: TimeEntry, b: TimeEntry) -> bool:
 | 
			
		||||
	return a.name < b.name
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func get_active_entry_from_name(task_name: String) -> TimeEntry:
 | 
			
		||||
	for _entry in entries:
 | 
			
		||||
		var current_time_entry := _entry as TimeEntry
 | 
			
		||||
@@ -103,9 +97,11 @@ func save() -> void:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func make_items_tree() -> TimeEntryTreeItem:
 | 
			
		||||
	var sorted_entries := EntrySorter.new(entries).sort_by([["name"], ["start_date", true]]).entries
 | 
			
		||||
	
 | 
			
		||||
	var tree := TimeEntryTreeItem.new()
 | 
			
		||||
	for entry_index in entries.size():
 | 
			
		||||
		var entry := entries[entry_index] as TimeEntry
 | 
			
		||||
	for entry_index in sorted_entries.size():
 | 
			
		||||
		var entry := sorted_entries[entry_index] as TimeEntry
 | 
			
		||||
		var parts := entry.name.split("/")
 | 
			
		||||
		var repo: TimeEntryTreeItem = tree.get_child(parts, true)
 | 
			
		||||
		repo.append(entry)
 | 
			
		||||
@@ -119,3 +115,56 @@ static func restore(file_path: String) -> TimeSheet:
 | 
			
		||||
	if success:
 | 
			
		||||
		return timesheet
 | 
			
		||||
	return null
 | 
			
		||||
 | 
			
		||||
class EntrySorter:
 | 
			
		||||
	
 | 
			
		||||
	var entries: Array
 | 
			
		||||
	var _sorters := PoolStringArray()
 | 
			
		||||
	
 | 
			
		||||
	func _init(initial_entries: Array) -> void:
 | 
			
		||||
		 entries = initial_entries.duplicate()
 | 
			
		||||
	
 | 
			
		||||
	func by_name(reverse := false) -> EntrySorter:
 | 
			
		||||
		return sort_by_one("name", reverse)
 | 
			
		||||
	
 | 
			
		||||
	func by_date(reverse := false) -> EntrySorter:
 | 
			
		||||
		return sort_by_one("date", reverse)
 | 
			
		||||
 | 
			
		||||
	func sort_by_one(property: String, reverse := false) -> EntrySorter:
 | 
			
		||||
		var method_name := "_by_%s"%[property]
 | 
			
		||||
		assert(has_method(method_name), "%s is not a valid sorting property"%[property])
 | 
			
		||||
		entries.sort_custom(self, method_name)
 | 
			
		||||
		if reverse:
 | 
			
		||||
			entries.invert()
 | 
			
		||||
		return self
 | 
			
		||||
 | 
			
		||||
	func sort_by(initial_sorters: Array) -> EntrySorter:
 | 
			
		||||
		for item in initial_sorters:
 | 
			
		||||
			var property = item[0]
 | 
			
		||||
			var reversed = item[1] if item.size() > 1 else false
 | 
			
		||||
			var method_name := "_by_%s"%[property]
 | 
			
		||||
			assert(has_method(method_name), "%s is not a valid sorting property"%[property])
 | 
			
		||||
			assert(reversed == null or reversed is bool, "The second item is not a boolean")
 | 
			
		||||
			return self
 | 
			
		||||
		_sorters = initial_sorters
 | 
			
		||||
		entries.sort_custom(self, "__by_multiple")
 | 
			
		||||
		_sorters = PoolStringArray()
 | 
			
		||||
		return self
 | 
			
		||||
 | 
			
		||||
	func __by_multiple(a: TimeEntry, b: TimeEntry) -> bool:
 | 
			
		||||
		for item in _sorters:
 | 
			
		||||
			var property = item[0]
 | 
			
		||||
			var reversed = item[1]
 | 
			
		||||
			var method_name := "_by_%s"%[property]
 | 
			
		||||
			var result: bool = call(method_name, a, b)
 | 
			
		||||
			if reversed:
 | 
			
		||||
				result = not result
 | 
			
		||||
			if result == false:
 | 
			
		||||
				return false
 | 
			
		||||
		return true
 | 
			
		||||
	
 | 
			
		||||
	func _by_name(a: TimeEntry, b: TimeEntry) -> bool:
 | 
			
		||||
		return a.name < b.name
 | 
			
		||||
	
 | 
			
		||||
	func _by_date(a: TimeEntry, b: TimeEntry) -> bool:
 | 
			
		||||
		return a.start_time < b.start_time
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user