From 7dadd495657a8baa67d26dcd6f961e1c523d2a2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=8C=20=EA=A6=AB=EA=A6=B6=20=EA=A6=8F=EA=A7=80?= =?UTF-8?q?=EA=A6=A6=EA=A6=BF=20=EA=A6=A7=20=EA=A6=AE=20=EA=A6=91=20?= =?UTF-8?q?=EA=A6=A9=20=EA=A6=AD=EA=A7=80?= Date: Fri, 6 Sep 2019 12:03:43 +0800 Subject: Task related views using the C++ model --- kelakon.qrc | 3 ++ main.cxx | 4 +++ pages/CreateProfile.qml | 2 +- pages/TaskForm.ui.qml | 43 +++++++++++++++++++++++ pages/TaskList.qml | 21 +++++++++++ pages/TaskListForm.ui.qml | 88 +++++++++++++++++++++++++++++++++++++++++++++++ tasklist.cxx | 12 +++---- tasklist.hxx | 28 ++++++++++----- 8 files changed, 186 insertions(+), 15 deletions(-) create mode 100644 pages/TaskForm.ui.qml create mode 100644 pages/TaskList.qml create mode 100644 pages/TaskListForm.ui.qml diff --git a/kelakon.qrc b/kelakon.qrc index ec00225..8588398 100644 --- a/kelakon.qrc +++ b/kelakon.qrc @@ -16,6 +16,9 @@ pages/ConfirmPassword.qml pages/CreateProfile.qml pages/CreateProfileForm.ui.qml + pages/TaskForm.ui.qml + pages/TaskList.qml + pages/TaskListForm.ui.qml assets/photo_camera_24px.svg pages/Home.qml pages/HomeForm.ui.qml diff --git a/main.cxx b/main.cxx index db21e08..9437396 100644 --- a/main.cxx +++ b/main.cxx @@ -1,7 +1,9 @@ #include #include +#include #include "user.hxx" #include "controller.hxx" +#include "tasklist.hxx" int main(int argc, char* argv[]) { @@ -21,6 +23,8 @@ int main(int argc, char* argv[]) auto appWindow = rootObjects[0]; Controller controller{appWindow}; + TaskList taskList; + engine.rootContext()->setContextProperty("taskList", &taskList); return app.exec(); } diff --git a/pages/CreateProfile.qml b/pages/CreateProfile.qml index 048c861..e4d6f78 100644 --- a/pages/CreateProfile.qml +++ b/pages/CreateProfile.qml @@ -11,7 +11,7 @@ CreateProfileForm { } skipButton { onClicked: { - stackView.push("qrc:/pages/Home.qml") + stackView.push("qrc:/pages/TaskList.qml") } } } diff --git a/pages/TaskForm.ui.qml b/pages/TaskForm.ui.qml new file mode 100644 index 0000000..0a08736 --- /dev/null +++ b/pages/TaskForm.ui.qml @@ -0,0 +1,43 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Layouts 1.12 + +Item { + property alias task: task + property alias checkBox: checkBox + width: 360 + + RowLayout { + id: task + height: 72 + anchors.topMargin: 8 + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + spacing: 8 + + CheckBox { + id: checkBox + height: 54 + text: qsTr("This is a task title") + padding: 8 + rightPadding: 16 + leftPadding: 16 + bottomPadding: 16 + topPadding: 16 + Layout.fillWidth: true + font.family: "Google Sans" + font.pointSize: 16 + font.weight: Font.Medium + spacing: 24 + } + RoundButton { + id: chevronRight + flat: true + icon.name: "chevron-right-icon" + icon.source: "/assets/chevron-right-24px.svg" + icon.color: "#99000000" + } + } +} diff --git a/pages/TaskList.qml b/pages/TaskList.qml new file mode 100644 index 0000000..712eb45 --- /dev/null +++ b/pages/TaskList.qml @@ -0,0 +1,21 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 + +TaskListForm { + objectName: "taskList" + model: taskList + delegate: TaskForm { + width: parent.width + height: task.height + + checkBox.text: subject + } + + menuButton { + onClicked: { + drawer.visible = !drawer.visible + } + } + + ScrollBar.vertical: ScrollBar {} +} diff --git a/pages/TaskListForm.ui.qml b/pages/TaskListForm.ui.qml new file mode 100644 index 0000000..dd2d683 --- /dev/null +++ b/pages/TaskListForm.ui.qml @@ -0,0 +1,88 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Controls.Material 2.12 +import QtQuick.Layouts 1.3 + +ListView { + width: 362 + spacing: 12 + property alias menuButton: menuButton + + Rectangle { + id: rectangle + anchors.fill: parent + z: -1 + + ToolBar { + id: toolbar + height: 56 + font.family: "Google Sans" + anchors.top: parent.top + anchors.topMargin: 0 + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + background: Rectangle { + color: "#FFF" + } + + RowLayout { + anchors.fill: parent + spacing: 8 + + ToolButton { + id: menuButton + icon.name: "menu-icon" + icon.source: "/assets/menu-24px.svg" + highlighted: true + } + Label { + id: title + text: qsTr("Today") + font.weight: Font.Medium + wrapMode: Text.WordWrap + color: "#000000" + font.family: "Google Sans" + font.pointSize: 20 + elide: Label.ElideRight + horizontalAlignment: Text.AlignLeft + verticalAlignment: Qt.AlignVCenter + Layout.fillWidth: true + } + ToolButton { + anchors.right: parent.right + } + } + } + + RoundButton { + id: roundButton + width: 144 + spacing: 8 + height: 64 + + text: qsTr("New task") + padding: 16 + font.capitalization: Font.MixedCase + font.family: "Google Sans" + font.pointSize: 16 + font.weight: Font.Medium + + rightPadding: 24 + leftPadding: 16 + bottomPadding: 16 + topPadding: 16 + autoExclusive: false + focusPolicy: Qt.NoFocus + anchors.bottom: parent.bottom + anchors.bottomMargin: 16 + anchors.right: parent.right + anchors.rightMargin: 16 + highlighted: true + + icon.name: "add-icon" + icon.source: "/assets/add-24px.svg" + } + } +} diff --git a/tasklist.cxx b/tasklist.cxx index 5850584..4810c5b 100644 --- a/tasklist.cxx +++ b/tasklist.cxx @@ -14,10 +14,10 @@ QVariant TaskList::data(QModelIndex const& index, int role) const auto task = tasks[row]; switch (role) { - case Task::IdRole: - return task.id; - case Task::SubjectRole: - return task.subject; + case IdRole: + return task.id(); + case SubjectRole: + return task.subject(); default: return QVariant(); } @@ -26,8 +26,8 @@ QVariant TaskList::data(QModelIndex const& index, int role) const QHash TaskList::roleNames() const { return QHash{ - {Task::IdRole, "id"}, - {Task::SubjectRole, "subject"} + {IdRole, "id"}, + {SubjectRole, "subject"} }; } diff --git a/tasklist.hxx b/tasklist.hxx index 716c365..adece4d 100644 --- a/tasklist.hxx +++ b/tasklist.hxx @@ -3,14 +3,19 @@ #include -struct Task +class Task { - enum TaskRoles { - IdRole = Qt::UserRole + 1, - SubjectRole - }; - QString id; - QString subject; + public: + Task(unsigned int id, QString subject) : + m_id{id}, + m_subject{subject} + {} + unsigned int id() const { return m_id; } + QString const& subject() const { return m_subject; } + + private: + unsigned int m_id; + QString m_subject; }; class TaskList : public QAbstractListModel @@ -19,7 +24,14 @@ class TaskList : public QAbstractListModel Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged) public: - explicit TaskList(QObject* parent = nullptr) : QAbstractListModel{parent} {} + enum TaskRoles { + IdRole = Qt::UserRole + 1, + SubjectRole + }; + explicit TaskList(QObject* parent = nullptr) : QAbstractListModel{parent} + { + addTask(Task{1, "Task 1"}); + } int rowCount(QModelIndex const& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; -- cgit v1.2.3