summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/TODO2
-rw-r--r--core/pim/today/changelog4
-rw-r--r--core/pim/today/configwidget.h17
-rw-r--r--core/pim/today/opie-today.control7
-rw-r--r--core/pim/today/today.cpp708
-rw-r--r--core/pim/today/today.h97
-rw-r--r--core/pim/today/today.pro4
-rw-r--r--core/pim/today/todaybase.cpp190
-rw-r--r--core/pim/today/todaybase.h48
-rw-r--r--core/pim/today/todayconfig.cpp315
-rw-r--r--core/pim/today/todayconfig.h55
-rw-r--r--core/pim/today/todayplugininterface.h82
12 files changed, 614 insertions, 915 deletions
diff --git a/core/pim/today/TODO b/core/pim/today/TODO
index 30a8bab..1326f88 100644
--- a/core/pim/today/TODO
+++ b/core/pim/today/TODO
@@ -1,11 +1,9 @@
1TODO for today: 1TODO for today:
2 2
3* show "upcoming appointents the next days .. one or too" 3* show "upcoming appointents the next days .. one or too"
4 4
5* show alarm icons on alarm events (partly done) 5* show alarm icons on alarm events (partly done)
6 6
7* qcop integration for updating events? 7* qcop integration for updating events?
8 8
9* make Opiezilla a clickable label wich is allway on the far right side of
10the screen , klick will open credits ,)
11 9
diff --git a/core/pim/today/changelog b/core/pim/today/changelog
index 73de50d..5fd3284 100644
--- a/core/pim/today/changelog
+++ b/core/pim/today/changelog
@@ -1,32 +1,36 @@
10.5
2
3* now fully plugin based
4
10.3.4 50.3.4
2 6
3* "fill our business card now a clickable label" 7* "fill our business card now a clickable label"
4* Several bugfixes regarding todo section. 8* Several bugfixes regarding todo section.
5 9
60.3.3 100.3.3
7 11
8* Changed the logo so it better scales to bigger display and also 12* Changed the logo so it better scales to bigger display and also
9 made the "Today" string translatable. 13 made the "Today" string translatable.
10* some am/pm fixes 14* some am/pm fixes
11* clickable labels now in libopie 15* clickable labels now in libopie
12 16
130.3.2 170.3.2
14 18
15* Autostart is now more configurable. You can decide how long 19* Autostart is now more configurable. You can decide how long
16 the ipaq has to has been suspended, before autostart is triggered.(Opie 20 the ipaq has to has been suspended, before autostart is triggered.(Opie
17 only) 21 only)
18* am/pm time optinal (autodetect) 22* am/pm time optinal (autodetect)
19 23
200.3.1 240.3.1
21 25
22* fixed the wrong color of the buttons 26* fixed the wrong color of the buttons
23* better translation (thanks carsten and others) 27* better translation (thanks carsten and others)
24* fixes memory leaks 28* fixes memory leaks
25* bugfixes in calendar part, now location and note are working again. 29* bugfixes in calendar part, now location and note are working again.
26 30
270.3.0 310.3.0
28 32
29* today uses now tododb from libopie. So major changes in the todo part: 33* today uses now tododb from libopie. So major changes in the todo part:
30 - overdue items on top 34 - overdue items on top
31 - then sorted by date, then by priority 35 - then sorted by date, then by priority
32* some cleanups 36* some cleanups
diff --git a/core/pim/today/configwidget.h b/core/pim/today/configwidget.h
new file mode 100644
index 0000000..f449db4
--- a/dev/null
+++ b/core/pim/today/configwidget.h
@@ -0,0 +1,17 @@
1
2#ifndef CONFIG_WIDGET_H
3#define CONFIG_WIDGET_H
4
5
6
7class ConfigWidget : public QWidget {
8
9public:
10
11 ConfigWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) {};
12 virtual ~ConfigWidget() {};
13
14 virtual void writeConfig() = 0;
15};
16
17#endif
diff --git a/core/pim/today/opie-today.control b/core/pim/today/opie-today.control
index b8e2e02..bcac439 100644
--- a/core/pim/today/opie-today.control
+++ b/core/pim/today/opie-today.control
@@ -1,16 +1,17 @@
1Files: bin/today apps/1Pim/today.desktop pics/today/* 1Files: bin/today apps/1Pim/today.desktop pics/today/*
2Priority: optional 2Priority: optional
3Section: opie/applications 3Section: opie/applications
4Maintainer: Maximilian Reiß <max.reiss@gmx.de> 4Maintainer: Maximilian Reiß <harlekin@handhelds.org>
5Architecture: arm 5Architecture: arm
6Version: 0.3.4-$SUB_VERSION 6Version: 0.5-$SUB_VERSION
7Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION) 7Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION),
8opie-today-datebookplugin, opie-today-todolistplugin
8License: GPL 9License: GPL
9Description: today screen 10Description: today screen
10 This today screen app gives an overview of appointments 11 This today screen app gives an overview of appointments
11 and todos. 12 and todos.
12 It also shows incoming and outgoing mails from opiemail. 13 It also shows incoming and outgoing mails from opiemail.
13 When using Opie (opie.handhelds.org) today can be autostarted 14 When using Opie (opie.handhelds.org) today can be autostarted
14 on resume. 15 on resume.
15 It is highly configurable. 16 It is highly configurable.
16 17
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index 62becb0..09540bd 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -1,637 +1,305 @@
1/* 1/*
2 * today.cpp : main class 2 * today.cpp
3 * 3 *
4 * ---------------------
5 *
6 * begin : Sun 10 17:20:00 CEST 2002
7 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002 by Maximilian Reiß
8 * email : max.reiss@gmx.de 5 * email : harlekin@handhelds.org
9 * 6 *
10 */ 7 */
11/*************************************************************************** 8/***************************************************************************
12 * * 9 * *
13 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by * 11 * 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 * 12 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. * 13 * (at your option) any later version. *
17 * * 14 * *
18 ***************************************************************************/ 15 ***************************************************************************/
19 16
17
20#include "today.h" 18#include "today.h"
19#include "configwidget.h"
21 20
22#include <qpe/timestring.h>
23#include <qpe/config.h> 21#include <qpe/config.h>
24#include <qpe/qcopenvelope_qws.h> 22#include <qpe/qcopenvelope_qws.h>
25#include <qpe/resource.h> 23#include <qpe/resource.h>
26#include <qpe/contact.h>
27#include <qpe/global.h> 24#include <qpe/global.h>
28#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26#include <qpe/contact.h>
29 27
30#include <qdir.h> 28#include <qdir.h>
31#include <qfile.h> 29#include <qfile.h>
32#include <qdatetime.h>
33#include <qtextstream.h>
34#include <qcheckbox.h>
35#include <qspinbox.h>
36#include <qpushbutton.h> 30#include <qpushbutton.h>
37#include <qlabel.h> 31#include <qlabel.h>
38#include <qtimer.h> 32#include <qtimer.h>
39#include <qpixmap.h> 33#include <qpixmap.h>
40#include <qlayout.h> 34#include <qlayout.h>
41#include <qtl.h> 35#include <qtabwidget.h>
42 36#include <qdialog.h>
43 37
44#include <unistd.h>
45#include <stdlib.h>
46 38
47int MAX_LINES_TASK; 39static QValueList<TodayPlugin> pluginList;
48int MAX_CHAR_CLIP;
49int MAX_LINES_MEET;
50int SHOW_LOCATION;
51int SHOW_NOTES;
52// show only later dates
53int ONLY_LATER;
54int AUTOSTART;
55int NEW_START=1;
56QString AUTOSTART_TIMER;
57int NEXTDAYS=1;
58 40
59
60/* Constructs a Example which is a child of 'parent', with the
61 * name 'name' and widget flags set to 'f'
62 */
63Today::Today( QWidget* parent, const char* name, WFlags fl ) 41Today::Today( QWidget* parent, const char* name, WFlags fl )
64 : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) { 42 : TodayBase( parent, name, fl ) {
65 QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) ); 43
66 QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) ); 44 QObject::connect( (QObject*)ConfigButton, SIGNAL( clicked() ), this, SLOT( startConfig() ) );
67 QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) ); 45 QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT( editCard() ) );
68 QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) );
69 QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT(editCard() ) );
70 46
71#if defined(Q_WS_QWS) 47#if defined(Q_WS_QWS)
72#if !defined(QT_NO_COP) 48#if !defined(QT_NO_COP)
73 QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this ); 49 QCopChannel *todayChannel = new QCopChannel( "QPE/Today" , this );
74 connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)), 50 connect ( todayChannel, SIGNAL( received( const QCString &, const QByteArray &) ),
75 this, SLOT ( channelReceived(const QCString &, const QByteArray &)) ); 51 this, SLOT ( channelReceived( const QCString &, const QByteArray &) ) );
76#endif 52#endif
77#endif 53#endif
78 54
55 pluginLayout = 0l;
79 56
80 57 setOwnerField();
81 db = NULL; 58 init();
82 setOwnerField(); 59 refresh();
83 todo = new ToDoDB; 60 showMaximized();
84 draw();
85 getTodo();
86 autoStart();
87} 61}
88 62
89/* 63/**
90 * Qcop receive method. 64 * Qcop receive method.
91 */ 65 */
92void Today::channelReceived(const QCString &msg, const QByteArray & data) { 66void Today::channelReceived( const QCString &msg, const QByteArray & data ) {
93 QDataStream stream(data, IO_ReadOnly ); 67 QDataStream stream( data, IO_ReadOnly );
94 if ( msg == "message(QString)" ) { 68 if ( msg == "message(QString)" ) {
95 QString message; 69 QString message;
96 stream >> message; 70 stream >> message;
97 setOwnerField(message); 71 setOwnerField( message );
98 } 72 }
99
100} 73}
101 74
102/* 75/**
103 * Initialises the owner field with the default value, the username 76 * Initialises the owner field with the default value, the username
104 */ 77 */
105void Today::setOwnerField() { 78void Today::setOwnerField() {
106 QString file = Global::applicationFileName("addressbook", "businesscard.vcf"); 79 QString file = Global::applicationFileName( "addressbook", "businesscard.vcf" );
107 if (QFile::exists(file)) { 80 if ( QFile::exists( file ) ) {
108 Contact cont = Contact::readVCard(file)[0]; 81 Contact cont = Contact::readVCard( file )[0];
109 QString returnString = cont.fullName(); 82 QString returnString = cont.fullName();
110 OwnerField->setText( "<b>" +tr ("Owned by ") + returnString + "</b>"); 83 OwnerField->setText( "<b>" + tr ( "Owned by " ) + returnString + "</b>" );
111 } else { 84 } else {
112 OwnerField->setText( "<b>" + tr ("Please fill out the business card")+" </b>"); 85 OwnerField->setText( "<b>" + tr ( "Please fill out the business card" ) + " </b>" );
113 } 86 }
114} 87}
115 88
116/* 89/**
117 * Set the owner field with a given QString, for example per qcop. 90 * Set the owner field with a given QString, for example per qcop.
118 */ 91 */
119void Today::setOwnerField(QString &message) { 92void Today::setOwnerField( QString &message ) {
120 if (!message.isEmpty()) { 93 if ( !message.isEmpty() ) {
121 OwnerField->setText("<b>" + message + "</b>"); 94 OwnerField->setText( "<b>" + message + "</b>" );
122 }
123}
124
125/*
126 * Autostart, uses the new (opie only) autostart method in the launcher code.
127 * If registered against that today ist started on each resume.
128 */
129void Today::autoStart() {
130 Config cfg("today");
131 cfg.setGroup("Autostart");
132 int AUTOSTART = cfg.readNumEntry("autostart",1);
133// qDebug(QString("%1").arg(AUTOSTART));
134 if (AUTOSTART) {
135 QCopEnvelope e("QPE/System", "autoStart(QString,QString,QString)");
136 e << QString("add");
137 e << QString("today");
138 e << AUTOSTART_TIMER;
139 } else {
140 qDebug("Nun in else bei autostart");
141 QCopEnvelope e("QPE/System", "autoStart(QString,QString)");
142 e << QString("remove");
143 e << QString("today");
144 } 95 }
145} 96}
146 97
147/*
148 * Repaint method. Reread all fields.
149 */
150void Today::draw() {
151 init();
152 getDates();
153 getMail();
154
155 // if the todolist.xml file was not modified in between, do not parse it.
156 if (checkIfModified() || NEW_START==1) {
157 if (todo) delete todo;
158 todo = new ToDoDB;
159 getTodo();
160 }
161
162 // how often refresh
163 QTimer::singleShot( 20*1000, this, SLOT(draw() ) );
164}
165 98
166/* 99/**
167 * Check if the todolist.xml was modified (if there are new entries. 100 * Init stuff needed for today. Reads the config file.
168 * Returns true if it was modified.
169 */ 101 */
170bool Today::checkIfModified() { 102void Today::init() {
171 103
172 QDir dir; 104 QDate date = QDate::currentDate();
173 QString homedir = dir.homeDirPath (); 105 QString time = ( tr( date.toString() ) );
174 QString time;
175 106
176 Config cfg("today"); 107 DateLabel->setText( QString( "<font color=#FFFFFF>" + time + "</font>" ) );
177 cfg.setGroup("Files");
178 time = cfg.readEntry("todolisttimestamp", "");
179 108
180 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml"); 109 // read config
181 QDateTime fileTime = file.lastModified(); 110 Config cfg( "today" );
182 if (time.compare(fileTime.toString()) == 0) { 111
183 return false; 112 cfg.setGroup( "Applets" );
184 } else { 113 m_excludeApplets = cfg.readListEntry( "ExcludeApplets", ',' );
185 cfg.writeEntry("todolisttimestamp", fileTime.toString() );
186 cfg.write();
187 return true;
188 }
189} 114}
190 115
191 116
192/* 117/**
193 * Init stuff needed for today. Reads the config file. 118 * Load the plugins
194 */ 119 */
195void Today::init() { 120void Today::loadPlugins() {
196 QDate date = QDate::currentDate();
197 QString time = (tr( date.toString()) );
198
199 TextLabel1->setText(QString("<font color=#FFFFFF>" + time + "</font>"));
200
201 // read config
202 Config cfg("today");
203 cfg.setGroup("BaseConfig");
204
205 // -- config file section --
206 // how many lines should be showed in the task section
207 MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5);
208 // after how many chars should the be cut off on tasks and notes
209 MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",40);
210 // how many lines should be showed in the datebook section
211 MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5);
212 // If location is to be showed too, 1 to activate it.
213 SHOW_LOCATION = cfg.readNumEntry("showlocation",1);
214 // if notes should be shown
215 SHOW_NOTES = cfg.readNumEntry("shownotes",0);
216 // should only later appointments be shown or all for the current day.
217 ONLY_LATER = cfg.readNumEntry("onlylater",1);
218
219 cfg.setGroup("Autostart");
220 AUTOSTART = cfg.readNumEntry("autostart",1);
221 AUTOSTART_TIMER = cfg.readEntry("autostartdelay", "0");
222
223 //db = new DateBookDB;
224}
225 121
226/* 122 QValueList<TodayPlugin>::Iterator tit;
227 * The method for the configuration dialog. 123 for ( tit = pluginList.begin(); tit != pluginList.end(); ++tit ) {
228 */ 124 (*tit).library->unload();
229void Today::startConfig() { 125 delete (*tit).library;
126 }
230 127
231 conf = new todayconfig ( this, "", true ); 128 QString path = QPEApplication::qpeDir() + "/plugins/today";
232 // read the config 129 QDir dir( path, "lib*.so" );
233 Config cfg("today"); 130
234 cfg.setGroup("BaseConfig"); 131 QStringList list = dir.entryList();
235 132 QStringList::Iterator it;
236 //init(); 133
237 134 uint count = 0;
238 conf->SpinBox1->setValue(MAX_LINES_MEET); 135 for ( it = list.begin(); it != list.end(); ++it ) {
239 // location show box 136 TodayPluginInterface *iface = 0;
240 conf->CheckBox1->setChecked(SHOW_LOCATION); 137 QLibrary *lib = new QLibrary( path + "/" + *it );
241 // notes show box 138
242 conf->CheckBox2->setChecked(SHOW_NOTES); 139 qDebug( "querying: %s", QString( path + "/" + *it ).latin1() );
243 // task lines 140 if ( lib->queryInterface( IID_TodayPluginInterface, (QUnknownInterface**)&iface ) == QS_OK ) {
244 conf->SpinBox2->setValue(MAX_LINES_TASK); 141 qDebug( "loading: %s", QString( path + "/" + *it ).latin1() );
245 // clip when? 142 qDebug( QString(*it).latin1() );
246 conf->SpinBox7->setValue(MAX_CHAR_CLIP); 143 TodayPlugin plugin;
247 // only later 144 plugin.library = lib;
248 conf->CheckBox3->setChecked(ONLY_LATER); 145 plugin.iface = iface;
249 // if today should be autostarted 146 plugin.name = QString(*it).latin1();
250 conf->CheckBoxAuto->setChecked(AUTOSTART); 147
251 // autostart only if device has been suspended for X minutes 148 if ( m_excludeApplets.grep( *it ).isEmpty() ) {
252 conf->SpinBoxTime->setValue( AUTOSTART_TIMER.toInt() ); 149 plugin.active = true;
253 150 } else {
254 conf->exec(); 151 plugin.active = false;
255 152 }
256 int maxlinestask = conf->SpinBox2->value(); 153 plugin.guiPart = plugin.iface->guiPart();
257 int maxmeet = conf->SpinBox1->value(); 154 pluginList.append( plugin );
258 int location = conf->CheckBox1->isChecked(); 155 count++;
259 int notes = conf->CheckBox2->isChecked(); 156 } else {
260 int maxcharclip = conf->SpinBox7->value(); 157 qDebug( "could not recognize %s", QString( path + "/" + *it ).latin1() );
261 int onlylater = conf->CheckBox3->isChecked(); 158 delete lib;
262 int autostart = conf->CheckBoxAuto->isChecked(); 159 }
263 int autostartdelay = conf->SpinBoxTime->value(); 160 }
264
265
266 cfg.writeEntry("maxlinestask",maxlinestask);
267 cfg.writeEntry("maxcharclip", maxcharclip);
268 cfg.writeEntry("maxlinesmeet",maxmeet);
269 cfg.writeEntry("showlocation",location);
270 cfg.writeEntry("shownotes", notes);
271 cfg.writeEntry("onlylater", onlylater);
272 cfg.setGroup("Autostart");
273 cfg.writeEntry("autostart", autostart);
274 cfg.writeEntry("autostartdelay", autostartdelay);
275
276 // sync it to "disk"
277 cfg.write();
278 NEW_START=1;
279 draw();
280 AUTOSTART=autostart;
281 autoStart();
282} 161}
283 162
284 163
285/* 164/**
286 * Get all events that are in the datebook xml file for today 165 * Repaint method. Reread all fields.
287 */ 166 */
288void Today::getDates() { 167void Today::draw() {
289 QDate date = QDate::currentDate();
290
291 if (AllDateBookEvents) delete AllDateBookEvents;
292 AllDateBookEvents = new QWidget( );
293 QVBoxLayout* layoutDates = new QVBoxLayout(AllDateBookEvents);
294
295 if (db) {
296 delete db;
297 }
298 db = new DateBookDB;
299
300 QValueList<EffectiveEvent> list = db->getEffectiveEvents(date, date);
301
302 qBubbleSort(list);
303 // printf("Get dates\n");
304
305 Config config( "qpe" );
306 // if 24 h format
307 //bool ampm = config.readBoolEntry( "AMPM", TRUE );
308
309 int count=0;
310
311 if ( list.count() > 0 ) {
312
313 for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin();
314 it!=list.end(); ++it ) {
315
316
317 if ( count <= MAX_LINES_MEET ) {
318 168
319 QTime time = QTime::currentTime(); 169 if ( pluginLayout ) {
170 delete pluginLayout;
171 }
172 pluginLayout = new QVBoxLayout( layout );
320 173
321 if (!ONLY_LATER) { 174 if ( pluginList.count() == 0 ) {
322 count++; 175 QLabel *noPlugins = new QLabel( this );
323 DateBookEvent *l=new DateBookEvent(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); 176 noPlugins->setText( tr( "No plugins found" ) );
324 layoutDates->addWidget(l); 177 layout->addWidget( noPlugins );
325 connect (l, SIGNAL(editEvent(const Event &)), 178 return;
326 this, SLOT(editEvent(const Event &))); 179 }
327 } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) {
328 count++;
329 180
330 // show only later appointments 181 uint count = 0;
331 DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); 182 TodayPlugin plugin;
332 layoutDates->addWidget(l); 183 for ( uint i = 0; i < pluginList.count(); i++ ) {
333 connect (l, SIGNAL(editEvent(const Event &)), 184 plugin = pluginList[i];
334 this, SLOT(editEvent(const Event &))); 185
186 if ( plugin.active ) {
187 QHBoxLayout* plugLayout = new QHBoxLayout( this );
188 QPixmap plugPix;
189 plugPix.convertFromImage( Resource::loadImage( plugin.guiPart->pixmapNameWidget() ).smoothScale( 18, 18 ), 0 );
190 OClickableLabel* plugIcon = new OClickableLabel( this );
191 plugIcon->setPixmap( plugPix );
192 QScrollView* sv = new QScrollView( this );
193 QWidget* plugWidget = plugin.guiPart->widget( sv->viewport() );
194 // plugWidget->reparent( sv->viewport(), QPoint( 0, 0 ) );
195 sv->setMinimumHeight( plugin.guiPart->minHeight() );
196 //sv->setMaximumHeight( plugin.guiPart->maxHeight() );
197
198 sv->setResizePolicy( QScrollView::AutoOneFit );
199 sv->setHScrollBarMode( QScrollView::AlwaysOff );
200 sv->setFrameShape( QFrame::NoFrame );
201 sv->addChild( plugWidget );
202
203 plugLayout->addWidget( plugIcon, 0, AlignTop );
204 plugLayout->addWidget( sv, 0, AlignTop );
205 plugLayout->setStretchFactor( plugIcon, 1 );
206 plugLayout->setStretchFactor( sv, 9 );
207 pluginLayout->addLayout( plugLayout );
208 count++;
335 } 209 }
336 }
337 } 210 }
338 if (ONLY_LATER && count==0) {
339 QLabel* noMoreEvents = new QLabel(AllDateBookEvents);
340 noMoreEvents->setText(tr("No more appointments today"));
341 layoutDates->addWidget(noMoreEvents);
342 }
343 } else {
344 QLabel* noEvents = new QLabel(AllDateBookEvents);
345 noEvents->setText(tr("No appointments today"));
346 layoutDates->addWidget(noEvents);
347 }
348 211
349 layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); 212 if ( count == 0 ) {
350 sv1->addChild(AllDateBookEvents); 213 QLabel *noPluginsActive = new QLabel( this );
351 AllDateBookEvents->show(); 214 noPluginsActive->setText( tr( "No plugins activated" ) );
352} 215 layout->addWidget( noPluginsActive );
216 }
353 217
218 layout->addItem( new QSpacerItem( 1,1, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
354 219
355void Today::getMail() {
356 Config cfg("opiemail");
357 cfg.setGroup("today");
358 220
359 // how many lines should be showed in the task section 221 // how often refresh - later have qcop update calls in *db
360 int NEW_MAILS = cfg.readNumEntry("newmails",0); 222 // QTimer::singleShot( 20*1000, this, SLOT( draw() ) );
361 int OUTGOING = cfg.readNumEntry("outgoing",0); 223}
362 224
363 QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING);
364 225
365 MailField->setText(output); 226void Today::refresh() {
227 loadPlugins();
228 draw();
229 qDebug( "redraw" );
230// QTimer::singleShot( 30*1000, this, SLOT( refresh() ) );
366} 231}
367 232
368 233
369/* 234/**
370 * Get the todos 235 * The method for the configuration dialog.
371 */ 236 */
372void Today::getTodo() { 237void Today::startConfig() {
373 238 conf = new TodayConfig ( this, "", true );
374 QString output; 239
375 QString tmpout; 240 uint count = 0;
376 int count = 0; 241 TodayPlugin plugin;
377 int ammount = 0; 242
378 243 QList<ConfigWidget> configWidgetList;
379 // get overdue todos first 244 for ( uint i = 0; i < pluginList.count(); i++ ) {
380 QValueList<ToDoEvent> overDueList = todo->overDue(); 245 plugin = pluginList[i];
381 qBubbleSort(overDueList);
382 for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin();
383 it!=overDueList.end(); ++it ) {
384 if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) {
385 QString desc = (*it).summary();
386 if( desc.isEmpty() ) {
387 desc = (*it).description();
388 }
389 tmpout += "<font color=#e00000><b>-" + desc.mid(0, MAX_CHAR_CLIP) + "</b></font><br>";
390
391 ammount++;
392 }
393 }
394 246
395 // get total number of still open todos 247 // load the config widgets in the tabs
396 QValueList<ToDoEvent> openTodo = todo->rawToDos(); 248 if ( plugin.guiPart->configWidget( this ) != 0l ) {
397 qBubbleSort(openTodo); 249 ConfigWidget* widget = plugin.guiPart->configWidget( this );
398 for ( QValueList<ToDoEvent>::Iterator it=openTodo.begin(); 250 widget->reparent( conf , QPoint( 0,0 ) );
399 it!=openTodo.end(); ++it ) { 251 configWidgetList.append( widget );
400 if (!(*it).isCompleted()){ 252 conf->TabWidget3->insertTab( widget, plugin.guiPart->appName() );
401 count +=1;
402 // not the overdues, we allready got them, and not if we are
403 // over the maxlines
404 if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) {
405 QString desc = (*it).summary();
406 if( desc.isEmpty() ) {
407 desc = (*it).description();
408 }
409 tmpout += "<b>-</b>" + desc.mid(0, MAX_CHAR_CLIP) + "<br>";
410 ammount++;
411 }
412 } 253 }
254 // set the order/activate tab
255 conf->pluginManagement( plugin.name, plugin.guiPart->pluginName(),
256 Resource::loadPixmap( plugin.guiPart->pixmapNameWidget() ) );
257 count++;
413 } 258 }
414 259
260 conf->showMaximized();
415 261
416 if (count > 0) { 262 if ( conf->exec() == QDialog::Accepted ) {
417 if( count == 1 ) { 263 ConfigWidget *confWidget;
418 output = tr("There is <b> 1</b> active task: <br>" ); 264 for ( confWidget=configWidgetList.first(); confWidget != 0;
419 } else { 265 confWidget = configWidgetList.next() ) {
420 output = tr("There are <b> %1</b> active tasks: <br>").arg(count); 266 confWidget->writeConfig();
421 } 267 }
422 output += tmpout; 268 conf->writeConfig();
423 } else {
424 output = tr("No active tasks");
425 }
426 269
427 TodoField->setText(tr(output)); 270 init();
271 loadPlugins();
272 draw();
273 }
274 delete conf;
428} 275}
429 276
430 277
431void Today::startAddressbook() { 278void Today::startAddressbook() {
432 QCopEnvelope e("QPE/System", "execute(QString)"); 279 QCopEnvelope e( "QPE/System", "execute(QString)" );
433 e << QString("addressbook"); 280 e << QString( "addressbook" );
434} 281}
435 282
436extern QPEApplication *todayApp;
437 283
438/* 284/**
439 * launch addressbook (personal card) 285 * launch addressbook (personal card)
440 */ 286 */
441void Today::editCard() { 287void Today::editCard() {
442
443 startAddressbook(); 288 startAddressbook();
444 289 while( !QCopChannel::isRegistered( "QPE/Addressbook" ) ) {
445 while( !QCopChannel::isRegistered("QPE/Addressbook")) todayApp->processEvents(); 290 qApp->processEvents();
446 QCopEnvelope v("QPE/Addressbook", "editPersonalAndClose()"); 291 }
447} 292 QCopEnvelope v( "QPE/Addressbook", "editPersonalAndClose()" );
448
449/*
450 * launches datebook
451 */
452void Today::startDatebook() {
453 QCopEnvelope e("QPE/System", "execute(QString)");
454 e << QString("datebook");
455}
456
457/*
458 * starts the edit dialog as known from datebook
459 */
460void Today::editEvent(const Event &e) {
461 startDatebook();
462
463 while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents();
464 QCopEnvelope env("QPE/Datebook", "editEvent(int)");
465 env << e.uid();
466}
467
468/*
469 * launches todolist
470 */
471void Today::startTodo() {
472 QCopEnvelope e("QPE/System", "execute(QString)");
473 e << QString("todolist");
474} 293}
475 294
476/* 295/*
477 * launch opiemail 296 * launches an App
478 */ 297 */
479void Today::startMail() { 298void Today::launchApp( QString appName ) {
480 QCopEnvelope e("QPE/System", "execute(QString)"); 299 QCopEnvelope e( "QPE/System", "execute(QString)" );
481 e << QString("opiemail"); 300 e << QString( appName );
482//Right now start both, maybe decide which to rum via config file ..
483 QCopEnvelope f("QPE/System", "execute(QString)");
484 f << QString("qtmail");
485} 301}
486 302
487
488Today::~Today() { 303Today::~Today() {
489} 304}
490 305
491/*
492 * Gets the events for the current day, if it should get all dates
493 */
494DateBookEvent::DateBookEvent(const EffectiveEvent &ev,
495 QWidget* parent,
496 int SHOW_LOCATION,
497 int SHOW_NOTES,
498 const char* name,
499 WFlags fl) :
500 OClickableLabel(parent,name,fl), event(ev) {
501
502 QString msg;
503 //QTime time = QTime::currentTime();
504
505 Config config( "qpe" );
506 config.setGroup( "Time" );
507 // if 24 h format
508 ampm = config.readBoolEntry( "AMPM", TRUE );
509
510
511 if (!ONLY_LATER) {
512 msg += "<B>" + (ev).description() + "</B>";
513 if ( (ev).event().hasAlarm() ) {
514 msg += " <b>[with alarm]</b>";
515 }
516 // include location or not
517 if (SHOW_LOCATION == 1) {
518 msg += "<BR><i>" + (ev).location() + "</i>";
519 }
520
521 if ( (TimeString::timeString(QTime((ev).event().start().time()) ) == "00:00") && (TimeString::timeString(QTime((ev).event().end().time()) ) == "23:59") ) {
522 msg += "<br>All day";
523 } else {
524 // start time of event
525 msg += "<br>" + ampmTime(QTime((ev).event().start().time()) )
526 // end time of event
527 + "<b> - </b>" + ampmTime(QTime((ev).event().end().time()) );
528 }
529
530 // include possible note or not
531 if (SHOW_NOTES == 1) {
532 msg += "<br> <i>note</i>:" +((ev).notes()).mid(0, MAX_CHAR_CLIP);
533 }
534 }
535 setText(msg);
536 connect(this, SIGNAL(clicked()), this, SLOT(editMe()));
537 setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) );
538}
539
540
541QString DateBookEvent::ampmTime(QTime tm) {
542
543 QString s;
544 if( ampm ) {
545 int hour = tm.hour();
546 if (hour == 0)
547 hour = 12;
548 if (hour > 12)
549 hour -= 12;
550 s.sprintf( "%2d:%02d %s", hour, tm.minute(),
551 (tm.hour() >= 12) ? "PM" : "AM" );
552 return s;
553 } else {
554 s.sprintf( "%2d:%02d", tm.hour(), tm.minute() );
555 return s;
556 }
557
558}
559
560
561DateBookEventLater::DateBookEventLater(const EffectiveEvent &ev,
562 QWidget* parent,
563 int SHOW_LOCATION,
564 int SHOW_NOTES,
565 const char* name,
566 WFlags fl) :
567 OClickableLabel(parent,name,fl), event(ev) {
568
569 QString msg;
570 QTime time = QTime::currentTime();
571
572 Config config( "qpe" );
573 config.setGroup( "Time" );
574 // if 24 h format
575 ampm = config.readBoolEntry( "AMPM", TRUE );
576
577
578 if ((time.toString() <= TimeString::dateString((ev).event().end())) ) {
579 // show only later appointments
580 msg += "<B>" + (ev).description() + "</B>";
581 if ( (ev).event().hasAlarm() ) {
582 msg += " <b>[with alarm]</b>";
583 }
584 // include location or not
585 if (SHOW_LOCATION == 1) {
586 msg += "<BR><i>" + (ev).location() + "</i>";
587 }
588
589 if ( (TimeString::timeString(QTime((ev).event().start().time()) ) == "00:00") && (TimeString::timeString(QTime((ev).event().end().time()) ) == "23:59") ) {
590 msg += "<br>All day";
591 } else {
592 // start time of event
593 msg += "<br>" + ampmTime(QTime((ev).event().start().time()) )
594 // end time of event
595 + "<b> - </b>" + ampmTime(QTime((ev).event().end().time()) );
596 }
597 // include possible note or not
598 if (SHOW_NOTES == 1) {
599 msg += "<br> <i>note</i>:" +((ev).notes()).mid(0, MAX_CHAR_CLIP);
600 }
601 }
602
603 setText(msg);
604 connect(this, SIGNAL(clicked()), this, SLOT(editMe()));
605 setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) );
606}
607
608
609QString DateBookEventLater::ampmTime(QTime tm) {
610
611 QString s;
612 if( ampm ) {
613 int hour = tm.hour();
614 if (hour == 0)
615 hour = 12;
616 if (hour > 12)
617 hour -= 12;
618 s.sprintf( "%2d:%02d %s", hour, tm.minute(),
619 (tm.hour() >= 12) ? "PM" : "AM" );
620 return s;
621 } else {
622 s.sprintf( "%2d:%02d", tm.hour(), tm.minute() );
623 return s;
624 }
625
626}
627
628
629void DateBookEvent::editMe() {
630 emit editEvent(event.event());
631}
632
633void DateBookEventLater::editMe() {
634 emit editEvent(event.event());
635}
636
637
diff --git a/core/pim/today/today.h b/core/pim/today/today.h
index f28c029..ca17020 100644
--- a/core/pim/today/today.h
+++ b/core/pim/today/today.h
@@ -1,118 +1,81 @@
1/* 1/*
2 * today.h 2 * today.h
3 * 3 *
4 * ---------------------
5 *
6 * begin : Sun 10 17:20:00 CEST 2002
7 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002 by Maximilian Reiß
8 * email : max.reiss@gmx.de 5 * email : harlekin@handhelds.org
9 * 6 *
10 */ 7 */
11/*************************************************************************** 8/***************************************************************************
12 * * 9 * *
13 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by * 11 * 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 * 12 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. * 13 * (at your option) any later version. *
17 * * 14 * *
18 ***************************************************************************/ 15 ***************************************************************************/
19 16
20 17
21#ifndef TODAY_H 18#ifndef TODAY_H
22#define TODAY_H 19#define TODAY_H
23 20
24#include <qpe/datebookdb.h>
25#include <qpe/event.h>
26
27#include <opie/tododb.h> 21#include <opie/tododb.h>
28#include <opie/oclickablelabel.h>
29 22
30#include <qdatetime.h> 23#include <qdatetime.h>
31#include <qlist.h> 24#include <qlist.h>
32 25
26#include <qpe/qlibrary.h>
27#include <qpe/event.h>
28
33#include "todayconfig.h" 29#include "todayconfig.h"
34#include "todaybase.h" 30#include "todaybase.h"
31#include "todayplugininterface.h"
35 32
36class QVBoxLayout; 33class QVBoxLayout;
37 34
35struct TodayPlugin {
36 QLibrary *library;
37 TodayPluginInterface *iface;
38 TodayPluginObject *guiPart;
39 QString name;
40 bool active;
41 int pos;
42};
43
38class Today : public TodayBase { 44class Today : public TodayBase {
45
39 Q_OBJECT 46 Q_OBJECT
40 47
41 public: 48 public:
42 Today( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); 49 Today( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
43 ~Today(); 50 ~Today();
44 51
45 private slots: 52 private slots:
46 void startConfig(); 53 void startConfig();
47 void startTodo();
48 void startDatebook();
49 void startAddressbook(); 54 void startAddressbook();
50 void startMail(); 55 void launchApp( QString appName );
51 void editCard(); 56 void editCard();
52 void draw(); 57 void draw();
53 void editEvent(const Event &e); 58 void refresh();
54 private: 59
60private:
55 void init(); 61 void init();
56 void getDates();
57 void getTodo();
58 void getMail();
59 void autoStart();
60 bool checkIfModified();
61 void setOwnerField(); 62 void setOwnerField();
62 void setOwnerField(QString &string); 63 void setOwnerField(QString &string);
63 private slots: 64 void loadPlugins();
65
66private slots:
64 void channelReceived(const QCString &msg, const QByteArray & data); 67 void channelReceived(const QCString &msg, const QByteArray & data);
65 68
66 private: 69 private:
67 DateBookDB *db; 70 TodayConfig *conf;
68 ToDoDB *todo; 71 QStringList m_excludeApplets;
69 todayconfig *conf;
70 QWidget* AllDateBookEvents;
71 //Config cfg;
72 int MAX_LINES_TASK;
73 int MAX_CHAR_CLIP;
74 int MAX_LINES_MEET;
75 int SHOW_LOCATION;
76 int SHOW_NOTES;
77};
78 72
79class DateBookEvent: public OClickableLabel { 73 QVBoxLayout *pluginLayout;
80 Q_OBJECT
81public:
82 DateBookEvent(const EffectiveEvent &ev,
83 QWidget* parent = 0,
84 int SHOW_LOCATION = 0,
85 int SHOW_NOTES = 0,
86 const char* name = 0,
87 WFlags fl = 0);
88signals:
89 void editEvent(const Event &e);
90private slots:
91 void editMe();
92private:
93 QString ampmTime(QTime);
94 const EffectiveEvent event;
95 bool ampm;
96};
97 74
98class DateBookEventLater: public OClickableLabel { 75 // QString m_autoStartTimer;
99 Q_OBJECT 76 int m_newStart;
100public: 77 // int m_autoStart;
101 DateBookEventLater(const EffectiveEvent &ev, 78 int m_maxCharClip;
102 QWidget* parent = 0,
103 int SHOW_LOCATION = 0,
104 int SHOW_NOTES = 0,
105 const char* name = 0,
106 WFlags fl = 0);
107signals:
108 void editEvent(const Event &e);
109private slots:
110 void editMe();
111private:
112 QString ampmTime(QTime);
113 const EffectiveEvent event;
114 bool ampm;
115}; 79};
116 80
117#endif // TODAY_H 81#endif
118
diff --git a/core/pim/today/today.pro b/core/pim/today/today.pro
index 46e5d2a..8596da3 100644
--- a/core/pim/today/today.pro
+++ b/core/pim/today/today.pro
@@ -1,27 +1,27 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 #CONFIG = qt warn_on debug 2 CONFIG = qt warn_on debug
3 CONFIG = qt warn_on release 3 #CONFIG = qt warn_on release
4 HEADERS = today.h todaybase.h todayconfig.h 4 HEADERS = today.h todaybase.h todayconfig.h
5 SOURCES = main.cpp today.cpp todaybase.cpp todayconfig.cpp 5 SOURCES = main.cpp today.cpp todaybase.cpp todayconfig.cpp
6 INCLUDEPATH+= $(OPIEDIR)/include 6 INCLUDEPATH+= $(OPIEDIR)/include
7 DEPENDPATH+= $(OPIEDIR)/include 7 DEPENDPATH+= $(OPIEDIR)/include
8LIBS += -lqpe -lopie 8LIBS += -lqpe -lopie
9 INTERFACES= 9 INTERFACES=
10 TARGET = today 10 TARGET = today
11 DESTDIR = $(OPIEDIR)/bin 11 DESTDIR = $(OPIEDIR)/bin
12 12
13TRANSLATIONS = ../../../i18n/de/today.ts \ 13TRANSLATIONS = ../../../i18n/de/today.ts \
14 ../../../i18n/en/today.ts \ 14 ../../../i18n/en/today.ts \
15 ../../../i18n/es/today.ts \ 15 ../../../i18n/es/today.ts \
16 ../../../i18n/fr/today.ts \ 16 ../../../i18n/fr/today.ts \
17 ../../../i18n/hu/today.ts \ 17 ../../../i18n/hu/today.ts \
18 ../../../i18n/ja/today.ts \ 18 ../../../i18n/ja/today.ts \
19 ../../../i18n/ko/today.ts \ 19 ../../../i18n/ko/today.ts \
20 ../../../i18n/no/today.ts \ 20 ../../../i18n/no/today.ts \
21 ../../../i18n/pl/today.ts \ 21 ../../../i18n/pl/today.ts \
22 ../../../i18n/pt/today.ts \ 22 ../../../i18n/pt/today.ts \
23 ../../../i18n/pt_BR/today.ts \ 23 ../../../i18n/pt_BR/today.ts \
24 ../../../i18n/sl/today.ts \ 24 ../../../i18n/sl/today.ts \
25 ../../../i18n/zh_CN/today.ts \ 25 ../../../i18n/zh_CN/today.ts \
26 ../../../i18n/zh_TW/today.ts \ 26 ../../../i18n/zh_TW/today.ts \
27 ../../../i18n/it/today.ts \ No newline at end of file 27 ../../../i18n/it/today.ts \ No newline at end of file
diff --git a/core/pim/today/todaybase.cpp b/core/pim/today/todaybase.cpp
index bc1651d..74f4fa0 100644
--- a/core/pim/today/todaybase.cpp
+++ b/core/pim/today/todaybase.cpp
@@ -1,211 +1,107 @@
1/* 1/*
2 * todaybase.cpp * 2 * todaybase.cpp
3 * ---------------------
4 * 3 *
5 * begin : Sun 10 17:20:00 CEST 2002
6 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002 by Maximilian Reiß
7 * email : max.reiss@gmx.de 5 * email : harlekin@handhelds.org
8 * 6 *
9 */ 7 */
10/*************************************************************************** 8/***************************************************************************
11 * * 9 * *
12 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by * 11 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or * 12 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. * 13 * (at your option) any later version. *
16 * * 14 * *
17 ***************************************************************************/ 15 ***************************************************************************/
18 16
19#include "todaybase.h" 17#include "todaybase.h"
20 18
21#include <qframe.h> 19#include <qframe.h>
22#include <qlabel.h> 20#include <qlabel.h>
23#include <qpushbutton.h>
24#include <qlayout.h>
25#include <qvariant.h>
26#include <qwhatsthis.h>
27#include <qimage.h> 21#include <qimage.h>
28#include <qpixmap.h> 22#include <qpixmap.h>
29#include <qscrollview.h>
30#include <qvbox.h>
31#include <qapplication.h> 23#include <qapplication.h>
32 24
33#include <qpe/resource.h> 25#include <qpe/resource.h>
34 26
35/* 27
36 * Constructs a TodayBase which is a child of 'parent', with the
37 * name 'name' and widget flags set to 'f'
38 */
39TodayBase::TodayBase( QWidget* parent, const char* name, WFlags fl ) 28TodayBase::TodayBase( QWidget* parent, const char* name, WFlags fl )
40 : QWidget( parent, name, fl ) 29 : QWidget( parent, name, fl ) {
41{ 30
42 QPixmap logo = Resource::loadPixmap( "today/today_logo"); // logo 31 QPixmap logo = Resource::loadPixmap( "today/today_logo"); // logo
43 QPixmap datebook = Resource::loadPixmap("DateBook"); // datebook
44 QPixmap todo = Resource::loadPixmap( "TodoList" ); // todo
45 QPixmap config = Resource::loadPixmap( "today/config" ); // config icon
46 QPixmap mail = Resource::loadPixmap( "today/mail" ); // mail icon
47 QPixmap opiezilla = Resource::loadPixmap("today/opiezilla" ); //the opiezilla 32 QPixmap opiezilla = Resource::loadPixmap("today/opiezilla" ); //the opiezilla
33 QPixmap config = Resource::loadPixmap( "today/config" ); // config icon
48 34
49 QWidget *d = QApplication::desktop(); 35 layout = new QVBoxLayout( this );
50 int w=d->width();
51 int h=d->height();
52 resize( w , h );
53
54 // hehe, qt is ...
55 getridoffuckingstrippeldlinesbutton = new QPushButton (this, "asdfsad" );
56 getridoffuckingstrippeldlinesbutton->setGeometry( QRect( -5, 10, 0, 0 ) );
57
58 QVBoxLayout * layout = new QVBoxLayout(this);
59 36
60 QPalette pal = this->palette(); 37 QPalette pal = this->palette();
61 QColor col = pal.color(QPalette::Active, QColorGroup::Background); 38 QColor col = pal.color( QPalette::Active, QColorGroup::Background );
62 pal.setColor(QPalette::Active, QColorGroup::Button, col); 39 pal.setColor( QPalette::Active, QColorGroup::Button, col );
63 pal.setColor(QPalette::Inactive, QColorGroup::Button, col); 40 pal.setColor( QPalette::Inactive, QColorGroup::Button, col );
64 pal.setColor(QPalette::Normal, QColorGroup::Button, col); 41 pal.setColor( QPalette::Normal, QColorGroup::Button, col );
65 pal.setColor(QPalette::Disabled, QColorGroup::Button, col); 42 pal.setColor( QPalette::Disabled, QColorGroup::Button, col );
66 this->setPalette(pal); 43 this->setPalette( pal );
67 44
68 // --- logo Section --- 45 // --- logo Section ---
69 QPalette pal2; 46 QPalette pal2;
70 QColorGroup cg; 47 QColorGroup cg;
71 cg.setColor( QColorGroup::Text, white ); 48 cg.setColor( QColorGroup::Text, white );
72 cg.setBrush( QColorGroup::Background, QBrush( QColor( 238, 238, 230), logo ) ); 49 cg.setBrush( QColorGroup::Background, QBrush( QColor( 238, 238, 230 ), logo ) );
73 pal2.setActive( cg ); 50 pal2.setActive( cg );
74 // today logo 51 // today logo
75 Frame = new QLabel( this, "Frame" ); 52 Frame = new QLabel( this, "Frame" );
76 Frame->setPalette( pal2 ); 53 Frame->setPalette( pal2 );
77 Frame->setFrameShape( QFrame::StyledPanel ); 54 Frame->setFrameShape( QFrame::StyledPanel );
78 Frame->setFrameShadow( QFrame::Raised ); 55 Frame->setFrameShadow( QFrame::Raised );
79 Frame->setLineWidth( 0 ); 56 Frame->setLineWidth( 0 );
80 Frame->setMaximumHeight(50); 57 Frame->setMaximumHeight( 50 );
81 Frame->setMinimumHeight(50); 58 Frame->setMinimumHeight( 50 );
82 59
83 // Today text 60 // Today text
84 QLabel* TodayLabel = new QLabel( Frame, "TodayText" ); 61 QLabel* TodayLabel = new QLabel( Frame, "TodayText" );
85 TodayLabel->setGeometry( QRect( 10, 0, 168, 40 ) ); 62 TodayLabel->setGeometry( QRect( 10, 0, 168, 40 ) );
86 QFont TodayLabel_font( TodayLabel->font() ); 63 QFont TodayLabel_font( TodayLabel->font() );
87 TodayLabel_font.setBold( TRUE ); 64 TodayLabel_font.setBold( TRUE );
88 TodayLabel_font.setPointSize(40); 65 TodayLabel_font.setPointSize( 40 );
89 TodayLabel->setFont( TodayLabel_font ); 66 TodayLabel->setFont( TodayLabel_font );
90 TodayLabel->setBackgroundOrigin( QLabel::ParentOrigin ); 67 TodayLabel->setBackgroundOrigin( QLabel::ParentOrigin );
91 TodayLabel->setText("<font color=#FFFFFF>" + tr("Today") +"</font>"); 68 TodayLabel->setText( "<font color=#FFFFFF>" + tr("Today²") +"</font>" );
69
70 // date
71 DateLabel = new QLabel( Frame, "TextLabel1" );
72 DateLabel->setGeometry( QRect( 10, 35, 168, 12 ) );
73 QFont DateLabel_font( DateLabel->font() );
74 DateLabel_font.setBold( TRUE );
75 DateLabel->setFont( DateLabel_font );
76 DateLabel->setBackgroundOrigin( QLabel::ParentOrigin );
77 DateLabel->setTextFormat( RichText );
92 78
93 // Opiezilla 79 // Opiezilla
94 QLabel* Opiezilla = new QLabel( Frame, "OpieZilla"); 80 QLabel* Opiezilla = new QLabel( Frame, "OpieZilla");
95 Opiezilla->setPixmap( opiezilla ); 81 Opiezilla->setPixmap( opiezilla );
96 Opiezilla->setGeometry( this->width()-50 ,1, 45, 47); 82 Opiezilla->setGeometry( QApplication::desktop()->width()-50 ,1, 45, 47);
97 Opiezilla->setBackgroundOrigin( QLabel::ParentOrigin ); 83 Opiezilla->setBackgroundOrigin( QLabel::ParentOrigin );
98 84
99 // date 85 // Ownerfield
100 TextLabel1 = new QLabel( Frame, "TextLabel1" ); 86 OwnerField = new OClickableLabel( this , "Owner" );
101 TextLabel1->setGeometry( QRect( 10, 35, 168, 12 ) ); 87 OwnerField->setGeometry( QRect( 0,0, this->width(), 12 ));
102 QFont TextLabel1_font( TextLabel1->font() ); 88 OwnerField->setAlignment( int (QLabel::AlignTop | QLabel::AlignLeft ) );
103 TextLabel1_font.setBold( TRUE );
104 TextLabel1->setFont( TextLabel1_font );
105 TextLabel1->setBackgroundOrigin( QLabel::ParentOrigin );
106 TextLabel1->setTextFormat( RichText );
107
108 OwnerField = new OClickableLabel(this , "Owner" );
109 OwnerField->setGeometry(QRect(0,0, this->width(), 12 ));
110 OwnerField->setAlignment(int (QLabel::AlignTop | QLabel::AlignLeft ) );
111 OwnerField->setMaximumHeight(12); 89 OwnerField->setMaximumHeight(12);
112 90
113 // --- dates section --- 91 // config
114 Frame4 = new QFrame( this, "Frame4" ); 92 ConfigButton = new OClickableLabel ( Frame, "PushButton1" );
115// Frame4->setPalette( pal ); 93 ConfigButton->setGeometry( QRect( QApplication::desktop()->width()-80, 30, 25, 21 ) );
116 Frame4->setFrameShape( QScrollView::StyledPanel ); 94 ConfigButton->setPixmap( config );
117 Frame4->setFrameShadow( QScrollView::Sunken ); 95 ConfigButton->setBackgroundOrigin( QLabel::ParentOrigin );
118 Frame4->setBackgroundOrigin( QScrollView::ParentOrigin );
119 Frame4->setFrameStyle( QFrame::NoFrame );
120 Frame4->setGeometry (QRect( 0, 8, this->width() , this->height()) );
121
122 sv1 = new QScrollView( Frame4 );
123 sv1->setResizePolicy(QScrollView::AutoOneFit);
124 sv1->setHScrollBarMode( QScrollView::AlwaysOff );
125 // need to find a better way!!!
126 sv1->setGeometry (QRect( 40, 2, Frame4->width()-40 , (Frame4->height()/3)+20 ) );
127 sv1->setFrameShape(QFrame::NoFrame);
128
129 DatesButton = new QPushButton (Frame4, "DatesButton" );
130 DatesButton->setGeometry( QRect( 2, 4, 36, 32 ) );
131 DatesButton->setBackgroundOrigin( QPushButton::WidgetOrigin );
132 DatesButton->setPalette( pal );
133 DatesButton->setPixmap( datebook );
134 DatesButton->setFlat( TRUE );
135
136 // --- mail section ---)
137 MailFrame = new QFrame( this ,"MailFrame" );
138 MailFrame->setBackgroundOrigin( QScrollView::ParentOrigin );
139 MailFrame->setGeometry (QRect( 0, 0, this->width() , 15) );
140 MailFrame->setFrameStyle( QFrame::NoFrame );
141
142 QFrame* Line1 = new QFrame( MailFrame);
143 Line1->setGeometry( QRect( -5, 0, MailFrame->width()+5, 5 ) );
144 Line1->setFrameStyle( QFrame::HLine | QFrame::Sunken );
145
146 MailButton = new QPushButton (MailFrame, "MailButton" );
147 MailButton->setGeometry( QRect( 2, 3, 36, 19 ) );
148 MailButton->setPalette( pal );
149 MailButton->setPixmap( mail );
150 MailButton->setFlat( TRUE );
151
152 MailField = new QLabel( MailFrame, "MailField" );
153 MailField->setGeometry( QRect( 40, 4, MailFrame->width(), 12) );
154 MailField->setText( tr( "Opiemail not installed" ) );
155 MailField->setAlignment( int( QLabel::AlignTop | QLabel::AlignLeft ) );
156 MailField->setMaximumHeight(40);
157 MailField->setMinimumHeight(15);
158
159 // --- todo section --
160 Frame15 = new QFrame( this, "Frame15" );
161 Frame15->setFrameStyle( QFrame::NoFrame );
162 Frame15->setGeometry (QRect( 40, 3, this->width() , this->height()) );
163
164 QFrame* Line2 = new QFrame( Frame15);
165 Line2->setGeometry( QRect( -5, 0, MailFrame->width()+5, 5 ) );
166 Line2->setFrameStyle( QFrame::HLine | QFrame::Sunken );
167
168 TodoButton = new QPushButton (Frame15, "TodoButton" );
169 TodoButton->setGeometry( QRect( 2, 4, 36, 32 ) );
170 TodoButton->setPalette( pal );
171 TodoButton->setPixmap( todo );
172 TodoButton->setFlat( TRUE );
173
174 QScrollView* sv2 = new QScrollView( Frame15 );
175 sv2->setResizePolicy(QScrollView::AutoOneFit);
176 sv2->setHScrollBarMode( QScrollView::AlwaysOff );
177 sv2->setGeometry (QRect( 40, 3, Frame15->width()-40 , (Frame15->height()/3) ) );
178 sv2->setFrameShape(QFrame::NoFrame);
179
180 TodoField = new QLabel( sv2->viewport(), "TodoField" );
181 sv2->addChild(TodoField);
182 TodoField->setFrameShadow( QLabel::Plain );
183 //TodoField->setText( tr( "No current todos" ) );
184 TodoField->setAlignment( int( QLabel::AlignTop | QLabel::AlignLeft ) );
185
186 PushButton1 = new QPushButton (Frame15, "PushButton1" );
187 PushButton1->setGeometry( QRect( 2, 68, 25, 21 ) );
188 PushButton1->setPixmap( config );
189 PushButton1->setPalette( pal );
190 PushButton1->setAutoDefault( TRUE );
191 PushButton1->setFlat( TRUE );
192 96
193 // -- layout -- 97 // -- layout --
194 layout->addWidget(Frame); 98 layout->addWidget( Frame );
195 layout->addWidget(OwnerField); 99 layout->addWidget( OwnerField );
196 layout->addWidget(Frame4);
197 layout->addWidget(MailFrame);
198 layout->addWidget(Frame15);
199
200 layout->setStretchFactor(Frame4,5);
201 layout->setStretchFactor(MailFrame,1);
202 layout->setStretchFactor(Frame15,4);
203} 100}
204 101
205/* 102/**
206 * Destroys the object and frees any allocated resources 103 * D' tor
207 */ 104 */
208TodayBase::~TodayBase() 105TodayBase::~TodayBase() {
209{
210} 106}
211 107
diff --git a/core/pim/today/todaybase.h b/core/pim/today/todaybase.h
index ec06281..7c50f32 100644
--- a/core/pim/today/todaybase.h
+++ b/core/pim/today/todaybase.h
@@ -1,55 +1,53 @@
1/**************************************************************************** 1/*
2** Form interface generated from reading ui file 'todaybase.ui' 2 * todaybase.h
3** 3 *
4** Created: Wed Feb 13 19:36:45 2002 4 * copyright : (c) 2002 by Maximilian Reiß
5** by: The User Interface Compiler (uic) 5 * email : harlekin@handhelds.org
6** 6 *
7** WARNING! All changes made in this file will be lost! 7 */
8****************************************************************************/ 8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
9#ifndef TODAYBASE_H 17#ifndef TODAYBASE_H
10#define TODAYBASE_H 18#define TODAYBASE_H
11 19
12#include <qvariant.h> 20#include <qlayout.h>
13#include <qwidget.h>
14#include <qscrollview.h>
15#include <qsplitter.h>
16#include <opie/oclickablelabel.h> 21#include <opie/oclickablelabel.h>
17 22
18class QVBox; 23class QVBox;
19class QHBoxLayout;
20class QGridLayout; 24class QGridLayout;
21class QFrame; 25class QFrame;
22class QLabel; 26class QLabel;
23class QPushButton; 27class QPushButton;
28class QBoxLayout;
29
24 30
25class TodayBase : public QWidget 31class TodayBase : public QWidget
26{ 32{
27 Q_OBJECT 33 Q_OBJECT
28 34
29public: 35public:
30 TodayBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); 36 TodayBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
31 ~TodayBase(); 37 ~TodayBase();
32 38
33 //QScrollView* Frame4;
34 QFrame* Frame4; 39 QFrame* Frame4;
35 QPushButton* DatesButton; 40 QPushButton* DatesButton;
41 QVBoxLayout* layout;
36 OClickableLabel* OwnerField; 42 OClickableLabel* OwnerField;
37 QLabel* Frame; 43 QLabel* Frame;
38 QFrame* MailFrame; 44 QLabel* DateLabel;
39 QLabel* TextLabel1;
40 QScrollView* sv1;
41 QVBox* DatesField;
42 QFrame* Frame15; 45 QFrame* Frame15;
43 QLabel* TodoField; 46 OClickableLabel* ConfigButton;
44 QLabel* MailField;
45 QPushButton* PushButton1;
46 QPushButton* TodoButton;
47 QPushButton* MailButton;
48 QPushButton* getridoffuckingstrippeldlinesbutton;
49 47
50protected: 48protected:
51 49
52 50
53}; 51};
54 52
55#endif // TODAYBASE_H 53#endif
diff --git a/core/pim/today/todayconfig.cpp b/core/pim/today/todayconfig.cpp
index 905ec4b..08e59c0 100644
--- a/core/pim/today/todayconfig.cpp
+++ b/core/pim/today/todayconfig.cpp
@@ -1,151 +1,220 @@
1/* 1/*
2 * todayconfig.cpp 2 * todayconfig.cpp
3 * 3 *
4 * ---------------------
5 *
6 * begin : Sun 10 17:20:00 CEST 2002
7 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002 by Maximilian Reiß
8 * email : max.reiss@gmx.de 5 * email : harlekin@handhelds.org
9 * 6 *
10 */ 7 */
11/*************************************************************************** 8/***************************************************************************
12 * * 9 * *
13 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by * 11 * 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 * 12 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. * 13 * (at your option) any later version. *
17 * * 14 * *
18 ***************************************************************************/ 15 ***************************************************************************/
19 16
20#include "todayconfig.h" 17#include "todayconfig.h"
21 18
19#include <qpe/config.h>
20#include <qpe/resource.h>
21#include <qpe/qcopenvelope_qws.h>
22
22#include <qcheckbox.h> 23#include <qcheckbox.h>
23#include <qframe.h>
24#include <qlabel.h> 24#include <qlabel.h>
25#include <qspinbox.h> 25#include <qspinbox.h>
26#include <qtabwidget.h> 26#include <qtabwidget.h>
27#include <qwidget.h>
28#include <qlayout.h> 27#include <qlayout.h>
29#include <qvariant.h> 28#include <qheader.h>
30//#include <qwhatsthis.h> 29#include <qhbox.h>
31 30#include <qvbox.h>
32todayconfig::todayconfig( QWidget* parent, const char* name, bool modal, WFlags fl ) 31#include <qtoolbutton.h>
32
33// for getenv
34#include <stdlib.h>
35
36class ToolButton : public QToolButton {
37public:
38 ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE )
39 : QToolButton( parent, name ) {
40 setTextLabel( name );
41 setPixmap( Resource::loadPixmap( icon ) );
42 setAutoRaise( TRUE );
43 setFocusPolicy( QWidget::NoFocus );
44 setToggleButton( t );
45 connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot );
46 }
47};
48
49
50/**
51 * The class has currently quite some duplicate code.
52 * By that way it would be real easy to have it as seperate app in settings tab
53 *
54 */
55TodayConfig::TodayConfig( QWidget* parent, const char* name, bool modal, WFlags fl )
33 : QDialog( parent, name, modal, fl ) { 56 : QDialog( parent, name, modal, fl ) {
34 if ( !name )
35 setName( "todayconfig" );
36 resize( 175, 232 );
37 setCaption( tr( "Today config" ) );
38
39 TabWidget3 = new QTabWidget( this, "TabWidget3" );
40 TabWidget3->setGeometry( QRect( 0, 0, 220, 320 ) );
41 TabWidget3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, TabWidget3->sizePolicy().hasHeightForWidth() ) );
42 TabWidget3->setAutoMask( FALSE );
43 TabWidget3->setTabShape( QTabWidget::Rounded );
44
45 tab = new QWidget( TabWidget3, "tab" );
46
47 Frame8 = new QFrame( tab, "Frame8" );
48 Frame8->setGeometry( QRect( -5, 0, 200, 300 ) );
49 Frame8->setFrameShape( QFrame::StyledPanel );
50 Frame8->setFrameShadow( QFrame::Raised );
51
52 TextLabel4 = new QLabel( Frame8, "TextLabel4" );
53 TextLabel4->setGeometry( QRect( 20, 65, 100, 60 ) );
54 TextLabel4->setText( tr( "Should the \n"
55 "location \n"
56 "be shown?" ) );
57
58 TextLabel5 = new QLabel( Frame8, "TextLabel5" );
59 TextLabel5->setGeometry( QRect( 20, 160, 120, 40 ) );
60 TextLabel5->setText( tr( "Should the notes \n"
61 "be shown?" ) );
62
63 CheckBox2 = new QCheckBox( Frame8, "CheckBox2" );
64 CheckBox2->setGeometry( QRect( 158, 170, 27, 21 ) );
65 //CheckBox2->setText( tr( "" ) );
66
67 CheckBox1 = new QCheckBox( Frame8, "CheckBox1" );
68 CheckBox1->setGeometry( QRect( 158, 65, 27, 50 ) );
69 //CheckBox1->setText( tr( "" ) );
70
71 CheckBox3 = new QCheckBox (Frame8, "CheckBox3" );
72 CheckBox3->setGeometry( QRect( 158, 125, 27, 21 ) );
73
74 TextLabel6 = new QLabel( Frame8, "All Day");
75 TextLabel6->setGeometry( QRect( 20, 120, 100, 30 ) );
76 TextLabel6->setText( tr( "Show only later\n"
77 "appointments") );
78
79 SpinBox1 = new QSpinBox( Frame8, "SpinBox1" );
80 SpinBox1->setGeometry( QRect( 115, 20, 58, 25 ) );
81 SpinBox1->setMaxValue( 10 );
82 SpinBox1->setValue( 5 );
83
84 TextLabel3 = new QLabel( Frame8, "TextLabel3" );
85 TextLabel3->setGeometry( QRect( 20, 10, 90, 60 ) );
86 TextLabel3->setText( tr( "How many \n"
87 "appointment\n"
88 "should\n"
89 "be shown?" ) );
90 TabWidget3->insertTab( tab, tr( "Calendar" ) );
91
92 tab_2 = new QWidget( TabWidget3, "tab_2" );
93
94 Frame9 = new QFrame( tab_2, "Frame9" );
95 Frame9->setGeometry( QRect( -5, 0, 230, 310 ) );
96 Frame9->setFrameShape( QFrame::StyledPanel );
97 Frame9->setFrameShadow( QFrame::Raised );
98
99 TextLabel6 = new QLabel( Frame9, "TextLabel6" );
100 TextLabel6->setGeometry( QRect( 20, 10, 100, 60 ) );
101 TextLabel6->setText( tr( "How many\n"
102 "tasks should \n"
103 "be shown?" ) );
104
105 SpinBox2 = new QSpinBox( Frame9, "SpinBox2" );
106 SpinBox2->setGeometry( QRect( 115, 20, 58, 25 ) );
107 SpinBox2->setMaxValue( 20 );
108 SpinBox2->setValue( 5 );
109 TabWidget3->insertTab( tab_2, tr( "Tasks" ) );
110
111 tab_3 = new QWidget( TabWidget3, "tab_3" );
112
113 Frame14 = new QFrame( tab_3, "Frame14" );
114 Frame14->setGeometry( QRect( -5, 0, 200, 220 ) );
115 Frame14->setFrameShape( QFrame::StyledPanel );
116 Frame14->setFrameShadow( QFrame::Raised );
117
118 TextLabel1 = new QLabel( Frame14, "TextLabel1" );
119 TextLabel1->setGeometry( QRect( 20, 20, 100, 30 ) );
120 TextLabel1->setText( tr( "Clip after how\n"
121 "many letters" ) );
122
123 SpinBox7 = new QSpinBox( Frame14, "SpinBox7" );
124 SpinBox7->setGeometry( QRect( 115, 20, 58, 25 ) );
125 SpinBox7->setMaxValue( 80 );
126
127 TextLabel2 = new QLabel( Frame14, "AutoStart" );
128 TextLabel2->setGeometry( QRect( 20, 60, 100, 45 ) );
129 TextLabel2->setText( tr( "Should today be\n"
130 "autostarted on\n"
131 "resume?"
132 " (Opie only)" ) );
133
134 CheckBoxAuto = new QCheckBox (Frame14, "CheckBoxAuto" );
135 CheckBoxAuto->setGeometry( QRect( 158, 60, 27, 21 ) );
136
137 TimeLabel = new QLabel( Frame14, "TimeLabel" );
138 TimeLabel->setGeometry( QRect ( 20, 120, 120, 45 ) );
139 TimeLabel->setText( tr( "Activate the \n"
140 "autostart after how\n"
141 "many minutes?" ) );
142 SpinBoxTime = new QSpinBox( Frame14, "TimeSpinner");
143 SpinBoxTime->setGeometry( QRect( 115, 120, 58, 25 ) );
144
145 TabWidget3->insertTab( tab_3, tr( "Misc" ) );
146 57
58 if ( !name ) {
59 setName( "todayconfig" );
60 }
61 setCaption( tr( "Today config" ) );
62
63 QVBoxLayout *layout = new QVBoxLayout( this );
64 TabWidget3 = new QTabWidget( this, "TabWidget3" );
65 TabWidget3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, TabWidget3->sizePolicy().hasHeightForWidth() ) );
66 TabWidget3->setAutoMask( FALSE );
67 TabWidget3->setTabShape( QTabWidget::Rounded );
68 layout->addWidget( TabWidget3 );
69
70 tab_2 = new QWidget( TabWidget3, "tab_2" );
71 QVBoxLayout *tab2Layout = new QVBoxLayout( tab_2, 4 ,4 );
72 QLabel *l = new QLabel( tr( "Load which plugins in what order:" ), tab_2 );
73 tab2Layout->addWidget( l );
74 QHBox *hbox1 = new QHBox( tab_2 );
75 m_appletListView = new QListView( hbox1 );
76 m_appletListView->addColumn( "PluginList" );
77 m_appletListView->header()->hide();
78 QVBox *vbox1 = new QVBox( hbox1 );
79 new ToolButton( vbox1, tr( "Move Up" ), "opieplayer/up", this , SLOT( moveSelectedUp() ) );
80 new ToolButton( vbox1, tr( "Move Down" ),"opieplayer/down", this , SLOT( moveSelectedDown() ) );
81 tab2Layout->addWidget( hbox1 );
82
83 TabWidget3->insertTab( tab_2, tr( "active/order" ) );
84 tab_3 = new QWidget( TabWidget3, "tab_3" );
85 QVBoxLayout *tab3Layout = new QVBoxLayout( tab_3 );
86 QHBox *hbox_clip = new QHBox( tab_3 );
87 TextLabel1 = new QLabel( hbox_clip, "TextLabel1" );
88 TextLabel1->setText( tr( "Clip after how\n"
89 "many letters" ) );
90 SpinBox7 = new QSpinBox( hbox_clip, "SpinBox7" );
91 SpinBox7->setMaxValue( 80 );
92 QHBox *hbox_auto = new QHBox( tab_3 );
93 TextLabel2 = new QLabel( hbox_auto, "AutoStart" );
94 TextLabel2->setText( tr( "autostart on \nresume? (Opie only)" ) );
95 CheckBoxAuto = new QCheckBox( hbox_auto, "CheckBoxAuto" );
96 QHBox *hbox_inactive = new QHBox( tab_3 );
97 TimeLabel = new QLabel( hbox_inactive , "TimeLabel" );
98 TimeLabel->setText( tr( "minutes inactive" ) );
99 SpinBoxTime = new QSpinBox( hbox_inactive, "TimeSpinner");
100 tab3Layout->addWidget( hbox_clip );
101 tab3Layout->addWidget( hbox_auto );
102 tab3Layout->addWidget( hbox_inactive );
103 TabWidget3->insertTab( tab_3, tr( "Misc" ) );
104
105 m_applets_changed = false;
106
107 connect ( m_appletListView , SIGNAL( clicked ( QListViewItem * ) ), this, SLOT( appletChanged ( ) ) );
108
109 readConfig();
110}
111
112
113/**
114 * Autostart, uses the new (opie only) autostart method in the launcher code.
115 * If registered against that today ist started on each resume.
116 */
117void TodayConfig::setAutoStart() {
118 Config cfg( "today" );
119 cfg.setGroup( "Autostart" );
120 int autostart = cfg.readNumEntry( "autostart", 1);
121 if ( autostart ) {
122 QCopEnvelope e( "QPE/System", "autoStart(QString,QString,QString)" );
123 e << QString( "add" );
124 e << QString( "today" );
125 e << m_autoStartTimer;
126 } else {
127 QCopEnvelope e( "QPE/System", "autoStart(QString,QString)" );
128 e << QString( "remove");
129 e << QString( "today" );
130 }
131}
132
133/**
134 * Read the config part
135 */
136void TodayConfig::readConfig() {
137 Config cfg( "today" );
138 cfg.setGroup( "Autostart" );
139 m_autoStart = cfg.readNumEntry( "autostart", 1 );
140 CheckBoxAuto->setChecked( m_autoStart );
141 m_autoStartTimer = cfg.readEntry( "autostartdelay", "0" );
142 SpinBoxTime->setValue( m_autoStartTimer.toInt() );
143
144 cfg.setGroup( "Applets" );
145 m_excludeApplets = cfg.readListEntry( "ExcludeApplets", ',' );
146}
147
148/**
149 * Write the config part
150 */
151void TodayConfig::writeConfig() {
152 Config cfg( "today" );
153 cfg. setGroup ( "Applets" );
154 if ( m_applets_changed ) {
155 QStringList exclude;
156 QStringList include;
157 QMap <QString, QCheckListItem *>::Iterator it;
158 for ( it = m_applets.begin(); it != m_applets. end (); ++it ) {
159 if ( !(*it)-> isOn () ) {
160 exclude << it.key();
161 } else {
162 include << it.key();
163 }
164 }
165 cfg.writeEntry( "ExcludeApplets", exclude, ',' );
166 cfg.writeEntry( "IncludeApplets", include, ',' );
167 }
168
169 cfg.setGroup( "Autostart" );
170 m_autoStart = CheckBoxAuto->isChecked();
171 cfg.writeEntry( "autostart", m_autoStart );
172 m_autoStartTimer = SpinBoxTime->value();
173 cfg.readEntry( "autostartdelay", m_autoStartTimer );
174}
175
176
177void TodayConfig::moveSelectedUp() {
178 QListViewItem *item = m_appletListView->selectedItem();
179 if ( item && item->itemAbove() ) {
180 item->itemAbove()->moveItem( item );
181 }
182}
183
184
185void TodayConfig::moveSelectedDown() {
186 QListViewItem *item = m_appletListView->selectedItem();
187 if ( item && item->itemBelow() ) {
188 item->moveItem( item->itemBelow() );
189 }
190}
191
192
193/**
194 * Set up the
195 */
196void TodayConfig::pluginManagement( QString libName, QString name, QPixmap icon ) {
197
198 QCheckListItem *item;
199 item = new QCheckListItem( m_appletListView, name, QCheckListItem::CheckBox );
200
201 if ( !icon.isNull() ) {
202 item->setPixmap( 0, icon );
203 }
204
205 qDebug (" SUCHNAME: " + name );
206 if ( m_excludeApplets.find( libName ) == m_excludeApplets.end() ) {
207 item->setOn( TRUE );
208 }
209 m_applets[libName] = item;
147} 210}
148 211
149todayconfig::~todayconfig() { 212
213void TodayConfig::appletChanged() {
214 m_applets_changed = true;
215}
216
217
218TodayConfig::~TodayConfig() {
150} 219}
151 220
diff --git a/core/pim/today/todayconfig.h b/core/pim/today/todayconfig.h
index 2986c4c..d5bdb4b 100644
--- a/core/pim/today/todayconfig.h
+++ b/core/pim/today/todayconfig.h
@@ -1,66 +1,69 @@
1/* 1/*
2 * todayconfig.h 2 * todayconfig.h
3 * 3 *
4 * ---------------------
5 *
6 * begin : Sun 10 17:20:00 CEST 2002
7 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002 by Maximilian Reiß
8 * email : max.reiss@gmx.de 5 * email : harlekin@handhelds.org
9 * 6 *
10 */ 7 */
11/*************************************************************************** 8/***************************************************************************
12 * * 9 * *
13 * This program is free software; you can redistribute it and/or modify * 10 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by * 11 * 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 * 12 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. * 13 * (at your option) any later version. *
17 * * 14 * *
18 ***************************************************************************/ 15 ***************************************************************************/
16
19#ifndef TODAYCONFIG_H 17#ifndef TODAYCONFIG_H
20#define TODAYCONFIG_H 18#define TODAYCONFIG_H
21 19
22#include <qvariant.h> 20#include <qvariant.h>
23#include <qdialog.h> 21#include <qdialog.h>
24//class QVBoxLayout; 22#include <qlistview.h>
25class QHBoxLayout; 23
26class QGridLayout;
27class QCheckBox; 24class QCheckBox;
28class QFrame;
29class QLabel; 25class QLabel;
30class QSpinBox; 26class QSpinBox;
31class QTabWidget; 27class QTabWidget;
32class QWidget;
33 28
34class todayconfig : public QDialog { 29class TodayConfig : public QDialog {
30
35 Q_OBJECT 31 Q_OBJECT
36 32
37public: 33public:
38 todayconfig( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); 34 TodayConfig( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
39 ~todayconfig(); 35 ~TodayConfig();
40 36
41 QTabWidget* TabWidget3; 37 QTabWidget* TabWidget3;
42 QWidget* tab; 38
43 QFrame* Frame8; 39 void writeConfig();
44 QLabel* TextLabel4; 40 void pluginManagement( QString libName, QString name, QPixmap icon );
45 QLabel* TextLabel5; 41
42protected slots:
43 void appletChanged();
44 void moveSelectedUp();
45 void moveSelectedDown();
46
47private:
48 void setAutoStart();
49 void readConfig();
50
51 QListView* m_appletListView;
52 QMap<QString,QCheckListItem*> m_applets;
53
54 int m_autoStart;
55 QString m_autoStartTimer;
56 QStringList m_excludeApplets;
57 bool m_applets_changed;
58
46 QLabel* TextLabel2; 59 QLabel* TextLabel2;
47 QCheckBox* CheckBox3;
48 QCheckBox* CheckBox2;
49 QCheckBox* CheckBox1;
50 QCheckBox* CheckBoxAuto; 60 QCheckBox* CheckBoxAuto;
51 QSpinBox* SpinBox1;
52 QLabel* TextLabel3;
53 QWidget* tab_2; 61 QWidget* tab_2;
54 QFrame* Frame9;
55 QLabel* TextLabel6;
56 QSpinBox* SpinBox2;
57 QWidget* tab_3; 62 QWidget* tab_3;
58 QFrame* Frame14;
59 QLabel* TextLabel1; 63 QLabel* TextLabel1;
60 QSpinBox* SpinBox7; 64 QSpinBox* SpinBox7;
61 QLabel* TimeLabel; 65 QLabel* TimeLabel;
62 QSpinBox* SpinBoxTime; 66 QSpinBox* SpinBoxTime;
63
64}; 67};
65 68
66#endif 69#endif
diff --git a/core/pim/today/todayplugininterface.h b/core/pim/today/todayplugininterface.h
new file mode 100644
index 0000000..01e7d58
--- a/dev/null
+++ b/core/pim/today/todayplugininterface.h
@@ -0,0 +1,82 @@
1
2#ifndef TODAY_PLUGIN_INTERFACE
3#define TODAY_PLUGIN_INTERFACE
4
5#include <qpe/qcom.h>
6#include "configwidget.h"
7
8class QString;
9class QWidget;
10
11#ifndef IID_TodayPluginInterface
12#define IID_TodayPluginInterface QUuid( 0x70481804, 0x2b50, 0x4fba, 0x80, 0xbb, 0x0b, 0xf8, 0xdc, 0x72, 0x04, 0x14)
13#endif
14
15/**
16 *
17 *
18 *
19 */
20class TodayPluginObject {
21
22 Q_OBJECT
23
24public:
25
26 virtual ~TodayPluginObject() {};
27
28 /**
29 * The name if the plugin
30 */
31 virtual QString pluginName() const = 0;
32
33 /**
34 * Version numbering
35 */
36 virtual double versionNumber() const = 0;
37
38 /**
39 * the path and name of the identifer icon that should be shown
40 * in "Resource" notation, that means only subdir/picname form $QPEDIR/pics
41 */
42 virtual QString pixmapNameWidget() const = 0;
43
44 /** widget for the today view
45 * It _needs_ a parent here.
46 */
47 virtual QWidget* widget( QWidget * ) = 0;
48
49 /**
50 * Pixmap used in the config widget
51 */
52 virtual QString pixmapNameConfig() const = 0;
53
54 /**
55 * Config plugin widget - optional
56 * If the plugin has a config widget, it _needs_ a parent here.
57 */
58 virtual ConfigWidget* configWidget( QWidget * ) = 0;
59
60 /**
61 * The application that should be assigned to the button (pixmap)
62 */
63 virtual QString appName() const = 0;
64
65 /**
66 * minimum height the plugin at least should have
67 */
68 virtual int minHeight() const = 0;
69
70 /**
71 * maximum height that should be used before starting scrolling
72 */
73 virtual int maxHeight() const = 0;
74
75};
76
77
78struct TodayPluginInterface : public QUnknownInterface {
79 virtual TodayPluginObject *guiPart() = 0;
80};
81
82#endif