summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id>2019-09-06 12:03:43 +0800
committerꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id>2019-09-06 12:03:43 +0800
commit7dadd495657a8baa67d26dcd6f961e1c523d2a2e (patch)
tree4e530d4b80be89a8fe4c6bbdb96405cfc96ae86c
parent015650a6fadd2592100950c57146fcc5c61764a2 (diff)
Task related views using the C++ model
-rw-r--r--kelakon.qrc3
-rw-r--r--main.cxx4
-rw-r--r--pages/CreateProfile.qml2
-rw-r--r--pages/TaskForm.ui.qml43
-rw-r--r--pages/TaskList.qml21
-rw-r--r--pages/TaskListForm.ui.qml88
-rw-r--r--tasklist.cxx12
-rw-r--r--tasklist.hxx28
8 files changed, 186 insertions, 15 deletions
diff --git a/kelakon.qrc b/kelakon.qrc
index ec00225..8588398 100644
--- a/kelakon.qrc
+++ b/kelakon.qrc
@@ -16,6 +16,9 @@
<file>pages/ConfirmPassword.qml</file>
<file>pages/CreateProfile.qml</file>
<file>pages/CreateProfileForm.ui.qml</file>
+ <file>pages/TaskForm.ui.qml</file>
+ <file>pages/TaskList.qml</file>
+ <file>pages/TaskListForm.ui.qml</file>
<file>assets/photo_camera_24px.svg</file>
<file>pages/Home.qml</file>
<file>pages/HomeForm.ui.qml</file>
diff --git a/main.cxx b/main.cxx
index db21e08..9437396 100644
--- a/main.cxx
+++ b/main.cxx
@@ -1,7 +1,9 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
+#include <QtQml>
#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<int, QByteArray> TaskList::roleNames() const
{
return QHash<int, QByteArray>{
- {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 <QAbstractListModel>
-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;