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