Introduced styles - first version of Widgets
[opentodolist:opentodolist.git] / OpenTodoListCore / abstracttodo.h
1 /*
2  *  OpenTodoList - A todo and task manager
3  *  Copyright (C) 2013  Martin H√∂her <martin@rpdev.net>
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef ABSTRACTTODO_H
20 #define ABSTRACTTODO_H
21
22 #include "opentodolistcore_global.h"
23 #include "todosortfiltermodel.h"
24
25 #include <QDate>
26 #include <QObject>
27 #include <QUuid>
28
29 class AbstractTodoList;
30
31 class OPENTODOLISTCORESHARED_EXPORT AbstractTodo : public QObject
32 {
33     Q_OBJECT
34     Q_PROPERTY( QUuid id READ id CONSTANT )
35     Q_PROPERTY( QString title READ title WRITE setTitle NOTIFY titleChanged )
36     Q_PROPERTY( QString description READ description WRITE setDescription NOTIFY descriptionChanged )
37     Q_PROPERTY( int progress READ progress WRITE setProgress NOTIFY progressChanged )
38     Q_PROPERTY( int priority READ priority WRITE setPriority NOTIFY priorityChanged )
39     Q_PROPERTY( QObject* parentTodo READ parentTodo WRITE setParentTodo NOTIFY parentTodoChanged )
40     Q_PROPERTY( bool deleted READ isDeleted WRITE setDeleted NOTIFY deletedChanged )
41     Q_PROPERTY( QDateTime dueDate READ dueDate WRITE setDueDate NOTIFY dueDateChanged )
42     Q_PROPERTY( QObject* todoList READ todoList CONSTANT )
43     Q_PROPERTY( QObject* subTodos READ subTodos CONSTANT )
44     Q_PROPERTY( bool isCompleted READ isCompleted NOTIFY progressChanged() )
45
46 public:
47     explicit AbstractTodo( QUuid id, AbstractTodoList *parent = 0);
48     
49     QUuid id() const;
50
51     QString title() const;
52     void setTitle(const QString &title);
53
54     QString description() const;
55     void setDescription(const QString &description);
56
57     int progress() const;
58     void setProgress(int progress);
59
60     int priority() const;
61     void setPriority(int priority);
62     
63     AbstractTodo* parentTodo() const;
64     void setParentTodo( QObject* parentTodo );
65
66     bool isDeleted() const;
67     void setDeleted( bool deleted );
68
69     QDateTime dueDate() const;
70     void setDueDate( const QDateTime& dateTime );
71
72     bool isCompleted() const { return progress() == 100; }
73     
74     AbstractTodoList* parent() const;
75     
76     TodoSortFilterModel* subTodos() const {
77         return m_subTodosModel;
78     }
79
80     Q_INVOKABLE bool hasSubTodos() const {
81         return m_subTodosModel->rowCount() > 0;
82     }
83     
84 signals:
85     
86     void idChanged();
87     void titleChanged();
88     void descriptionChanged();
89     void progressChanged();
90     void priorityChanged();
91     void parentTodoChanged();
92     void deletedChanged();
93     void dueDateChanged();
94     void hasSubTodosChanged();
95     
96     void changed();
97     
98 public slots:
99
100 protected:
101
102     void setId( QUuid id );
103
104 private:
105
106     QUuid               m_id;
107     QString             m_title;
108     QString             m_description;
109     int                 m_progress;
110     int                 m_priority;
111     AbstractTodo        *m_parentTodo;
112     bool                m_deleted;
113     QDateTime           m_dueDate;
114     
115     TodoSortFilterModel *m_subTodosModel;
116     
117     QObject* todoList() const {
118         return QObject::parent();
119     }
120     
121 private slots:
122     
123     void childDataChanged();
124
125 };
126
127 #endif // ABSTRACTTODO_H