3 from PyQt4
import Qt
, QtCore
, QtGui
6 sys
.path
.append('./src')
10 from AddCatDlg
import Ui_D_Add
11 from AddItemDlg
import Ui_d_add_item
13 class TodoLists(QtGui
.QListWidget
):
14 def __init__(self
, parent
=None):
15 QtGui
.QListWidget
.__init
__(self
, parent
)
16 self
.setDragEnabled(True)
17 self
.setViewMode(QtGui
.QListView
.ListMode
)
18 self
.setIconSize(QtCore
.QSize(34, 34 ))
20 self
.setAcceptDrops(True)
21 self
.setDropIndicatorShown(True)
22 self
.setMovement(QtGui
.QListView
.Free
)
24 def addList(self
, oid_cat
, id_cat
):
25 listItem
= QtGui
.QListWidgetItem(self
)
26 pixmap
= QtGui
.QIcon("pixmaps/todo_list.png")
27 listItem
.setIcon(pixmap
)
28 listItem
.setText(id_cat
)
29 listItem
.setData(QtCore
.Qt
.UserRole
, QtCore
.QVariant(oid_cat
))
30 listItem
.setData(QtCore
.Qt
.UserRole
+1, QtCore
.QVariant(id_cat
))
32 listItem
.setFlags(QtCore
.Qt
.ItemIsEnabled | QtCore
.Qt
.ItemIsSelectable | QtCore
.Qt
.ItemIsDragEnabled
)
35 def dragEnterEvent(self
, event
):
36 if event
.mimeData().hasFormat("application/x-qtodo"):
41 def dragMoveEvent(self
, event
):
42 if event
.mimeData().hasFormat("application/x-qtodo"):
43 event
.setDropAction(QtCore
.Qt
.MoveAction
)
48 def dropEvent_(self
, event
):
49 if event
.mimeData().hasFormat("application/x-qtodo"):
50 pieceData
= event
.mimeData().data("application/x-qtodo")
51 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
52 pixmap
= QtGui
.QPixmap()
53 location
= QtCore
.QPoint()
54 dataStream
>> pixmap
>> location
56 self
.addList(pixmap
, location
)
58 event
.setDropAction(QtCore
.Qt
.MoveAction
)
63 def startDrag(self
, supportedActions
):
64 item
= self
.currentItem()
65 itemData
= QtCore
.QByteArray()
66 dataStream
= QtCore
.QDataStream(itemData
, QtCore
.QIODevice
.WriteOnly
)
67 oid_cat
= item
.data(QtCore
.Qt
.UserRole
).toString()
68 id_cat
= item
.data(QtCore
.Qt
.UserRole
+1).toString()
69 dataStream
<< oid_cat
<< id_cat
71 mimeData
= QtCore
.QMimeData()
72 mimeData
.setData("application/x-qtodo", itemData
)
73 drag
= QtGui
.QDrag(self
)
74 drag
.setMimeData(mimeData
)
75 drag
.setPixmap(QtGui
.QPixmap("pixmaps/todo_list.png"))
77 if drag
.start(QtCore
.Qt
.MoveAction
) == QtCore
.Qt
.MoveAction
:
78 self
.takeItem(self
.row(item
))
81 class ToDoItemList(QtGui
.QListWidget
):
82 def __init__(self
, DbEngine
, parent
=None):
83 QtGui
.QListWidget
.__init
__(self
, parent
)
84 self
.setDragEnabled(True)
85 self
.setViewMode(QtGui
.QListView
.ListMode
)
86 self
.setIconSize(QtCore
.QSize(34, 34 ))
88 self
.setAcceptDrops(True)
89 self
.setDropIndicatorShown(True)
90 self
.setMovement(QtGui
.QListView
.Free
)
91 self
.DbEngine
= DbEngine
92 QtCore
.QObject
.connect(self
, QtCore
.SIGNAL("itemDoubleClicked(QListWidgetItem *)"), self
.itemSel
)
94 def loadItems(self
, recDict
):
95 item
= QtGui
.QListWidgetItem(self
)
96 pixmap
= QtGui
.QIcon("pixmaps/todo_list.png")
98 item
.setText(recDict
["headline"])
99 #item.setData(QtCore.Qt.UserRole, QtCore.QVariant(oid_cat))
100 #item.setData(QtCore.Qt.UserRole+1, QtCore.QVariant(id_cat))
101 item
.setFlags(QtCore
.Qt
.ItemIsEnabled | QtCore
.Qt
.ItemIsSelectable | QtCore
.Qt
.ItemIsDragEnabled
)
103 def itemSel(self
, item
):
106 def dragEnterEvent(self
, event
):
107 if event
.mimeData().hasFormat("application/x-qtodo"):
108 event
.acceptProposedAction()
112 def dragMoveEvent(self
, event
):
113 if event
.mimeData().hasFormat("application/x-qtodo"):
114 event
.setDropAction(QtCore
.Qt
.CopyAction
)
115 event
.acceptProposedAction()
119 def dropEvent(self
, event
):
120 if event
.mimeData().hasFormat("application/x-qtodo"):
121 pieceData
= event
.mimeData().data("application/x-qtodo")
122 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
123 oid_cat
= QtCore
.QString()
124 id_cat
= QtCore
.QString()
125 dataStream
>> oid_cat
>> id_cat
127 NewItemDialog
= QtGui
.QDialog()
128 NewItem
= Ui_d_add_item()
129 NewItem
.setupUi(NewItemDialog
)
130 Pr
= self
.DbEngine
.LoadPriority()
131 NewItem
.CB_Priority
.addItems(Pr
)
132 NewItem
.L_Category
.setText(QtCore
.QString(id_cat
))
133 cur_time
= QtCore
.QDateTime().currentDateTime()
134 NewItem
.DTE_Deadline
.setDateTime(cur_time
)
135 if NewItemDialog
.exec_():
136 Priority
= NewItem
.CB_Priority
.currentText()
137 Body
= NewItem
.TE_Body
.toPlainText()
139 if NewItem
.CB_Deadline
.isChecked():
140 DeadLine
= NewItem
.DTE_Deadline
.dateTime().toString('dd.MM.yyyy hh:mm')
143 "category": int(oid_cat
),
144 "priority": str(Priority
)
147 dataDict
["deadline"] = ''
148 self
.DbEngine
.InsertItem(dataDict
)
149 event
.setDropAction(QtCore
.Qt
.CopyAction
)
155 def startDrag_(self
, supportedActions
):
156 item
= self
.currentItem()
157 itemData
= QtCore
.QByteArray()
158 dataStream
= QtCore
.QDataStream(itemData
, QtCore
.QIODevice
.WriteOnly
)
159 oid_cat
= item
.data(QtCore
.Qt
.UserRole
).toString()
160 id_cat
= item
.data(QtCore
.Qt
.UserRole
+1).toString()
161 dataStream
<< oid_cat
<< id_cat
163 mimeData
= QtCore
.QMimeData()
164 mimeData
.setData("application/x-qtodo", itemData
)
165 drag
= QtGui
.QDrag(self
)
166 drag
.setMimeData(mimeData
)
167 drag
.setPixmap(QtGui
.QPixmap("pixmaps/todo_list.png"))
169 if drag
.start(QtCore
.Qt
.MoveAction
) == QtCore
.Qt
.MoveAction
:
170 self
.takeItem(self
.row(item
))
173 class ToDoItem(QtGui
.QListWidgetItem
):
174 def __init__(self
, DbEngine
, parent
=None):
175 QtGui
.QListWidgetItem
.__init
__(self
, parent
)
176 self
.setAcceptDrops(False)
177 self
.L_Pr
= QtGui
.QLabel("Priority: ")
178 self
.L_St
= QtGui
.QLabel("Status: ")
179 self
.L_De
= QtGui
.QLabel("Deadline: ")
180 self
.L_PrImg
= QtGui
.QLabel(self
)
181 self
.L_StImg
= QtGui
.QLabel(self
)
182 self
.L_DeImg
= QtGui
.QLabel(self
)
183 self
.L_PrImg
.setPixmap(QtGui
.QPixmap("pixmaps/house.png"))
184 self
.L_StImg
.setPixmap(QtGui
.QPixmap("pixmaps/house.png"))
185 self
.L_DeImg
.setPixmap(QtGui
.QPixmap("pixmaps/house.png"))
186 self
.TE_TodoBody
= QtGui
.QTextEdit(self
)
187 self
.Layout
= QtGui
.QGridLayout(self
)
188 self
.Layout
.addWidget(self
.L_Pr
, 0,0)
189 self
.Layout
.addWidget(self
.L_PrImg
, 0,1)
190 self
.Layout
.addWidget(self
.L_St
, 0,2)
191 self
.Layout
.addWidget(self
.L_StImg
, 0,3)
192 self
.Layout
.addWidget(self
.L_De
, 0,4)
193 self
.Layout
.addWidget(self
.L_DeImg
, 0,5)
194 self
.Layout
.addWidget(self
.TE_TodoBody
, 1,0)
195 self
.setLayout(self
.Layout
)
196 self
.DbEngine
= DbEngine
198 def dropEvent_(self
, event
):
199 if event
.mimeData().hasFormat("application/x-qtodo"):
200 pieceData
= event
.mimeData().data("application/x-qtodo")
201 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
203 oid_cat
= QtCore
.QString()
204 id_cat
= QtCore
.QString()
206 dataStream
>> oid_cat
>> id_cat
207 event
.setDropAction(QtCore
.Qt
.MoveAction
)
209 # Delete the category from database
210 self
.DbEngine
.DeleteList(oid_cat
)
212 def dropEvent_(self
, event
):
213 if event
.mimeData().hasFormat("application/x-qtodo"):
214 itemData
= event
.mimeData().data("application/x-qtodo")
215 dataStream
= QtCore
.QDataStream(itemData
, QtCore
.QIODevice
.ReadOnly
)
216 text
= QtCore
.QString()
220 def dragEnterEvent(self
, event
):
224 class Trash(QtGui
.QLabel
):
225 def __init__(self
, DbEngine
, parent
=None):
226 QtGui
.QLabel
.__init
__(self
, parent
)
227 self
.setAcceptDrops(True)
228 self
.setPixmap(QtGui
.QPixmap("pixmaps/eraser.png"))
229 self
.DbEngine
= DbEngine
231 def dropEvent(self
, event
):
232 if event
.mimeData().hasFormat("application/x-qtodo"):
233 pieceData
= event
.mimeData().data("application/x-qtodo")
234 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
236 oid_cat
= QtCore
.QString()
237 id_cat
= QtCore
.QString()
239 dataStream
>> oid_cat
>> id_cat
240 event
.setDropAction(QtCore
.Qt
.MoveAction
)
242 # Delete the category from database
243 self
.DbEngine
.DeleteList(oid_cat
)
245 def dropEvent_(self
, event
):
246 if event
.mimeData().hasFormat("application/x-qtodo"):
247 itemData
= event
.mimeData().data("application/x-qtodo")
248 dataStream
= QtCore
.QDataStream(itemData
, QtCore
.QIODevice
.ReadOnly
)
249 text
= QtCore
.QString()
253 def dragEnterEvent(self
, event
):
258 class AddList(QtGui
.QLabel
):
259 def __init__(self
, DbEngine
, parent
=None):
260 QtGui
.QLabel
.__init
__(self
, parent
)
261 self
.setAcceptDrops(True)
262 self
.setPixmap(QtGui
.QPixmap("pixmaps/eraser.png"))
263 self
.DbEngine
= DbEngine
265 def dropEvent(self
, event
):
266 if event
.mimeData().hasFormat("application/x-qtodo"):
267 pieceData
= event
.mimeData().data("application/x-qtodo")
268 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
270 oid_cat
= QtCore
.QString()
271 id_cat
= QtCore
.QString()
273 dataStream
>> oid_cat
>> id_cat
274 event
.setDropAction(QtCore
.Qt
.MoveAction
)
276 # Delete the category from database
277 self
.DbEngine
.DeleteList(oid_cat
)
279 def dragEnterEvent(self
, event
):
282 class QTodo(Ui_MainWindow
):
284 self
.IOEngine
= QTodoIO()
288 QtCore
.QObject
.connect(ui
.action_Quit
, QtCore
.SIGNAL("triggered()"), self
.QuitApp
)
289 QtCore
.QObject
.connect(ui
.action_About
, QtCore
.SIGNAL("triggered()"), self
.About
)
290 QtCore
.QObject
.connect(ui
.action_Documentation
, QtCore
.SIGNAL("triggered()"), self
.Documentation
)
293 ui
.trash
= Trash(self
.IOEngine
)
294 ui
.actions_box
.layout().addWidget(ui
.trash
, 0,0)
295 # set the todo lists area
296 ui
.todo_lists
= TodoLists()
297 ui
.lists_box
.layout().addWidget(ui
.todo_lists
, 1, 0)
299 ui
.todo_items
= ToDoItemList(self
.IOEngine
)
300 ui
.items_box
.layout().addWidget(ui
.todo_items
, 1, 0)
301 activeItems
= self
.IOEngine
.CountActive()
302 closeItems
= self
.IOEngine
.CountClosed()
303 ui
.L_ActiveItem
.setText(str(activeItems
))
304 ui
.L_CloseItem
.setText(str(closeItems
))
306 overdueItems
= self
.IOEngine
.CountOverdue()
309 f
= ui
.L_OverdueItem
.palette()
310 f
.setColor(QtGui
.QPalette
.Foreground
,QtGui
.QColor(255, 0, 0))
311 ui
.L_OverdueItem
.setPalette(f
)
312 ui
.L_OverdueItem
.setText(str(overdueItems
))
316 categories
= self
.IOEngine
.GetCategories()
317 for rec
in categories
:
318 ui
.todo_lists
.addList(rec
["oid"], rec
["id_cat"])
319 items
= self
.IOEngine
.GetItems()
321 ui
.todo_items
.loadItems(rec
)
327 def AddCategory(self
):
328 AddCatDlg
= QtGui
.QDialog()
330 AddCat
.setupUi(AddCatDlg
)
332 if AddCatDlg
.exec_():
333 cat
= AddCat
.LE_cat_name
.text()
336 desc
= AddCat
.LE_cat_desc
.text()
337 it
= QtGui
.QListWidgetItem(QtGui
.QIcon("pixmaps/todo_list.png"),cat
)
338 it
.setTextAlignment(QtCore
.Qt
.AlignVCenter
)
339 ui
.todo_lists
.insertItem(0,it
)
340 Data
= {"id_category" : str(cat
),
341 "ds_category" : str(desc
) }
342 self
.IOEngine
.InsertCategory(Data
)
344 def DeleteCategory(self
):
347 def EditCategory(self
):
353 def Documentation(self
):
356 app
= QtGui
.QApplication(sys
.argv
)
357 window
= QtGui
.QMainWindow()
361 #connect the menu items
364 #Load the data present
368 sys
.exit(app
.exec_())