summaryrefslogtreecommitdiff
authorharlekin <harlekin>2003-02-11 21:26:39 (UTC)
committer harlekin <harlekin>2003-02-11 21:26:39 (UTC)
commit39f9441dabcb094be258240f7ec3c53ed038133e (patch) (unidiff)
tree7d6e7f49ce18c6c3723cbc59358c58a252011133
parentaf398bd4c280e7c27754b409851fbe8189d08819 (diff)
downloadopie-39f9441dabcb094be258240f7ec3c53ed038133e.zip
opie-39f9441dabcb094be258240f7ec3c53ed038133e.tar.gz
opie-39f9441dabcb094be258240f7ec3c53ed038133e.tar.bz2
now when coming back from the config dialog ALL plugins get restarted
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/today.cpp145
-rw-r--r--core/pim/today/today.h2
2 files changed, 61 insertions, 86 deletions
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index 1f758f2..2f6907d 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -1,7 +1,7 @@
1/* 1/*
2 * today.cpp 2 * today.cpp
3 * 3 *
4 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002,2003 by Maximilian Reiß
5 * email : harlekin@handhelds.org 5 * email : harlekin@handhelds.org
6 * 6 *
7 */ 7 */
@@ -70,7 +70,7 @@ Today::Today( QWidget* parent, const char* name, WFlags fl )
70 m_refreshTimer = new QTimer( this ); 70 m_refreshTimer = new QTimer( this );
71 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) ); 71 connect( m_refreshTimer, SIGNAL( timeout() ), this, SLOT( refresh() ) );
72 m_refreshTimer->start( 15000 ); 72 m_refreshTimer->start( 15000 );
73 init(); 73 //init();
74 loadPlugins(); 74 loadPlugins();
75 showMaximized(); 75 showMaximized();
76} 76}
@@ -122,7 +122,6 @@ void Today::setOwnerField( QString &message ) {
122 } 122 }
123} 123}
124 124
125
126/** 125/**
127 * Init stuff needed for today. Reads the config file. 126 * Init stuff needed for today. Reads the config file.
128 */ 127 */
@@ -138,14 +137,11 @@ void Today::init() {
138 m_iconSize = cfg.readNumEntry( "IconSize", 18 ); 137 m_iconSize = cfg.readNumEntry( "IconSize", 18 );
139 setRefreshTimer( cfg.readNumEntry( "checkinterval", 15000 ) ); 138 setRefreshTimer( cfg.readNumEntry( "checkinterval", 15000 ) );
140 139
141
142 // qDebug(" refresh ");
143 // set the date in top label 140 // set the date in top label
144 QDate date = QDate::currentDate(); 141 QDate date = QDate::currentDate();
145 QString time = ( tr( date.toString() ) ); 142 QString time = ( tr( date.toString() ) );
146
147 DateLabel->setText( QString( "<font color=#FFFFFF>" + time + "</font>" ) ); 143 DateLabel->setText( QString( "<font color=#FFFFFF>" + time + "</font>" ) );
148 144
149 if ( layout ) { 145 if ( layout ) {
150 delete layout; 146 delete layout;
151 } 147 }
@@ -154,28 +150,20 @@ void Today::init() {
154 layout->addWidget( OwnerField ); 150 layout->addWidget( OwnerField );
155} 151}
156 152
157
158/** 153/**
159 * Load the plugins 154 * Load the plugins
160 */ 155 */
161void Today::loadPlugins() { 156void Today::loadPlugins() {
162 157
163 // extra list for plugins that exclude themself from periodic refresh 158 init();
164 QMap<QString, TodayPlugin> pluginListRefreshExclude;
165
166 QValueList<TodayPlugin>::Iterator tit; 159 QValueList<TodayPlugin>::Iterator tit;
167 if ( !pluginList.isEmpty() ) { 160 if ( !pluginList.isEmpty() ) {
168 for ( tit = pluginList.begin(); tit != pluginList.end(); ++tit ) { 161 for ( tit = pluginList.begin(); tit != pluginList.end(); ++tit ) {
169 if ( (*tit).excludeRefresh ) { 162 (*tit).guiBox->hide();
170 pluginListRefreshExclude.insert( (*tit).name , (*tit) ); 163 (*tit).guiBox->reparent( 0, QPoint( 0, 0 ) );
171 qDebug( "Found a plugin that does not want refresh feature" ); 164 (*tit).library->unload();
172 } else { 165 delete (*tit).guiBox;
173 (*tit).guiBox->hide(); 166 delete (*tit).library;
174 (*tit).guiBox->reparent( 0, QPoint( 0, 0 ) );
175 (*tit).library->unload();
176 delete (*tit).guiBox;
177 delete (*tit).library;
178 }
179 } 167 }
180 pluginList.clear(); 168 pluginList.clear();
181 } 169 }
@@ -189,7 +177,6 @@ void Today::loadPlugins() {
189 QMap<QString, TodayPlugin> tempList; 177 QMap<QString, TodayPlugin> tempList;
190 178
191 for ( it = list.begin(); it != list.end(); ++it ) { 179 for ( it = list.begin(); it != list.end(); ++it ) {
192 //TodayPluginInterface *iface = 0;
193 QInterfacePtr<TodayPluginInterface> iface; 180 QInterfacePtr<TodayPluginInterface> iface;
194 QLibrary *lib = new QLibrary( path + "/" + *it ); 181 QLibrary *lib = new QLibrary( path + "/" + *it );
195 182
@@ -198,71 +185,58 @@ void Today::loadPlugins() {
198 qDebug( "accepted: %s", QString( path + "/" + *it ).latin1() ); 185 qDebug( "accepted: %s", QString( path + "/" + *it ).latin1() );
199 qDebug( QString(*it) ); 186 qDebug( QString(*it) );
200 187
201 // If plugin is exludes from refresh, get it in the list again here. 188 TodayPlugin plugin;
189 plugin.library = lib;
190 plugin.iface = iface;
191 plugin.name = QString(*it);
202 192
203 if ( pluginListRefreshExclude.contains( (*it) ) ) { 193 // find out if plugins should be shown
204 // if its not in allApplets list, add it to a layout 194 if ( m_excludeApplets.grep( *it ).isEmpty() ) {
205 if ( !m_allApplets.contains( pluginListRefreshExclude[(*it)].name ) ) { 195 plugin.active = true;
206 layout->addWidget( pluginListRefreshExclude[(*it)].guiBox );
207 pluginList.append( pluginListRefreshExclude[(*it)] );
208 } else {
209 tempList.insert( pluginListRefreshExclude[(*it)].name, pluginListRefreshExclude[(*it)] );
210 }
211 } else { 196 } else {
197 plugin.active = false;
198 }
212 199
213 TodayPlugin plugin; 200 plugin.guiPart = plugin.iface->guiPart();
214 plugin.library = lib; 201 plugin.excludeRefresh = plugin.guiPart->excludeFromRefresh();
215 plugin.iface = iface; 202
216 plugin.name = QString(*it); 203 // package the whole thing into a qwidget so it can be shown and hidden
217 204 plugin.guiBox = new QWidget( this );
218 // find out if plugins should be shown 205 QHBoxLayout *boxLayout = new QHBoxLayout( plugin.guiBox );
219 if ( m_excludeApplets.grep( *it ).isEmpty() ) { 206 QPixmap plugPix;
220 plugin.active = true; 207 plugPix.convertFromImage( Resource::loadImage( plugin.guiPart->pixmapNameWidget() ).smoothScale( m_iconSize, m_iconSize ), 0 );
221 } else { 208 OClickableLabel* plugIcon = new OClickableLabel( plugin.guiBox );
222 plugin.active = false; 209 plugIcon->setPixmap( plugPix );
223 } 210 QWhatsThis::add( plugIcon, tr("Click here to launch the associated app") );
224 211 plugIcon->setName( plugin.guiPart->appName() );
225 plugin.guiPart = plugin.iface->guiPart(); 212 connect( plugIcon, SIGNAL( clicked() ), this, SLOT( startApplication() ) );
226 plugin.excludeRefresh = plugin.guiPart->excludeFromRefresh(); 213 // a scrollview for each plugin
227 214 QScrollView* sv = new QScrollView( plugin.guiBox );
228 // package the whole thing into a qwidget so it can be shown and hidden 215 QWidget *plugWidget = plugin.guiPart->widget( sv->viewport() );
229 plugin.guiBox = new QWidget( this ); 216 // not sure if that is good .-)
230 QHBoxLayout *boxLayout = new QHBoxLayout( plugin.guiBox ); 217 sv->setMinimumHeight( 12 );
231 QPixmap plugPix; 218 sv->setResizePolicy( QScrollView::AutoOneFit );
232 plugPix.convertFromImage( Resource::loadImage( plugin.guiPart->pixmapNameWidget() ).smoothScale( m_iconSize, m_iconSize ), 0 ); 219 sv->setHScrollBarMode( QScrollView::AlwaysOff );
233 OClickableLabel* plugIcon = new OClickableLabel( plugin.guiBox ); 220 sv->setFrameShape( QFrame::NoFrame );
234 plugIcon->setPixmap( plugPix ); 221 sv->addChild( plugWidget );
235 QWhatsThis::add( plugIcon, tr("Click here to launch the associated app") ); 222 // make sure the icon is on the top alligned
236 plugIcon->setName( plugin.guiPart->appName() ); 223 boxLayout->addWidget( plugIcon, 0, AlignTop );
237 connect( plugIcon, SIGNAL( clicked() ), this, SLOT( startApplication() ) ); 224 boxLayout->addWidget( sv, 0, AlignTop );
238 // a scrollview for each plugin 225 boxLayout->setStretchFactor( plugIcon, 1 );
239 QScrollView* sv = new QScrollView( plugin.guiBox ); 226 boxLayout->setStretchFactor( sv, 9 );
240 QWidget *plugWidget = plugin.guiPart->widget( sv->viewport() ); 227 // "prebuffer" it in one more list, to get the sorting done
241 // not sure if that is good .-) 228 tempList.insert( plugin.name, plugin );
242 sv->setMinimumHeight( 10 ); 229
243 sv->setResizePolicy( QScrollView::AutoOneFit ); 230 // on first start the list is off course empty
244 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 231 if ( m_allApplets.isEmpty() ) {
245 sv->setFrameShape( QFrame::NoFrame ); 232 layout->addWidget( plugin.guiBox );
246 sv->addChild( plugWidget ); 233 pluginList.append( plugin );
247 // make sure the icon is on the top alligned 234 }
248 boxLayout->addWidget( plugIcon, 0, AlignTop ); 235
249 boxLayout->addWidget( sv, 0, AlignTop ); 236 // if plugin is not yet in the list, add it to the layout too
250 boxLayout->setStretchFactor( plugIcon, 1 ); 237 else if ( !m_allApplets.contains( plugin.name ) ) {
251 boxLayout->setStretchFactor( sv, 9 ); 238 layout->addWidget( plugin.guiBox );
252 // "prebuffer" it in one more list, to get the sorting done 239 pluginList.append( plugin );
253 tempList.insert( plugin.name, plugin );
254
255 // on first start the list is off course empty
256 if ( m_allApplets.isEmpty() ) {
257 layout->addWidget( plugin.guiBox );
258 pluginList.append( plugin );
259 }
260
261 // if plugin is not yet in the list, add it to the layout too
262 else if ( !m_allApplets.contains( plugin.name ) ) {
263 layout->addWidget( plugin.guiBox );
264 pluginList.append( plugin );
265 }
266 } 240 }
267 } else { 241 } else {
268 qDebug( "could not recognize %s", QString( path + "/" + *it ).latin1() ); 242 qDebug( "could not recognize %s", QString( path + "/" + *it ).latin1() );
@@ -370,6 +344,7 @@ void Today::startConfig() {
370 * 344 *
371 */ 345 */
372void Today::refresh() { 346void Today::refresh() {
347
373 init(); 348 init();
374 349
375 QValueList<TodayPlugin>::Iterator it; 350 QValueList<TodayPlugin>::Iterator it;
@@ -377,7 +352,7 @@ void Today::refresh() {
377 if ( !(*it).excludeRefresh ) { 352 if ( !(*it).excludeRefresh ) {
378 (*it).guiPart->refresh(); 353 (*it).guiPart->refresh();
379 qDebug( "refresh" ); 354 qDebug( "refresh" );
380 } 355 }
381 } 356 }
382} 357}
383 358
diff --git a/core/pim/today/today.h b/core/pim/today/today.h
index 35b7ee3..24f5611 100644
--- a/core/pim/today/today.h
+++ b/core/pim/today/today.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * today.h 2 * today.h
3 * 3 *
4 * copyright : (c) 2002 by Maximilian Reiß 4 * copyright : (c) 2002,2003 by Maximilian Reiß
5 * email : harlekin@handhelds.org 5 * email : harlekin@handhelds.org
6 * 6 *
7 */ 7 */