summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/TODO3
-rw-r--r--core/pim/todo/mainwindow.cpp9
-rw-r--r--core/pim/todo/mainwindow.h3
3 files changed, 13 insertions, 2 deletions
diff --git a/core/pim/todo/TODO b/core/pim/todo/TODO
index e5d2f9d..040f163 100644
--- a/core/pim/todo/TODO
+++ b/core/pim/todo/TODO
@@ -1,3 +1,4 @@
1-fix the journal 1-fix the journal
2-fix day wrapping update all DueDateItems 2-fix day wrapping update all DueDateItems
3-when checking the C. box update the deadline \ No newline at end of file 3-when checking the C. box update the deadline
4-TodoLabel : public TextView
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index a34bcf2..b5cace9 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -1,78 +1,79 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3 Copyright (C) 2002 zecke 3 Copyright (C) 2002 zecke
4 Copyright (C) 2002 Stefan Eilers 4 Copyright (C) 2002 Stefan Eilers
5** 5**
6** This file is part of Qtopia Environment. 6** This file is part of Qtopia Environment.
7** 7**
8** This file may be distributed and/or modified under the terms of the 8** This file may be distributed and/or modified under the terms of the
9** GNU General Public License version 2 as published by the Free Software 9** GNU General Public License version 2 as published by the Free Software
10** Foundation and appearing in the file LICENSE.GPL included in the 10** Foundation and appearing in the file LICENSE.GPL included in the
11** packaging of this file. 11** packaging of this file.
12** 12**
13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15** 15**
16** See http://www.trolltech.com/gpl/ for GPL licensing information. 16** See http://www.trolltech.com/gpl/ for GPL licensing information.
17** 17**
18** Contact info@trolltech.com if any conditions of this licensing are 18** Contact info@trolltech.com if any conditions of this licensing are
19** not clear to you. 19** not clear to you.
20** 20**
21**********************************************************************/ 21**********************************************************************/
22 22
23#define QTOPIA_INTERNAL_FD 23#define QTOPIA_INTERNAL_FD
24 24
25#include "mainwindow.h" 25#include "mainwindow.h"
26#include "todoentryimpl.h" 26#include "todoentryimpl.h"
27#include "todotable.h" 27#include "todotable.h"
28 28
29#include <opie/tododb.h> 29#include <opie/tododb.h>
30#include <opie/todovcalresource.h> 30#include <opie/todovcalresource.h>
31#include <opie/ofontmenu.h>
31 32
32#include <qpe/qpeapplication.h> 33#include <qpe/qpeapplication.h>
33#include <qpe/config.h> 34#include <qpe/config.h>
34#include <qpe/finddialog.h> 35#include <qpe/finddialog.h>
35#include <qpe/global.h> 36#include <qpe/global.h>
36#include <qpe/ir.h> 37#include <qpe/ir.h>
37#include <qpe/qpemenubar.h> 38#include <qpe/qpemenubar.h>
38#include <qpe/qpemessagebox.h> 39#include <qpe/qpemessagebox.h>
39#include <qpe/resource.h> 40#include <qpe/resource.h>
40//#include <qpe/task.h> 41//#include <qpe/task.h>
41#include <qpe/qpetoolbar.h> 42#include <qpe/qpetoolbar.h>
42 43
43#include <qaction.h> 44#include <qaction.h>
44#include <qarray.h> 45#include <qarray.h>
45#include <qdatastream.h> 46#include <qdatastream.h>
46#include <qdatetime.h> 47#include <qdatetime.h>
47#include <qfile.h> 48#include <qfile.h>
48#include <qmessagebox.h> 49#include <qmessagebox.h>
49#include <qpopupmenu.h> 50#include <qpopupmenu.h>
50 51
51#include <sys/stat.h> 52#include <sys/stat.h>
52#include <sys/types.h> 53#include <sys/types.h>
53#include <fcntl.h> 54#include <fcntl.h>
54#include <unistd.h> 55#include <unistd.h>
55 56
56#include <stdlib.h> 57#include <stdlib.h>
57 58
58static QString todolistXMLFilename() 59static QString todolistXMLFilename()
59{ 60{
60 return Global::applicationFileName("todolist","todolist.xml"); 61 return Global::applicationFileName("todolist","todolist.xml");
61} 62}
62 63
63static QString categoriesXMLFilename() 64static QString categoriesXMLFilename()
64{ 65{
65 return Global::applicationFileName("todolist","categories.xml"); 66 return Global::applicationFileName("todolist","categories.xml");
66} 67}
67 68
68TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) : 69TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
69 QMainWindow( parent, name, f ), syncing(FALSE) 70 QMainWindow( parent, name, f ), syncing(FALSE)
70{ 71{
71// QTime t; 72// QTime t;
72// t.start(); 73// t.start();
73 74
74 setCaption( tr("Todo") ); 75 setCaption( tr("Todo") );
75 QString str; 76 QString str;
76 table = new TodoTable( this ); 77 table = new TodoTable( this );
77 table->setColumnWidth( 2, 10 ); 78 table->setColumnWidth( 2, 10 );
78 table->setPaintingEnabled( FALSE ); 79 table->setPaintingEnabled( FALSE );
@@ -140,97 +141,97 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
140 this, SLOT( slotEdit() ) ); 141 this, SLOT( slotEdit() ) );
141 a->addTo( bar ); 142 a->addTo( bar );
142 a->addTo( edit ); 143 a->addTo( edit );
143 a->addTo( contextMenu ); 144 a->addTo( contextMenu );
144 a->setEnabled( FALSE ); 145 a->setEnabled( FALSE );
145 editAction = a; 146 editAction = a;
146 147
147 a = new QAction( tr( "Delete" ), Resource::loadIconSet( "trash" ), 148 a = new QAction( tr( "Delete" ), Resource::loadIconSet( "trash" ),
148 QString::null, 0, this, 0 ); 149 QString::null, 0, this, 0 );
149 connect( a, SIGNAL( activated() ), 150 connect( a, SIGNAL( activated() ),
150 this, SLOT( slotDelete() ) ); 151 this, SLOT( slotDelete() ) );
151 a->addTo( bar ); 152 a->addTo( bar );
152 a->addTo( edit ); 153 a->addTo( edit );
153 a->addTo( contextMenu ); 154 a->addTo( contextMenu );
154 a->setEnabled( FALSE ); 155 a->setEnabled( FALSE );
155 deleteAction = a; 156 deleteAction = a;
156 157
157 if ( Ir::supported() ) { 158 if ( Ir::supported() ) {
158 a = new QAction( tr( "Beam" ), Resource::loadPixmap( "beam" ), 159 a = new QAction( tr( "Beam" ), Resource::loadPixmap( "beam" ),
159 QString::null, 0, this, 0 ); 160 QString::null, 0, this, 0 );
160 connect( a, SIGNAL( activated() ), 161 connect( a, SIGNAL( activated() ),
161 this, SLOT( slotBeam() ) ); 162 this, SLOT( slotBeam() ) );
162 a->addTo( edit ); 163 a->addTo( edit );
163 a->addTo( bar ); 164 a->addTo( bar );
164 } 165 }
165 166
166 a = new QAction( tr( "Find" ), Resource::loadIconSet( "mag" ), 167 a = new QAction( tr( "Find" ), Resource::loadIconSet( "mag" ),
167 QString::null, 0, this, 0 ); 168 QString::null, 0, this, 0 );
168 connect( a, SIGNAL( activated() ), 169 connect( a, SIGNAL( activated() ),
169 this, SLOT( slotFind() ) ); 170 this, SLOT( slotFind() ) );
170 a->addTo( bar ); 171 a->addTo( bar );
171 a->addTo( edit ); 172 a->addTo( edit );
172 if ( table->numRows() ) 173 if ( table->numRows() )
173 a->setEnabled( TRUE ); 174 a->setEnabled( TRUE );
174 else 175 else
175 a->setEnabled( FALSE ); 176 a->setEnabled( FALSE );
176 177
177 //a->setEnabled( FALSE ); 178 //a->setEnabled( FALSE );
178 findAction = a; 179 findAction = a;
179// qDebug("mainwindow #2: t=%d", t.elapsed() ); 180// qDebug("mainwindow #2: t=%d", t.elapsed() );
180 181
181 completedAction = new QAction( QString::null, tr("Completed tasks"), 0, this, 0, TRUE ); 182 completedAction = new QAction( QString::null, tr("Completed tasks"), 0, this, 0, TRUE );
182 183
183 showdeadlineAction = new QAction( QString::null, tr( "Show Deadline" ), 0, this, 0, TRUE ); 184 showdeadlineAction = new QAction( QString::null, tr( "Show Deadline" ), 0, this, 0, TRUE );
184 185
185 catMenu->setCheckable( true ); 186 catMenu->setCheckable( true );
186 populateCategories(); 187 populateCategories();
187 188
188 mb->insertItem( tr( "Task" ), edit ); 189 mb->insertItem( tr( "Data" ), edit );
189 mb->insertItem( tr( "View" ), catMenu ); 190 mb->insertItem( tr( "View" ), catMenu );
190 191
191 resize( 200, 300 ); 192 resize( 200, 300 );
192 if ( table->numRows() > 0 ) 193 if ( table->numRows() > 0 )
193 currentEntryChanged( 0, 0 ); 194 currentEntryChanged( 0, 0 );
194 connect( table, SIGNAL( signalEdit() ), 195 connect( table, SIGNAL( signalEdit() ),
195 this, SLOT( slotEdit() ) ); 196 this, SLOT( slotEdit() ) );
196 connect( table, SIGNAL(signalShowMenu(const QPoint &)), 197 connect( table, SIGNAL(signalShowMenu(const QPoint &)),
197 this, SLOT( slotShowPopup(const QPoint &)) ); 198 this, SLOT( slotShowPopup(const QPoint &)) );
198 199
199// qDebug("mainwindow #3: t=%d", t.elapsed() ); 200// qDebug("mainwindow #3: t=%d", t.elapsed() );
200 table->updateVisible(); 201 table->updateVisible();
201 table->setUpdatesEnabled( TRUE ); 202 table->setUpdatesEnabled( TRUE );
202 table->setPaintingEnabled( TRUE ); 203 table->setPaintingEnabled( TRUE );
203 table->viewport()->setUpdatesEnabled( TRUE ); 204 table->viewport()->setUpdatesEnabled( TRUE );
204 205
205 connect( completedAction, SIGNAL( toggled(bool) ), this, SLOT( showCompleted(bool) ) ); 206 connect( completedAction, SIGNAL( toggled(bool) ), this, SLOT( showCompleted(bool) ) );
206 connect( showdeadlineAction, SIGNAL( toggled(bool) ), this, SLOT( showDeadline(bool) ) ); 207 connect( showdeadlineAction, SIGNAL( toggled(bool) ), this, SLOT( showDeadline(bool) ) );
207 connect( catMenu, SIGNAL(activated(int)), this, SLOT(setCategory(int)) ); 208 connect( catMenu, SIGNAL(activated(int)), this, SLOT(setCategory(int)) );
208 connect( table, SIGNAL( currentChanged( int, int ) ), 209 connect( table, SIGNAL( currentChanged( int, int ) ),
209 this, SLOT( currentEntryChanged( int, int ) ) ); 210 this, SLOT( currentEntryChanged( int, int ) ) );
210 211
211// qDebug("done: t=%d", t.elapsed() ); 212// qDebug("done: t=%d", t.elapsed() );
212} 213}
213 214
214void TodoWindow::slotNew() 215void TodoWindow::slotNew()
215{ 216{
216 if(syncing) { 217 if(syncing) {
217 QMessageBox::warning(this, tr("Todo"), 218 QMessageBox::warning(this, tr("Todo"),
218 tr("Can not edit data, currently syncing")); 219 tr("Can not edit data, currently syncing"));
219 return; 220 return;
220 } 221 }
221 222
222 int id; 223 int id;
223 id = -1; 224 id = -1;
224 QArray<int> ids; 225 QArray<int> ids;
225 ids = table->currentEntry().categories(); 226 ids = table->currentEntry().categories();
226 if ( ids.count() ) 227 if ( ids.count() )
227 id = ids[0]; 228 id = ids[0];
228 NewTaskDialog e( id, this, 0, TRUE ); 229 NewTaskDialog e( id, this, 0, TRUE );
229 230
230 ToDoEvent todo; 231 ToDoEvent todo;
231 232
232#if defined(Q_WS_QWS) || defined(_WS_QWS_) 233#if defined(Q_WS_QWS) || defined(_WS_QWS_)
233 e.showMaximized(); 234 e.showMaximized();
234#endif 235#endif
235 int ret = e.exec(); 236 int ret = e.exec();
236 qWarning("finished" ); 237 qWarning("finished" );
@@ -313,96 +314,102 @@ void TodoWindow::slotShowPopup( const QPoint &p )
313} 314}
314 315
315void TodoWindow::showCompleted( bool s ) 316void TodoWindow::showCompleted( bool s )
316{ 317{
317 if ( !table->isUpdatesEnabled() ) 318 if ( !table->isUpdatesEnabled() )
318 return; 319 return;
319 table->setPaintingEnabled( false ); 320 table->setPaintingEnabled( false );
320 table->setShowCompleted( s ); 321 table->setShowCompleted( s );
321 table->setPaintingEnabled( true ); 322 table->setPaintingEnabled( true );
322} 323}
323 324
324void TodoWindow::currentEntryChanged( int r, int ) 325void TodoWindow::currentEntryChanged( int r, int )
325{ 326{
326 if ( r != -1 && table->rowHeight( r ) > 0 ) { 327 if ( r != -1 && table->rowHeight( r ) > 0 ) {
327 editAction->setEnabled( TRUE ); 328 editAction->setEnabled( TRUE );
328 deleteAction->setEnabled( TRUE ); 329 deleteAction->setEnabled( TRUE );
329 } else { 330 } else {
330 editAction->setEnabled( FALSE ); 331 editAction->setEnabled( FALSE );
331 deleteAction->setEnabled( FALSE ); 332 deleteAction->setEnabled( FALSE );
332 } 333 }
333} 334}
334 335
335void TodoWindow::setCategory( int c ) 336void TodoWindow::setCategory( int c )
336{ 337{
337 if ( c <= 0 ) return; 338 if ( c <= 0 ) return;
338 if ( !table->isUpdatesEnabled() ) 339 if ( !table->isUpdatesEnabled() )
339 return; 340 return;
340 table->setPaintingEnabled( false ); 341 table->setPaintingEnabled( false );
341 for ( unsigned int i = 1; i < catMenu->count(); i++ ) 342 for ( unsigned int i = 1; i < catMenu->count(); i++ )
342 catMenu->setItemChecked( i, c == (int)i ); 343 catMenu->setItemChecked( i, c == (int)i );
343 if ( c == 1 ) { 344 if ( c == 1 ) {
344 table->setShowCategory( QString::null ); 345 table->setShowCategory( QString::null );
345 setCaption( tr("Todo") + " - " + tr( "All Categories" ) ); 346 setCaption( tr("Todo") + " - " + tr( "All Categories" ) );
346 } else if ( c == (int)catMenu->count() - 1 ) { 347 } else if ( c == (int)catMenu->count() - 1 ) {
347 table->setShowCategory( tr( "Unfiled" ) ); 348 table->setShowCategory( tr( "Unfiled" ) );
348 setCaption( tr("Todo") + " - " + tr( "Unfiled" ) ); 349 setCaption( tr("Todo") + " - " + tr( "Unfiled" ) );
349 } else { 350 } else {
350 QString cat = table->categories()[c - 2]; 351 QString cat = table->categories()[c - 2];
351 table->setShowCategory( cat ); 352 table->setShowCategory( cat );
352 setCaption( tr("Todo") + " - " + cat ); 353 setCaption( tr("Todo") + " - " + cat );
353 } 354 }
354 table->setPaintingEnabled( true ); 355 table->setPaintingEnabled( true );
355} 356}
356 357
357void TodoWindow::populateCategories() 358void TodoWindow::populateCategories()
358{ 359{
359 catMenu->clear(); 360 catMenu->clear();
360 361
362 QList<QWidget> list;
363 list.append(table );
364 OFontMenu *menu = new OFontMenu(this, "menu",list );
365 menu->forceSize( table->horizontalHeader(), 10 );
366 catMenu->insertItem(tr("Fonts"), menu );
367
361 completedAction->addTo( catMenu ); 368 completedAction->addTo( catMenu );
362 completedAction->setOn( table->showCompleted() ); 369 completedAction->setOn( table->showCompleted() );
363 showdeadlineAction->addTo( catMenu ); 370 showdeadlineAction->addTo( catMenu );
364 showdeadlineAction->setOn( table->showDeadline() ); 371 showdeadlineAction->setOn( table->showDeadline() );
365 catMenu->insertSeparator(); 372 catMenu->insertSeparator();
366 int id, rememberId; 373 int id, rememberId;
367 id = 1; 374 id = 1;
368 catMenu->insertItem( tr( "All Categories" ), id++ ); 375 catMenu->insertItem( tr( "All Categories" ), id++ );
369// catMenu->insertSeparator(); 376// catMenu->insertSeparator();
370 QStringList categories = table->categories(); 377 QStringList categories = table->categories();
371 categories.append( tr( "Unfiled" ) ); 378 categories.append( tr( "Unfiled" ) );
372 for ( QStringList::Iterator it = categories.begin(); 379 for ( QStringList::Iterator it = categories.begin();
373 it != categories.end(); ++it ) { 380 it != categories.end(); ++it ) {
374 catMenu->insertItem( *it, id ); 381 catMenu->insertItem( *it, id );
375 if ( *it == table->showCategory() ) 382 if ( *it == table->showCategory() )
376 rememberId = id; 383 rememberId = id;
377 ++id; 384 ++id;
378 } 385 }
379 if ( table->showCategory().isEmpty() ) 386 if ( table->showCategory().isEmpty() )
380 setCategory( 1 ); 387 setCategory( 1 );
381 else 388 else
382 setCategory( rememberId ); 389 setCategory( rememberId );
383} 390}
384 391
385void TodoWindow::reload() 392void TodoWindow::reload()
386{ 393{
387 table->clear(); 394 table->clear();
388 table->load( todolistXMLFilename() ); 395 table->load( todolistXMLFilename() );
389 syncing = FALSE; 396 syncing = FALSE;
390} 397}
391 398
392void TodoWindow::flush() 399void TodoWindow::flush()
393{ 400{
394 syncing = TRUE; 401 syncing = TRUE;
395 table->save( todolistXMLFilename() ); 402 table->save( todolistXMLFilename() );
396} 403}
397 404
398void TodoWindow::closeEvent( QCloseEvent *e ) 405void TodoWindow::closeEvent( QCloseEvent *e )
399{ 406{
400 if(syncing) { 407 if(syncing) {
401 /* no need to save if in the middle of syncing */ 408 /* no need to save if in the middle of syncing */
402 e->accept(); 409 e->accept();
403 return; 410 return;
404 } 411 }
405 412
406 if ( table->save( todolistXMLFilename() ) ) { 413 if ( table->save( todolistXMLFilename() ) ) {
407 e->accept(); 414 e->accept();
408 // repeat for categories... 415 // repeat for categories...
diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h
index a81c27c..9be7c66 100644
--- a/core/pim/todo/mainwindow.h
+++ b/core/pim/todo/mainwindow.h
@@ -1,79 +1,82 @@
1/********************************************************************** 1/**********************************************************************
2 Copyright (C) 2002 Holger 'zecke' Freyther <freyther@kde.org> 2 Copyright (C) 2002 Holger 'zecke' Freyther <freyther@kde.org>
3** Copyright (C) 2000 Trolltech AS. All rights reserved. 3** Copyright (C) 2000 Trolltech AS. All rights reserved.
4** 4**
5** This file is part of Qtopia and Opi Environment. 5** This file is part of Qtopia and Opi Environment.
6** 6**
7** This file may be distributed and/or modified under the terms of the 7** This file may be distributed and/or modified under the terms of the
8** GNU General Public License version 2 as published by the Free Software 8** GNU General Public License version 2 as published by the Free Software
9** Foundation and appearing in the file LICENSE.GPL included in the 9** Foundation and appearing in the file LICENSE.GPL included in the
10** packaging of this file. 10** packaging of this file.
11** 11**
12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14** 14**
15** See http://www.trolltech.com/gpl/ for GPL licensing information. 15** See http://www.trolltech.com/gpl/ for GPL licensing information.
16** 16**
17** Contact info@trolltech.com if any conditions of this licensing are 17** Contact info@trolltech.com if any conditions of this licensing are
18** not clear to you. 18** not clear to you.
19** 19**
20**********************************************************************/ 20**********************************************************************/
21 21
22#ifndef MAINWINDOW_H 22#ifndef MAINWINDOW_H
23#define MAINWINDOW_H 23#define MAINWINDOW_H
24 24
25#include <qmainwindow.h> 25#include <qmainwindow.h>
26 26
27class TodoTable; 27class TodoTable;
28class QAction; 28class QAction;
29class QPopupMenu; 29class QPopupMenu;
30class Ir; 30class Ir;
31class OFontMenu;
31 32
32class TodoWindow : public QMainWindow 33class TodoWindow : public QMainWindow
33{ 34{
34 Q_OBJECT 35 Q_OBJECT
35 36
36public: 37public:
37 TodoWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 38 TodoWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
38 ~TodoWindow(); 39 ~TodoWindow();
39 40
40public slots: 41public slots:
41 void flush(); 42 void flush();
42 void reload(); 43 void reload();
43 44
44protected slots: 45protected slots:
45 void slotNew(); 46 void slotNew();
46 void slotDelete(); 47 void slotDelete();
47 void slotEdit(); 48 void slotEdit();
48 void slotShowPopup( const QPoint & ); 49 void slotShowPopup( const QPoint & );
49 void showCompleted( bool ); 50 void showCompleted( bool );
50 51
51 /* added 20.01.2k2 by se */ 52 /* added 20.01.2k2 by se */
52 void showDeadline( bool ); 53 void showDeadline( bool );
53 54
54 void currentEntryChanged( int r, int c ); 55 void currentEntryChanged( int r, int c );
55 void setCategory( int ); 56 void setCategory( int );
56 void slotFind(); 57 void slotFind();
57 void setDocument( const QString & ); 58 void setDocument( const QString & );
58 void slotBeam(); 59 void slotBeam();
59 void beamDone( Ir * ); 60 void beamDone( Ir * );
60 61
61protected: 62protected:
62 void closeEvent( QCloseEvent *e ); 63 void closeEvent( QCloseEvent *e );
63 64
64private: 65private:
65 void populateCategories(); 66 void populateCategories();
66 67
67private: 68private:
68 TodoTable *table; 69 TodoTable *table;
69 QAction *editAction, 70 QAction *editAction,
70 *deleteAction, 71 *deleteAction,
71 *findAction, 72 *findAction,
72 * completedAction, 73 * completedAction,
73 *showdeadlineAction ; 74 *showdeadlineAction ;
74 QPopupMenu *contextMenu, *catMenu; 75 QPopupMenu *contextMenu, *catMenu;
75 76
76 bool syncing; 77 bool syncing;
77}; 78};
78 79
79#endif 80#endif
81
82