summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/mainwindow.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index 58981ca..77cbe17 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -1,819 +1,823 @@
1/* 1/*
2               =. This file is part of the OPIE Project 2               =. This file is part of the OPIE Project
3             .=l. Copyright (c) 2002 <> 3             .=l. Copyright (c) 2002 <>
4           .>+-= 4           .>+-=
5 _;:,     .>    :=|. This program is free software; you can 5 _;:,     .>    :=|. This program is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under 6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU General Public 7:`=1 )Y*s>-.--   : the terms of the GNU General Public
8.="- .-=="i,     .._ License as published by the Free Software 8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License, 9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version. 10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_. 11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This program is distributed in the hope that 12    .i_,=:_.      -<s. This program is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of 14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
17..}^=.=       =       ; Library General Public License for more 17..}^=.=       =       ; Library General Public License for more
18++=   -.     .`     .: details. 18++=   -.     .`     .: details.
19 :     =  ...= . :.=- 19 :     =  ...= . :.=-
20 -.   .:....=;==+<; You should have received a copy of the GNU 20 -.   .:....=;==+<; You should have received a copy of the GNU
21  -_. . .   )=.  = General Public License along with 21  -_. . .   )=.  = General Public License along with
22    --        :-=` this library; see the file COPYING.LIB. 22    --        :-=` this library; see the file COPYING.LIB.
23 If not, write to the Free Software Foundation, 23 If not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, 24 Inc., 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include <unistd.h> 29#include <unistd.h>
30 30
31#include <qmenubar.h> 31#include <qmenubar.h>
32#include <qmessagebox.h> 32#include <qmessagebox.h>
33#include <qtoolbar.h> 33#include <qtoolbar.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35#include <qwidgetstack.h> 35#include <qwidgetstack.h>
36#include <qaction.h> 36#include <qaction.h>
37#include <qtimer.h> 37#include <qtimer.h>
38#include <qvbox.h> 38#include <qvbox.h>
39#include <qlayout.h>
39#include <qlineedit.h> 40#include <qlineedit.h>
40#include <qwhatsthis.h> 41#include <qwhatsthis.h>
41 42
42#include <qpe/applnk.h> 43#include <qpe/applnk.h>
43#include <qpe/config.h> 44#include <qpe/config.h>
44#include <qpe/ir.h> 45#include <qpe/ir.h>
45#include <qpe/resource.h> 46#include <qpe/resource.h>
46#include <qpe/qpemessagebox.h> 47#include <qpe/qpemessagebox.h>
47#include <qpe/qpetoolbar.h>
48 48
49#include <opie/orecur.h> 49#include <opie/orecur.h>
50#include <opie/otodoaccessvcal.h> 50#include <opie/otodoaccessvcal.h>
51 51
52#include "quickeditimpl.h" 52#include "quickeditimpl.h"
53#include "todotemplatemanager.h" 53#include "todotemplatemanager.h"
54#include "templateeditor.h" 54#include "templateeditor.h"
55#include "tableview.h" 55#include "tableview.h"
56 56
57#include "textviewshow.h" 57#include "textviewshow.h"
58#include "todoeditor.h" 58#include "todoeditor.h"
59#include "mainwindow.h" 59#include "mainwindow.h"
60 60
61 61
62using namespace Todo; 62using namespace Todo;
63 63
64MainWindow::MainWindow( QWidget* parent, 64MainWindow::MainWindow( QWidget* parent,
65 const char* name ) 65 const char* name )
66 : OPimMainWindow( "Todolist", parent, name, WType_TopLevel | WStyle_ContextHelp ) 66 : OPimMainWindow( "Todolist", parent, name, WType_TopLevel | WStyle_ContextHelp )
67{ 67{
68 m_syncing = false; 68 m_syncing = false;
69 m_counter = 0; 69 m_counter = 0;
70 m_tempManager = new TemplateManager(); 70 m_tempManager = new TemplateManager();
71 m_tempManager->load(); 71 m_tempManager->load();
72 72
73 initUI(); 73 initUI();
74 initConfig(); 74 initConfig();
75 initViews(); 75 initViews();
76 initActions(); 76 initActions();
77 initEditor(); 77 initEditor();
78 initShow(); 78 initShow();
79 initTemplate(); 79 initTemplate();
80 80
81 populateTemplates(); 81 populateTemplates();
82 raiseCurrentView(); 82 raiseCurrentView();
83 QTimer::singleShot(0, this, SLOT(populateCategories() ) ); 83 QTimer::singleShot(0, this, SLOT(populateCategories() ) );
84} 84}
85void MainWindow::initTemplate() { 85void MainWindow::initTemplate() {
86 m_curTempEd = new TemplateEditor( this, templateManager() ); 86 m_curTempEd = new TemplateEditor( this, templateManager() );
87} 87}
88void MainWindow::initActions() { 88void MainWindow::initActions() {
89 89
90 // Data menu 90 // Data menu
91 m_edit->insertItem(QWidget::tr("New from template"), m_template, 91 m_edit->insertItem(QWidget::tr("New from template"), m_template,
92 -1, 0 ); 92 -1, 0 );
93 93
94 QAction* a = new QAction( QWidget::tr("New Task" ), Resource::loadPixmap( "new" ), 94 QAction* a = new QAction( QWidget::tr("New Task" ), Resource::loadPixmap( "new" ),
95 QString::null, 0, this, 0 ); 95 QString::null, 0, this, 0 );
96 connect(a, SIGNAL( activated() ), 96 connect(a, SIGNAL( activated() ),
97 this, SLOT( slotNew() ) ); 97 this, SLOT( slotNew() ) );
98 a->setWhatsThis( QWidget::tr( "Click here to create a new task." ) ); 98 a->setWhatsThis( QWidget::tr( "Click here to create a new task." ) );
99 a->addTo(m_tool ); 99 a->addTo(m_tool );
100 a->addTo(m_edit ); 100 a->addTo(m_edit );
101 101
102 a = new QAction( QWidget::tr("Edit Task"), Resource::loadIconSet( "edit" ), 102 a = new QAction( QWidget::tr("Edit Task"), Resource::loadIconSet( "edit" ),
103 QString::null, 0, this, 0 ); 103 QString::null, 0, this, 0 );
104 connect(a, SIGNAL(activated() ), 104 connect(a, SIGNAL(activated() ),
105 this, SLOT( slotEdit() ) ); 105 this, SLOT( slotEdit() ) );
106 a->setWhatsThis( QWidget::tr( "Click here to modify the current task." ) ); 106 a->setWhatsThis( QWidget::tr( "Click here to modify the current task." ) );
107 a->addTo( m_tool ); 107 a->addTo( m_tool );
108 a->addTo( m_edit ); 108 a->addTo( m_edit );
109 m_editAction = a; 109 m_editAction = a;
110 110
111 a = new QAction( QString::null, QWidget::tr("View Task"), 0, this, 0 ); 111 a = new QAction( QString::null, QWidget::tr("View Task"), 0, this, 0 );
112 connect(a, SIGNAL( activated() ), 112 connect(a, SIGNAL( activated() ),
113 this, SLOT( slotShowDetails() ) ); 113 this, SLOT( slotShowDetails() ) );
114 a->addTo( m_edit ); 114 a->addTo( m_edit );
115 115
116 m_edit->insertSeparator(); 116 m_edit->insertSeparator();
117 117
118 a = new QAction( QWidget::tr("Delete..."), Resource::loadIconSet( "trash" ), 118 a = new QAction( QWidget::tr("Delete..."), Resource::loadIconSet( "trash" ),
119 QString::null, 0, this, 0 ); 119 QString::null, 0, this, 0 );
120 connect(a, SIGNAL(activated() ), 120 connect(a, SIGNAL(activated() ),
121 this, SLOT(slotDelete() ) ); 121 this, SLOT(slotDelete() ) );
122 a->setWhatsThis( QWidget::tr( "Click here to remove the current task." ) ); 122 a->setWhatsThis( QWidget::tr( "Click here to remove the current task." ) );
123 a->addTo( m_tool ); 123 a->addTo( m_tool );
124 a->addTo( m_edit ); 124 a->addTo( m_edit );
125 m_deleteAction = a; 125 m_deleteAction = a;
126 126
127 a = new QAction( QString::null, QWidget::tr("Delete all..."), 0, this, 0 ); 127 a = new QAction( QString::null, QWidget::tr("Delete all..."), 0, this, 0 );
128 connect(a, SIGNAL( activated() ), 128 connect(a, SIGNAL( activated() ),
129 this, SLOT( slotDeleteAll() ) ); 129 this, SLOT( slotDeleteAll() ) );
130 a->addTo(m_edit ); 130 a->addTo(m_edit );
131 m_deleteAllAction = a; 131 m_deleteAllAction = a;
132 132
133 a = new QAction( QString::null, QWidget::tr("Delete completed"), 133 a = new QAction( QString::null, QWidget::tr("Delete completed"),
134 0, this, 0 ); 134 0, this, 0 );
135 connect(a, SIGNAL( activated() ), 135 connect(a, SIGNAL( activated() ),
136 this, SLOT( slotDeleteCompleted() ) ); 136 this, SLOT( slotDeleteCompleted() ) );
137 a->addTo(m_edit ); 137 a->addTo(m_edit );
138 a->setEnabled( TRUE ); 138 a->setEnabled( TRUE );
139 m_deleteCompleteAction = a; 139 m_deleteCompleteAction = a;
140 140
141 m_edit->insertSeparator(); 141 m_edit->insertSeparator();
142 142
143 a = new QAction( QString::null, QWidget::tr("Duplicate"), 0, this, 0 ); 143 a = new QAction( QString::null, QWidget::tr("Duplicate"), 0, this, 0 );
144 connect(a, SIGNAL( activated() ), 144 connect(a, SIGNAL( activated() ),
145 this, SLOT( slotDuplicate() ) ); 145 this, SLOT( slotDuplicate() ) );
146 a->addTo(m_edit ); 146 a->addTo(m_edit );
147 m_duplicateAction = a; 147 m_duplicateAction = a;
148 148
149 m_edit->insertSeparator(); 149 m_edit->insertSeparator();
150 150
151 if ( Ir::supported() ) { 151 if ( Ir::supported() ) {
152 a = new QAction( QWidget::tr( "Beam" ), Resource::loadPixmap( "beam" ), QString::null, 0, this, 0 ); 152 a = new QAction( QWidget::tr( "Beam" ), Resource::loadPixmap( "beam" ), QString::null, 0, this, 0 );
153 connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) ); 153 connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) );
154 a->setWhatsThis( QWidget::tr( "Click here to send the current task to another device." ) ); 154 a->setWhatsThis( QWidget::tr( "Click here to send the current task to another device." ) );
155 a->addTo( m_edit ); 155 a->addTo( m_edit );
156 a->addTo( m_tool ); 156 a->addTo( m_tool );
157 } 157 }
158 158
159 // Options menu 159 // Options menu
160 a = new QAction( QWidget::tr("Find"), Resource::loadIconSet( "mag" ), 160 a = new QAction( QWidget::tr("Find"), Resource::loadIconSet( "mag" ),
161 QString::null, 0, this, 0 ); 161 QString::null, 0, this, 0 );
162 connect(a, SIGNAL( activated() ), this, SLOT( slotFind() ) ); 162 connect(a, SIGNAL( activated() ), this, SLOT( slotFind() ) );
163 a->addTo( m_options ); 163 a->addTo( m_options );
164 m_findAction = a; 164 m_findAction = a;
165 165
166 m_options->insertSeparator(); 166 m_options->insertSeparator();
167 167
168 m_completedAction = new QAction( QString::null, QWidget::tr("Show completed tasks"), 168 m_completedAction = new QAction( QString::null, QWidget::tr("Show completed tasks"),
169 0, this, 0, TRUE ); 169 0, this, 0, TRUE );
170 m_completedAction->addTo( m_options ); 170 m_completedAction->addTo( m_options );
171 m_completedAction->setOn( showCompleted() ); 171 m_completedAction->setOn( showCompleted() );
172 connect(m_completedAction, SIGNAL( toggled(bool) ), this, SLOT(slotShowCompleted(bool) ) ); 172 connect(m_completedAction, SIGNAL( toggled(bool) ), this, SLOT(slotShowCompleted(bool) ) );
173 173
174 a = new QAction( QString::null, QWidget::tr("Show only over-due tasks"), 174 a = new QAction( QString::null, QWidget::tr("Show only over-due tasks"),
175 0, this, 0, TRUE ); 175 0, this, 0, TRUE );
176 a->addTo( m_options ); 176 a->addTo( m_options );
177 a->setOn( showOverDue() ); 177 a->setOn( showOverDue() );
178 connect(a, SIGNAL(toggled(bool)), this, SLOT(slotShowDue(bool) ) ); 178 connect(a, SIGNAL(toggled(bool)), this, SLOT(slotShowDue(bool) ) );
179 179
180 m_showDeadLineAction = new QAction( QString::null, QWidget::tr("Show task deadlines"), 180 m_showDeadLineAction = new QAction( QString::null, QWidget::tr("Show task deadlines"),
181 0, this, 0, TRUE ); 181 0, this, 0, TRUE );
182 m_showDeadLineAction->addTo( m_options ); 182 m_showDeadLineAction->addTo( m_options );
183 m_showDeadLineAction->setOn( showDeadline() ); 183 m_showDeadLineAction->setOn( showDeadline() );
184 connect(m_showDeadLineAction, SIGNAL(toggled(bool) ), this, SLOT( slotShowDeadLine( bool ) ) ); 184 connect(m_showDeadLineAction, SIGNAL(toggled(bool) ), this, SLOT( slotShowDeadLine( bool ) ) );
185 185
186 m_showQuickTaskAction = new QAction( QString::null, QWidget::tr("Show quick task bar"), 186 m_showQuickTaskAction = new QAction( QString::null, QWidget::tr("Show quick task bar"),
187 0, this, 0, TRUE ); 187 0, this, 0, TRUE );
188 m_showQuickTaskAction->addTo( m_options ); 188 m_showQuickTaskAction->addTo( m_options );
189 m_showQuickTaskAction->setOn( showQuickTask() ); 189 m_showQuickTaskAction->setOn( showQuickTask() );
190 connect(m_showQuickTaskAction, SIGNAL( toggled(bool) ), this, SLOT(slotShowQuickTask(bool) ) ); 190 connect(m_showQuickTaskAction, SIGNAL( toggled(bool) ), this, SLOT(slotShowQuickTask(bool) ) );
191 191
192 m_options->insertSeparator(); 192 m_options->insertSeparator();
193 193
194 m_bar->insertItem( QWidget::tr("Data") ,m_edit ); 194 m_bar->insertItem( QWidget::tr("Data") ,m_edit );
195 m_bar->insertItem( QWidget::tr("Category"), m_catMenu ); 195 m_bar->insertItem( QWidget::tr("Category"), m_catMenu );
196 m_bar->insertItem( QWidget::tr("Options"), m_options ); 196 m_bar->insertItem( QWidget::tr("Options"), m_options );
197 197
198 m_curQuick = new QuickEditImpl( this, m_quicktask ); 198 m_curQuick = new QuickEditImpl( this, m_quicktask );
199 addToolBar( (QPEToolBar *)m_curQuick->widget(), QWidget::tr( "QuickEdit" ), QMainWindow::Top, TRUE ); 199 addToolBar( (QPEToolBar *)m_curQuick->widget(), QWidget::tr( "QuickEdit" ), QMainWindow::Top, TRUE );
200 m_curQuick->signal()->connect( this, SLOT(slotQuickEntered() ) ); 200 m_curQuick->signal()->connect( this, SLOT(slotQuickEntered() ) );
201 201
202} 202}
203/* m_curCat from Config */ 203/* m_curCat from Config */
204void MainWindow::initConfig() { 204void MainWindow::initConfig() {
205 Config config( "todo" ); 205 Config config( "todo" );
206 config.setGroup( "View" ); 206 config.setGroup( "View" );
207 m_completed = config.readBoolEntry( "ShowComplete", TRUE ); 207 m_completed = config.readBoolEntry( "ShowComplete", TRUE );
208 m_curCat = config.readEntry( "Category", QString::null ); 208 m_curCat = config.readEntry( "Category", QString::null );
209 m_deadline = config.readBoolEntry( "ShowDeadLine", TRUE); 209 m_deadline = config.readBoolEntry( "ShowDeadLine", TRUE);
210 m_overdue = config.readBoolEntry("ShowOverDue", FALSE ); 210 m_overdue = config.readBoolEntry("ShowOverDue", FALSE );
211 m_quicktask = config.readBoolEntry("ShowQuickTask", TRUE); 211 m_quicktask = config.readBoolEntry("ShowQuickTask", TRUE);
212} 212}
213void MainWindow::initUI() { 213void MainWindow::initUI() {
214
214 m_stack = new QWidgetStack(this, "main stack"); 215 m_stack = new QWidgetStack(this, "main stack");
216
215 setCentralWidget( m_stack ); 217 setCentralWidget( m_stack );
216 218
217 setToolBarsMovable( FALSE ); 219 setToolBarsMovable( FALSE );
218 220
219 m_tool = new QPEToolBar( this ); 221 QToolBar *menubarholder = new QToolBar( this );
220 m_tool->setHorizontalStretchable( TRUE ); 222 menubarholder->setHorizontalStretchable( TRUE );
223 m_bar = new QMenuBar( menubarholder );
221 224
222 m_bar = new QMenuBar( m_tool ); 225 m_tool = new QToolBar( this );
223 226
224 /** QPopupMenu */ 227 /** QPopupMenu */
225 m_edit = new QPopupMenu( this ); 228 m_edit = new QPopupMenu( this );
226 m_options = new QPopupMenu( this ); 229 m_options = new QPopupMenu( this );
227 m_catMenu = new QPopupMenu( this ); 230 m_catMenu = new QPopupMenu( this );
228 m_template = new QPopupMenu( this ); 231 m_template = new QPopupMenu( this );
229 232
230 m_catMenu->setCheckable( TRUE ); 233 m_catMenu->setCheckable( TRUE );
231 m_template->setCheckable( TRUE ); 234 m_template->setCheckable( TRUE );
232 235
233 connect(m_catMenu, SIGNAL(activated(int) ), 236 connect(m_catMenu, SIGNAL(activated(int) ),
234 this, SLOT(setCategory(int) ) ); 237 this, SLOT(setCategory(int) ) );
235 connect(m_template, SIGNAL(activated(int) ), 238 connect(m_template, SIGNAL(activated(int) ),
236 this, SLOT(slotNewFromTemplate(int) ) ); 239 this, SLOT(slotNewFromTemplate(int) ) );
237} 240}
238void MainWindow::initViews() { 241void MainWindow::initViews() {
242
239 TableView* tableView = new TableView( this, m_stack ); 243 TableView* tableView = new TableView( this, m_stack );
240 QWhatsThis::add( tableView, QWidget::tr( "This is a listing of all current tasks.\n\nThe list displays the following information:\n1. Completed - A green checkmark indicates task is completed. Click here to complete a task.\n2. Priority - a graphical representation of task priority. Double-click here to modify.\n3. Description - description of task. Click here to select the task.\n4. Deadline - shows when task is due. This column can be shown or hidden by selecting Options->'Show task deadlines' from the menu above." ) ); 244 QWhatsThis::add( tableView, QWidget::tr( "This is a listing of all current tasks.\n\nThe list displays the following information:\n1. Completed - A green checkmark indicates task is completed. Click here to complete a task.\n2. Priority - a graphical representation of task priority. Double-click here to modify.\n3. Description - description of task. Click here to select the task.\n4. Deadline - shows when task is due. This column can be shown or hidden by selecting Options->'Show task deadlines' from the menu above." ) );
241 m_stack->addWidget( tableView, m_counter++ ); 245 m_stack->addWidget( tableView, m_counter++ );
242 m_views.append( tableView ); 246 m_views.append( tableView );
243 m_curView = tableView; 247 m_curView = tableView;
244 connectBase( tableView ); 248 connectBase( tableView );
245 /* add QString type + QString configname to 249 /* add QString type + QString configname to
246 * the View menu 250 * the View menu
247 * and subdirs for multiple views 251 * and subdirs for multiple views
248 */ 252 */
249} 253}
250void MainWindow::initEditor() { 254void MainWindow::initEditor() {
251 m_curEdit = new Editor(); 255 m_curEdit = new Editor();
252} 256}
253void MainWindow::initShow() { 257void MainWindow::initShow() {
254 m_curShow = new TextViewShow(this, this); 258 m_curShow = new TextViewShow(this, this);
255 m_stack->addWidget( m_curShow->widget() , m_counter++ ); 259 m_stack->addWidget( m_curShow->widget() , m_counter++ );
256} 260}
257MainWindow::~MainWindow() { 261MainWindow::~MainWindow() {
258 delete templateManager(); 262 delete templateManager();
259} 263}
260void MainWindow::connectBase( ViewBase* ) { 264void MainWindow::connectBase( ViewBase* ) {
261 // once templates and signals mix we'll use it again 265 // once templates and signals mix we'll use it again
262} 266}
263QPopupMenu* MainWindow::contextMenu( int , bool recur ) { 267QPopupMenu* MainWindow::contextMenu( int , bool recur ) {
264 QPopupMenu* menu = new QPopupMenu(); 268 QPopupMenu* menu = new QPopupMenu();
265 269
266 m_editAction->addTo( menu ); 270 m_editAction->addTo( menu );
267 m_deleteAction->addTo( menu ); 271 m_deleteAction->addTo( menu );
268 m_duplicateAction->addTo( menu ); 272 m_duplicateAction->addTo( menu );
269 273
270 menu->insertSeparator(); 274 menu->insertSeparator();
271 275
272 /* 276 /*
273 * if this event recurs we allow 277 * if this event recurs we allow
274 * to detach it. 278 * to detach it.
275 * remove all 279 * remove all
276 */ 280 */
277 if ( recur ) { 281 if ( recur ) {
278 ; // FIXME 282 ; // FIXME
279 } 283 }
280 284
281 return menu; 285 return menu;
282} 286}
283QPopupMenu* MainWindow::options() { 287QPopupMenu* MainWindow::options() {
284 qWarning("Options"); 288 qWarning("Options");
285 return m_options; 289 return m_options;
286} 290}
287QPopupMenu* MainWindow::edit() { 291QPopupMenu* MainWindow::edit() {
288 return m_edit; 292 return m_edit;
289} 293}
290QToolBar* MainWindow::toolbar() { 294QToolBar* MainWindow::toolbar() {
291 return m_tool; 295 return m_tool;
292} 296}
293OTodoAccess::List MainWindow::list()const { 297OTodoAccess::List MainWindow::list()const {
294 return m_todoMgr.list(); 298 return m_todoMgr.list();
295} 299}
296OTodoAccess::List MainWindow::sorted( bool asc, int sortOrder ) { 300OTodoAccess::List MainWindow::sorted( bool asc, int sortOrder ) {
297 int cat = 0; 301 int cat = 0;
298 if ( m_curCat != QWidget::tr("All Categories") ) 302 if ( m_curCat != QWidget::tr("All Categories") )
299 cat = currentCatId(); 303 cat = currentCatId();
300 304
301 int filter = 1; 305 int filter = 1;
302 306
303 if (!m_completed ) 307 if (!m_completed )
304 filter |= 4; 308 filter |= 4;
305 if (m_overdue) 309 if (m_overdue)
306 filter |= 2; 310 filter |= 2;
307 311
308 return m_todoMgr.sorted( asc, sortOrder, filter, cat ); 312 return m_todoMgr.sorted( asc, sortOrder, filter, cat );
309} 313}
310OTodoAccess::List MainWindow::sorted( bool asc, int sortOrder, int addFilter) { 314OTodoAccess::List MainWindow::sorted( bool asc, int sortOrder, int addFilter) {
311 int cat = 0; 315 int cat = 0;
312 if ( m_curCat != QWidget::tr("All Categories") ) 316 if ( m_curCat != QWidget::tr("All Categories") )
313 cat = currentCatId(); 317 cat = currentCatId();
314 318
315 return m_todoMgr.sorted(asc, sortOrder, addFilter, cat ); 319 return m_todoMgr.sorted(asc, sortOrder, addFilter, cat );
316} 320}
317OTodo MainWindow::event( int uid ) { 321OTodo MainWindow::event( int uid ) {
318 return m_todoMgr.event( uid ); 322 return m_todoMgr.event( uid );
319} 323}
320bool MainWindow::isSyncing()const { 324bool MainWindow::isSyncing()const {
321 return m_syncing; 325 return m_syncing;
322} 326}
323TemplateManager* MainWindow::templateManager() { 327TemplateManager* MainWindow::templateManager() {
324 return m_tempManager; 328 return m_tempManager;
325} 329}
326Editor* MainWindow::currentEditor() { 330Editor* MainWindow::currentEditor() {
327 return m_curEdit; 331 return m_curEdit;
328} 332}
329TodoShow* MainWindow::currentShow() { 333TodoShow* MainWindow::currentShow() {
330 return m_curShow; 334 return m_curShow;
331} 335}
332void MainWindow::slotReload() { 336void MainWindow::slotReload() {
333 m_todoMgr.reload(); 337 m_todoMgr.reload();
334 currentView()->updateView( ); 338 currentView()->updateView( );
335 raiseCurrentView(); 339 raiseCurrentView();
336} 340}
337void MainWindow::closeEvent( QCloseEvent* e ) { 341void MainWindow::closeEvent( QCloseEvent* e ) {
338 if (m_stack->visibleWidget() == currentShow()->widget() ) { 342 if (m_stack->visibleWidget() == currentShow()->widget() ) {
339 raiseCurrentView(); 343 raiseCurrentView();
340 e->ignore(); 344 e->ignore();
341 return; 345 return;
342 } 346 }
343 /* 347 /*
344 * we should have flushed and now we're still saving 348 * we should have flushed and now we're still saving
345 * so there is no need to flush 349 * so there is no need to flush
346 */ 350 */
347 if (m_syncing ) { 351 if (m_syncing ) {
348 e->accept(); 352 e->accept();
349 return; 353 return;
350 } 354 }
351 bool quit = false; 355 bool quit = false;
352 if ( m_todoMgr.saveAll() ){ 356 if ( m_todoMgr.saveAll() ){
353 qWarning("saved"); 357 qWarning("saved");
354 quit = true; 358 quit = true;
355 }else { 359 }else {
356 if ( QMessageBox::critical( this, QWidget::tr("Out of space"), 360 if ( QMessageBox::critical( this, QWidget::tr("Out of space"),
357 QWidget::tr("Todo was unable\n" 361 QWidget::tr("Todo was unable\n"
358 "to save your changes.\n" 362 "to save your changes.\n"
359 "Free up some space\n" 363 "Free up some space\n"
360 "and try again.\n" 364 "and try again.\n"
361 "\nQuit Anyway?"), 365 "\nQuit Anyway?"),
362 QMessageBox::Yes|QMessageBox::Escape, 366 QMessageBox::Yes|QMessageBox::Escape,
363 QMessageBox::No|QMessageBox::Default) 367 QMessageBox::No|QMessageBox::Default)
364 != QMessageBox::No ) { 368 != QMessageBox::No ) {
365 e->accept(); 369 e->accept();
366 quit = true; 370 quit = true;
367 }else 371 }else
368 e->ignore(); 372 e->ignore();
369 373
370 } 374 }
371 375
372 if (quit ) { 376 if (quit ) {
373 Config config( "todo" ); 377 Config config( "todo" );
374 config.setGroup( "View" ); 378 config.setGroup( "View" );
375 config.writeEntry( "ShowComplete", showCompleted() ); 379 config.writeEntry( "ShowComplete", showCompleted() );
376 config.writeEntry( "Category", currentCategory() ); 380 config.writeEntry( "Category", currentCategory() );
377 config.writeEntry( "ShowDeadLine", showDeadline()); 381 config.writeEntry( "ShowDeadLine", showDeadline());
378 config.writeEntry( "ShowOverDue", showOverDue() ); 382 config.writeEntry( "ShowOverDue", showOverDue() );
379 config.writeEntry( "ShowQuickTask", showQuickTask() ); 383 config.writeEntry( "ShowQuickTask", showQuickTask() );
380 /* save templates */ 384 /* save templates */
381 templateManager()->save(); 385 templateManager()->save();
382 e->accept(); 386 e->accept();
383 } 387 }
384} 388}
385void MainWindow::populateTemplates() { 389void MainWindow::populateTemplates() {
386 m_template->clear(); 390 m_template->clear();
387 QStringList list = templateManager()->templates(); 391 QStringList list = templateManager()->templates();
388 QStringList::Iterator it; 392 QStringList::Iterator it;
389 for ( it = list.begin(); it != list.end(); ++it ) { 393 for ( it = list.begin(); it != list.end(); ++it ) {
390 m_template->insertItem( (*it) ); 394 m_template->insertItem( (*it) );
391 } 395 }
392} 396}
393/* 397/*
394 * slotNewFromTemplate 398 * slotNewFromTemplate
395 * We use the edit widget to do 399 * We use the edit widget to do
396 * the config but we setUid(-1) 400 * the config but we setUid(-1)
397 * to get a new uid 401 * to get a new uid
398 */ 402 */
399/* 403/*
400 * first we get the name of the template 404 * first we get the name of the template
401 * then we will use the TemplateManager 405 * then we will use the TemplateManager
402 */ 406 */
403void MainWindow::slotNewFromTemplate( int id ) { 407void MainWindow::slotNewFromTemplate( int id ) {
404 QString name = m_template->text( id ); 408 QString name = m_template->text( id );
405 409
406 OTodo event = templateManager()->templateEvent( name ); 410 OTodo event = templateManager()->templateEvent( name );
407 event = currentEditor()->edit(this, 411 event = currentEditor()->edit(this,
408 event ); 412 event );
409 413
410 if ( currentEditor()->accepted() ) { 414 if ( currentEditor()->accepted() ) {
411 /* assign new todo */ 415 /* assign new todo */
412 event.setUid( -1 ); 416 event.setUid( -1 );
413 currentView()->addEvent( event ); 417 currentView()->addEvent( event );
414 m_todoMgr.add( event ); 418 m_todoMgr.add( event );
415 419
416 populateCategories(); 420 populateCategories();
417 } 421 }
418} 422}
419void MainWindow::slotNew() { 423void MainWindow::slotNew() {
420 create(); 424 create();
421} 425}
422void MainWindow::slotDuplicate() { 426void MainWindow::slotDuplicate() {
423 if(m_syncing) { 427 if(m_syncing) {
424 QMessageBox::warning(this, QWidget::tr("Todo"), 428 QMessageBox::warning(this, QWidget::tr("Todo"),
425 QWidget::tr("Can not edit data, currently syncing")); 429 QWidget::tr("Can not edit data, currently syncing"));
426 return; 430 return;
427 } 431 }
428 OTodo ev = m_todoMgr.event( currentView()->current() ); 432 OTodo ev = m_todoMgr.event( currentView()->current() );
429 /* let's generate a new uid */ 433 /* let's generate a new uid */
430 ev.setUid(-1); 434 ev.setUid(-1);
431 m_todoMgr.add( ev ); 435 m_todoMgr.add( ev );
432 436
433 currentView()->addEvent( ev ); 437 currentView()->addEvent( ev );
434 raiseCurrentView(); 438 raiseCurrentView();
435} 439}
436void MainWindow::slotDelete() { 440void MainWindow::slotDelete() {
437 if (!currentView()->current() ) 441 if (!currentView()->current() )
438 return; 442 return;
439 443
440 if(m_syncing) { 444 if(m_syncing) {
441 QMessageBox::warning(this, QWidget::tr("Todo"), 445 QMessageBox::warning(this, QWidget::tr("Todo"),
442 QWidget::tr("Can not edit data, currently syncing")); 446 QWidget::tr("Can not edit data, currently syncing"));
443 return; 447 return;
444 } 448 }
445 QString strName = currentView()->currentRepresentation(); 449 QString strName = currentView()->currentRepresentation();
446 if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), strName ) ) 450 if (!QPEMessageBox::confirmDelete(this, QWidget::tr("Todo"), strName ) )
447 return; 451 return;
448 452
449 m_todoMgr.remove( currentView()->current() ); 453 m_todoMgr.remove( currentView()->current() );
450 currentView()->removeEvent( currentView()->current() ); 454 currentView()->removeEvent( currentView()->current() );
451 raiseCurrentView(); 455 raiseCurrentView();
452} 456}
453void MainWindow::slotDeleteAll() { 457void MainWindow::slotDeleteAll() {
454 if(m_syncing) { 458 if(m_syncing) {
455 QMessageBox::warning(this, QWidget::tr("Todo"), 459 QMessageBox::warning(this, QWidget::tr("Todo"),
456 QWidget::tr("Can not edit data, currently syncing")); 460 QWidget::tr("Can not edit data, currently syncing"));
457 return; 461 return;
458 } 462 }
459 463
460 464
461 if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all tasks?") ) ) 465 if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all tasks?") ) )
462 return; 466 return;
463 467
464 m_todoMgr.removeAll(); 468 m_todoMgr.removeAll();
465 currentView()->clear(); 469 currentView()->clear();
466 470
467 raiseCurrentView(); 471 raiseCurrentView();
468} 472}
469void MainWindow::slotDeleteCompleted() { 473void MainWindow::slotDeleteCompleted() {
470 if(m_syncing) { 474 if(m_syncing) {
471 QMessageBox::warning(this, QWidget::tr("Todo"), 475 QMessageBox::warning(this, QWidget::tr("Todo"),
472 QWidget::tr("Can not edit data, currently syncing")); 476 QWidget::tr("Can not edit data, currently syncing"));
473 return; 477 return;
474 } 478 }
475 479
476 if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all completed tasks?") ) ) 480 if ( !QPEMessageBox::confirmDelete( this, QWidget::tr( "Todo" ), QWidget::tr("all completed tasks?") ) )
477 return; 481 return;
478 482
479 483
480 m_todoMgr.removeCompleted(); 484 m_todoMgr.removeCompleted();
481 currentView()->updateView( ); 485 currentView()->updateView( );
482} 486}
483void MainWindow::slotFind() { 487void MainWindow::slotFind() {
484 488
485} 489}
486void MainWindow::slotEdit() { 490void MainWindow::slotEdit() {
487 slotEdit( currentView()->current() ); 491 slotEdit( currentView()->current() );
488} 492}
489/* 493/*
490 * set the category 494 * set the category
491 */ 495 */
492void MainWindow::setCategory( int c) { 496void MainWindow::setCategory( int c) {
493 if ( c <= 0 ) return; 497 if ( c <= 0 ) return;
494 498
495 499
496 qWarning("Iterating over cats %d", c ); 500 qWarning("Iterating over cats %d", c );
497 for ( unsigned int i = 1; i < m_catMenu->count(); i++ ) 501 for ( unsigned int i = 1; i < m_catMenu->count(); i++ )
498 m_catMenu->setItemChecked(i, c == (int)i ); 502 m_catMenu->setItemChecked(i, c == (int)i );
499 503
500 if (c == 1 ) { 504 if (c == 1 ) {
501 m_curCat = QString::null; 505 m_curCat = QString::null;
502 setCaption( QWidget::tr("Todo") + " - " + QWidget::tr("All Categories" ) ); 506 setCaption( QWidget::tr("Todo") + " - " + QWidget::tr("All Categories" ) );
503 507
504 }else if ( c == (int)m_catMenu->count() - 1 ) { 508 }else if ( c == (int)m_catMenu->count() - 1 ) {
505 m_curCat = QWidget::tr("Unfiled"); 509 m_curCat = QWidget::tr("Unfiled");
506 setCaption( QWidget::tr("Todo") + " - " + QWidget::tr("Unfiled") ); 510 setCaption( QWidget::tr("Todo") + " - " + QWidget::tr("Unfiled") );
507 }else { 511 }else {
508 m_curCat = m_todoMgr.categories()[c-2]; 512 m_curCat = m_todoMgr.categories()[c-2];
509 setCaption( QWidget::tr("Todo") + " - " + m_curCat ); 513 setCaption( QWidget::tr("Todo") + " - " + m_curCat );
510 } 514 }
511 m_catMenu->setItemChecked( c, true ); 515 m_catMenu->setItemChecked( c, true );
512 516
513 currentView()->setShowCategory( m_curCat ); 517 currentView()->setShowCategory( m_curCat );
514 raiseCurrentView(); 518 raiseCurrentView();
515} 519}
516void MainWindow::slotShowDeadLine( bool dead) { 520void MainWindow::slotShowDeadLine( bool dead) {
517 m_deadline = dead; 521 m_deadline = dead;
518 currentView()->setShowDeadline( dead ); 522 currentView()->setShowDeadline( dead );
519} 523}
520void MainWindow::slotShowCompleted( bool show) { 524void MainWindow::slotShowCompleted( bool show) {
521 m_completed = show; 525 m_completed = show;
522 currentView()->setShowCompleted( m_completed ); 526 currentView()->setShowCompleted( m_completed );
523} 527}
524void MainWindow::slotShowQuickTask( bool show ) { 528void MainWindow::slotShowQuickTask( bool show ) {
525 m_quicktask = show; 529 m_quicktask = show;
526 if ( m_quicktask ) 530 if ( m_quicktask )
527 m_curQuick->widget()->show(); 531 m_curQuick->widget()->show();
528 else 532 else
529 m_curQuick->widget()->hide(); 533 m_curQuick->widget()->hide();
530} 534}
531bool MainWindow::showOverDue()const { 535bool MainWindow::showOverDue()const {
532 return m_overdue; 536 return m_overdue;
533} 537}
534void MainWindow::setDocument( const QString& fi) { 538void MainWindow::setDocument( const QString& fi) {
535 DocLnk doc(fi); 539 DocLnk doc(fi);
536 if (doc.isValid() ) 540 if (doc.isValid() )
537 receiveFile(doc.file() ); 541 receiveFile(doc.file() );
538 else 542 else
539 receiveFile(fi ); 543 receiveFile(fi );
540} 544}
541 545
542static const char *beamfile = "/tmp/opie-todo.vcs"; 546static const char *beamfile = "/tmp/opie-todo.vcs";
543void MainWindow::slotBeam() { 547void MainWindow::slotBeam() {
544 beam( currentView()->current() ); 548 beam( currentView()->current() );
545} 549}
546void MainWindow::beamDone( Ir* ir) { 550void MainWindow::beamDone( Ir* ir) {
547 delete ir; 551 delete ir;
548 ::unlink( beamfile ); 552 ::unlink( beamfile );
549} 553}
550void MainWindow::receiveFile( const QString& filename ) { 554void MainWindow::receiveFile( const QString& filename ) {
551 OTodoAccessVCal* cal = new OTodoAccessVCal(filename ); 555 OTodoAccessVCal* cal = new OTodoAccessVCal(filename );
552 OTodoAccess acc( cal ); 556 OTodoAccess acc( cal );
553 acc.load(); 557 acc.load();
554 OTodoAccess::List list = acc.allRecords(); 558 OTodoAccess::List list = acc.allRecords();
555 559
556 QString message = QWidget::tr("<P>%1 new tasks arrived.<p>Would you like to add them to your Todolist?").arg(list.count() ); 560 QString message = QWidget::tr("<P>%1 new tasks arrived.<p>Would you like to add them to your Todolist?").arg(list.count() );
557 561
558 if ( QMessageBox::information(this, QWidget::tr("New Tasks"), 562 if ( QMessageBox::information(this, QWidget::tr("New Tasks"),
559 message, QMessageBox::Ok, 563 message, QMessageBox::Ok,
560 QMessageBox::Cancel ) == QMessageBox::Ok ) { 564 QMessageBox::Cancel ) == QMessageBox::Ok ) {
561 OTodoAccess::List::Iterator it; 565 OTodoAccess::List::Iterator it;
562 for ( it = list.begin(); it != list.end(); ++it ) 566 for ( it = list.begin(); it != list.end(); ++it )
563 m_todoMgr.add( (*it) ); 567 m_todoMgr.add( (*it) );
564 568
565 currentView()->updateView(); 569 currentView()->updateView();
566 } 570 }
567} 571}
568 572
569void MainWindow::slotFlush() { 573void MainWindow::slotFlush() {
570 m_syncing = FALSE; 574 m_syncing = FALSE;
571 m_todoMgr.save(); 575 m_todoMgr.save();
572} 576}
573void MainWindow::slotShowDetails() { 577void MainWindow::slotShowDetails() {
574 slotShow( currentView()->current() ); 578 slotShow( currentView()->current() );
575} 579}
576/* 580/*
577 * populate the Categories 581 * populate the Categories
578 * Menu 582 * Menu
579 */ 583 */
580void MainWindow::populateCategories() { 584void MainWindow::populateCategories() {
581 m_todoMgr.load(); 585 m_todoMgr.load();
582 586
583 m_catMenu->clear(); 587 m_catMenu->clear();
584 int id, rememberId; 588 int id, rememberId;
585 id = 1; 589 id = 1;
586 rememberId = 1; 590 rememberId = 1;
587 591
588 m_catMenu->insertItem( QWidget::tr( "All Categories" ), id++ ); 592 m_catMenu->insertItem( QWidget::tr( "All Categories" ), id++ );
589 m_catMenu->insertSeparator(); 593 m_catMenu->insertSeparator();
590 QStringList categories = m_todoMgr.categories(); 594 QStringList categories = m_todoMgr.categories();
591 categories.append( QWidget::tr( "Unfiled" ) ); 595 categories.append( QWidget::tr( "Unfiled" ) );
592 for ( QStringList::Iterator it = categories.begin(); 596 for ( QStringList::Iterator it = categories.begin();
593 it != categories.end(); ++it ) { 597 it != categories.end(); ++it ) {
594 m_catMenu->insertItem( *it, id ); 598 m_catMenu->insertItem( *it, id );
595 if ( *it == currentCategory() ) 599 if ( *it == currentCategory() )
596 rememberId = id; 600 rememberId = id;
597 ++id; 601 ++id;
598 } 602 }
599 setCategory( rememberId ); 603 setCategory( rememberId );
600} 604}
601bool MainWindow::showCompleted()const { 605bool MainWindow::showCompleted()const {
602 return m_completed; 606 return m_completed;
603} 607}
604bool MainWindow::showDeadline()const { 608bool MainWindow::showDeadline()const {
605 return m_deadline; 609 return m_deadline;
606} 610}
607bool MainWindow::showQuickTask()const { 611bool MainWindow::showQuickTask()const {
608 return m_quicktask; 612 return m_quicktask;
609} 613}
610QString MainWindow::currentCategory()const { 614QString MainWindow::currentCategory()const {
611 return m_curCat; 615 return m_curCat;
612} 616}
613int MainWindow::currentCatId() { 617int MainWindow::currentCatId() {
614 return m_todoMgr.catId( m_curCat ); 618 return m_todoMgr.catId( m_curCat );
615} 619}
616ViewBase* MainWindow::currentView() { 620ViewBase* MainWindow::currentView() {
617 return m_curView; 621 return m_curView;
618} 622}
619void MainWindow::raiseCurrentView() { 623void MainWindow::raiseCurrentView() {
620 m_stack->raiseWidget( m_curView->widget() ); 624 m_stack->raiseWidget( m_curView->widget() );
621} 625}
622void MainWindow::slotShowDue(bool ov) { 626void MainWindow::slotShowDue(bool ov) {
623 m_overdue = ov; 627 m_overdue = ov;
624 currentView()->showOverDue( ov ); 628 currentView()->showOverDue( ov );
625 raiseCurrentView(); 629 raiseCurrentView();
626} 630}
627void MainWindow::slotShow( int uid ) { 631void MainWindow::slotShow( int uid ) {
628 qWarning("slotShow"); 632 qWarning("slotShow");
629 currentShow()->slotShow( event( uid ) ); 633 currentShow()->slotShow( event( uid ) );
630 m_stack->raiseWidget( currentShow()->widget() ); 634 m_stack->raiseWidget( currentShow()->widget() );
631} 635}
632void MainWindow::slotEdit( int uid ) { 636void MainWindow::slotEdit( int uid ) {
633 if (uid == 1 ) return; 637 if (uid == 1 ) return;
634 if(m_syncing) { 638 if(m_syncing) {
635 QMessageBox::warning(this, QWidget::tr("Todo"), 639 QMessageBox::warning(this, QWidget::tr("Todo"),
636 QWidget::tr("Can not edit data, currently syncing")); 640 QWidget::tr("Can not edit data, currently syncing"));
637 return; 641 return;
638 } 642 }
639 643
640 OTodo todo = m_todoMgr.event( uid ); 644 OTodo todo = m_todoMgr.event( uid );
641 645
642 todo = currentEditor()->edit(this, todo ); 646 todo = currentEditor()->edit(this, todo );
643 647
644 /* if completed */ 648 /* if completed */
645 if ( currentEditor()->accepted() ) { 649 if ( currentEditor()->accepted() ) {
646 qWarning("Replacing now" ); 650 qWarning("Replacing now" );
647 m_todoMgr.update( todo.uid(), todo ); 651 m_todoMgr.update( todo.uid(), todo );
648 currentView()->replaceEvent( todo ); 652 currentView()->replaceEvent( todo );
649 /* a Category might have changed */ 653 /* a Category might have changed */
650 populateCategories(); 654 populateCategories();
651 } 655 }
652 656
653 raiseCurrentView(); 657 raiseCurrentView();
654} 658}
655/* 659/*
656void MainWindow::slotUpdate1( int uid, const SmallTodo& ev) { 660void MainWindow::slotUpdate1( int uid, const SmallTodo& ev) {
657 m_todoMgr.update( uid, ev ); 661 m_todoMgr.update( uid, ev );
658} 662}
659*/ 663*/
660void MainWindow::updateTodo( const OTodo& ev) { 664void MainWindow::updateTodo( const OTodo& ev) {
661 m_todoMgr.update( ev.uid() , ev ); 665 m_todoMgr.update( ev.uid() , ev );
662} 666}
663/* The view changed it's configuration 667/* The view changed it's configuration
664 * update the view menu 668 * update the view menu
665 */ 669 */
666void MainWindow::slotUpdate3( QWidget* ) { 670void MainWindow::slotUpdate3( QWidget* ) {
667 671
668} 672}
669void MainWindow::updateList() { 673void MainWindow::updateList() {
670 m_todoMgr.updateList(); 674 m_todoMgr.updateList();
671} 675}
672void MainWindow::setReadAhead( uint count ) { 676void MainWindow::setReadAhead( uint count ) {
673 if (m_todoMgr.todoDB() ) 677 if (m_todoMgr.todoDB() )
674 m_todoMgr.todoDB()->setReadAhead( count ); 678 m_todoMgr.todoDB()->setReadAhead( count );
675} 679}
676void MainWindow::slotQuickEntered() { 680void MainWindow::slotQuickEntered() {
677 qWarning("entered"); 681 qWarning("entered");
678 OTodo todo = quickEditor()->todo(); 682 OTodo todo = quickEditor()->todo();
679 if (todo.isEmpty() ) 683 if (todo.isEmpty() )
680 return; 684 return;
681 685
682 m_todoMgr.add( todo ); 686 m_todoMgr.add( todo );
683 currentView()->addEvent( todo ); 687 currentView()->addEvent( todo );
684 raiseCurrentView(); 688 raiseCurrentView();
685} 689}
686QuickEditBase* MainWindow::quickEditor() { 690QuickEditBase* MainWindow::quickEditor() {
687 return m_curQuick; 691 return m_curQuick;
688} 692}
689void MainWindow::slotComplete( int uid ) { 693void MainWindow::slotComplete( int uid ) {
690 slotComplete( event(uid) ); 694 slotComplete( event(uid) );
691} 695}
692void MainWindow::slotComplete( const OTodo& todo ) { 696void MainWindow::slotComplete( const OTodo& todo ) {
693 OTodo to = todo; 697 OTodo to = todo;
694 to.setCompleted( !to.isCompleted() ); 698 to.setCompleted( !to.isCompleted() );
695 to.setCompletedDate( QDate::currentDate() ); 699 to.setCompletedDate( QDate::currentDate() );
696 700
697 /* 701 /*
698 * if the item does recur 702 * if the item does recur
699 * we need to spin it off 703 * we need to spin it off
700 * and update the items duedate to the next 704 * and update the items duedate to the next
701 * possible recurrance of this item... 705 * possible recurrance of this item...
702 * the spinned off one will loose the 706 * the spinned off one will loose the
703 */ 707 */
704 if ( to.recurrence().doesRecur() && to.isCompleted() ) { 708 if ( to.recurrence().doesRecur() && to.isCompleted() ) {
705 OTodo to2( to ); 709 OTodo to2( to );
706 710
707 /* the spinned off one won't recur anymore */ 711 /* the spinned off one won't recur anymore */
708 to.setRecurrence( ORecur() ); 712 to.setRecurrence( ORecur() );
709 713
710 ORecur rec = to2.recurrence(); 714 ORecur rec = to2.recurrence();
711 rec.setStart( to.dueDate() ); 715 rec.setStart( to.dueDate() );
712 to2.setRecurrence( rec ); 716 to2.setRecurrence( rec );
713 /* 717 /*
714 * if there is a next occurence 718 * if there is a next occurence
715 * from the duedate of the last recurrance 719 * from the duedate of the last recurrance
716 */ 720 */
717 QDate date; 721 QDate date;
718 if ( to2.recurrence().nextOcurrence( to2.dueDate().addDays(1), date ) ) { 722 if ( to2.recurrence().nextOcurrence( to2.dueDate().addDays(1), date ) ) {
719 QDate inval; 723 QDate inval;
720 /* generate a new uid for the old record */ 724 /* generate a new uid for the old record */
721 to.setUid( 1 ); 725 to.setUid( 1 );
722 726
723 /* add the old one cause it has a new UID here cause it was spin off */ 727 /* add the old one cause it has a new UID here cause it was spin off */
724 m_todoMgr.add( to ); 728 m_todoMgr.add( to );
725 729
726 /* 730 /*
727 * update the due date 731 * update the due date
728 * start date 732 * start date
729 * and complete date 733 * and complete date
730 */ 734 */
731 to2.setDueDate( date ); 735 to2.setDueDate( date );
732 to2.setStartDate( inval ); 736 to2.setStartDate( inval );
733 to2.setCompletedDate( inval ); 737 to2.setCompletedDate( inval );
734 to2.setCompleted( false ); 738 to2.setCompleted( false );
735 updateTodo( to2 ); 739 updateTodo( to2 );
736 }else 740 }else
737 updateTodo( to ); 741 updateTodo( to );
738 }else 742 }else
739 updateTodo( to ); 743 updateTodo( to );
740 744
741 currentView()->updateView(); 745 currentView()->updateView();
742 raiseCurrentView(); 746 raiseCurrentView();
743} 747}
744void MainWindow::flush() { 748void MainWindow::flush() {
745 slotFlush(); 749 slotFlush();
746} 750}
747void MainWindow::reload() { 751void MainWindow::reload() {
748 slotReload(); 752 slotReload();
749} 753}
750int MainWindow::create() { 754int MainWindow::create() {
751 int uid = 0; 755 int uid = 0;
752 if(m_syncing) { 756 if(m_syncing) {
753 QMessageBox::warning(this, QWidget::tr("Todo"), 757 QMessageBox::warning(this, QWidget::tr("Todo"),
754 QWidget::tr("Can not edit data, currently syncing")); 758 QWidget::tr("Can not edit data, currently syncing"));
755 return uid; 759 return uid;
756 } 760 }
757 761
758 762
759 OTodo todo = currentEditor()->newTodo( currentCatId(), 763 OTodo todo = currentEditor()->newTodo( currentCatId(),
760 this ); 764 this );
761 765
762 if ( currentEditor()->accepted() ) { 766 if ( currentEditor()->accepted() ) {
763 //todo.assignUid(); 767 //todo.assignUid();
764 uid = todo.uid(); 768 uid = todo.uid();
765 m_todoMgr.add( todo ); 769 m_todoMgr.add( todo );
766 currentView()->addEvent( todo ); 770 currentView()->addEvent( todo );
767 771
768 772
769 // I'm afraid we must call this every time now, otherwise 773 // I'm afraid we must call this every time now, otherwise
770 // spend expensive time comparing all these strings... 774 // spend expensive time comparing all these strings...
771 // but only call if we changed something -zecke 775 // but only call if we changed something -zecke
772 populateCategories(); 776 populateCategories();
773 } 777 }
774 raiseCurrentView( ); 778 raiseCurrentView( );
775 779
776 return uid; 780 return uid;
777} 781}
778/* delete it silently... */ 782/* delete it silently... */
779bool MainWindow::remove( int uid ) { 783bool MainWindow::remove( int uid ) {
780 if (m_syncing) return false; 784 if (m_syncing) return false;
781 785
782 return m_todoMgr.remove( uid ); 786 return m_todoMgr.remove( uid );
783} 787}
784void MainWindow::beam( int uid) { 788void MainWindow::beam( int uid) {
785 ::unlink( beamfile ); 789 ::unlink( beamfile );
786 OTodo todo = event( uid ); 790 OTodo todo = event( uid );
787 OTodoAccessVCal* cal = new OTodoAccessVCal(QString::fromLatin1(beamfile) ); 791 OTodoAccessVCal* cal = new OTodoAccessVCal(QString::fromLatin1(beamfile) );
788 OTodoAccess acc( cal ); 792 OTodoAccess acc( cal );
789 acc.load(); 793 acc.load();
790 acc.add( todo ); 794 acc.add( todo );
791 acc.save(); 795 acc.save();
792 Ir* ir = new Ir(this ); 796 Ir* ir = new Ir(this );
793 connect(ir, SIGNAL(done(Ir*) ), 797 connect(ir, SIGNAL(done(Ir*) ),
794 this, SLOT(beamDone(Ir*) ) ); 798 this, SLOT(beamDone(Ir*) ) );
795 ir->send(beamfile, todo.summary(), "text/x-vCalendar" ); 799 ir->send(beamfile, todo.summary(), "text/x-vCalendar" );
796} 800}
797void MainWindow::show( int uid ) { 801void MainWindow::show( int uid ) {
798 slotShow( uid ); 802 slotShow( uid );
799} 803}
800void MainWindow::edit( int uid ) { 804void MainWindow::edit( int uid ) {
801 slotEdit( uid ); 805 slotEdit( uid );
802} 806}
803void MainWindow::add( const OPimRecord& rec) { 807void MainWindow::add( const OPimRecord& rec) {
804 if ( rec.rtti() != OTodo::rtti() ) return; 808 if ( rec.rtti() != OTodo::rtti() ) return;
805 809
806 const OTodo& todo = static_cast<const OTodo&>(rec); 810 const OTodo& todo = static_cast<const OTodo&>(rec);
807 811
808 m_todoMgr.add(todo ); 812 m_todoMgr.add(todo );
809 currentView()->addEvent( todo ); 813 currentView()->addEvent( todo );
810 814
811 815
812 // I'm afraid we must call this every time now, otherwise 816 // I'm afraid we must call this every time now, otherwise
813 // spend expensive time comparing all these strings... 817 // spend expensive time comparing all these strings...
814 // but only call if we changed something -zecke 818 // but only call if we changed something -zecke
815 populateCategories(); 819 populateCategories();
816} 820}
817void MainWindow::slotReturnFromView() { 821void MainWindow::slotReturnFromView() {
818 raiseCurrentView(); 822 raiseCurrentView();
819} 823}