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