@startuml

class App {
    main()
    start()
}

class TodoController {
    toDoModel: ToDoModel

    tableView: TableView
    colDescription: TableColumn
    colDueDate: TableColumn
    colCompleted: TableColumn

    txtNewDescription: TextField
    dtNewDueDate: DatePicker
    chkbx: CheckBox

    lvTitles: ListView

    chkbxShowIncomplete()
    chkbxShowComplete()

    showIncomplete: boolean
    showComplete: boolean

    txtAreaError: TextArea

    refreshTitleList()
    refreshToDoTasks()
    btnSaveClicked()
    btnLoadClicked()
    btnDeleteListClicked()
    btnDeleteToDoTaskClicked()
    btnMarkCompleteClicked()
    btnNewTaskClicked()
    listTitleClicked()
    btnCreateNewListClicked()
    btnSaveListClicked()
    chkbxShowIncompleteClicked()
    chkbxShowCompleteClicked()
    getTasksToDisplay()
    initialize()
}

class ToDoModel {
    ToDoList: Collection

    getToDoList()
    setToDoList()

    saveList()
    loadFiles()
    loadList()
    checkForDir()
    checkForFile()
}

class ToDoList {
    title: String
    toDoTasks: Collection

    ToDoList()

    getToDoTasks()
    setToDoTasks()

    getTitle()
    setTitle()

    addTask()
    removeTask()

    getIncompleteToDoTasks()
    getCompleteToDoTasks()
}

class ToDoTask {
    description: SimpleStringProperty
    dueDate: String
    complete: Boolean

    ToDoTask()

    getDescription()
    setDescription()
    getDueDate()
    setDueDate()
    getComplete()
    setComplete()
}

class FileLoader {
    files: ArrayList<String>
    lvFilesItems: ListView<String>

    loadList()
    loadFiles()
    getObservableFileList()
    initialize()
}

class FileCreator {
    txtNewListTitle: TextField

    btnCreateList()
}

App -- ToDoController
ToDoController -- ToDoModel
ToDoController -- FileLoader
ToDoController -- FileCreator
ToDoModel -- ToDoList
ToDoList -- ToDoTask

@enduml