summaryrefslogtreecommitdiff
authorharlekin <harlekin>2002-04-07 13:08:50 (UTC)
committer harlekin <harlekin>2002-04-07 13:08:50 (UTC)
commit9aced2eebc244de560c1ca72786183dc93019b9d (patch) (unidiff)
treea9061ef92e0510efb552088d464ac218583f142a
parentf87f79ef356475764d8b9011c3f3b467d3015426 (diff)
downloadopie-9aced2eebc244de560c1ca72786183dc93019b9d.zip
opie-9aced2eebc244de560c1ca72786183dc93019b9d.tar.gz
opie-9aced2eebc244de560c1ca72786183dc93019b9d.tar.bz2
fixed a mem leak, patch by Stefan Eilers
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/today.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index 51aba69..7cef035 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -14,128 +14,129 @@
14 * it under the terms of the GNU General Public License as published by * 14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or * 15 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. * 16 * (at your option) any later version. *
17 * * 17 * *
18 ***************************************************************************/ 18 ***************************************************************************/
19 19
20#include "today.h" 20#include "today.h"
21 21
22#include <qpe/timestring.h> 22#include <qpe/timestring.h>
23#include <qpe/config.h> 23#include <qpe/config.h>
24#include <qpe/qcopenvelope_qws.h> 24#include <qpe/qcopenvelope_qws.h>
25#include <qpe/qprocess.h> 25#include <qpe/qprocess.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/contact.h> 27#include <qpe/contact.h>
28#include <qpe/global.h> 28#include <qpe/global.h>
29#include <qpe/qpeapplication.h> 29#include <qpe/qpeapplication.h>
30 30
31#include <qdir.h> 31#include <qdir.h>
32#include <qfile.h> 32#include <qfile.h>
33#include <qdatetime.h> 33#include <qdatetime.h>
34#include <qtextstream.h> 34#include <qtextstream.h>
35#include <qcheckbox.h> 35#include <qcheckbox.h>
36#include <qspinbox.h> 36#include <qspinbox.h>
37#include <qpushbutton.h> 37#include <qpushbutton.h>
38#include <qlabel.h> 38#include <qlabel.h>
39#include <qtimer.h> 39#include <qtimer.h>
40#include <qpixmap.h> 40#include <qpixmap.h>
41#include <qfileinfo.h> 41#include <qfileinfo.h>
42#include <qlayout.h> 42#include <qlayout.h>
43#include <qtl.h> 43#include <qtl.h>
44 44
45//#include <iostream.h> 45//#include <iostream.h>
46#include <unistd.h> 46#include <unistd.h>
47#include <stdlib.h> 47#include <stdlib.h>
48 48
49int MAX_LINES_TASK; 49int MAX_LINES_TASK;
50int MAX_CHAR_CLIP; 50int MAX_CHAR_CLIP;
51int MAX_LINES_MEET; 51int MAX_LINES_MEET;
52int SHOW_LOCATION; 52int SHOW_LOCATION;
53int SHOW_NOTES; 53int SHOW_NOTES;
54// show only later dates 54// show only later dates
55int ONLY_LATER; 55int ONLY_LATER;
56int AUTOSTART; 56int AUTOSTART;
57int NEW_START=1; 57int NEW_START=1;
58 58
59/* 59/*
60 * Constructs a Example which is a child of 'parent', with the 60 * Constructs a Example which is a child of 'parent', with the
61 * name 'name' and widget flags set to 'f' 61 * name 'name' and widget flags set to 'f'
62 */ 62 */
63Today::Today( QWidget* parent, const char* name, WFlags fl ) 63Today::Today( QWidget* parent, const char* name, WFlags fl )
64 : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) { 64 : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) {
65 QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) ); 65 QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) );
66 QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) ); 66 QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) );
67 QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) ); 67 QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) );
68 QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) ); 68 QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) );
69 69
70#if defined(Q_WS_QWS) 70#if defined(Q_WS_QWS)
71#if !defined(QT_NO_COP) 71#if !defined(QT_NO_COP)
72 QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this ); 72 QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this );
73 connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)), 73 connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)),
74 this, SLOT ( channelReceived(const QCString &, const QByteArray &)) ); 74 this, SLOT ( channelReceived(const QCString &, const QByteArray &)) );
75#endif 75#endif
76#endif 76#endif
77 77
78 db = NULL;
78 setOwnerField(); 79 setOwnerField();
79 todo = new ToDoDB; 80 todo = new ToDoDB;
80 getTodo(); 81 getTodo();
81 draw(); 82 draw();
82 autoStart(); 83 autoStart();
83} 84}
84 85
85/* 86/*
86 * Qcop receive method. 87 * Qcop receive method.
87 */ 88 */
88void Today::channelReceived(const QCString &msg, const QByteArray & data) { 89void Today::channelReceived(const QCString &msg, const QByteArray & data) {
89 QDataStream stream(data, IO_ReadOnly ); 90 QDataStream stream(data, IO_ReadOnly );
90 if ( msg == "message(QString)" ) { 91 if ( msg == "message(QString)" ) {
91 QString message; 92 QString message;
92 stream >> message; 93 stream >> message;
93 setOwnerField(message); 94 setOwnerField(message);
94 } 95 }
95 96
96} 97}
97 98
98/* 99/*
99 * Initialises the owner field with the default value, the username 100 * Initialises the owner field with the default value, the username
100 */ 101 */
101void Today::setOwnerField() { 102void Today::setOwnerField() {
102 QString file = Global::applicationFileName("addressbook", "businesscard.vcf"); 103 QString file = Global::applicationFileName("addressbook", "businesscard.vcf");
103 if (QFile::exists(file)) { 104 if (QFile::exists(file)) {
104 Contact cont = Contact::readVCard(file)[0]; 105 Contact cont = Contact::readVCard(file)[0];
105 QString returnString = cont.fullName(); 106 QString returnString = cont.fullName();
106 OwnerField->setText( tr ("<b>Owned by " + returnString + "</b>")); 107 OwnerField->setText( tr ("<b>Owned by " + returnString + "</b>"));
107 } else { 108 } else {
108 OwnerField->setText( tr ("<b>Please fill out the business card </b>")); 109 OwnerField->setText( tr ("<b>Please fill out the business card </b>"));
109 } 110 }
110} 111}
111 112
112/* 113/*
113 * Set the owner field with a given QString, for example per qcop. 114 * Set the owner field with a given QString, for example per qcop.
114 */ 115 */
115void Today::setOwnerField(QString &message) { 116void Today::setOwnerField(QString &message) {
116 if (!message.isEmpty()) { 117 if (!message.isEmpty()) {
117 OwnerField->setText("<b>" + message + "</b>"); 118 OwnerField->setText("<b>" + message + "</b>");
118 } 119 }
119} 120}
120 121
121/* 122/*
122 * Autostart, uses the new (opie only) autostart method in the launcher code. 123 * Autostart, uses the new (opie only) autostart method in the launcher code.
123 * If registered against that today ist started on each resume. 124 * If registered against that today ist started on each resume.
124 */ 125 */
125void Today::autoStart() { 126void Today::autoStart() {
126 Config cfg("today"); 127 Config cfg("today");
127 cfg.setGroup("Autostart"); 128 cfg.setGroup("Autostart");
128 AUTOSTART = cfg.readNumEntry("autostart",1); 129 AUTOSTART = cfg.readNumEntry("autostart",1);
129 if (AUTOSTART) { 130 if (AUTOSTART) {
130 QCopEnvelope e("QPE/System", "autoStart(QString,QString)"); 131 QCopEnvelope e("QPE/System", "autoStart(QString,QString)");
131 e << QString("add"); 132 e << QString("add");
132 e << QString("today"); 133 e << QString("today");
133 } else { 134 } else {
134 QCopEnvelope e("QPE/System", "autoStart(QString,QString)"); 135 QCopEnvelope e("QPE/System", "autoStart(QString,QString)");
135 e << QString("remove"); 136 e << QString("remove");
136 e << QString("today"); 137 e << QString("today");
137 } 138 }
138} 139}
139 140
140/* 141/*
141 * Repaint method. Reread all fields. 142 * Repaint method. Reread all fields.
@@ -148,194 +149,199 @@ void Today::draw() {
148 // if the todolist.xml file was not modified in between, do not parse it. 149 // if the todolist.xml file was not modified in between, do not parse it.
149 if (checkIfModified()) { 150 if (checkIfModified()) {
150 if (todo) delete todo; 151 if (todo) delete todo;
151 todo = new ToDoDB; 152 todo = new ToDoDB;
152 getTodo(); 153 getTodo();
153 } 154 }
154 155
155 // how often refresh 156 // how often refresh
156 QTimer::singleShot( 20*1000, this, SLOT(draw() ) ); 157 QTimer::singleShot( 20*1000, this, SLOT(draw() ) );
157} 158}
158 159
159/* 160/*
160 * Check if the todolist.xml was modified (if there are new entries. 161 * Check if the todolist.xml was modified (if there are new entries.
161 * Returns true if it was modified. 162 * Returns true if it was modified.
162 */ 163 */
163bool Today::checkIfModified() { 164bool Today::checkIfModified() {
164 165
165 QDir dir; 166 QDir dir;
166 QString homedir = dir.homeDirPath (); 167 QString homedir = dir.homeDirPath ();
167 QString time; 168 QString time;
168 169
169 Config cfg("today"); 170 Config cfg("today");
170 cfg.setGroup("Files"); 171 cfg.setGroup("Files");
171 time = cfg.readEntry("todolisttimestamp", ""); 172 time = cfg.readEntry("todolisttimestamp", "");
172 173
173 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml"); 174 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml");
174 QDateTime fileTime = file.lastModified(); 175 QDateTime fileTime = file.lastModified();
175 if (time.compare(fileTime.toString()) == 0) { 176 if (time.compare(fileTime.toString()) == 0) {
176 return false; 177 return false;
177 } else { 178 } else {
178 cfg.writeEntry("todolisttimestamp", fileTime.toString() ); 179 cfg.writeEntry("todolisttimestamp", fileTime.toString() );
179 cfg.write(); 180 cfg.write();
180 return true; 181 return true;
181 } 182 }
182} 183}
183 184
184 185
185/* 186/*
186 * Init stuff needed for today. Reads the config file. 187 * Init stuff needed for today. Reads the config file.
187 */ 188 */
188void Today::init() { 189void Today::init() {
189 QDate date = QDate::currentDate(); 190 QDate date = QDate::currentDate();
190 QString time = (tr( date.toString()) ); 191 QString time = (tr( date.toString()) );
191 192
192 TextLabel1->setText(QString("<font color=#FFFFFF>" + time + "</font>")); 193 TextLabel1->setText(QString("<font color=#FFFFFF>" + time + "</font>"));
193 194
194 // read config 195 // read config
195 Config cfg("today"); 196 Config cfg("today");
196 cfg.setGroup("BaseConfig"); 197 cfg.setGroup("BaseConfig");
197 198
198 // -- config file section -- 199 // -- config file section --
199 // how many lines should be showed in the task section 200 // how many lines should be showed in the task section
200 MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5); 201 MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5);
201 // after how many chars should the be cut off on tasks and notes 202 // after how many chars should the be cut off on tasks and notes
202 MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",40); 203 MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",40);
203 // how many lines should be showed in the datebook section 204 // how many lines should be showed in the datebook section
204 MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5); 205 MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5);
205 // If location is to be showed too, 1 to activate it. 206 // If location is to be showed too, 1 to activate it.
206 SHOW_LOCATION = cfg.readNumEntry("showlocation",1); 207 SHOW_LOCATION = cfg.readNumEntry("showlocation",1);
207 // if notes should be shown 208 // if notes should be shown
208 SHOW_NOTES = cfg.readNumEntry("shownotes",0); 209 SHOW_NOTES = cfg.readNumEntry("shownotes",0);
209 // should only later appointments be shown or all for the current day. 210 // should only later appointments be shown or all for the current day.
210 ONLY_LATER = cfg.readNumEntry("onlylater",1); 211 ONLY_LATER = cfg.readNumEntry("onlylater",1);
211 212
212 db = new DateBookDB; 213 //db = new DateBookDB;
213} 214}
214 215
215/* 216/*
216 * The method for the configuration dialog. 217 * The method for the configuration dialog.
217 */ 218 */
218void Today::startConfig() { 219void Today::startConfig() {
219 220
220 conf = new todayconfig ( this, "", true ); 221 conf = new todayconfig ( this, "", true );
221 // read the config 222 // read the config
222 Config cfg("today"); 223 Config cfg("today");
223 cfg.setGroup("BaseConfig"); 224 cfg.setGroup("BaseConfig");
224 225
225 //init(); 226 //init();
226 227
227 conf->SpinBox1->setValue(MAX_LINES_MEET); 228 conf->SpinBox1->setValue(MAX_LINES_MEET);
228 // location show box 229 // location show box
229 conf->CheckBox1->setChecked(SHOW_LOCATION); 230 conf->CheckBox1->setChecked(SHOW_LOCATION);
230 // notes show box 231 // notes show box
231 conf->CheckBox2->setChecked(SHOW_NOTES); 232 conf->CheckBox2->setChecked(SHOW_NOTES);
232 // task lines 233 // task lines
233 conf->SpinBox2->setValue(MAX_LINES_TASK); 234 conf->SpinBox2->setValue(MAX_LINES_TASK);
234 // clip when? 235 // clip when?
235 conf->SpinBox7->setValue(MAX_CHAR_CLIP); 236 conf->SpinBox7->setValue(MAX_CHAR_CLIP);
236 // only later 237 // only later
237 conf->CheckBox3->setChecked(ONLY_LATER); 238 conf->CheckBox3->setChecked(ONLY_LATER);
238 // if today should be autostarted 239 // if today should be autostarted
239 conf->CheckBoxAuto->setChecked(AUTOSTART); 240 conf->CheckBoxAuto->setChecked(AUTOSTART);
240 241
241 conf->exec(); 242 conf->exec();
242 243
243 int maxlinestask = conf->SpinBox2->value(); 244 int maxlinestask = conf->SpinBox2->value();
244 int maxmeet = conf->SpinBox1->value(); 245 int maxmeet = conf->SpinBox1->value();
245 int location = conf->CheckBox1->isChecked(); 246 int location = conf->CheckBox1->isChecked();
246 int notes = conf->CheckBox2->isChecked(); 247 int notes = conf->CheckBox2->isChecked();
247 int maxcharclip = conf->SpinBox7->value(); 248 int maxcharclip = conf->SpinBox7->value();
248 int onlylater = conf->CheckBox3->isChecked(); 249 int onlylater = conf->CheckBox3->isChecked();
249 int autostart =conf->CheckBoxAuto->isChecked(); 250 int autostart =conf->CheckBoxAuto->isChecked();
250 251
251 cfg.writeEntry("maxlinestask",maxlinestask); 252 cfg.writeEntry("maxlinestask",maxlinestask);
252 cfg.writeEntry("maxcharclip", maxcharclip); 253 cfg.writeEntry("maxcharclip", maxcharclip);
253 cfg.writeEntry("maxlinesmeet",maxmeet); 254 cfg.writeEntry("maxlinesmeet",maxmeet);
254 cfg.writeEntry("showlocation",location); 255 cfg.writeEntry("showlocation",location);
255 cfg.writeEntry("shownotes", notes); 256 cfg.writeEntry("shownotes", notes);
256 cfg.writeEntry("onlylater", onlylater); 257 cfg.writeEntry("onlylater", onlylater);
257 cfg.setGroup("Autostart"); 258 cfg.setGroup("Autostart");
258 cfg.writeEntry("autostart", autostart); 259 cfg.writeEntry("autostart", autostart);
259 260
260 // sync it to "disk" 261 // sync it to "disk"
261 cfg.write(); 262 cfg.write();
262 NEW_START=1; 263 NEW_START=1;
263 draw(); 264 draw();
264 autoStart(); 265 autoStart();
265} 266}
266 267
267 268
268/* 269/*
269 * Get all events that are in the datebook xml file for today 270 * Get all events that are in the datebook xml file for today
270 */ 271 */
271void Today::getDates() { 272void Today::getDates() {
272 QDate date = QDate::currentDate(); 273 QDate date = QDate::currentDate();
273 274
274 if (AllDateBookEvents) delete AllDateBookEvents; 275 if (AllDateBookEvents) delete AllDateBookEvents;
275 AllDateBookEvents = new QWidget( ); 276 AllDateBookEvents = new QWidget( );
276 QVBoxLayout* layoutDates = new QVBoxLayout(AllDateBookEvents); 277 QVBoxLayout* layoutDates = new QVBoxLayout(AllDateBookEvents);
277 278
279 if (db) {
280 delete db;
281 }
282 db = new DateBookDB;
283
278 QValueList<EffectiveEvent> list = db->getEffectiveEvents(date, date); 284 QValueList<EffectiveEvent> list = db->getEffectiveEvents(date, date);
279 285
280 qBubbleSort(list); 286 qBubbleSort(list);
281 // printf("Get dates\n"); 287 // printf("Get dates\n");
282 288
283 Config config( "qpe" ); 289 Config config( "qpe" );
284 // if 24 h format 290 // if 24 h format
285 //bool ampm = config.readBoolEntry( "AMPM", TRUE ); 291 //bool ampm = config.readBoolEntry( "AMPM", TRUE );
286 292
287 int count=0; 293 int count=0;
288 294
289 if ( list.count() > 0 ) { 295 if ( list.count() > 0 ) {
290 296
291 for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin(); 297 for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin();
292 it!=list.end(); ++it ) { 298 it!=list.end(); ++it ) {
293 299
294 300
295 if ( count <= MAX_LINES_MEET ) { 301 if ( count <= MAX_LINES_MEET ) {
296 302
297 QTime time = QTime::currentTime(); 303 QTime time = QTime::currentTime();
298 304
299 if (!ONLY_LATER) { 305 if (!ONLY_LATER) {
300 count++; 306 count++;
301 DateBookEvent *l=new DateBookEvent(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); 307 DateBookEvent *l=new DateBookEvent(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES);
302 layoutDates->addWidget(l); 308 layoutDates->addWidget(l);
303 connect (l, SIGNAL(editEvent(const Event &)), 309 connect (l, SIGNAL(editEvent(const Event &)),
304 this, SLOT(editEvent(const Event &))); 310 this, SLOT(editEvent(const Event &)));
305 } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) { 311 } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) {
306 count++; 312 count++;
307 313
308 // show only later appointments 314 // show only later appointments
309 DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); 315 DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES);
310 layoutDates->addWidget(l); 316 layoutDates->addWidget(l);
311 connect (l, SIGNAL(editEvent(const Event &)), 317 connect (l, SIGNAL(editEvent(const Event &)),
312 this, SLOT(editEvent(const Event &))); 318 this, SLOT(editEvent(const Event &)));
313 } 319 }
314 } 320 }
315 } 321 }
316 if (ONLY_LATER && count==0) { 322 if (ONLY_LATER && count==0) {
317 QLabel* noMoreEvents = new QLabel(AllDateBookEvents); 323 QLabel* noMoreEvents = new QLabel(AllDateBookEvents);
318 noMoreEvents->setText(tr("No more appointments today")); 324 noMoreEvents->setText(tr("No more appointments today"));
319 layoutDates->addWidget(noMoreEvents); 325 layoutDates->addWidget(noMoreEvents);
320 } 326 }
321 } else { 327 } else {
322 QLabel* noEvents = new QLabel(AllDateBookEvents); 328 QLabel* noEvents = new QLabel(AllDateBookEvents);
323 noEvents->setText(tr("No appointments today")); 329 noEvents->setText(tr("No appointments today"));
324 layoutDates->addWidget(noEvents); 330 layoutDates->addWidget(noEvents);
325 } 331 }
326 332
327 layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); 333 layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding));
328 sv1->addChild(AllDateBookEvents); 334 sv1->addChild(AllDateBookEvents);
329 AllDateBookEvents->show(); 335 AllDateBookEvents->show();
330} 336}
331 337
332 338
333void Today::getMail() { 339void Today::getMail() {
334 Config cfg("opiemail"); 340 Config cfg("opiemail");
335 cfg.setGroup("today"); 341 cfg.setGroup("today");
336 342
337 // how many lines should be showed in the task section 343 // how many lines should be showed in the task section
338 int NEW_MAILS = cfg.readNumEntry("newmails",0); 344 int NEW_MAILS = cfg.readNumEntry("newmails",0);
339 int OUTGOING = cfg.readNumEntry("outgoing",0); 345 int OUTGOING = cfg.readNumEntry("outgoing",0);
340 346
341 QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING); 347 QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING);