153 lines
4.2 KiB
Lua
153 lines
4.2 KiB
Lua
--[[
|
|
Business logic for manipulating subtasks
|
|
]]--
|
|
|
|
function todo.on_save_new_subtask_click(player, task_id)
|
|
|
|
local task = todo.get_task_by_id(task_id)
|
|
|
|
local task_table = todo.get_task_table(player)
|
|
local textfield = task_table["todo_main_subtask_new_text_" .. task_id]
|
|
|
|
todo.save_subtask_to_task(task, textfield.text)
|
|
|
|
todo.update_main_task_list_for_everyone()
|
|
end
|
|
|
|
function todo.save_subtask_to_task(task, text)
|
|
if (not task.subtasks) then
|
|
task.subtasks = {}
|
|
task.subtasks.open = {}
|
|
task.subtasks.done = {}
|
|
task.subtasks.next_id = 1
|
|
end
|
|
|
|
local subtask = {}
|
|
subtask.id = task.subtasks.next_id
|
|
task.subtasks.next_id = task.subtasks.next_id + 1
|
|
|
|
subtask.task = text
|
|
|
|
table.insert(task.subtasks.open, subtask)
|
|
|
|
return subtask
|
|
end
|
|
|
|
function todo.on_edit_subtask_click(player, task_id, subtask_id)
|
|
local task = todo.get_task_by_id(task_id)
|
|
local subtask = todo.get_subtask_by_id(task, subtask_id)
|
|
|
|
todo.create_edit_subtask_dialog(player, task.id, subtask)
|
|
end
|
|
|
|
function todo.on_edit_subtask_cancel_click(player)
|
|
local dialog = todo.get_edit_subtask_dialog(player)
|
|
if (dialog) then
|
|
dialog.destroy()
|
|
end
|
|
end
|
|
|
|
function todo.on_edit_subtask_save_click(player, task_id, subtask_id)
|
|
local dialog = todo.get_edit_subtask_dialog(player)
|
|
|
|
local new_text = dialog.todo_edit_subtask_text.text
|
|
|
|
todo.update_subtask(task_id, subtask_id, new_text)
|
|
|
|
dialog.destroy()
|
|
|
|
todo.update_main_task_list_for_everyone()
|
|
end
|
|
|
|
function todo.update_subtask(task_id, subtask_id, new_text)
|
|
local task = todo.get_task_by_id(task_id)
|
|
local subtask = todo.get_subtask_by_id(task, subtask_id)
|
|
|
|
subtask.task = new_text
|
|
end
|
|
|
|
function todo.on_subtask_checkbox_click(task_id, subtask_id)
|
|
local task = todo.get_task_by_id(task_id)
|
|
local _, is_completed = todo.get_subtask_by_id(task, subtask_id)
|
|
|
|
if (is_completed) then
|
|
todo.mark_subtask_open(task, subtask_id)
|
|
else
|
|
todo.mark_subtask_complete(task, subtask_id)
|
|
end
|
|
|
|
todo.update_main_task_list_for_everyone()
|
|
end
|
|
|
|
function todo.mark_subtask_complete(task, subtask_id)
|
|
todo.log("Marking subtask [" .. subtask_id .. "] as completed.")
|
|
for i, subtask in ipairs(task.subtasks.open) do
|
|
if (subtask.id == subtask_id) then
|
|
local t = table.remove(task.subtasks.open, i)
|
|
|
|
todo.log("Adding task [" .. t.id .. "] to done list.")
|
|
table.insert(task.subtasks.done, t)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function todo.mark_subtask_open(task, subtask_id)
|
|
todo.log("Marking subtask [" .. subtask_id .. "] as open.")
|
|
for i, subtask in ipairs(task.subtasks.done) do
|
|
if (subtask.id == subtask_id) then
|
|
local t = table.remove(task.subtasks.done, i)
|
|
|
|
todo.log("Adding task [" .. t.id .. "] to open list.")
|
|
table.insert(task.subtasks.open, t)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function todo.on_main_subtask_move_up_click(task_id, subtask_id)
|
|
todo.move_subtask(task_id, subtask_id, -1)
|
|
|
|
todo.update_main_task_list_for_everyone()
|
|
end
|
|
|
|
function todo.on_main_subtask_move_down_click(task_id, subtask_id)
|
|
todo.move_subtask(task_id, subtask_id, 1)
|
|
|
|
todo.update_main_task_list_for_everyone()
|
|
end
|
|
|
|
function todo.move_subtask(task_id, subtask_id, modifier)
|
|
local task = todo.get_task_by_id(task_id)
|
|
for i, subtask in pairs(task.subtasks.open) do
|
|
if (subtask.id == subtask_id) then
|
|
local copy = task.subtasks.open[i + modifier]
|
|
task.subtasks.open[i + modifier] = subtask
|
|
task.subtasks.open[i] = copy
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function todo.on_subtask_delete_click(task_id, subtask_id)
|
|
|
|
local task = todo.get_task_by_id(task_id)
|
|
local _, is_completed = todo.get_subtask_by_id(task, subtask_id)
|
|
|
|
if (is_completed) then
|
|
todo.delete_subtask(task.subtasks.done, subtask_id)
|
|
else
|
|
todo.delete_subtask(task.subtasks.open, subtask_id)
|
|
end
|
|
|
|
todo.update_main_task_list_for_everyone()
|
|
end
|
|
|
|
function todo.delete_subtask(list, id)
|
|
for i, subtask in ipairs(list) do
|
|
if (subtask.id == id) then
|
|
table.remove(list, i)
|
|
break
|
|
end
|
|
end
|
|
end |