-rw-r--r-- | korganizer/kotodoview.cpp | 56 | ||||
-rw-r--r-- | korganizer/kotodoview.h | 18 | ||||
-rw-r--r-- | korganizer/kotodoviewitem.cpp | 2 | ||||
-rw-r--r-- | libkcal/todo.cpp | 10 | ||||
-rw-r--r-- | libkcal/todo.h | 1 |
5 files changed, 81 insertions, 6 deletions
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index b2ff33b..99e6a3a 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -16,24 +16,27 @@ | |||
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <qlayout.h> | 24 | #include <qlayout.h> |
25 | #include <qheader.h> | 25 | #include <qheader.h> |
26 | #include <qcursor.h> | 26 | #include <qcursor.h> |
27 | #include <qwhatsthis.h> | 27 | #include <qwhatsthis.h> |
28 | #include <qdialog.h> | ||
29 | #include <qlabel.h> | ||
30 | #include <qpushbutton.h> | ||
28 | 31 | ||
29 | #include <qinputdialog.h> | 32 | #include <qinputdialog.h> |
30 | 33 | ||
31 | #include <qvbox.h> | 34 | #include <qvbox.h> |
32 | #include <kdebug.h> | 35 | #include <kdebug.h> |
33 | #include "koprefs.h" | 36 | #include "koprefs.h" |
34 | #include <klocale.h> | 37 | #include <klocale.h> |
35 | #include <kglobal.h> | 38 | #include <kglobal.h> |
36 | #include <kiconloader.h> | 39 | #include <kiconloader.h> |
37 | #include <kmessagebox.h> | 40 | #include <kmessagebox.h> |
38 | 41 | ||
39 | #include <libkcal/icaldrag.h> | 42 | #include <libkcal/icaldrag.h> |
@@ -49,24 +52,64 @@ | |||
49 | #else | 52 | #else |
50 | #include <qapplication.h> | 53 | #include <qapplication.h> |
51 | #endif | 54 | #endif |
52 | #ifndef KORG_NOPRINTER | 55 | #ifndef KORG_NOPRINTER |
53 | #include "calprinter.h" | 56 | #include "calprinter.h" |
54 | #endif | 57 | #endif |
55 | #include "docprefs.h" | 58 | #include "docprefs.h" |
56 | 59 | ||
57 | #include "kotodoview.h" | 60 | #include "kotodoview.h" |
58 | using namespace KOrg; | 61 | using namespace KOrg; |
59 | 62 | ||
60 | 63 | ||
64 | KOStopTodoPrefs::KOStopTodoPrefs( Todo* todo, QWidget *parent, const char *name ) : | ||
65 | QDialog( parent, name, true ) | ||
66 | { | ||
67 | mTodo = todo; | ||
68 | setCaption( i18n("Stop todo") ); | ||
69 | QVBoxLayout* lay = new QVBoxLayout( this ); | ||
70 | lay->setSpacing( 3 ); | ||
71 | lay->setMargin( 3 ); | ||
72 | QLabel * lab = new QLabel( i18n("%1\nis running!").arg( todo->summary() ), this ); | ||
73 | lay->addWidget( lab ); | ||
74 | lab->setAlignment( AlignHCenter ); | ||
75 | |||
76 | QPushButton * ok = new QPushButton( i18n("Stop and save"), this ); | ||
77 | lay->addWidget( ok ); | ||
78 | QPushButton * cancel = new QPushButton( i18n("Continue running"), this ); | ||
79 | lay->addWidget( cancel ); | ||
80 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); | ||
81 | connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); | ||
82 | ok = new QPushButton( i18n("Stop - do not save"), this ); | ||
83 | connect ( ok,SIGNAL(clicked() ),this , SLOT ( doNotSave() ) ); | ||
84 | lay->addWidget( ok ); | ||
85 | resize( 200, 200 ); | ||
86 | } | ||
87 | |||
88 | void KOStopTodoPrefs::accept() | ||
89 | { | ||
90 | qDebug("KOStopTodoPrefs::accept() "); | ||
91 | QDialog::accept(); | ||
92 | } | ||
93 | void KOStopTodoPrefs::doNotSave() | ||
94 | { | ||
95 | |||
96 | int result = KMessageBox::warningContinueCancel(this, | ||
97 | i18n("Do you really want to set\nthe state to stopped\nwithout saving the data?"),mTodo->summary() ); | ||
98 | if (result != KMessageBox::Continue) return; | ||
99 | mTodo->stopRunning(); | ||
100 | QDialog::accept(); | ||
101 | } | ||
102 | |||
103 | |||
61 | class KOTodoViewWhatsThis :public QWhatsThis | 104 | class KOTodoViewWhatsThis :public QWhatsThis |
62 | { | 105 | { |
63 | public: | 106 | public: |
64 | KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; | 107 | KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; |
65 | 108 | ||
66 | protected: | 109 | protected: |
67 | virtual QString text( const QPoint& p) | 110 | virtual QString text( const QPoint& p) |
68 | { | 111 | { |
69 | return _view->getWhatsThisText(p) ; | 112 | return _view->getWhatsThisText(p) ; |
70 | } | 113 | } |
71 | private: | 114 | private: |
72 | QWidget* _wid; | 115 | QWidget* _wid; |
@@ -1118,39 +1161,44 @@ void KOTodoView::itemDoubleClicked(QListViewItem *item) | |||
1118 | if ( KOPrefs::instance()->mEditOnDoubleClick ) | 1161 | if ( KOPrefs::instance()->mEditOnDoubleClick ) |
1119 | editItem( item ); | 1162 | editItem( item ); |
1120 | else | 1163 | else |
1121 | showItem( item , QPoint(), 0 ); | 1164 | showItem( item , QPoint(), 0 ); |
1122 | } | 1165 | } |
1123 | void KOTodoView::toggleRunningItem() | 1166 | void KOTodoView::toggleRunningItem() |
1124 | { | 1167 | { |
1125 | // qDebug("KOTodoView::toggleRunning() "); | 1168 | // qDebug("KOTodoView::toggleRunning() "); |
1126 | if ( ! mActiveItem ) | 1169 | if ( ! mActiveItem ) |
1127 | return; | 1170 | return; |
1128 | Todo * t = mActiveItem->todo(); | 1171 | Todo * t = mActiveItem->todo(); |
1129 | if ( t->isRunning() ) { | 1172 | if ( t->isRunning() ) { |
1130 | #if 0 | ||
1131 | int result = KMessageBox::warningContinueCancel(this, | ||
1132 | i18n("The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is started"),i18n("Stop todo"),i18n("Cancel"), true); | ||
1133 | #endif | ||
1134 | 1173 | ||
1174 | |||
1175 | KOStopTodoPrefs tp ( t, this ); | ||
1176 | tp.exec(); | ||
1177 | |||
1178 | |||
1179 | #if 0 | ||
1135 | int result = KMessageBox::warningYesNoCancel(this, | 1180 | int result = KMessageBox::warningYesNoCancel(this, |
1136 | i18n("The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is started"),i18n("Stop"),i18n("Stop+note")); | 1181 | i18n("The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is started"),i18n("Stop"),i18n("Stop+note")); |
1137 | if (result == KMessageBox::Cancel) return; | 1182 | if (result == KMessageBox::Cancel) return; |
1138 | if ( result == KMessageBox::No ) { | 1183 | if ( result == KMessageBox::No ) { |
1139 | QString comment = QInputDialog::getText(mActiveItem->text(0).left( 25 ),i18n("Comment for todo:") ); | 1184 | QString comment = QInputDialog::getText(mActiveItem->text(0).left( 25 ),i18n("Comment for todo:") ); |
1140 | t->setRunningFalse( comment ); | 1185 | t->setRunningFalse( comment ); |
1141 | } else { | 1186 | } else { |
1142 | t->setRunning( false ); | 1187 | t->setRunning( false ); |
1143 | } | 1188 | } |
1144 | mActiveItem->construct(); | 1189 | mActiveItem->construct(); |
1190 | |||
1191 | |||
1192 | #endif | ||
1145 | } else { | 1193 | } else { |
1146 | int result = KMessageBox::warningContinueCancel(this, | 1194 | int result = KMessageBox::warningContinueCancel(this, |
1147 | i18n("The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is stopped"),i18n("Start todo"),i18n("Cancel"), true); | 1195 | i18n("The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is stopped"),i18n("Start todo"),i18n("Cancel"), true); |
1148 | if (result != KMessageBox::Continue) return; | 1196 | if (result != KMessageBox::Continue) return; |
1149 | t->setRunning( true ); | 1197 | t->setRunning( true ); |
1150 | mActiveItem->construct(); | 1198 | mActiveItem->construct(); |
1151 | } | 1199 | } |
1152 | } | 1200 | } |
1153 | 1201 | ||
1154 | void KOTodoView::itemClicked(QListViewItem *item) | 1202 | void KOTodoView::itemClicked(QListViewItem *item) |
1155 | { | 1203 | { |
1156 | //qDebug("KOTodoView::itemClicked %d", item); | 1204 | //qDebug("KOTodoView::itemClicked %d", item); |
diff --git a/korganizer/kotodoview.h b/korganizer/kotodoview.h index 1ffc34a..ceabdba 100644 --- a/korganizer/kotodoview.h +++ b/korganizer/kotodoview.h | |||
@@ -23,45 +23,63 @@ | |||
23 | #ifndef KOTODOVIEW_H | 23 | #ifndef KOTODOVIEW_H |
24 | #define KOTODOVIEW_H | 24 | #define KOTODOVIEW_H |
25 | 25 | ||
26 | #include <qfont.h> | 26 | #include <qfont.h> |
27 | #include <qfontmetrics.h> | 27 | #include <qfontmetrics.h> |
28 | #include <qlineedit.h> | 28 | #include <qlineedit.h> |
29 | #include <qptrlist.h> | 29 | #include <qptrlist.h> |
30 | #include <qstrlist.h> | 30 | #include <qstrlist.h> |
31 | #include <qlistbox.h> | 31 | #include <qlistbox.h> |
32 | #include <qpopupmenu.h> | 32 | #include <qpopupmenu.h> |
33 | #include <qlabel.h> | 33 | #include <qlabel.h> |
34 | #include <qmap.h> | 34 | #include <qmap.h> |
35 | #include <qdialog.h> | ||
36 | #include <qlabel.h> | ||
35 | #include <qlistview.h> | 37 | #include <qlistview.h> |
36 | #include <klistview.h> | 38 | #include <klistview.h> |
37 | 39 | ||
38 | #include <libkcal/calendar.h> | 40 | #include <libkcal/calendar.h> |
39 | #include <libkcal/todo.h> | 41 | #include <libkcal/todo.h> |
40 | 42 | ||
41 | #include <korganizer/baseview.h> | 43 | #include <korganizer/baseview.h> |
42 | 44 | ||
43 | #include "kotodoviewitem.h" | 45 | #include "kotodoviewitem.h" |
44 | #include "koprefs.h" | 46 | #include "koprefs.h" |
45 | #include "koglobals.h" | 47 | #include "koglobals.h" |
46 | #include "datenavigator.h" | 48 | #include "datenavigator.h" |
47 | 49 | ||
48 | class QDragEnterEvent; | 50 | class QDragEnterEvent; |
49 | class QDragMoveEvent; | 51 | class QDragMoveEvent; |
50 | class QDragLeaveEvent; | 52 | class QDragLeaveEvent; |
51 | class QDropEvent; | 53 | class QDropEvent; |
52 | class KOTodoViewWhatsThis; | 54 | class KOTodoViewWhatsThis; |
53 | 55 | ||
54 | class DocPrefs; | 56 | class DocPrefs; |
55 | 57 | ||
58 | |||
59 | class KOStopTodoPrefs : public QDialog | ||
60 | { | ||
61 | Q_OBJECT | ||
62 | public: | ||
63 | KOStopTodoPrefs( Todo* todo, QWidget *parent=0, const char *name=0 ) ; | ||
64 | |||
65 | |||
66 | private slots: | ||
67 | void doNotSave(); | ||
68 | void accept(); | ||
69 | private: | ||
70 | Todo* mTodo; | ||
71 | |||
72 | }; | ||
73 | |||
56 | class KOTodoListView : public KListView | 74 | class KOTodoListView : public KListView |
57 | { | 75 | { |
58 | Q_OBJECT | 76 | Q_OBJECT |
59 | public: | 77 | public: |
60 | KOTodoListView(Calendar *,QWidget *parent=0,const char *name=0); | 78 | KOTodoListView(Calendar *,QWidget *parent=0,const char *name=0); |
61 | virtual ~KOTodoListView() {} | 79 | virtual ~KOTodoListView() {} |
62 | 80 | ||
63 | signals: | 81 | signals: |
64 | void paintNeeded(); | 82 | void paintNeeded(); |
65 | void todoDropped(Todo *, int); | 83 | void todoDropped(Todo *, int); |
66 | void double_Clicked(QListViewItem *item); | 84 | void double_Clicked(QListViewItem *item); |
67 | void reparentTodoSignal( Todo *,Todo * ); | 85 | void reparentTodoSignal( Todo *,Todo * ); |
diff --git a/korganizer/kotodoviewitem.cpp b/korganizer/kotodoviewitem.cpp index f62aab8..0cf6e4c 100644 --- a/korganizer/kotodoviewitem.cpp +++ b/korganizer/kotodoviewitem.cpp | |||
@@ -351,25 +351,25 @@ bool KOTodoViewItem::isAlternate() | |||
351 | item = static_cast<KOTodoViewItem *>(item->nextSibling()); | 351 | item = static_cast<KOTodoViewItem *>(item->nextSibling()); |
352 | } | 352 | } |
353 | } | 353 | } |
354 | return m_odd; | 354 | return m_odd; |
355 | } | 355 | } |
356 | return false; | 356 | return false; |
357 | } | 357 | } |
358 | 358 | ||
359 | void KOTodoViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) | 359 | void KOTodoViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) |
360 | { | 360 | { |
361 | QColorGroup _cg = cg; | 361 | QColorGroup _cg = cg; |
362 | QColorGroup::ColorRole role; | 362 | QColorGroup::ColorRole role; |
363 | if ( KOPrefs::instance()->mTodoViewUsesForegroundColor ) | 363 | if ( KOPrefs::instance()->mTodoViewUsesForegroundColor && !mTodo->isRunning()) |
364 | role = QColorGroup::Text; | 364 | role = QColorGroup::Text; |
365 | else | 365 | else |
366 | role = QColorGroup::Base; | 366 | role = QColorGroup::Base; |
367 | //#ifndef KORG_NOLVALTERNATION | 367 | //#ifndef KORG_NOLVALTERNATION |
368 | if (isAlternate()) | 368 | if (isAlternate()) |
369 | _cg.setColor(QColorGroup::Base, static_cast< KOTodoListView* >(listView())->alternateBackground()); | 369 | _cg.setColor(QColorGroup::Base, static_cast< KOTodoListView* >(listView())->alternateBackground()); |
370 | bool setColor = KOPrefs::instance()->mTodoViewUsesCatColors; | 370 | bool setColor = KOPrefs::instance()->mTodoViewUsesCatColors; |
371 | QColor colorToSet; | 371 | QColor colorToSet; |
372 | if ( column == 0 && mTodo->calID() > 1 ) { | 372 | if ( column == 0 && mTodo->calID() > 1 ) { |
373 | setColor = true; | 373 | setColor = true; |
374 | colorToSet = KOPrefs::instance()->defaultColor( mTodo->calID() ); | 374 | colorToSet = KOPrefs::instance()->defaultColor( mTodo->calID() ); |
375 | } else if ( setColor ) { | 375 | } else if ( setColor ) { |
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp index e98af3c..d062492 100644 --- a/libkcal/todo.cpp +++ b/libkcal/todo.cpp | |||
@@ -60,24 +60,32 @@ Todo::~Todo() | |||
60 | setRunning( false ); | 60 | setRunning( false ); |
61 | //qDebug("Todo::~Todo() "); | 61 | //qDebug("Todo::~Todo() "); |
62 | } | 62 | } |
63 | 63 | ||
64 | void Todo::setRunningFalse( QString s ) | 64 | void Todo::setRunningFalse( QString s ) |
65 | { | 65 | { |
66 | if ( ! mRunning ) | 66 | if ( ! mRunning ) |
67 | return; | 67 | return; |
68 | mRunning = false; | 68 | mRunning = false; |
69 | mRunSaveTimer->stop(); | 69 | mRunSaveTimer->stop(); |
70 | saveRunningInfoToFile( s ); | 70 | saveRunningInfoToFile( s ); |
71 | } | 71 | } |
72 | void Todo::stopRunning() | ||
73 | { | ||
74 | if ( !mRunning ) | ||
75 | return; | ||
76 | if ( mRunSaveTimer ) | ||
77 | mRunSaveTimer->stop(); | ||
78 | mRunning = false; | ||
79 | } | ||
72 | void Todo::setRunning( bool run ) | 80 | void Todo::setRunning( bool run ) |
73 | { | 81 | { |
74 | if ( run == mRunning ) | 82 | if ( run == mRunning ) |
75 | return; | 83 | return; |
76 | //qDebug("Todo::setRunning %d ", run); | 84 | //qDebug("Todo::setRunning %d ", run); |
77 | if ( !mRunSaveTimer ) { | 85 | if ( !mRunSaveTimer ) { |
78 | mRunSaveTimer = new QTimer ( this ); | 86 | mRunSaveTimer = new QTimer ( this ); |
79 | connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) ); | 87 | connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) ); |
80 | } | 88 | } |
81 | mRunning = run; | 89 | mRunning = run; |
82 | if ( mRunning ) { | 90 | if ( mRunning ) { |
83 | mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min | 91 | mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min |
@@ -86,25 +94,25 @@ void Todo::setRunning( bool run ) | |||
86 | mRunSaveTimer->stop(); | 94 | mRunSaveTimer->stop(); |
87 | saveRunningInfoToFile(); | 95 | saveRunningInfoToFile(); |
88 | } | 96 | } |
89 | } | 97 | } |
90 | 98 | ||
91 | void Todo::saveRunningInfoToFile() | 99 | void Todo::saveRunningInfoToFile() |
92 | { | 100 | { |
93 | saveRunningInfoToFile( QString::null ); | 101 | saveRunningInfoToFile( QString::null ); |
94 | } | 102 | } |
95 | void Todo::saveRunningInfoToFile( QString comment ) | 103 | void Todo::saveRunningInfoToFile( QString comment ) |
96 | { | 104 | { |
97 | //qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1()); | 105 | //qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1()); |
98 | if ( mRunStart.secsTo ( QDateTime::currentDateTime() ) < 30 ) { | 106 | if ( mRunStart.secsTo ( QDateTime::currentDateTime() ) < 10 ) { |
99 | qDebug("Running time < 30 seconds. Skipped. "); | 107 | qDebug("Running time < 30 seconds. Skipped. "); |
100 | return; | 108 | return; |
101 | } | 109 | } |
102 | QString dir = KGlobalSettings::timeTrackerDir(); | 110 | QString dir = KGlobalSettings::timeTrackerDir(); |
103 | //qDebug("%s ", dir.latin1()); | 111 | //qDebug("%s ", dir.latin1()); |
104 | QString file = "%1%2%3-%4%5%6-"; | 112 | QString file = "%1%2%3-%4%5%6-"; |
105 | file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 ); | 113 | file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 ); |
106 | file.replace ( QRegExp (" "), "0" ); | 114 | file.replace ( QRegExp (" "), "0" ); |
107 | file += uid(); | 115 | file += uid(); |
108 | //qDebug("File %s ",file.latin1() ); | 116 | //qDebug("File %s ",file.latin1() ); |
109 | CalendarLocal cal; | 117 | CalendarLocal cal; |
110 | cal.setLocalTime(); | 118 | cal.setLocalTime(); |
diff --git a/libkcal/todo.h b/libkcal/todo.h index 6fc4d4b..42db025 100644 --- a/libkcal/todo.h +++ b/libkcal/todo.h | |||
@@ -113,24 +113,25 @@ namespace KCal { | |||
113 | /** set date and time of completion */ | 113 | /** set date and time of completion */ |
114 | void setCompleted(const QDateTime &completed); | 114 | void setCompleted(const QDateTime &completed); |
115 | 115 | ||
116 | /** Return true, if todo has a date associated with completion */ | 116 | /** Return true, if todo has a date associated with completion */ |
117 | bool hasCompletedDate() const; | 117 | bool hasCompletedDate() const; |
118 | bool contains ( Todo*); | 118 | bool contains ( Todo*); |
119 | void checkSetCompletedFalse(); | 119 | void checkSetCompletedFalse(); |
120 | bool setRecurDates(); | 120 | bool setRecurDates(); |
121 | bool isRunning() {return mRunning;} | 121 | bool isRunning() {return mRunning;} |
122 | bool hasRunningSub(); | 122 | bool hasRunningSub(); |
123 | void setRunning( bool ); | 123 | void setRunning( bool ); |
124 | void setRunningFalse( QString ); | 124 | void setRunningFalse( QString ); |
125 | void stopRunning(); | ||
125 | int runTime(); | 126 | int runTime(); |
126 | QDateTime runStart () const { return mRunStart;} | 127 | QDateTime runStart () const { return mRunStart;} |
127 | public slots: | 128 | public slots: |
128 | void saveRunningInfoToFile( QString st ); | 129 | void saveRunningInfoToFile( QString st ); |
129 | void saveRunningInfoToFile( ); | 130 | void saveRunningInfoToFile( ); |
130 | void saveParents(); | 131 | void saveParents(); |
131 | private: | 132 | private: |
132 | bool mRunning; | 133 | bool mRunning; |
133 | QTimer * mRunSaveTimer; | 134 | QTimer * mRunSaveTimer; |
134 | QDateTime mRunStart; | 135 | QDateTime mRunStart; |
135 | bool accept(Visitor &v) { return v.visit(this); } | 136 | bool accept(Visitor &v) { return v.visit(this); } |
136 | 137 | ||