summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (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
@@ -6,6 +6,4 @@ TODO for today:
* qcop integration for updating events?
-* make Opiezilla a clickable label wich is allway on the far right side of
-the screen , klick will open credits ,)
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,3 +1,7 @@
+0.5
+
+* now fully plugin based
+
0.3.4
* "fill our business card now a clickable label"
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 @@
+
+#ifndef CONFIG_WIDGET_H
+#define CONFIG_WIDGET_H
+
+
+
+class ConfigWidget : public QWidget {
+
+public:
+
+ ConfigWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) {};
+ virtual ~ConfigWidget() {};
+
+ virtual void writeConfig() = 0;
+};
+
+#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,10 +1,11 @@
Files: bin/today apps/1Pim/today.desktop pics/today/*
Priority: optional
Section: opie/applications
-Maintainer: Maximilian Reiß <max.reiss@gmx.de>
+Maintainer: Maximilian Reiß <harlekin@handhelds.org>
Architecture: arm
-Version: 0.3.4-$SUB_VERSION
-Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION)
+Version: 0.5-$SUB_VERSION
+Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION),
+opie-today-datebookplugin, opie-today-todolistplugin
License: GPL
Description: today screen
This today screen app gives an overview of appointments
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,11 +1,8 @@
/*
- * today.cpp : main class
+ * today.cpp
*
- * ---------------------
- *
- * begin : Sun 10 17:20:00 CEST 2002
* copyright : (c) 2002 by Maximilian Reiß
- * email : max.reiss@gmx.de
+ * email : harlekin@handhelds.org
*
*/
/***************************************************************************
@@ -17,621 +14,292 @@
* *
***************************************************************************/
+
#include "today.h"
+#include "configwidget.h"
-#include <qpe/timestring.h>
#include <qpe/config.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/resource.h>
-#include <qpe/contact.h>
#include <qpe/global.h>
#include <qpe/qpeapplication.h>
+#include <qpe/contact.h>
#include <qdir.h>
#include <qfile.h>
-#include <qdatetime.h>
-#include <qtextstream.h>
-#include <qcheckbox.h>
-#include <qspinbox.h>
#include <qpushbutton.h>
#include <qlabel.h>
#include <qtimer.h>
#include <qpixmap.h>
#include <qlayout.h>
-#include <qtl.h>
-
+#include <qtabwidget.h>
+#include <qdialog.h>
-#include <unistd.h>
-#include <stdlib.h>
-int MAX_LINES_TASK;
-int MAX_CHAR_CLIP;
-int MAX_LINES_MEET;
-int SHOW_LOCATION;
-int SHOW_NOTES;
-// show only later dates
-int ONLY_LATER;
-int AUTOSTART;
-int NEW_START=1;
-QString AUTOSTART_TIMER;
-int NEXTDAYS=1;
+static QValueList<TodayPlugin> pluginList;
-
-/* Constructs a Example which is a child of 'parent', with the
- * name 'name' and widget flags set to 'f'
- */
Today::Today( QWidget* parent, const char* name, WFlags fl )
- : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) {
- QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) );
- QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) );
- QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) );
- QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) );
- QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT(editCard() ) );
+ : TodayBase( parent, name, fl ) {
+
+ QObject::connect( (QObject*)ConfigButton, SIGNAL( clicked() ), this, SLOT( startConfig() ) );
+ QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT( editCard() ) );
#if defined(Q_WS_QWS)
#if !defined(QT_NO_COP)
- QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this );
- connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)),
- this, SLOT ( channelReceived(const QCString &, const QByteArray &)) );
+ QCopChannel *todayChannel = new QCopChannel( "QPE/Today" , this );
+ connect ( todayChannel, SIGNAL( received( const QCString &, const QByteArray &) ),
+ this, SLOT ( channelReceived( const QCString &, const QByteArray &) ) );
#endif
#endif
+ pluginLayout = 0l;
-
- db = NULL;
- setOwnerField();
- todo = new ToDoDB;
- draw();
- getTodo();
- autoStart();
+ setOwnerField();
+ init();
+ refresh();
+ showMaximized();
}
-/*
+/**
* Qcop receive method.
*/
-void Today::channelReceived(const QCString &msg, const QByteArray & data) {
- QDataStream stream(data, IO_ReadOnly );
+void Today::channelReceived( const QCString &msg, const QByteArray & data ) {
+ QDataStream stream( data, IO_ReadOnly );
if ( msg == "message(QString)" ) {
- QString message;
- stream >> message;
- setOwnerField(message);
+ QString message;
+ stream >> message;
+ setOwnerField( message );
}
-
}
-/*
+/**
* Initialises the owner field with the default value, the username
*/
void Today::setOwnerField() {
- QString file = Global::applicationFileName("addressbook", "businesscard.vcf");
- if (QFile::exists(file)) {
- Contact cont = Contact::readVCard(file)[0];
+ QString file = Global::applicationFileName( "addressbook", "businesscard.vcf" );
+ if ( QFile::exists( file ) ) {
+ Contact cont = Contact::readVCard( file )[0];
QString returnString = cont.fullName();
- OwnerField->setText( "<b>" +tr ("Owned by ") + returnString + "</b>");
+ OwnerField->setText( "<b>" + tr ( "Owned by " ) + returnString + "</b>" );
} else {
- OwnerField->setText( "<b>" + tr ("Please fill out the business card")+" </b>");
+ OwnerField->setText( "<b>" + tr ( "Please fill out the business card" ) + " </b>" );
}
}
-/*
+/**
* Set the owner field with a given QString, for example per qcop.
*/
-void Today::setOwnerField(QString &message) {
- if (!message.isEmpty()) {
- OwnerField->setText("<b>" + message + "</b>");
- }
-}
-
-/*
- * Autostart, uses the new (opie only) autostart method in the launcher code.
- * If registered against that today ist started on each resume.
- */
-void Today::autoStart() {
- Config cfg("today");
- cfg.setGroup("Autostart");
- int AUTOSTART = cfg.readNumEntry("autostart",1);
-// qDebug(QString("%1").arg(AUTOSTART));
- if (AUTOSTART) {
- QCopEnvelope e("QPE/System", "autoStart(QString,QString,QString)");
- e << QString("add");
- e << QString("today");
- e << AUTOSTART_TIMER;
- } else {
- qDebug("Nun in else bei autostart");
- QCopEnvelope e("QPE/System", "autoStart(QString,QString)");
- e << QString("remove");
- e << QString("today");
+void Today::setOwnerField( QString &message ) {
+ if ( !message.isEmpty() ) {
+ OwnerField->setText( "<b>" + message + "</b>" );
}
}
-/*
- * Repaint method. Reread all fields.
- */
-void Today::draw() {
- init();
- getDates();
- getMail();
-
- // if the todolist.xml file was not modified in between, do not parse it.
- if (checkIfModified() || NEW_START==1) {
- if (todo) delete todo;
- todo = new ToDoDB;
- getTodo();
- }
-
- // how often refresh
- QTimer::singleShot( 20*1000, this, SLOT(draw() ) );
-}
-/*
- * Check if the todolist.xml was modified (if there are new entries.
- * Returns true if it was modified.
+/**
+ * Init stuff needed for today. Reads the config file.
*/
-bool Today::checkIfModified() {
+void Today::init() {
- QDir dir;
- QString homedir = dir.homeDirPath ();
- QString time;
+ QDate date = QDate::currentDate();
+ QString time = ( tr( date.toString() ) );
- Config cfg("today");
- cfg.setGroup("Files");
- time = cfg.readEntry("todolisttimestamp", "");
+ DateLabel->setText( QString( "<font color=#FFFFFF>" + time + "</font>" ) );
- QFileInfo file = (homedir +"/Applications/todolist/todolist.xml");
- QDateTime fileTime = file.lastModified();
- if (time.compare(fileTime.toString()) == 0) {
- return false;
- } else {
- cfg.writeEntry("todolisttimestamp", fileTime.toString() );
- cfg.write();
- return true;
- }
+ // read config
+ Config cfg( "today" );
+
+ cfg.setGroup( "Applets" );
+ m_excludeApplets = cfg.readListEntry( "ExcludeApplets", ',' );
}
-/*
- * Init stuff needed for today. Reads the config file.
+/**
+ * Load the plugins
*/
-void Today::init() {
- QDate date = QDate::currentDate();
- QString time = (tr( date.toString()) );
-
- TextLabel1->setText(QString("<font color=#FFFFFF>" + time + "</font>"));
-
- // read config
- Config cfg("today");
- cfg.setGroup("BaseConfig");
-
- // -- config file section --
- // how many lines should be showed in the task section
- MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5);
- // after how many chars should the be cut off on tasks and notes
- MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",40);
- // how many lines should be showed in the datebook section
- MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5);
- // If location is to be showed too, 1 to activate it.
- SHOW_LOCATION = cfg.readNumEntry("showlocation",1);
- // if notes should be shown
- SHOW_NOTES = cfg.readNumEntry("shownotes",0);
- // should only later appointments be shown or all for the current day.
- ONLY_LATER = cfg.readNumEntry("onlylater",1);
-
- cfg.setGroup("Autostart");
- AUTOSTART = cfg.readNumEntry("autostart",1);
- AUTOSTART_TIMER = cfg.readEntry("autostartdelay", "0");
-
- //db = new DateBookDB;
-}
+void Today::loadPlugins() {
-/*
- * The method for the configuration dialog.
- */
-void Today::startConfig() {
+ QValueList<TodayPlugin>::Iterator tit;
+ for ( tit = pluginList.begin(); tit != pluginList.end(); ++tit ) {
+ (*tit).library->unload();
+ delete (*tit).library;
+ }
- conf = new todayconfig ( this, "", true );
- // read the config
- Config cfg("today");
- cfg.setGroup("BaseConfig");
-
- //init();
-
- conf->SpinBox1->setValue(MAX_LINES_MEET);
- // location show box
- conf->CheckBox1->setChecked(SHOW_LOCATION);
- // notes show box
- conf->CheckBox2->setChecked(SHOW_NOTES);
- // task lines
- conf->SpinBox2->setValue(MAX_LINES_TASK);
- // clip when?
- conf->SpinBox7->setValue(MAX_CHAR_CLIP);
- // only later
- conf->CheckBox3->setChecked(ONLY_LATER);
- // if today should be autostarted
- conf->CheckBoxAuto->setChecked(AUTOSTART);
- // autostart only if device has been suspended for X minutes
- conf->SpinBoxTime->setValue( AUTOSTART_TIMER.toInt() );
-
- conf->exec();
-
- int maxlinestask = conf->SpinBox2->value();
- int maxmeet = conf->SpinBox1->value();
- int location = conf->CheckBox1->isChecked();
- int notes = conf->CheckBox2->isChecked();
- int maxcharclip = conf->SpinBox7->value();
- int onlylater = conf->CheckBox3->isChecked();
- int autostart = conf->CheckBoxAuto->isChecked();
- int autostartdelay = conf->SpinBoxTime->value();
-
-
- cfg.writeEntry("maxlinestask",maxlinestask);
- cfg.writeEntry("maxcharclip", maxcharclip);
- cfg.writeEntry("maxlinesmeet",maxmeet);
- cfg.writeEntry("showlocation",location);
- cfg.writeEntry("shownotes", notes);
- cfg.writeEntry("onlylater", onlylater);
- cfg.setGroup("Autostart");
- cfg.writeEntry("autostart", autostart);
- cfg.writeEntry("autostartdelay", autostartdelay);
-
- // sync it to "disk"
- cfg.write();
- NEW_START=1;
- draw();
- AUTOSTART=autostart;
- autoStart();
+ QString path = QPEApplication::qpeDir() + "/plugins/today";
+ QDir dir( path, "lib*.so" );
+
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+
+ uint count = 0;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ TodayPluginInterface *iface = 0;
+ QLibrary *lib = new QLibrary( path + "/" + *it );
+
+ qDebug( "querying: %s", QString( path + "/" + *it ).latin1() );
+ if ( lib->queryInterface( IID_TodayPluginInterface, (QUnknownInterface**)&iface ) == QS_OK ) {
+ qDebug( "loading: %s", QString( path + "/" + *it ).latin1() );
+ qDebug( QString(*it).latin1() );
+ TodayPlugin plugin;
+ plugin.library = lib;
+ plugin.iface = iface;
+ plugin.name = QString(*it).latin1();
+
+ if ( m_excludeApplets.grep( *it ).isEmpty() ) {
+ plugin.active = true;
+ } else {
+ plugin.active = false;
+ }
+ plugin.guiPart = plugin.iface->guiPart();
+ pluginList.append( plugin );
+ count++;
+ } else {
+ qDebug( "could not recognize %s", QString( path + "/" + *it ).latin1() );
+ delete lib;
+ }
+ }
}
-/*
- * Get all events that are in the datebook xml file for today
+/**
+ * Repaint method. Reread all fields.
*/
-void Today::getDates() {
- QDate date = QDate::currentDate();
-
- if (AllDateBookEvents) delete AllDateBookEvents;
- AllDateBookEvents = new QWidget( );
- QVBoxLayout* layoutDates = new QVBoxLayout(AllDateBookEvents);
-
- if (db) {
- delete db;
- }
- db = new DateBookDB;
-
- QValueList<EffectiveEvent> list = db->getEffectiveEvents(date, date);
-
- qBubbleSort(list);
- // printf("Get dates\n");
-
- Config config( "qpe" );
- // if 24 h format
- //bool ampm = config.readBoolEntry( "AMPM", TRUE );
-
- int count=0;
-
- if ( list.count() > 0 ) {
-
- for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin();
- it!=list.end(); ++it ) {
-
-
- if ( count <= MAX_LINES_MEET ) {
+void Today::draw() {
- QTime time = QTime::currentTime();
+ if ( pluginLayout ) {
+ delete pluginLayout;
+ }
+ pluginLayout = new QVBoxLayout( layout );
- if (!ONLY_LATER) {
- count++;
- DateBookEvent *l=new DateBookEvent(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES);
- layoutDates->addWidget(l);
- connect (l, SIGNAL(editEvent(const Event &)),
- this, SLOT(editEvent(const Event &)));
- } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) {
- count++;
+ if ( pluginList.count() == 0 ) {
+ QLabel *noPlugins = new QLabel( this );
+ noPlugins->setText( tr( "No plugins found" ) );
+ layout->addWidget( noPlugins );
+ return;
+ }
- // show only later appointments
- DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES);
- layoutDates->addWidget(l);
- connect (l, SIGNAL(editEvent(const Event &)),
- this, SLOT(editEvent(const Event &)));
+ uint count = 0;
+ TodayPlugin plugin;
+ for ( uint i = 0; i < pluginList.count(); i++ ) {
+ plugin = pluginList[i];
+
+ if ( plugin.active ) {
+ QHBoxLayout* plugLayout = new QHBoxLayout( this );
+ QPixmap plugPix;
+ plugPix.convertFromImage( Resource::loadImage( plugin.guiPart->pixmapNameWidget() ).smoothScale( 18, 18 ), 0 );
+ OClickableLabel* plugIcon = new OClickableLabel( this );
+ plugIcon->setPixmap( plugPix );
+ QScrollView* sv = new QScrollView( this );
+ QWidget* plugWidget = plugin.guiPart->widget( sv->viewport() );
+ // plugWidget->reparent( sv->viewport(), QPoint( 0, 0 ) );
+ sv->setMinimumHeight( plugin.guiPart->minHeight() );
+ //sv->setMaximumHeight( plugin.guiPart->maxHeight() );
+
+ sv->setResizePolicy( QScrollView::AutoOneFit );
+ sv->setHScrollBarMode( QScrollView::AlwaysOff );
+ sv->setFrameShape( QFrame::NoFrame );
+ sv->addChild( plugWidget );
+
+ plugLayout->addWidget( plugIcon, 0, AlignTop );
+ plugLayout->addWidget( sv, 0, AlignTop );
+ plugLayout->setStretchFactor( plugIcon, 1 );
+ plugLayout->setStretchFactor( sv, 9 );
+ pluginLayout->addLayout( plugLayout );
+ count++;
}
- }
}
- if (ONLY_LATER && count==0) {
- QLabel* noMoreEvents = new QLabel(AllDateBookEvents);
- noMoreEvents->setText(tr("No more appointments today"));
- layoutDates->addWidget(noMoreEvents);
- }
- } else {
- QLabel* noEvents = new QLabel(AllDateBookEvents);
- noEvents->setText(tr("No appointments today"));
- layoutDates->addWidget(noEvents);
- }
- layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding));
- sv1->addChild(AllDateBookEvents);
- AllDateBookEvents->show();
-}
+ if ( count == 0 ) {
+ QLabel *noPluginsActive = new QLabel( this );
+ noPluginsActive->setText( tr( "No plugins activated" ) );
+ layout->addWidget( noPluginsActive );
+ }
+ layout->addItem( new QSpacerItem( 1,1, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
-void Today::getMail() {
- Config cfg("opiemail");
- cfg.setGroup("today");
- // how many lines should be showed in the task section
- int NEW_MAILS = cfg.readNumEntry("newmails",0);
- int OUTGOING = cfg.readNumEntry("outgoing",0);
+ // how often refresh - later have qcop update calls in *db
+ // QTimer::singleShot( 20*1000, this, SLOT( draw() ) );
+}
- QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING);
- MailField->setText(output);
+void Today::refresh() {
+ loadPlugins();
+ draw();
+ qDebug( "redraw" );
+// QTimer::singleShot( 30*1000, this, SLOT( refresh() ) );
}
-/*
- * Get the todos
+/**
+ * The method for the configuration dialog.
*/
-void Today::getTodo() {
-
- QString output;
- QString tmpout;
- int count = 0;
- int ammount = 0;
-
- // get overdue todos first
- QValueList<ToDoEvent> overDueList = todo->overDue();
- qBubbleSort(overDueList);
- for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin();
- it!=overDueList.end(); ++it ) {
- if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) {
- QString desc = (*it).summary();
- if( desc.isEmpty() ) {
- desc = (*it).description();
- }
- tmpout += "<font color=#e00000><b>-" + desc.mid(0, MAX_CHAR_CLIP) + "</b></font><br>";
-
- ammount++;
- }
- }
+void Today::startConfig() {
+ conf = new TodayConfig ( this, "", true );
+
+ uint count = 0;
+ TodayPlugin plugin;
+
+ QList<ConfigWidget> configWidgetList;
+ for ( uint i = 0; i < pluginList.count(); i++ ) {
+ plugin = pluginList[i];
- // get total number of still open todos
- QValueList<ToDoEvent> openTodo = todo->rawToDos();
- qBubbleSort(openTodo);
- for ( QValueList<ToDoEvent>::Iterator it=openTodo.begin();
- it!=openTodo.end(); ++it ) {
- if (!(*it).isCompleted()){
- count +=1;
- // not the overdues, we allready got them, and not if we are
- // over the maxlines
- if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) {
- QString desc = (*it).summary();
- if( desc.isEmpty() ) {
- desc = (*it).description();
- }
- tmpout += "<b>-</b>" + desc.mid(0, MAX_CHAR_CLIP) + "<br>";
- ammount++;
- }
+ // load the config widgets in the tabs
+ if ( plugin.guiPart->configWidget( this ) != 0l ) {
+ ConfigWidget* widget = plugin.guiPart->configWidget( this );
+ widget->reparent( conf , QPoint( 0,0 ) );
+ configWidgetList.append( widget );
+ conf->TabWidget3->insertTab( widget, plugin.guiPart->appName() );
}
+ // set the order/activate tab
+ conf->pluginManagement( plugin.name, plugin.guiPart->pluginName(),
+ Resource::loadPixmap( plugin.guiPart->pixmapNameWidget() ) );
+ count++;
}
+ conf->showMaximized();
- if (count > 0) {
- if( count == 1 ) {
- output = tr("There is <b> 1</b> active task: <br>" );
- } else {
- output = tr("There are <b> %1</b> active tasks: <br>").arg(count);
- }
- output += tmpout;
- } else {
- output = tr("No active tasks");
- }
+ if ( conf->exec() == QDialog::Accepted ) {
+ ConfigWidget *confWidget;
+ for ( confWidget=configWidgetList.first(); confWidget != 0;
+ confWidget = configWidgetList.next() ) {
+ confWidget->writeConfig();
+ }
+ conf->writeConfig();
- TodoField->setText(tr(output));
+ init();
+ loadPlugins();
+ draw();
+ }
+ delete conf;
}
void Today::startAddressbook() {
- QCopEnvelope e("QPE/System", "execute(QString)");
- e << QString("addressbook");
+ QCopEnvelope e( "QPE/System", "execute(QString)" );
+ e << QString( "addressbook" );
}
-extern QPEApplication *todayApp;
-/*
+/**
* launch addressbook (personal card)
*/
void Today::editCard() {
-
startAddressbook();
-
- while( !QCopChannel::isRegistered("QPE/Addressbook")) todayApp->processEvents();
- QCopEnvelope v("QPE/Addressbook", "editPersonalAndClose()");
-}
-
-/*
- * launches datebook
- */
-void Today::startDatebook() {
- QCopEnvelope e("QPE/System", "execute(QString)");
- e << QString("datebook");
-}
-
-/*
- * starts the edit dialog as known from datebook
- */
-void Today::editEvent(const Event &e) {
- startDatebook();
-
- while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents();
- QCopEnvelope env("QPE/Datebook", "editEvent(int)");
- env << e.uid();
-}
-
-/*
- * launches todolist
- */
-void Today::startTodo() {
- QCopEnvelope e("QPE/System", "execute(QString)");
- e << QString("todolist");
+ while( !QCopChannel::isRegistered( "QPE/Addressbook" ) ) {
+ qApp->processEvents();
+ }
+ QCopEnvelope v( "QPE/Addressbook", "editPersonalAndClose()" );
}
/*
- * launch opiemail
+ * launches an App
*/
-void Today::startMail() {
- QCopEnvelope e("QPE/System", "execute(QString)");
- e << QString("opiemail");
-//Right now start both, maybe decide which to rum via config file ..
- QCopEnvelope f("QPE/System", "execute(QString)");
- f << QString("qtmail");
+void Today::launchApp( QString appName ) {
+ QCopEnvelope e( "QPE/System", "execute(QString)" );
+ e << QString( appName );
}
-
Today::~Today() {
}
-/*
- * Gets the events for the current day, if it should get all dates
- */
-DateBookEvent::DateBookEvent(const EffectiveEvent &ev,
- QWidget* parent,
- int SHOW_LOCATION,
- int SHOW_NOTES,
- const char* name,
- WFlags fl) :
- OClickableLabel(parent,name,fl), event(ev) {
-
- QString msg;
- //QTime time = QTime::currentTime();
-
- Config config( "qpe" );
- config.setGroup( "Time" );
- // if 24 h format
- ampm = config.readBoolEntry( "AMPM", TRUE );
-
-
- if (!ONLY_LATER) {
- msg += "<B>" + (ev).description() + "</B>";
- if ( (ev).event().hasAlarm() ) {
- msg += " <b>[with alarm]</b>";
- }
- // include location or not
- if (SHOW_LOCATION == 1) {
- msg += "<BR><i>" + (ev).location() + "</i>";
- }
-
- if ( (TimeString::timeString(QTime((ev).event().start().time()) ) == "00:00") && (TimeString::timeString(QTime((ev).event().end().time()) ) == "23:59") ) {
- msg += "<br>All day";
- } else {
- // start time of event
- msg += "<br>" + ampmTime(QTime((ev).event().start().time()) )
- // end time of event
- + "<b> - </b>" + ampmTime(QTime((ev).event().end().time()) );
- }
-
- // include possible note or not
- if (SHOW_NOTES == 1) {
- msg += "<br> <i>note</i>:" +((ev).notes()).mid(0, MAX_CHAR_CLIP);
- }
- }
- setText(msg);
- connect(this, SIGNAL(clicked()), this, SLOT(editMe()));
- setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) );
-}
-
-
-QString DateBookEvent::ampmTime(QTime tm) {
-
- QString s;
- if( ampm ) {
- int hour = tm.hour();
- if (hour == 0)
- hour = 12;
- if (hour > 12)
- hour -= 12;
- s.sprintf( "%2d:%02d %s", hour, tm.minute(),
- (tm.hour() >= 12) ? "PM" : "AM" );
- return s;
- } else {
- s.sprintf( "%2d:%02d", tm.hour(), tm.minute() );
- return s;
- }
-
-}
-
-
-DateBookEventLater::DateBookEventLater(const EffectiveEvent &ev,
- QWidget* parent,
- int SHOW_LOCATION,
- int SHOW_NOTES,
- const char* name,
- WFlags fl) :
- OClickableLabel(parent,name,fl), event(ev) {
-
- QString msg;
- QTime time = QTime::currentTime();
-
- Config config( "qpe" );
- config.setGroup( "Time" );
- // if 24 h format
- ampm = config.readBoolEntry( "AMPM", TRUE );
-
-
- if ((time.toString() <= TimeString::dateString((ev).event().end())) ) {
- // show only later appointments
- msg += "<B>" + (ev).description() + "</B>";
- if ( (ev).event().hasAlarm() ) {
- msg += " <b>[with alarm]</b>";
- }
- // include location or not
- if (SHOW_LOCATION == 1) {
- msg += "<BR><i>" + (ev).location() + "</i>";
- }
-
- if ( (TimeString::timeString(QTime((ev).event().start().time()) ) == "00:00") && (TimeString::timeString(QTime((ev).event().end().time()) ) == "23:59") ) {
- msg += "<br>All day";
- } else {
- // start time of event
- msg += "<br>" + ampmTime(QTime((ev).event().start().time()) )
- // end time of event
- + "<b> - </b>" + ampmTime(QTime((ev).event().end().time()) );
- }
- // include possible note or not
- if (SHOW_NOTES == 1) {
- msg += "<br> <i>note</i>:" +((ev).notes()).mid(0, MAX_CHAR_CLIP);
- }
- }
-
- setText(msg);
- connect(this, SIGNAL(clicked()), this, SLOT(editMe()));
- setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) );
-}
-
-
-QString DateBookEventLater::ampmTime(QTime tm) {
-
- QString s;
- if( ampm ) {
- int hour = tm.hour();
- if (hour == 0)
- hour = 12;
- if (hour > 12)
- hour -= 12;
- s.sprintf( "%2d:%02d %s", hour, tm.minute(),
- (tm.hour() >= 12) ? "PM" : "AM" );
- return s;
- } else {
- s.sprintf( "%2d:%02d", tm.hour(), tm.minute() );
- return s;
- }
-
-}
-
-
-void DateBookEvent::editMe() {
- emit editEvent(event.event());
-}
-
-void DateBookEventLater::editMe() {
- emit editEvent(event.event());
-}
-
-
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,11 +1,8 @@
/*
* today.h
*
- * ---------------------
- *
- * begin : Sun 10 17:20:00 CEST 2002
* copyright : (c) 2002 by Maximilian Reiß
- * email : max.reiss@gmx.de
+ * email : harlekin@handhelds.org
*
*/
/***************************************************************************
@@ -21,21 +18,31 @@
#ifndef TODAY_H
#define TODAY_H
-#include <qpe/datebookdb.h>
-#include <qpe/event.h>
-
#include <opie/tododb.h>
-#include <opie/oclickablelabel.h>
#include <qdatetime.h>
#include <qlist.h>
+#include <qpe/qlibrary.h>
+#include <qpe/event.h>
+
#include "todayconfig.h"
#include "todaybase.h"
+#include "todayplugininterface.h"
class QVBoxLayout;
+struct TodayPlugin {
+ QLibrary *library;
+ TodayPluginInterface *iface;
+ TodayPluginObject *guiPart;
+ QString name;
+ bool active;
+ int pos;
+};
+
class Today : public TodayBase {
+
Q_OBJECT
public:
@@ -44,75 +51,31 @@ class Today : public TodayBase {
private slots:
void startConfig();
- void startTodo();
- void startDatebook();
void startAddressbook();
- void startMail();
+ void launchApp( QString appName );
void editCard();
void draw();
- void editEvent(const Event &e);
- private:
+ void refresh();
+
+private:
void init();
- void getDates();
- void getTodo();
- void getMail();
- void autoStart();
- bool checkIfModified();
void setOwnerField();
void setOwnerField(QString &string);
- private slots:
+ void loadPlugins();
+
+private slots:
void channelReceived(const QCString &msg, const QByteArray & data);
private:
- DateBookDB *db;
- ToDoDB *todo;
- todayconfig *conf;
- QWidget* AllDateBookEvents;
- //Config cfg;
- int MAX_LINES_TASK;
- int MAX_CHAR_CLIP;
- int MAX_LINES_MEET;
- int SHOW_LOCATION;
- int SHOW_NOTES;
-};
+ TodayConfig *conf;
+ QStringList m_excludeApplets;
-class DateBookEvent: public OClickableLabel {
- Q_OBJECT
-public:
- DateBookEvent(const EffectiveEvent &ev,
- QWidget* parent = 0,
- int SHOW_LOCATION = 0,
- int SHOW_NOTES = 0,
- const char* name = 0,
- WFlags fl = 0);
-signals:
- void editEvent(const Event &e);
-private slots:
- void editMe();
-private:
- QString ampmTime(QTime);
- const EffectiveEvent event;
- bool ampm;
-};
+ QVBoxLayout *pluginLayout;
-class DateBookEventLater: public OClickableLabel {
- Q_OBJECT
-public:
- DateBookEventLater(const EffectiveEvent &ev,
- QWidget* parent = 0,
- int SHOW_LOCATION = 0,
- int SHOW_NOTES = 0,
- const char* name = 0,
- WFlags fl = 0);
-signals:
- void editEvent(const Event &e);
-private slots:
- void editMe();
-private:
- QString ampmTime(QTime);
- const EffectiveEvent event;
- bool ampm;
+ // QString m_autoStartTimer;
+ int m_newStart;
+ // int m_autoStart;
+ int m_maxCharClip;
};
-#endif // TODAY_H
-
+#endif
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,6 +1,6 @@
TEMPLATE = app
-#CONFIG = qt warn_on debug
-CONFIG = qt warn_on release
+CONFIG = qt warn_on debug
+#CONFIG = qt warn_on release
HEADERS = today.h todaybase.h todayconfig.h
SOURCES = main.cpp today.cpp todaybase.cpp todayconfig.cpp
INCLUDEPATH += $(OPIEDIR)/include
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,10 +1,8 @@
/*
- * todaybase.cpp *
- * ---------------------
+ * todaybase.cpp
*
- * begin : Sun 10 17:20:00 CEST 2002
* copyright : (c) 2002 by Maximilian Reiß
- * email : max.reiss@gmx.de
+ * email : harlekin@handhelds.org
*
*/
/***************************************************************************
@@ -20,56 +18,35 @@
#include <qframe.h>
#include <qlabel.h>
-#include <qpushbutton.h>
-#include <qlayout.h>
-#include <qvariant.h>
-#include <qwhatsthis.h>
#include <qimage.h>
#include <qpixmap.h>
-#include <qscrollview.h>
-#include <qvbox.h>
#include <qapplication.h>
#include <qpe/resource.h>
-/*
- * Constructs a TodayBase which is a child of 'parent', with the
- * name 'name' and widget flags set to 'f'
- */
+
TodayBase::TodayBase( QWidget* parent, const char* name, WFlags fl )
- : QWidget( parent, name, fl )
-{
+ : QWidget( parent, name, fl ) {
+
QPixmap logo = Resource::loadPixmap( "today/today_logo"); // logo
- QPixmap datebook = Resource::loadPixmap("DateBook"); // datebook
- QPixmap todo = Resource::loadPixmap( "TodoList" ); // todo
- QPixmap config = Resource::loadPixmap( "today/config" ); // config icon
- QPixmap mail = Resource::loadPixmap( "today/mail" ); // mail icon
QPixmap opiezilla = Resource::loadPixmap("today/opiezilla" ); //the opiezilla
+ QPixmap config = Resource::loadPixmap( "today/config" ); // config icon
- QWidget *d = QApplication::desktop();
- int w=d->width();
- int h=d->height();
- resize( w , h );
-
- // hehe, qt is ...
- getridoffuckingstrippeldlinesbutton = new QPushButton (this, "asdfsad" );
- getridoffuckingstrippeldlinesbutton->setGeometry( QRect( -5, 10, 0, 0 ) );
-
- QVBoxLayout * layout = new QVBoxLayout(this);
+ layout = new QVBoxLayout( this );
QPalette pal = this->palette();
- QColor col = pal.color(QPalette::Active, QColorGroup::Background);
- pal.setColor(QPalette::Active, QColorGroup::Button, col);
- pal.setColor(QPalette::Inactive, QColorGroup::Button, col);
- pal.setColor(QPalette::Normal, QColorGroup::Button, col);
- pal.setColor(QPalette::Disabled, QColorGroup::Button, col);
- this->setPalette(pal);
+ QColor col = pal.color( QPalette::Active, QColorGroup::Background );
+ pal.setColor( QPalette::Active, QColorGroup::Button, col );
+ pal.setColor( QPalette::Inactive, QColorGroup::Button, col );
+ pal.setColor( QPalette::Normal, QColorGroup::Button, col );
+ pal.setColor( QPalette::Disabled, QColorGroup::Button, col );
+ this->setPalette( pal );
// --- logo Section ---
QPalette pal2;
QColorGroup cg;
cg.setColor( QColorGroup::Text, white );
- cg.setBrush( QColorGroup::Background, QBrush( QColor( 238, 238, 230), logo ) );
+ cg.setBrush( QColorGroup::Background, QBrush( QColor( 238, 238, 230 ), logo ) );
pal2.setActive( cg );
// today logo
Frame = new QLabel( this, "Frame" );
@@ -77,135 +54,54 @@ TodayBase::TodayBase( QWidget* parent, const char* name, WFlags fl )
Frame->setFrameShape( QFrame::StyledPanel );
Frame->setFrameShadow( QFrame::Raised );
Frame->setLineWidth( 0 );
- Frame->setMaximumHeight(50);
- Frame->setMinimumHeight(50);
+ Frame->setMaximumHeight( 50 );
+ Frame->setMinimumHeight( 50 );
- // Today text
+ // Today text
QLabel* TodayLabel = new QLabel( Frame, "TodayText" );
TodayLabel->setGeometry( QRect( 10, 0, 168, 40 ) );
QFont TodayLabel_font( TodayLabel->font() );
TodayLabel_font.setBold( TRUE );
- TodayLabel_font.setPointSize(40);
+ TodayLabel_font.setPointSize( 40 );
TodayLabel->setFont( TodayLabel_font );
TodayLabel->setBackgroundOrigin( QLabel::ParentOrigin );
- TodayLabel->setText("<font color=#FFFFFF>" + tr("Today") +"</font>");
+ TodayLabel->setText( "<font color=#FFFFFF>" + tr("Today²") +"</font>" );
+
+ // date
+ DateLabel = new QLabel( Frame, "TextLabel1" );
+ DateLabel->setGeometry( QRect( 10, 35, 168, 12 ) );
+ QFont DateLabel_font( DateLabel->font() );
+ DateLabel_font.setBold( TRUE );
+ DateLabel->setFont( DateLabel_font );
+ DateLabel->setBackgroundOrigin( QLabel::ParentOrigin );
+ DateLabel->setTextFormat( RichText );
// Opiezilla
QLabel* Opiezilla = new QLabel( Frame, "OpieZilla");
Opiezilla->setPixmap( opiezilla );
- Opiezilla->setGeometry( this->width()-50 ,1, 45, 47);
+ Opiezilla->setGeometry( QApplication::desktop()->width()-50 ,1, 45, 47);
Opiezilla->setBackgroundOrigin( QLabel::ParentOrigin );
- // date
- TextLabel1 = new QLabel( Frame, "TextLabel1" );
- TextLabel1->setGeometry( QRect( 10, 35, 168, 12 ) );
- QFont TextLabel1_font( TextLabel1->font() );
- TextLabel1_font.setBold( TRUE );
- TextLabel1->setFont( TextLabel1_font );
- TextLabel1->setBackgroundOrigin( QLabel::ParentOrigin );
- TextLabel1->setTextFormat( RichText );
-
- OwnerField = new OClickableLabel(this , "Owner" );
- OwnerField->setGeometry(QRect(0,0, this->width(), 12 ));
- OwnerField->setAlignment(int (QLabel::AlignTop | QLabel::AlignLeft ) );
+ // Ownerfield
+ OwnerField = new OClickableLabel( this , "Owner" );
+ OwnerField->setGeometry( QRect( 0,0, this->width(), 12 ));
+ OwnerField->setAlignment( int (QLabel::AlignTop | QLabel::AlignLeft ) );
OwnerField->setMaximumHeight(12);
- // --- dates section ---
- Frame4 = new QFrame( this, "Frame4" );
-// Frame4->setPalette( pal );
- Frame4->setFrameShape( QScrollView::StyledPanel );
- Frame4->setFrameShadow( QScrollView::Sunken );
- Frame4->setBackgroundOrigin( QScrollView::ParentOrigin );
- Frame4->setFrameStyle( QFrame::NoFrame );
- Frame4->setGeometry (QRect( 0, 8, this->width() , this->height()) );
-
- sv1 = new QScrollView( Frame4 );
- sv1->setResizePolicy(QScrollView::AutoOneFit);
- sv1->setHScrollBarMode( QScrollView::AlwaysOff );
- // need to find a better way!!!
- sv1->setGeometry (QRect( 40, 2, Frame4->width()-40 , (Frame4->height()/3)+20 ) );
- sv1->setFrameShape(QFrame::NoFrame);
-
- DatesButton = new QPushButton (Frame4, "DatesButton" );
- DatesButton->setGeometry( QRect( 2, 4, 36, 32 ) );
- DatesButton->setBackgroundOrigin( QPushButton::WidgetOrigin );
- DatesButton->setPalette( pal );
- DatesButton->setPixmap( datebook );
- DatesButton->setFlat( TRUE );
-
- // --- mail section ---)
- MailFrame = new QFrame( this ,"MailFrame" );
- MailFrame->setBackgroundOrigin( QScrollView::ParentOrigin );
- MailFrame->setGeometry (QRect( 0, 0, this->width() , 15) );
- MailFrame->setFrameStyle( QFrame::NoFrame );
-
- QFrame* Line1 = new QFrame( MailFrame);
- Line1->setGeometry( QRect( -5, 0, MailFrame->width()+5, 5 ) );
- Line1->setFrameStyle( QFrame::HLine | QFrame::Sunken );
-
- MailButton = new QPushButton (MailFrame, "MailButton" );
- MailButton->setGeometry( QRect( 2, 3, 36, 19 ) );
- MailButton->setPalette( pal );
- MailButton->setPixmap( mail );
- MailButton->setFlat( TRUE );
-
- MailField = new QLabel( MailFrame, "MailField" );
- MailField->setGeometry( QRect( 40, 4, MailFrame->width(), 12) );
- MailField->setText( tr( "Opiemail not installed" ) );
- MailField->setAlignment( int( QLabel::AlignTop | QLabel::AlignLeft ) );
- MailField->setMaximumHeight(40);
- MailField->setMinimumHeight(15);
-
- // --- todo section --
- Frame15 = new QFrame( this, "Frame15" );
- Frame15->setFrameStyle( QFrame::NoFrame );
- Frame15->setGeometry (QRect( 40, 3, this->width() , this->height()) );
-
- QFrame* Line2 = new QFrame( Frame15);
- Line2->setGeometry( QRect( -5, 0, MailFrame->width()+5, 5 ) );
- Line2->setFrameStyle( QFrame::HLine | QFrame::Sunken );
-
- TodoButton = new QPushButton (Frame15, "TodoButton" );
- TodoButton->setGeometry( QRect( 2, 4, 36, 32 ) );
- TodoButton->setPalette( pal );
- TodoButton->setPixmap( todo );
- TodoButton->setFlat( TRUE );
-
- QScrollView* sv2 = new QScrollView( Frame15 );
- sv2->setResizePolicy(QScrollView::AutoOneFit);
- sv2->setHScrollBarMode( QScrollView::AlwaysOff );
- sv2->setGeometry (QRect( 40, 3, Frame15->width()-40 , (Frame15->height()/3) ) );
- sv2->setFrameShape(QFrame::NoFrame);
-
- TodoField = new QLabel( sv2->viewport(), "TodoField" );
- sv2->addChild(TodoField);
- TodoField->setFrameShadow( QLabel::Plain );
- //TodoField->setText( tr( "No current todos" ) );
- TodoField->setAlignment( int( QLabel::AlignTop | QLabel::AlignLeft ) );
-
- PushButton1 = new QPushButton (Frame15, "PushButton1" );
- PushButton1->setGeometry( QRect( 2, 68, 25, 21 ) );
- PushButton1->setPixmap( config );
- PushButton1->setPalette( pal );
- PushButton1->setAutoDefault( TRUE );
- PushButton1->setFlat( TRUE );
+ // config
+ ConfigButton = new OClickableLabel ( Frame, "PushButton1" );
+ ConfigButton->setGeometry( QRect( QApplication::desktop()->width()-80, 30, 25, 21 ) );
+ ConfigButton->setPixmap( config );
+ ConfigButton->setBackgroundOrigin( QLabel::ParentOrigin );
// -- layout --
- layout->addWidget(Frame);
- layout->addWidget(OwnerField);
- layout->addWidget(Frame4);
- layout->addWidget(MailFrame);
- layout->addWidget(Frame15);
-
- layout->setStretchFactor(Frame4,5);
- layout->setStretchFactor(MailFrame,1);
- layout->setStretchFactor(Frame15,4);
+ layout->addWidget( Frame );
+ layout->addWidget( OwnerField );
}
-/*
- * Destroys the object and frees any allocated resources
+/**
+ * D' tor
*/
-TodayBase::~TodayBase()
-{
+TodayBase::~TodayBase() {
}
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,26 +1,32 @@
-/****************************************************************************
-** Form interface generated from reading ui file 'todaybase.ui'
-**
-** Created: Wed Feb 13 19:36:45 2002
-** by: The User Interface Compiler (uic)
-**
-** WARNING! All changes made in this file will be lost!
-****************************************************************************/
+/*
+ * todaybase.h
+ *
+ * copyright : (c) 2002 by Maximilian Reiß
+ * email : harlekin@handhelds.org
+ *
+ */
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
#ifndef TODAYBASE_H
#define TODAYBASE_H
-#include <qvariant.h>
-#include <qwidget.h>
-#include <qscrollview.h>
-#include <qsplitter.h>
+#include <qlayout.h>
#include <opie/oclickablelabel.h>
class QVBox;
-class QHBoxLayout;
class QGridLayout;
class QFrame;
class QLabel;
class QPushButton;
+class QBoxLayout;
+
class TodayBase : public QWidget
{
@@ -30,26 +36,18 @@ public:
TodayBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~TodayBase();
- //QScrollView* Frame4;
QFrame* Frame4;
QPushButton* DatesButton;
+ QVBoxLayout* layout;
OClickableLabel* OwnerField;
QLabel* Frame;
- QFrame* MailFrame;
- QLabel* TextLabel1;
- QScrollView* sv1;
- QVBox* DatesField;
+ QLabel* DateLabel;
QFrame* Frame15;
- QLabel* TodoField;
- QLabel* MailField;
- QPushButton* PushButton1;
- QPushButton* TodoButton;
- QPushButton* MailButton;
- QPushButton* getridoffuckingstrippeldlinesbutton;
+ OClickableLabel* ConfigButton;
protected:
};
-#endif // TODAYBASE_H
+#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,11 +1,8 @@
/*
* todayconfig.cpp
*
- * ---------------------
- *
- * begin : Sun 10 17:20:00 CEST 2002
* copyright : (c) 2002 by Maximilian Reiß
- * email : max.reiss@gmx.de
+ * email : harlekin@handhelds.org
*
*/
/***************************************************************************
@@ -19,133 +16,205 @@
#include "todayconfig.h"
+#include <qpe/config.h>
+#include <qpe/resource.h>
+#include <qpe/qcopenvelope_qws.h>
+
#include <qcheckbox.h>
-#include <qframe.h>
#include <qlabel.h>
#include <qspinbox.h>
#include <qtabwidget.h>
-#include <qwidget.h>
#include <qlayout.h>
-#include <qvariant.h>
-//#include <qwhatsthis.h>
-
-todayconfig::todayconfig( QWidget* parent, const char* name, bool modal, WFlags fl )
+#include <qheader.h>
+#include <qhbox.h>
+#include <qvbox.h>
+#include <qtoolbutton.h>
+
+// for getenv
+#include <stdlib.h>
+
+class ToolButton : public QToolButton {
+public:
+ ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE )
+ : QToolButton( parent, name ) {
+ setTextLabel( name );
+ setPixmap( Resource::loadPixmap( icon ) );
+ setAutoRaise( TRUE );
+ setFocusPolicy( QWidget::NoFocus );
+ setToggleButton( t );
+ connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot );
+ }
+};
+
+
+/**
+ * The class has currently quite some duplicate code.
+ * By that way it would be real easy to have it as seperate app in settings tab
+ *
+ */
+TodayConfig::TodayConfig( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl ) {
- if ( !name )
- setName( "todayconfig" );
- resize( 175, 232 );
- setCaption( tr( "Today config" ) );
-
- TabWidget3 = new QTabWidget( this, "TabWidget3" );
- TabWidget3->setGeometry( QRect( 0, 0, 220, 320 ) );
- TabWidget3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, TabWidget3->sizePolicy().hasHeightForWidth() ) );
- TabWidget3->setAutoMask( FALSE );
- TabWidget3->setTabShape( QTabWidget::Rounded );
-
- tab = new QWidget( TabWidget3, "tab" );
-
- Frame8 = new QFrame( tab, "Frame8" );
- Frame8->setGeometry( QRect( -5, 0, 200, 300 ) );
- Frame8->setFrameShape( QFrame::StyledPanel );
- Frame8->setFrameShadow( QFrame::Raised );
-
- TextLabel4 = new QLabel( Frame8, "TextLabel4" );
- TextLabel4->setGeometry( QRect( 20, 65, 100, 60 ) );
- TextLabel4->setText( tr( "Should the \n"
- "location \n"
- "be shown?" ) );
-
- TextLabel5 = new QLabel( Frame8, "TextLabel5" );
- TextLabel5->setGeometry( QRect( 20, 160, 120, 40 ) );
- TextLabel5->setText( tr( "Should the notes \n"
- "be shown?" ) );
-
- CheckBox2 = new QCheckBox( Frame8, "CheckBox2" );
- CheckBox2->setGeometry( QRect( 158, 170, 27, 21 ) );
- //CheckBox2->setText( tr( "" ) );
-
- CheckBox1 = new QCheckBox( Frame8, "CheckBox1" );
- CheckBox1->setGeometry( QRect( 158, 65, 27, 50 ) );
- //CheckBox1->setText( tr( "" ) );
-
- CheckBox3 = new QCheckBox (Frame8, "CheckBox3" );
- CheckBox3->setGeometry( QRect( 158, 125, 27, 21 ) );
-
- TextLabel6 = new QLabel( Frame8, "All Day");
- TextLabel6->setGeometry( QRect( 20, 120, 100, 30 ) );
- TextLabel6->setText( tr( "Show only later\n"
- "appointments") );
-
- SpinBox1 = new QSpinBox( Frame8, "SpinBox1" );
- SpinBox1->setGeometry( QRect( 115, 20, 58, 25 ) );
- SpinBox1->setMaxValue( 10 );
- SpinBox1->setValue( 5 );
-
- TextLabel3 = new QLabel( Frame8, "TextLabel3" );
- TextLabel3->setGeometry( QRect( 20, 10, 90, 60 ) );
- TextLabel3->setText( tr( "How many \n"
- "appointment\n"
- "should\n"
- "be shown?" ) );
- TabWidget3->insertTab( tab, tr( "Calendar" ) );
-
- tab_2 = new QWidget( TabWidget3, "tab_2" );
-
- Frame9 = new QFrame( tab_2, "Frame9" );
- Frame9->setGeometry( QRect( -5, 0, 230, 310 ) );
- Frame9->setFrameShape( QFrame::StyledPanel );
- Frame9->setFrameShadow( QFrame::Raised );
-
- TextLabel6 = new QLabel( Frame9, "TextLabel6" );
- TextLabel6->setGeometry( QRect( 20, 10, 100, 60 ) );
- TextLabel6->setText( tr( "How many\n"
- "tasks should \n"
- "be shown?" ) );
-
- SpinBox2 = new QSpinBox( Frame9, "SpinBox2" );
- SpinBox2->setGeometry( QRect( 115, 20, 58, 25 ) );
- SpinBox2->setMaxValue( 20 );
- SpinBox2->setValue( 5 );
- TabWidget3->insertTab( tab_2, tr( "Tasks" ) );
-
- tab_3 = new QWidget( TabWidget3, "tab_3" );
-
- Frame14 = new QFrame( tab_3, "Frame14" );
- Frame14->setGeometry( QRect( -5, 0, 200, 220 ) );
- Frame14->setFrameShape( QFrame::StyledPanel );
- Frame14->setFrameShadow( QFrame::Raised );
-
- TextLabel1 = new QLabel( Frame14, "TextLabel1" );
- TextLabel1->setGeometry( QRect( 20, 20, 100, 30 ) );
- TextLabel1->setText( tr( "Clip after how\n"
- "many letters" ) );
-
- SpinBox7 = new QSpinBox( Frame14, "SpinBox7" );
- SpinBox7->setGeometry( QRect( 115, 20, 58, 25 ) );
- SpinBox7->setMaxValue( 80 );
-
- TextLabel2 = new QLabel( Frame14, "AutoStart" );
- TextLabel2->setGeometry( QRect( 20, 60, 100, 45 ) );
- TextLabel2->setText( tr( "Should today be\n"
- "autostarted on\n"
- "resume?"
- " (Opie only)" ) );
-
- CheckBoxAuto = new QCheckBox (Frame14, "CheckBoxAuto" );
- CheckBoxAuto->setGeometry( QRect( 158, 60, 27, 21 ) );
-
- TimeLabel = new QLabel( Frame14, "TimeLabel" );
- TimeLabel->setGeometry( QRect ( 20, 120, 120, 45 ) );
- TimeLabel->setText( tr( "Activate the \n"
- "autostart after how\n"
- "many minutes?" ) );
- SpinBoxTime = new QSpinBox( Frame14, "TimeSpinner");
- SpinBoxTime->setGeometry( QRect( 115, 120, 58, 25 ) );
-
- TabWidget3->insertTab( tab_3, tr( "Misc" ) );
+ if ( !name ) {
+ setName( "todayconfig" );
+ }
+ setCaption( tr( "Today config" ) );
+
+ QVBoxLayout *layout = new QVBoxLayout( this );
+ TabWidget3 = new QTabWidget( this, "TabWidget3" );
+ TabWidget3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, TabWidget3->sizePolicy().hasHeightForWidth() ) );
+ TabWidget3->setAutoMask( FALSE );
+ TabWidget3->setTabShape( QTabWidget::Rounded );
+ layout->addWidget( TabWidget3 );
+
+ tab_2 = new QWidget( TabWidget3, "tab_2" );
+ QVBoxLayout *tab2Layout = new QVBoxLayout( tab_2, 4 ,4 );
+ QLabel *l = new QLabel( tr( "Load which plugins in what order:" ), tab_2 );
+ tab2Layout->addWidget( l );
+ QHBox *hbox1 = new QHBox( tab_2 );
+ m_appletListView = new QListView( hbox1 );
+ m_appletListView->addColumn( "PluginList" );
+ m_appletListView->header()->hide();
+ QVBox *vbox1 = new QVBox( hbox1 );
+ new ToolButton( vbox1, tr( "Move Up" ), "opieplayer/up", this , SLOT( moveSelectedUp() ) );
+ new ToolButton( vbox1, tr( "Move Down" ),"opieplayer/down", this , SLOT( moveSelectedDown() ) );
+ tab2Layout->addWidget( hbox1 );
+
+ TabWidget3->insertTab( tab_2, tr( "active/order" ) );
+ tab_3 = new QWidget( TabWidget3, "tab_3" );
+ QVBoxLayout *tab3Layout = new QVBoxLayout( tab_3 );
+ QHBox *hbox_clip = new QHBox( tab_3 );
+ TextLabel1 = new QLabel( hbox_clip, "TextLabel1" );
+ TextLabel1->setText( tr( "Clip after how\n"
+ "many letters" ) );
+ SpinBox7 = new QSpinBox( hbox_clip, "SpinBox7" );
+ SpinBox7->setMaxValue( 80 );
+ QHBox *hbox_auto = new QHBox( tab_3 );
+ TextLabel2 = new QLabel( hbox_auto, "AutoStart" );
+ TextLabel2->setText( tr( "autostart on \nresume? (Opie only)" ) );
+ CheckBoxAuto = new QCheckBox( hbox_auto, "CheckBoxAuto" );
+ QHBox *hbox_inactive = new QHBox( tab_3 );
+ TimeLabel = new QLabel( hbox_inactive , "TimeLabel" );
+ TimeLabel->setText( tr( "minutes inactive" ) );
+ SpinBoxTime = new QSpinBox( hbox_inactive, "TimeSpinner");
+ tab3Layout->addWidget( hbox_clip );
+ tab3Layout->addWidget( hbox_auto );
+ tab3Layout->addWidget( hbox_inactive );
+ TabWidget3->insertTab( tab_3, tr( "Misc" ) );
+
+ m_applets_changed = false;
+
+ connect ( m_appletListView , SIGNAL( clicked ( QListViewItem * ) ), this, SLOT( appletChanged ( ) ) );
+
+ readConfig();
+}
+
+
+/**
+ * Autostart, uses the new (opie only) autostart method in the launcher code.
+ * If registered against that today ist started on each resume.
+ */
+void TodayConfig::setAutoStart() {
+ Config cfg( "today" );
+ cfg.setGroup( "Autostart" );
+ int autostart = cfg.readNumEntry( "autostart", 1);
+ if ( autostart ) {
+ QCopEnvelope e( "QPE/System", "autoStart(QString,QString,QString)" );
+ e << QString( "add" );
+ e << QString( "today" );
+ e << m_autoStartTimer;
+ } else {
+ QCopEnvelope e( "QPE/System", "autoStart(QString,QString)" );
+ e << QString( "remove");
+ e << QString( "today" );
+ }
+}
+
+/**
+ * Read the config part
+ */
+void TodayConfig::readConfig() {
+ Config cfg( "today" );
+ cfg.setGroup( "Autostart" );
+ m_autoStart = cfg.readNumEntry( "autostart", 1 );
+ CheckBoxAuto->setChecked( m_autoStart );
+ m_autoStartTimer = cfg.readEntry( "autostartdelay", "0" );
+ SpinBoxTime->setValue( m_autoStartTimer.toInt() );
+
+ cfg.setGroup( "Applets" );
+ m_excludeApplets = cfg.readListEntry( "ExcludeApplets", ',' );
+}
+
+/**
+ * Write the config part
+ */
+void TodayConfig::writeConfig() {
+ Config cfg( "today" );
+ cfg. setGroup ( "Applets" );
+ if ( m_applets_changed ) {
+ QStringList exclude;
+ QStringList include;
+ QMap <QString, QCheckListItem *>::Iterator it;
+ for ( it = m_applets.begin(); it != m_applets. end (); ++it ) {
+ if ( !(*it)-> isOn () ) {
+ exclude << it.key();
+ } else {
+ include << it.key();
+ }
+ }
+ cfg.writeEntry( "ExcludeApplets", exclude, ',' );
+ cfg.writeEntry( "IncludeApplets", include, ',' );
+ }
+
+ cfg.setGroup( "Autostart" );
+ m_autoStart = CheckBoxAuto->isChecked();
+ cfg.writeEntry( "autostart", m_autoStart );
+ m_autoStartTimer = SpinBoxTime->value();
+ cfg.readEntry( "autostartdelay", m_autoStartTimer );
+}
+
+
+void TodayConfig::moveSelectedUp() {
+ QListViewItem *item = m_appletListView->selectedItem();
+ if ( item && item->itemAbove() ) {
+ item->itemAbove()->moveItem( item );
+ }
+}
+
+
+void TodayConfig::moveSelectedDown() {
+ QListViewItem *item = m_appletListView->selectedItem();
+ if ( item && item->itemBelow() ) {
+ item->moveItem( item->itemBelow() );
+ }
+}
+
+
+/**
+ * Set up the
+ */
+void TodayConfig::pluginManagement( QString libName, QString name, QPixmap icon ) {
+
+ QCheckListItem *item;
+ item = new QCheckListItem( m_appletListView, name, QCheckListItem::CheckBox );
+
+ if ( !icon.isNull() ) {
+ item->setPixmap( 0, icon );
+ }
+
+ qDebug (" SUCHNAME: " + name );
+ if ( m_excludeApplets.find( libName ) == m_excludeApplets.end() ) {
+ item->setOn( TRUE );
+ }
+ m_applets[libName] = item;
}
-todayconfig::~todayconfig() {
+
+void TodayConfig::appletChanged() {
+ m_applets_changed = true;
+}
+
+
+TodayConfig::~TodayConfig() {
}
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,11 +1,8 @@
/*
* todayconfig.h
*
- * ---------------------
- *
- * begin : Sun 10 17:20:00 CEST 2002
* copyright : (c) 2002 by Maximilian Reiß
- * email : max.reiss@gmx.de
+ * email : harlekin@handhelds.org
*
*/
/***************************************************************************
@@ -16,51 +13,57 @@
* (at your option) any later version. *
* *
***************************************************************************/
+
#ifndef TODAYCONFIG_H
#define TODAYCONFIG_H
#include <qvariant.h>
#include <qdialog.h>
-//class QVBoxLayout;
-class QHBoxLayout;
-class QGridLayout;
+#include <qlistview.h>
+
class QCheckBox;
-class QFrame;
class QLabel;
class QSpinBox;
class QTabWidget;
-class QWidget;
-class todayconfig : public QDialog {
+class TodayConfig : public QDialog {
+
Q_OBJECT
public:
- todayconfig( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
- ~todayconfig();
+ TodayConfig( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~TodayConfig();
QTabWidget* TabWidget3;
- QWidget* tab;
- QFrame* Frame8;
- QLabel* TextLabel4;
- QLabel* TextLabel5;
+
+ void writeConfig();
+ void pluginManagement( QString libName, QString name, QPixmap icon );
+
+protected slots:
+ void appletChanged();
+ void moveSelectedUp();
+ void moveSelectedDown();
+
+private:
+ void setAutoStart();
+ void readConfig();
+
+ QListView* m_appletListView;
+ QMap<QString,QCheckListItem*> m_applets;
+
+ int m_autoStart;
+ QString m_autoStartTimer;
+ QStringList m_excludeApplets;
+ bool m_applets_changed;
+
QLabel* TextLabel2;
- QCheckBox* CheckBox3;
- QCheckBox* CheckBox2;
- QCheckBox* CheckBox1;
QCheckBox* CheckBoxAuto;
- QSpinBox* SpinBox1;
- QLabel* TextLabel3;
QWidget* tab_2;
- QFrame* Frame9;
- QLabel* TextLabel6;
- QSpinBox* SpinBox2;
QWidget* tab_3;
- QFrame* Frame14;
QLabel* TextLabel1;
QSpinBox* SpinBox7;
QLabel* TimeLabel;
QSpinBox* SpinBoxTime;
-
};
#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 @@
+
+#ifndef TODAY_PLUGIN_INTERFACE
+#define TODAY_PLUGIN_INTERFACE
+
+#include <qpe/qcom.h>
+#include "configwidget.h"
+
+class QString;
+class QWidget;
+
+#ifndef IID_TodayPluginInterface
+#define IID_TodayPluginInterface QUuid( 0x70481804, 0x2b50, 0x4fba, 0x80, 0xbb, 0x0b, 0xf8, 0xdc, 0x72, 0x04, 0x14)
+#endif
+
+/**
+ *
+ *
+ *
+ */
+class TodayPluginObject {
+
+ Q_OBJECT
+
+public:
+
+ virtual ~TodayPluginObject() {};
+
+ /**
+ * The name if the plugin
+ */
+ virtual QString pluginName() const = 0;
+
+ /**
+ * Version numbering
+ */
+ virtual double versionNumber() const = 0;
+
+ /**
+ * the path and name of the identifer icon that should be shown
+ * in "Resource" notation, that means only subdir/picname form $QPEDIR/pics
+ */
+ virtual QString pixmapNameWidget() const = 0;
+
+ /** widget for the today view
+ * It _needs_ a parent here.
+ */
+ virtual QWidget* widget( QWidget * ) = 0;
+
+ /**
+ * Pixmap used in the config widget
+ */
+ virtual QString pixmapNameConfig() const = 0;
+
+ /**
+ * Config plugin widget - optional
+ * If the plugin has a config widget, it _needs_ a parent here.
+ */
+ virtual ConfigWidget* configWidget( QWidget * ) = 0;
+
+ /**
+ * The application that should be assigned to the button (pixmap)
+ */
+ virtual QString appName() const = 0;
+
+ /**
+ * minimum height the plugin at least should have
+ */
+ virtual int minHeight() const = 0;
+
+ /**
+ * maximum height that should be used before starting scrolling
+ */
+ virtual int maxHeight() const = 0;
+
+};
+
+
+struct TodayPluginInterface : public QUnknownInterface {
+ virtual TodayPluginObject *guiPart() = 0;
+};
+
+#endif