3 from PyQt4
import Qt
, QtCore
, QtGui
6 sys
.path
.append('./src')
10 from AddCatDlg
import Ui_D_Add
11 from ToDoCategoryList
import *
12 from ToDoItemList
import *
15 class Trash(QtGui
.QLabel
):
16 def __init__(self
, DbEngine
, parent
=None):
17 QtGui
.QLabel
.__init
__(self
, parent
)
18 self
.setAcceptDrops(True)
19 self
.setPixmap(QtGui
.QPixmap("pixmaps/eraser.png"))
20 self
.setSizePolicy(QtGui
.QSizePolicy
.Minimum
,QtGui
.QSizePolicy
.Minimum
)
23 self
.DbEngine
= DbEngine
25 def dropEvent(self
, event
):
26 if event
.mimeData().hasFormat("application/x-qtodo"):
27 pieceData
= event
.mimeData().data("application/x-qtodo")
28 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
29 oid
= QtCore
.QString()
30 item_type
= QtCore
.QString()
31 dataStream
>> oid
>> item_type
32 event
.setDropAction(QtCore
.Qt
.MoveAction
)
33 if item_type
== TYPE_LIST
:
34 # Delete the category from database
35 res
= self
.DbEngine
.DeleteList(oid
)
37 res
= QtGui
.QMessageBox
.critical(None, "Error",
38 "There are some items still assigned to this category",
39 QtGui
.QMessageBox
.Ok
)
40 self
.setFrameShape(QtGui
.QFrame
.NoFrame
)
41 self
.setFrameShadow(QtGui
.QFrame
.Plain
)
45 if item_type
== TYPE_TODO
:
46 # Delete the category from database
47 res
= self
.DbEngine
.DeleteItem(oid
)
49 res
= QtGui
.QMessageBox
.critical(None, "Error",
50 "The item is still open",
51 QtGui
.QMessageBox
.Ok
)
52 self
.setFrameShape(QtGui
.QFrame
.NoFrame
)
53 self
.setFrameShadow(QtGui
.QFrame
.Plain
)
59 self
.setFrameShape(QtGui
.QFrame
.NoFrame
)
60 self
.setFrameShadow(QtGui
.QFrame
.Plain
)
62 def dragEnterEvent(self
, event
):
63 self
.setFrameShape(QtGui
.QFrame
.Panel
)
64 self
.setFrameShadow(QtGui
.QFrame
.Raised
)
67 def dragLeaveEvent(self
, event
):
68 self
.setFrameShape(QtGui
.QFrame
.NoFrame
)
69 self
.setFrameShadow(QtGui
.QFrame
.Plain
)
71 class AddList(QtGui
.QLabel
):
72 def __init__(self
, DbEngine
, parent
=None):
73 QtGui
.QLabel
.__init
__(self
, parent
)
74 self
.setAcceptDrops(True)
75 self
.setPixmap(QtGui
.QPixmap("pixmaps/eraser.png"))
76 self
.DbEngine
= DbEngine
78 def dropEvent(self
, event
):
79 if event
.mimeData().hasFormat("application/x-qtodo"):
80 pieceData
= event
.mimeData().data("application/x-qtodo")
81 dataStream
= QtCore
.QDataStream(pieceData
, QtCore
.QIODevice
.ReadOnly
)
83 oid_cat
= QtCore
.QString()
84 id_cat
= QtCore
.QString()
86 dataStream
>> oid_cat
>> id_cat
87 event
.setDropAction(QtCore
.Qt
.MoveAction
)
89 # Delete the category from database
90 self
.DbEngine
.DeleteList(oid_cat
)
92 def dragEnterEvent(self
, event
):
95 class QTodo(Ui_MainWindow
):
97 self
.IOEngine
= QTodoIO()
100 "OidCategory" : None,
101 "OidPriority" : None,
106 QtCore
.QObject
.connect(ui
.action_Quit
, QtCore
.SIGNAL("triggered()"), self
.QuitApp
)
107 QtCore
.QObject
.connect(ui
.action_About
, QtCore
.SIGNAL("triggered()"), self
.About
)
108 QtCore
.QObject
.connect(ui
.action_Documentation
, QtCore
.SIGNAL("triggered()"), self
.Documentation
)
109 QtCore
.QObject
.connect(ui
.action_Category
, QtCore
.SIGNAL("triggered()"), self
.CategoryConf
)
110 QtCore
.QObject
.connect(ui
.action_Priority
, QtCore
.SIGNAL("triggered()"), self
.PriorityConf
)
112 QtCore
.QObject
.connect(ui
.CB_CategoryFilter
, QtCore
.SIGNAL("currentIndexChanged(QString)"), self
.UpdateCategoryFilter
)
113 QtCore
.QObject
.connect(ui
.CB_PriorityFilter
, QtCore
.SIGNAL("currentIndexChanged(QString)"), self
.UpdatePriorityFilter
)
114 QtCore
.QObject
.connect(ui
.CB_StatusFilter
, QtCore
.SIGNAL("currentIndexChanged(QString)"), self
.UpdateStatusFilter
)
117 ui
.trash
= Trash(self
.IOEngine
)
118 ui
.actions_box
.layout().addWidget(ui
.trash
)
120 # insert a stretch to keep aligned the controls
121 ui
.actions_box
.layout().insertStretch(-1, 20)
123 # set the todo category area
124 ui
.todo_lists
= TodoLists()
125 ui
.lists_box
.layout().addWidget(ui
.todo_lists
, 1, 0)
127 ui
.todo_items
= ToDoItemList(self
.IOEngine
)
128 ui
.items_box
.layout().addWidget(ui
.todo_items
, 2, 0)
129 activeItems
= self
.IOEngine
.CountActive()
130 closeItems
= self
.IOEngine
.CountClosed()
131 ui
.L_ActiveItem
.setText(str(activeItems
))
132 ui
.L_CloseItem
.setText(str(closeItems
))
134 overdueItems
= self
.IOEngine
.CountOverdue()
136 f
= ui
.L_OverdueItem
.palette()
137 f
.setColor(QtGui
.QPalette
.Foreground
,QtGui
.QColor(255, 0, 0))
138 ui
.L_OverdueItem
.setPalette(f
)
139 ui
.L_OverdueItem
.setText(str(overdueItems
))
141 cats
= self
.IOEngine
.GetCategories()
142 ui
.CB_CategoryFilter
.addItem('All')
144 ui
.CB_CategoryFilter
.addItem(c
["id_cat"])
146 stats
= self
.IOEngine
.LoadStatus()
147 ui
.CB_StatusFilter
.addItem('All')
149 ui
.CB_StatusFilter
.addItem(s
["desc"])
151 prior
= self
.IOEngine
.LoadPriorities()
152 ui
.CB_PriorityFilter
.addItem('All')
154 ui
.CB_PriorityFilter
.addItem(p
["id_pr"])
157 categories
= self
.IOEngine
.GetCategories()
158 for rec
in categories
:
159 ui
.todo_lists
.addList(rec
["oid"], rec
["id_cat"])
160 self
.RefreshItemList()
162 def RefreshItemList(self
):
163 items
= self
.IOEngine
.GetItems(self
.Filters
)
165 ui
.todo_items
.addItem(rec
)
172 def PriorityConf(self
):
176 def UpdateCategoryFilter(self
, text
):
177 if str(text
) == ALL_RECORD
:
178 self
.Filters
["OidCategory"] = None
180 oidcat
= self
.IOEngine
.GetCategory(str(text
))
181 self
.Filters
["OidCategory"] = oidcat
182 self
.UpdateItemList()
184 def UpdatePriorityFilter(self
, text
):
185 if str(text
) == ALL_RECORD
:
186 self
.Filters
["OidPriority"] = None
188 oidpr
= self
.IOEngine
.GetPriority(str(text
))
189 self
.Filters
["OidPriority"] = oidpr
190 self
.UpdateItemList()
192 def UpdateStatusFilter(self
, text
):
193 if str(text
) == ALL_RECORD
:
194 self
.Filters
["OidStatus"] = None
196 oidsta
= self
.IOEngine
.GetStatus(str(text
))
197 self
.Filters
["OidStatus"] = oidsta
198 self
.UpdateItemList()
201 def UpdateItemList(self
):
202 ui
.todo_items
.clear()
203 self
.RefreshItemList()
205 def CategoryConf(self
):
206 AddCatDlg
= QtGui
.QDialog()
208 AddCat
.setupUi(AddCatDlg
)
210 if AddCatDlg
.exec_():
211 cat
= AddCat
.LE_cat_name
.text()
214 desc
= AddCat
.LE_cat_desc
.text()
215 it
= QtGui
.QListWidgetItem(QtGui
.QIcon("pixmaps/todo_list.png"),cat
)
216 it
.setTextAlignment(QtCore
.Qt
.AlignVCenter
)
217 ui
.todo_lists
.insertItem(0,it
)
218 Data
= {"id_category" : str(cat
),
219 "ds_category" : str(desc
) }
220 oid_cat
= self
.IOEngine
.InsertCategory(Data
)
221 it
.setData(QtCore
.Qt
.UserRole
, QtCore
.QVariant(oid_cat
))
222 it
.setData(QtCore
.Qt
.UserRole
+1, QtCore
.QVariant(TYPE_LIST
))
225 def DeleteCategory(self
):
228 def EditCategory(self
):
232 QtGui
.QMessageBox
.about(None, "About QTodo", "QTodo Ver %s.\nA simple todo manager"%VERSION
)
235 def Documentation(self
):
238 app
= QtGui
.QApplication(sys
.argv
)
239 window
= QtGui
.QMainWindow()
243 #connect the menu items
246 #Load the data present
250 sys
.exit(app
.exec_())