diff --git a/icons/breeze/icons/actions/16/mail-mark-task-inverted.svg b/icons/breeze/icons/actions/16/mail-mark-task-inverted.svg
new file mode 100644
index 00000000..c6017742
--- /dev/null
+++ b/icons/breeze/icons/actions/16/mail-mark-task-inverted.svg
@@ -0,0 +1,13 @@
+
diff --git a/icons/breeze/icons/actions/16/mail-mark-task.svg b/icons/breeze/icons/actions/16/mail-mark-task.svg
new file mode 100644
index 00000000..5b4104a1
--- /dev/null
+++ b/icons/breeze/icons/actions/16/mail-mark-task.svg
@@ -0,0 +1,13 @@
+
diff --git a/icons/breeze/icons/actions/16/mail-task-inverted.svg b/icons/breeze/icons/actions/16/mail-task-inverted.svg
new file mode 120000
index 00000000..a5be7a27
--- /dev/null
+++ b/icons/breeze/icons/actions/16/mail-task-inverted.svg
@@ -0,0 +1 @@
+mail-mark-task-inverted.svg
\ No newline at end of file
diff --git a/icons/breeze/icons/actions/16/mail-task.svg b/icons/breeze/icons/actions/16/mail-task.svg
new file mode 120000
index 00000000..c516e4b6
--- /dev/null
+++ b/icons/breeze/icons/actions/16/mail-task.svg
@@ -0,0 +1 @@
+mail-mark-task.svg
\ No newline at end of file
diff --git a/icons/breeze/icons/actions/22/mail-mark-task-inverted.svg b/icons/breeze/icons/actions/22/mail-mark-task-inverted.svg
new file mode 100644
index 00000000..0fc3b40b
--- /dev/null
+++ b/icons/breeze/icons/actions/22/mail-mark-task-inverted.svg
@@ -0,0 +1,14 @@
+
diff --git a/icons/breeze/icons/actions/22/mail-mark-task.svg b/icons/breeze/icons/actions/22/mail-mark-task.svg
new file mode 100644
index 00000000..53d2d2c2
--- /dev/null
+++ b/icons/breeze/icons/actions/22/mail-mark-task.svg
@@ -0,0 +1,14 @@
+
diff --git a/icons/breeze/icons/actions/22/mail-task-inverted.svg b/icons/breeze/icons/actions/22/mail-task-inverted.svg
new file mode 120000
index 00000000..a5be7a27
--- /dev/null
+++ b/icons/breeze/icons/actions/22/mail-task-inverted.svg
@@ -0,0 +1 @@
+mail-mark-task-inverted.svg
\ No newline at end of file
diff --git a/icons/breeze/icons/actions/22/mail-task.svg b/icons/breeze/icons/actions/22/mail-task.svg
new file mode 120000
index 00000000..c516e4b6
--- /dev/null
+++ b/icons/breeze/icons/actions/22/mail-task.svg
@@ -0,0 +1 @@
+mail-mark-task.svg
\ No newline at end of file
diff --git a/icons/copybreeze.sh b/icons/copybreeze.sh
index 693a40c8..b7c85229 100755
--- a/icons/copybreeze.sh
+++ b/icons/copybreeze.sh
@@ -1,100 +1,101 @@
#!/usr/bin/env python2
import sh
import subprocess
import os
from shutil import copyfile, copy2
from os import path
wantedIcons = [
"application-menu.svg",
"dialog-cancel.svg",
"dialog-ok.svg",
"document-decrypt.svg",
"document-edit.svg",
"document-encrypt.svg",
"document-save.svg",
"document-sign.svg",
"edit-delete.svg",
"edit-find.svg",
"edit-undo.svg",
"error.svg",
"folder.svg",
"im-user.svg",
"mail-mark-important.svg",
"mail-mark-unread-new.svg",
"mail-reply-sender.svg",
"mail-forward.svg",
"mail-folder-outbox.svg",
"network-disconnect.svg",
"view-refresh.svg",
"go-down.svg",
"go-up.svg",
"go-previous.svg",
"mail-message.svg",
"list-add.svg",
"list-remove.svg",
"checkbox.svg",
"edit-copy.svg",
"password-show-on.svg",
"password-show-off.svg",
"format-text-bold-symbolic.svg",
"format-text-italic-symbolic.svg",
"format-text-underline-symbolic.svg",
"kdocumentinfo.svg",
- "group.svg"
+ "group.svg",
+ "mail-task.svg"
]
def ensure_dir(file_path):
directory = os.path.dirname(file_path)
if not os.path.exists(directory):
os.makedirs(directory)
def copyFile(rootDir, dir, file):
print("Copy file " + root + ", " + dir + ", " + file)
reldir = dir.replace(path.join(rootDir, "icons"), "")
src = os.path.join(dir, file)
if os.path.islink(src):
# We're dealing with a symlink
linkto = os.readlink(src)
targetRelpath = path.join(os.path.dirname(src), linkto)
targetReldir = os.path.dirname(targetRelpath)
# First recursively copy target
copyFile(rootDir, targetReldir, targetRelpath.replace(targetReldir + "/", ""))
#Create symlinks for normal and dark version
dst = "./breeze/icons" + path.join(reldir, file)
if not os.path.exists(dst):
ensure_dir(dst)
os.symlink(linkto, dst)
invertedDst = "./breeze/icons" + path.join(reldir, file.replace(".svg", "-inverted.svg"))
if not os.path.exists(invertedDst):
ensure_dir(invertedDst)
os.symlink(linkto.replace(".svg", "-inverted.svg"), invertedDst)
else:
# A regular icon, just copy normal and dark version
dst = "./breeze/icons" + path.join(reldir, file)
if not os.path.exists(dst):
print("Copying: " + path.join(dir, file) + " to " + dst)
ensure_dir(dst)
copy2(src, dst)
invertedDst = "./breeze/icons" + path.join(reldir, file.replace(".svg", "-inverted.svg"))
if not os.path.exists(invertedDst):
print("Copying: " + src.replace("icons", "icons-dark") + " to " + invertedDst)
ensure_dir(invertedDst)
copy2(src.replace("icons", "icons-dark"), invertedDst)
dir="upstreamBreeze"
if not os.path.exists(dir):
sh.git.clone("--depth", "1", "git://anongit.kde.org/breeze-icons.git", dir)
dirToWalk = dir + "/icons"
for root, dirs, files in os.walk(dirToWalk):
for file in files:
if any(file == s for s in wantedIcons):
copyFile(dir, root, file)
elif "mimetypes" in root: #Except the explicitly mentioned icons we'll also want all mimetypes
copyFile(dir, root, file)
diff --git a/views/todo/main.qml b/views/todo/main.qml
new file mode 100644
index 00000000..4065b876
--- /dev/null
+++ b/views/todo/main.qml
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2018 Christian Mollekopf,
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.7
+import QtQuick.Controls 2.0
+import QtQuick.Window 2.0
+
+import org.kube.framework 1.0 as Kube
+import org.kube.test 1.0
+import "qml"
+
+ApplicationWindow {
+ id: app
+ height: Screen.desktopAvailableHeight * 0.8
+ width: Screen.desktopAvailableWidth * 0.8
+
+ Component.onCompleted: {
+ var initialState = {
+ accounts: [{
+ id: "account1",
+ name: "Test Account"
+ }],
+ identities: [{
+ account: "account1",
+ name: "Test Identity",
+ address: "identity@example.org"
+ }],
+ resources: [{
+ id: "resource1",
+ account: "account1",
+ type: "dummy"
+ },
+ {
+ id: "resource2",
+ account: "account1",
+ type: "mailtransport"
+ }],
+ folders: [{
+ id: "folder1",
+ resource: "resource1",
+ name: "Folder 1",
+ specialpurpose: ["inbox"],
+ mails: [{
+ resource: "resource1",
+ messageId: "",
+ date: "2017-07-24T15:46:29",
+ subject: "subject1",
+ body: "body",
+ to: ["to@example.org"],
+ cc: ["cc@example.org"],
+ bcc: ["bcc@example.org"],
+ },
+ {
+ resource: "resource1",
+ inReplyTo: "",
+ date: "2017-07-24T16:46:29",
+ subject: "subject2",
+ body: "body2",
+ to: ["to@example.org"],
+ },
+ {
+ resource: "resource1",
+ date: "2017-07-24T18:46:29",
+ subject: "subject4",
+ body: "body4",
+ to: ["to@example.org"],
+ },
+ ]
+ }],
+ }
+ TestStore.setup(initialState)
+ }
+
+ View {
+ anchors.fill: parent
+ }
+}
diff --git a/views/todo/metadata.json b/views/todo/metadata.json
new file mode 100644
index 00000000..669f85a6
--- /dev/null
+++ b/views/todo/metadata.json
@@ -0,0 +1,4 @@
+{
+ "icon": "mail-task",
+ "tooltip": "Get things done!"
+}
diff --git a/views/todo/qml/View.qml b/views/todo/qml/View.qml
new file mode 100644
index 00000000..ef3cc0bd
--- /dev/null
+++ b/views/todo/qml/View.qml
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 Christian Mollekopf,
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.4
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import org.kube.framework 1.0 as Kube
+
+FocusScope {
+ id: root
+
+ Kube.Label {
+ anchors {
+ centerIn: parent
+ }
+ text: "ToDo"
+ }
+}
diff --git a/views/todo/tests/tst_todo.qml b/views/todo/tests/tst_todo.qml
new file mode 100644
index 00000000..46f7dba2
--- /dev/null
+++ b/views/todo/tests/tst_todo.qml
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 Christian Mollekopf
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import QtQuick 2.7
+import QtTest 1.0
+import "../qml"
+
+TestCase {
+ width: 400
+ height: 400
+ name: "Todo"
+
+ View {
+ id: view
+ }
+
+ function test_start() {
+ verify(view)
+ }
+}