summaryrefslogtreecommitdiff
path: root/core/pim/today/today.cpp
Unidiff
Diffstat (limited to 'core/pim/today/today.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/today.cpp38
1 files changed, 24 insertions, 14 deletions
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index a8c8651..be7cbce 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -19,24 +19,25 @@
19#include <opie2/odebug.h> 19#include <opie2/odebug.h>
20#include <opie2/opluginloader.h> 20#include <opie2/opluginloader.h>
21#include <opie2/oconfig.h> 21#include <opie2/oconfig.h>
22 22
23#include <qpe/qcopenvelope_qws.h> 23#include <qpe/qcopenvelope_qws.h>
24#include <qpe/resource.h> 24#include <qpe/resource.h>
25#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26#include <qpe/contact.h> 26#include <qpe/contact.h>
27 27
28#include <qdir.h> 28#include <qdir.h>
29#include <qtimer.h> 29#include <qtimer.h>
30#include <qwhatsthis.h> 30#include <qwhatsthis.h>
31#include <qmessagebox.h>
31 32
32using namespace Opie::Ui; 33using namespace Opie::Ui;
33using Opie::Core::OPluginItem; 34using Opie::Core::OPluginItem;
34using Opie::Core::OPluginLoader; 35using Opie::Core::OPluginLoader;
35using Opie::Core::OPluginManager; 36using Opie::Core::OPluginManager;
36using Opie::Core::OConfig; 37using Opie::Core::OConfig;
37 38
38 39
39struct TodayPlugin { 40struct TodayPlugin {
40TodayPlugin() : iface( 0 ), guiPart( 0 ), guiBox( 0 ) {} 41TodayPlugin() : iface( 0 ), guiPart( 0 ), guiBox( 0 ) {}
41 QInterfacePtr<TodayPluginInterface> iface; 42 QInterfacePtr<TodayPluginInterface> iface;
42 TodayPluginObject *guiPart; 43 TodayPluginObject *guiPart;
@@ -45,55 +46,52 @@ TodayPlugin() : iface( 0 ), guiPart( 0 ), guiBox( 0 ) {}
45 QString name; 46 QString name;
46 bool excludeRefresh; 47 bool excludeRefresh;
47}; 48};
48 49
49static QMap<QString, TodayPlugin> pluginList; 50static QMap<QString, TodayPlugin> pluginList;
50 51
51Today::Today( QWidget* parent, const char* name, WFlags fl ) 52Today::Today( QWidget* parent, const char* name, WFlags fl )
52: TodayBase( parent, name, fl ) { 53: TodayBase( parent, name, fl ) {
53 54
54 QObject::connect( (QObject*)ConfigButton, SIGNAL( clicked() ), this, SLOT( startConfig() ) ); 55 QObject::connect( (QObject*)ConfigButton, SIGNAL( clicked() ), this, SLOT( startConfig() ) );
55 QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT( editCard() ) ); 56 QObject::connect( (QObject*)OwnerField, SIGNAL( clicked() ), this, SLOT( editCard() ) );
56 57
57 #if defined(Q_WS_QWS) 58#if !defined(QT_NO_COP)
58 #if !defined(QT_NO_COP)
59 59
60 QCopChannel *todayChannel = new QCopChannel( "QPE/Today" , this ); 60 QCopChannel *todayChannel = new QCopChannel( "QPE/Today" , this );
61 connect ( todayChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 61 connect ( todayChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
62 this, SLOT ( channelReceived(const QCString&,const QByteArray&) ) ); 62 this, SLOT ( channelReceived(const QCString&,const QByteArray&) ) );
63 #endif 63#endif
64 #endif
65 64
66 setOwnerField(); 65 setOwnerField();
67 m_big_box = 0L; 66 m_big_box = 0L;
68 67
69 layout = new QVBoxLayout( this ); 68 layout = new QVBoxLayout( this );
70 layout->addWidget( Frame ); 69 layout->addWidget( Frame );
71 layout->addWidget( OwnerField ); 70 layout->addWidget( OwnerField );
72 71
73 m_sv = new QScrollView( this ); 72 m_sv = new QScrollView( this );
74 m_sv->setResizePolicy( QScrollView::AutoOneFit ); 73 m_sv->setResizePolicy( QScrollView::AutoOneFit );
75 m_sv->setHScrollBarMode( QScrollView::AlwaysOff ); 74 m_sv->setHScrollBarMode( QScrollView::AlwaysOff );
76 m_sv->setFrameShape( QFrame::NoFrame ); 75 m_sv->setFrameShape( QFrame::NoFrame );
77 76
78 layout->addWidget( m_sv ); 77 layout->addWidget( m_sv );
79 layout->setStretchFactor( m_sv,4 ); 78 layout->setStretchFactor( m_sv,4 );
80 79
81 m_refreshTimer = new QTimer( this ); 80 m_refreshTimer = new QTimer( this );
82 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); 81 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) );
83 82
84 init(); 83 init();
85 loadPlugins(); 84 loadPlugins();
86 initialize(); 85 initialize();
87 QPEApplication::showWidget( this );
88} 86}
89 87
90/** 88/**
91 * Qcop receive method. 89 * Qcop receive method.
92 */ 90 */
93void Today::channelReceived( const QCString &msg, const QByteArray & data ) { 91void Today::channelReceived( const QCString &msg, const QByteArray & data ) {
94 QDataStream stream( data, IO_ReadOnly ); 92 QDataStream stream( data, IO_ReadOnly );
95 if ( msg == "message(QString)" ) { 93 if ( msg == "message(QString)" ) {
96 QString message; 94 QString message;
97 stream >> message; 95 stream >> message;
98 setOwnerField( message ); 96 setOwnerField( message );
99 } 97 }
@@ -170,29 +168,42 @@ void Today::init() {
170 m_bblayout = new QVBoxLayout ( m_big_box ); 168 m_bblayout = new QVBoxLayout ( m_big_box );
171} 169}
172 170
173 171
174/** 172/**
175 * Load the plugins 173 * Load the plugins
176 */ 174 */
177void Today::loadPlugins() { 175void Today::loadPlugins() {
178 176
179 m_pluginLoader = new OPluginLoader( "today", true ); 177 m_pluginLoader = new OPluginLoader( "today", true );
180 m_pluginLoader->setAutoDelete( true ); 178 m_pluginLoader->setAutoDelete( true );
181 179
182 OPluginItem::List lst = m_pluginLoader->allAvailable( true );
183
184 m_manager = new OPluginManager( m_pluginLoader ); 180 m_manager = new OPluginManager( m_pluginLoader );
185 m_manager->load(); 181 m_manager->load();
186 182
183 /*
184 * check if loading of Plugins crashed
185 */
186 if( m_pluginLoader->isInSafeMode() ) {
187 QMessageBox::information(this, tr("Today Error"),
188 tr("<qt>The plugin '%1' caused Today to crash."
189 " It could be that the plugin is not properly"
190 " installed.<br>Today tries to continue loading"
191 " plugins.</qt>")
192 .arg( m_manager->crashedPlugin().name()));
193 }
194
195 OPluginItem::List lst = m_pluginLoader->filtered( true );
196
197
187 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) { 198 for ( OPluginItem::List::Iterator it = lst.begin(); it != lst.end(); ++it ) {
188 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface ); 199 TodayPluginInterface* iface = m_pluginLoader->load<TodayPluginInterface>( *it, IID_TodayPluginInterface );
189 200
190 TodayPlugin plugin; 201 TodayPlugin plugin;
191 plugin.iface = iface; 202 plugin.iface = iface;
192 plugin.name = (*it).name(); 203 plugin.name = (*it).name();
193 plugin.oplugin = (*it); 204 plugin.oplugin = (*it);
194 205
195 plugin.guiPart = plugin.iface->guiPart(); 206 plugin.guiPart = plugin.iface->guiPart();
196 plugin.excludeRefresh = plugin.guiPart->excludeFromRefresh(); 207 plugin.excludeRefresh = plugin.guiPart->excludeFromRefresh();
197 208
198 // package the whole thing into a qwidget so it can be shown and hidden 209 // package the whole thing into a qwidget so it can be shown and hidden
@@ -224,25 +235,25 @@ void Today::loadPlugins() {
224/** 235/**
225 * The method for the configuration dialog. 236 * The method for the configuration dialog.
226 */ 237 */
227void Today::startConfig() { 238void Today::startConfig() {
228 239
229 // disconnect timer to prevent problems while being on config dialog 240 // disconnect timer to prevent problems while being on config dialog
230 disconnect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); 241 disconnect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) );
231 m_refreshTimer->stop( ); 242 m_refreshTimer->stop( );
232 243
233 TodayConfig conf( this, "dialog", true ); 244 TodayConfig conf( this, "dialog", true );
234 conf.setUpPlugins( m_manager, m_pluginLoader ); 245 conf.setUpPlugins( m_manager, m_pluginLoader );
235 246
236 if ( conf.exec() == QDialog::Accepted ) { 247 if ( QPEApplication::execDialog(&conf) == QDialog::Accepted ) {
237 conf.writeConfig(); 248 conf.writeConfig();
238 initialize(); 249 initialize();
239 } else { 250 } else {
240 // since reinitialize is not called in that case , reconnect the signal 251 // since reinitialize is not called in that case , reconnect the signal
241 m_refreshTimer->start( 15000 ); // get the config value in here later 252 m_refreshTimer->start( 15000 ); // get the config value in here later
242 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); 253 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) );
243 } 254 }
244} 255}
245 256
246 257
247void Today::initialize() { 258void Today::initialize() {
248 259
@@ -335,20 +346,19 @@ void Today::startApplication() {
335} 346}
336 347
337 348
338/** 349/**
339* launch addressbook (personal card) 350* launch addressbook (personal card)
340*/ 351*/
341void Today::editCard() { 352void Today::editCard() {
342 QCopEnvelope env( "QPE/Application/addressbook", "editPersonalAndClose()" ); 353 QCopEnvelope env( "QPE/Application/addressbook", "editPersonalAndClose()" );
343} 354}
344 355
345 356
346Today::~Today() { 357Today::~Today() {
347 if (m_pluginLoader) { 358 for(QMap<QString, TodayPlugin>::Iterator it = pluginList.begin(); it != pluginList.end(); ++it )
348 delete m_pluginLoader; 359 delete it.data().guiBox;
349 } 360
350 if (m_manager) { 361 delete m_pluginLoader;
351 delete m_manager; 362 delete m_manager;
352 }
353} 363}
354 364