summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-02-16 19:20:06 (UTC)
committer mickeyl <mickeyl>2005-02-16 19:20:06 (UTC)
commit5ad21664e5db417a18682903a660f4651c68ff12 (patch) (unidiff)
tree12fc6b3e45b3575cf71c2b5dd1e26c4592f5381b
parent4fc6942eed4abdc0d4b5e1b3460a32852731c7b4 (diff)
downloadopie-5ad21664e5db417a18682903a660f4651c68ff12.zip
opie-5ad21664e5db417a18682903a660f4651c68ff12.tar.gz
opie-5ad21664e5db417a18682903a660f4651c68ff12.tar.bz2
this patch adds the possibility to have a static (as in non-scrolling) background
in the launcher. major drawback: most of our machines (at least the SA1100 based ones) are too slow to make it flicker free w/ tracking (repainting while dragging the scrollbar). so i needed to disable tracking for the static background. it's a hidden setting and disabled per default. please play around with it and give me your comments. How to enable: Launcher.conf: [GUI] StaticBackground = 1
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcherview.cpp29
-rw-r--r--core/launcher/launcherview.h7
2 files changed, 26 insertions, 10 deletions
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp
index 2b34cc5..e7229ee 100644
--- a/core/launcher/launcherview.cpp
+++ b/core/launcher/launcherview.cpp
@@ -39,585 +39,602 @@ using namespace Opie::Core;
39#include <qobjectlist.h> 39#include <qobjectlist.h>
40 40
41 41
42// These define how the busy icon is animated and highlighted 42// These define how the busy icon is animated and highlighted
43#define BRIGHTEN_BUSY_ICON 43#define BRIGHTEN_BUSY_ICON
44//#define ALPHA_FADE_BUSY_ICON 44//#define ALPHA_FADE_BUSY_ICON
45//#define USE_ANIMATED_BUSY_ICON_OVERLAY 45//#define USE_ANIMATED_BUSY_ICON_OVERLAY
46#define BOUNCE_BUSY_ICON 46#define BOUNCE_BUSY_ICON
47 47
48typedef QMap<QString,QPixmap>::Iterator pixiter; 48typedef QMap<QString,QPixmap>::Iterator pixiter;
49 49
50class BgPixmap 50class BgPixmap
51{ 51{
52public: 52public:
53 BgPixmap( const QPixmap &p ) : pm(p), ref(1) {} 53 BgPixmap( const QPixmap &p ) : pm(p), ref(1) {}
54 QPixmap pm; 54 QPixmap pm;
55 int ref; 55 int ref;
56}; 56};
57 57
58 58
59static QMap<QString,BgPixmap*> *bgCache = 0; 59static QMap<QString,BgPixmap*> *bgCache = 0;
60 60
61static void cleanup_cache() 61static void cleanup_cache()
62{ 62{
63 QMap<QString,BgPixmap*>::Iterator it = bgCache->begin(); 63 QMap<QString,BgPixmap*>::Iterator it = bgCache->begin();
64 while ( it != bgCache->end() ) { 64 while ( it != bgCache->end() ) {
65 QMap<QString,BgPixmap*>::Iterator curr = it; 65 QMap<QString,BgPixmap*>::Iterator curr = it;
66 ++it; 66 ++it;
67 delete (*curr); 67 delete (*curr);
68 bgCache->remove( curr ); 68 bgCache->remove( curr );
69 } 69 }
70 delete bgCache; 70 delete bgCache;
71 bgCache = 0; 71 bgCache = 0;
72} 72}
73 73
74 74
75class LauncherItem : public QIconViewItem 75class LauncherItem : public QIconViewItem
76{ 76{
77public: 77public:
78 enum iconstate_t { 78 enum iconstate_t {
79 BASE_ICON, 79 BASE_ICON,
80 WAITING_ICON, 80 WAITING_ICON,
81 EYE_ICON 81 EYE_ICON
82 }; 82 };
83 83
84 LauncherItem( QIconView *parent, AppLnk* applnk, bool bigIcon=TRUE ); 84 LauncherItem( QIconView *parent, AppLnk* applnk, bool bigIcon=TRUE );
85 ~LauncherItem(); 85 ~LauncherItem();
86 86
87 AppLnk *appLnk() const { return app; } 87 AppLnk *appLnk() const { return app; }
88 AppLnk *takeAppLnk() { AppLnk* r=app; app=0; return r; } 88 AppLnk *takeAppLnk() { AppLnk* r=app; app=0; return r; }
89 89
90 void animateIcon(); 90 void animateIcon();
91 void resetIcon(); 91 void resetIcon();
92 bool isEyeImage()const{return m_EyeImage;} 92 bool isEyeImage()const{return m_EyeImage;}
93 93
94 virtual int compare ( QIconViewItem * i ) const; 94 virtual int compare ( QIconViewItem * i ) const;
95 void paintItem( QPainter *p, const QColorGroup &cg ); 95 void paintItem( QPainter *p, const QColorGroup &cg );
96 96
97 void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } 97 void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; }
98 void setEyePixmap(const QPixmap&aIcon); 98 void setEyePixmap(const QPixmap&aIcon);
99 virtual QPixmap*pixmap()const; 99 virtual QPixmap*pixmap()const;
100 100
101protected: 101protected:
102 bool isBigIcon; 102 bool isBigIcon;
103 int iteration; 103 int iteration;
104 AppLnk* app; 104 AppLnk* app;
105 105
106private: 106private:
107 void paintAnimatedIcon( QPainter *p ); 107 void paintAnimatedIcon( QPainter *p );
108 BusyIndicatorType busyType; 108 BusyIndicatorType busyType;
109 int psize; 109 int psize;
110 bool m_EyeImage; 110 bool m_EyeImage;
111 iconstate_t m_EyeImageSet; 111 iconstate_t m_EyeImageSet;
112}; 112};
113 113
114LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon ) 114LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon )
115 : QIconViewItem( parent, applnk->name(), 115 : QIconViewItem( parent, applnk->name(),
116 bigIcon ? applnk->bigPixmap() :applnk->pixmap() ), 116 bigIcon ? applnk->bigPixmap() :applnk->pixmap() ),
117 isBigIcon( bigIcon ), 117 isBigIcon( bigIcon ),
118 iteration(0), 118 iteration(0),
119 app(applnk), // Takes ownership 119 app(applnk), // Takes ownership
120 psize( (bigIcon ? applnk->bigPixmap().width() :applnk->pixmap().width() ) ), 120 psize( (bigIcon ? applnk->bigPixmap().width() :applnk->pixmap().width() ) ),
121 m_EyeImage(false), 121 m_EyeImage(false),
122 m_EyeImageSet(BASE_ICON) 122 m_EyeImageSet(BASE_ICON)
123{ 123{
124 if (applnk->type().lower().startsWith("image/") && applnk->exec().contains("opie-eye",false)) { 124 if (applnk->type().lower().startsWith("image/") && applnk->exec().contains("opie-eye",false)) {
125 m_EyeImage = true; 125 m_EyeImage = true;
126 QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(applnk->file()); 126 QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(applnk->file());
127 if (it != LauncherIconView::sm_EyeCache->end()) { 127 if (it != LauncherIconView::sm_EyeCache->end()) {
128 m_EyeImageSet = EYE_ICON; 128 m_EyeImageSet = EYE_ICON;
129 setPixmap(*it); 129 setPixmap(*it);
130 } 130 }
131 } 131 }
132} 132}
133 133
134LauncherItem::~LauncherItem() 134LauncherItem::~LauncherItem()
135{ 135{
136 LauncherIconView* liv = (LauncherIconView*)iconView(); 136 LauncherIconView* liv = (LauncherIconView*)iconView();
137 if ( liv->busyItem() == this ) 137 if ( liv->busyItem() == this )
138 liv->setBusy(FALSE); 138 liv->setBusy(FALSE);
139 delete app; 139 delete app;
140} 140}
141 141
142QPixmap*LauncherItem::pixmap()const 142QPixmap*LauncherItem::pixmap()const
143{ 143{
144 if (m_EyeImage && m_EyeImageSet == BASE_ICON) { 144 if (m_EyeImage && m_EyeImageSet == BASE_ICON) {
145 LauncherIconView* liv = (LauncherIconView*)iconView(); 145 LauncherIconView* liv = (LauncherIconView*)iconView();
146 liv->requestEyePix(this); 146 liv->requestEyePix(this);
147 } 147 }
148 return QIconViewItem::pixmap(); 148 return QIconViewItem::pixmap();
149} 149}
150 150
151int LauncherItem::compare ( QIconViewItem * i ) const 151int LauncherItem::compare ( QIconViewItem * i ) const
152{ 152{
153 LauncherIconView* view = (LauncherIconView*)iconView(); 153 LauncherIconView* view = (LauncherIconView*)iconView();
154 return view->compare(app,((LauncherItem *)i)->appLnk()); 154 return view->compare(app,((LauncherItem *)i)->appLnk());
155} 155}
156 156
157void LauncherItem::paintItem( QPainter *p, const QColorGroup &cg ) 157void LauncherItem::paintItem( QPainter *p, const QColorGroup &cg )
158{ 158{
159 LauncherIconView* liv = (LauncherIconView*)iconView(); 159 LauncherIconView* liv = (LauncherIconView*)iconView();
160 QBrush oldBrush( liv->itemTextBackground() ); 160 QBrush oldBrush( liv->itemTextBackground() );
161 QColorGroup mycg( cg ); 161 QColorGroup mycg( cg );
162 if ( liv->currentItem() == this ) { 162 if ( liv->currentItem() == this ) {
163 liv->setItemTextBackground( cg.brush( QColorGroup::Highlight ) ); 163 liv->setItemTextBackground( cg.brush( QColorGroup::Highlight ) );
164 mycg.setColor( QColorGroup::Text, cg.color( QColorGroup::HighlightedText ) ); 164 mycg.setColor( QColorGroup::Text, cg.color( QColorGroup::HighlightedText ) );
165 } 165 }
166 166
167 QIconViewItem::paintItem(p,mycg); 167 QIconViewItem::paintItem(p,mycg);
168 168
169 // Paint animation overlay 169 // Paint animation overlay
170 if ( liv->busyItem() == this ) 170 if ( liv->busyItem() == this )
171 paintAnimatedIcon(p); 171 paintAnimatedIcon(p);
172 172
173 if ( liv->currentItem() == this ) 173 if ( liv->currentItem() == this )
174 liv->setItemTextBackground( oldBrush ); 174 liv->setItemTextBackground( oldBrush );
175} 175}
176 176
177void LauncherItem::paintAnimatedIcon( QPainter *p ) 177void LauncherItem::paintAnimatedIcon( QPainter *p )
178{ 178{
179 LauncherIconView* liv = (LauncherIconView*)iconView(); 179 LauncherIconView* liv = (LauncherIconView*)iconView();
180 int pic = iteration % 16; 180 int pic = iteration % 16;
181 int w = pixmap()->width(), h = pixmap()->height(); 181 int w = pixmap()->width(), h = pixmap()->height();
182 QPixmap dblBuf( w, h + 4 ); 182 QPixmap dblBuf( w, h + 4 );
183 QPainter p2( &dblBuf ); 183 QPainter p2( &dblBuf );
184 int x1, y1; 184 int x1, y1;
185 if ( liv->itemTextPos() == QIconView::Bottom ) { 185 if ( liv->itemTextPos() == QIconView::Bottom ) {
186 x1 = x() + (width() - w) / 2 - liv->contentsX(); 186 x1 = x() + (width() - w) / 2 - liv->contentsX();
187 y1 = y() - liv->contentsY(); 187 y1 = y() - liv->contentsY();
188 } else { 188 } else {
189 x1 = x() - liv->contentsX(); 189 x1 = x() - liv->contentsX();
190 y1 = y() + (height() - h) / 2 - liv->contentsY(); 190 y1 = y() + (height() - h) / 2 - liv->contentsY();
191 } 191 }
192 y1 -= 2; 192 y1 -= 2;
193 p2.translate(-x1,-y1); 193 p2.translate(-x1,-y1);
194 liv->drawBackground( &p2, QRect(x1,y1,w,h+4) ); 194 liv->drawBackground( &p2, QRect(x1,y1,w,h+4) );
195 int bounceY = 2; 195 int bounceY = 2;
196#ifdef BOUNCE_BUSY_ICON 196#ifdef BOUNCE_BUSY_ICON
197 if ( busyType == BIT_Animated ) { 197 if ( busyType == BIT_Animated ) {
198 bounceY = 4 - ((iteration+2)%8); 198 bounceY = 4 - ((iteration+2)%8);
199 bounceY = bounceY < 0 ? -bounceY : bounceY; 199 bounceY = bounceY < 0 ? -bounceY : bounceY;
200 } 200 }
201#endif 201#endif
202 p2.drawPixmap( x1, y1 + bounceY, *pixmap() ); 202 p2.drawPixmap( x1, y1 + bounceY, *pixmap() );
203#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY 203#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY
204 p2.drawPixmap( x1, y1 + bounceY, liv->busyPixmap(), w * pic, 0, w, h ); 204 p2.drawPixmap( x1, y1 + bounceY, liv->busyPixmap(), w * pic, 0, w, h );
205#else 205#else
206 Q_UNUSED( pic ) 206 Q_UNUSED( pic )
207#endif 207#endif
208 p->drawPixmap( x1, y1, dblBuf ); 208 p->drawPixmap( x1, y1, dblBuf );
209} 209}
210 210
211void LauncherItem::animateIcon() 211void LauncherItem::animateIcon()
212{ 212{
213 LauncherIconView* liv = (LauncherIconView*)iconView(); 213 LauncherIconView* liv = (LauncherIconView*)iconView();
214 214
215 if ( liv->busyItem() != this || !app ) 215 if ( liv->busyItem() != this || !app )
216 return; 216 return;
217 217
218 // Highlight the icon 218 // Highlight the icon
219 if ( iteration == 0 ) { 219 if ( iteration == 0 ) {
220 QPixmap src; 220 QPixmap src;
221 pixiter it; 221 pixiter it;
222 if (isEyeImage() && (it=LauncherIconView::sm_EyeCache->find(appLnk()->file()))!=LauncherIconView::sm_EyeCache->end()) { 222 if (isEyeImage() && (it=LauncherIconView::sm_EyeCache->find(appLnk()->file()))!=LauncherIconView::sm_EyeCache->end()) {
223 src = (*it); 223 src = (*it);
224 } else { 224 } else {
225 src = ((isBigIcon ? app->bigPixmap() : app->pixmap())); 225 src = ((isBigIcon ? app->bigPixmap() : app->pixmap()));
226 } 226 }
227 QImage img = src.convertToImage(); 227 QImage img = src.convertToImage();
228 QRgb *rgb; 228 QRgb *rgb;
229 int count; 229 int count;
230 if ( img.depth() == 32 ) { 230 if ( img.depth() == 32 ) {
231 rgb = (QRgb*)img.bits(); 231 rgb = (QRgb*)img.bits();
232 count = img.bytesPerLine()/sizeof(QRgb)*img.height(); 232 count = img.bytesPerLine()/sizeof(QRgb)*img.height();
233 } else { 233 } else {
234 rgb = img.colorTable(); 234 rgb = img.colorTable();
235 count = img.numColors(); 235 count = img.numColors();
236 } 236 }
237 for ( int r = 0; r < count; r++, rgb++ ) { 237 for ( int r = 0; r < count; r++, rgb++ ) {
238#if defined(BRIGHTEN_BUSY_ICON) 238#if defined(BRIGHTEN_BUSY_ICON)
239 QColor c(*rgb); 239 QColor c(*rgb);
240 int h, s, v; 240 int h, s, v;
241 c.hsv(&h,&s,&v); 241 c.hsv(&h,&s,&v);
242 c.setHsv(h,QMAX(s-24,0),QMIN(v+48,255)); 242 c.setHsv(h,QMAX(s-24,0),QMIN(v+48,255));
243 *rgb = qRgba(c.red(),c.green(),c.blue(),qAlpha(*rgb)); 243 *rgb = qRgba(c.red(),c.green(),c.blue(),qAlpha(*rgb));
244#elif defined(ALPHA_FADE_BUSY_ICON) 244#elif defined(ALPHA_FADE_BUSY_ICON)
245 *rgb = qRgba(qRed(*rgb),qGreen(*rgb),qBlue(*rgb),qAlpha(*rgb)/2); 245 *rgb = qRgba(qRed(*rgb),qGreen(*rgb),qBlue(*rgb),qAlpha(*rgb)/2);
246#endif 246#endif
247 } 247 }
248 src.convertFromImage( img ); 248 src.convertFromImage( img );
249 setPixmap( src ); 249 setPixmap( src );
250 } 250 }
251 251
252 iteration++; 252 iteration++;
253 253
254 // Paint animation overlay 254 // Paint animation overlay
255 QPainter p( liv->viewport() ); 255 QPainter p( liv->viewport() );
256 paintAnimatedIcon( &p ); 256 paintAnimatedIcon( &p );
257} 257}
258 258
259void LauncherItem::resetIcon() 259void LauncherItem::resetIcon()
260{ 260{
261 iteration = 0; 261 iteration = 0;
262 if (isEyeImage()) { 262 if (isEyeImage()) {
263 QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(appLnk()->file()); 263 QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(appLnk()->file());
264 if (it != LauncherIconView::sm_EyeCache->end()) { 264 if (it != LauncherIconView::sm_EyeCache->end()) {
265 setPixmap(*it); 265 setPixmap(*it);
266 return; 266 return;
267 } 267 }
268 } 268 }
269 setPixmap(isBigIcon ? app->bigPixmap() : app->pixmap()); 269 setPixmap(isBigIcon ? app->bigPixmap() : app->pixmap());
270} 270}
271 271
272void LauncherItem::setEyePixmap(const QPixmap&aIcon) 272void LauncherItem::setEyePixmap(const QPixmap&aIcon)
273{ 273{
274 if (!isEyeImage()) return; 274 if (!isEyeImage()) return;
275 setPixmap(aIcon); 275 setPixmap(aIcon);
276 m_EyeImageSet = EYE_ICON; 276 m_EyeImageSet = EYE_ICON;
277} 277}
278 278
279//=========================================================================== 279//===========================================================================
280// Implemantation of LauncherIconview start 280// Implemantation of LauncherIconview start
281//=========================================================================== 281//===========================================================================
282 282
283QMap<QString,QPixmap>* LauncherIconView::sm_EyeCache=0; 283QMap<QString,QPixmap>* LauncherIconView::sm_EyeCache=0;
284 284
285LauncherIconView::LauncherIconView( QWidget* parent, const char* name ) 285LauncherIconView::LauncherIconView( QWidget* parent, const char* name )
286 : QIconView(parent,name),tf(""),cf(0),bsy(0),busyTimer(0),bigIcns(TRUE),bgColor(white),numColumns(0) 286 : QIconView(parent,name),tf(""),cf(0),bsy(0),busyTimer(0),bigIcns(TRUE),bgColor(white),numColumns(0)
287{ 287{
288 m_EyeCallBack = 0; 288 m_EyeCallBack = 0;
289 if (!sm_EyeCache) sm_EyeCache = new QMap<QString,QPixmap>(); 289 if (!sm_EyeCache) sm_EyeCache = new QMap<QString,QPixmap>();
290 sortmeth = Name; 290 sortmeth = Name;
291 hidden.setAutoDelete(TRUE); 291 hidden.setAutoDelete(TRUE);
292 ike = FALSE; 292 ike = FALSE;
293 calculateGrid( Bottom ); 293 calculateGrid( Bottom );
294 connect(&m_eyeTimer,SIGNAL(timeout()),this,SLOT(stopEyeTimer())); 294 connect(&m_eyeTimer,SIGNAL(timeout()),this,SLOT(stopEyeTimer()));
295 Config config( "Launcher" );
296 config.setGroup( "GUI" );
297 staticBackground = config.readEntry( "StaticBackground", false );
298 if ( staticBackground )
299 {
300 setStaticBackground( true );
301 verticalScrollBar()->setTracking( false );
302 }
295} 303}
296 304
297LauncherIconView::~LauncherIconView() 305LauncherIconView::~LauncherIconView()
298{ 306{
299 odebug << "LauncherIconView::~LauncherIconView()" << oendl; 307 odebug << "LauncherIconView::~LauncherIconView()" << oendl;
300#if 0 // debuggery 308#if 0 // debuggery
301 QListIterator<AppLnk> it(hidden); 309 QListIterator<AppLnk> it(hidden);
302 AppLnk* l; 310 AppLnk* l;
303 while ((l=it.current())) { 311 while ((l=it.current())) {
304 ++it; 312 ++it;
305 //odebug << "" << l << ": hidden (should remove)" << oendl; 313 //odebug << "" << l << ": hidden (should remove)" << oendl;
306 } 314 }
307#endif 315#endif
308} 316}
309 317
310int LauncherIconView::compare(const AppLnk* a, const AppLnk* b) 318int LauncherIconView::compare(const AppLnk* a, const AppLnk* b)
311{ 319{
312 switch (sortmeth) { 320 switch (sortmeth) {
313 case Name: 321 case Name:
314 return a->name().lower().compare(b->name().lower()); 322 return a->name().lower().compare(b->name().lower());
315 case Date: { 323 case Date: {
316 QFileInfo fa(a->linkFileKnown() ? a->linkFile() : a->file()); 324 QFileInfo fa(a->linkFileKnown() ? a->linkFile() : a->file());
317 QFileInfo fb(b->linkFileKnown() ? b->linkFile() : b->file()); 325 QFileInfo fb(b->linkFileKnown() ? b->linkFile() : b->file());
318 return fa.lastModified().secsTo(fb.lastModified()); 326 return fa.lastModified().secsTo(fb.lastModified());
319 } 327 }
320 case Type: 328 case Type:
321 return a->type().compare(b->type()); 329 return a->type().compare(b->type());
322 } 330 }
323 return 0; 331 return 0;
324} 332}
325 333
326void LauncherIconView::setSortMethod( SortMethod m ) 334void LauncherIconView::setSortMethod( SortMethod m )
327{ 335{
328 if ( sortmeth != m ) { 336 if ( sortmeth != m ) {
329 sortmeth = m; 337 sortmeth = m;
330 sort(); 338 sort();
331 } 339 }
332} 340}
333 341
334void LauncherIconView::setCategoryFilter( int catfilter, bool resort ) 342void LauncherIconView::setCategoryFilter( int catfilter, bool resort )
335{ 343{
336 if ( catfilter == -2 ) 344 if ( catfilter == -2 )
337 cf = 0; 345 cf = 0;
338 else 346 else
339 cf = catfilter; 347 cf = catfilter;
340 hideOrShowItems(resort); 348 hideOrShowItems(resort);
341} 349}
342 350
343void LauncherIconView::setTypeFilter(const QString& typefilter, bool resort) 351void LauncherIconView::setTypeFilter(const QString& typefilter, bool resort)
344{ 352{
345 tf = QRegExp(typefilter,FALSE,TRUE); 353 tf = QRegExp(typefilter,FALSE,TRUE);
346 hideOrShowItems(resort); 354 hideOrShowItems(resort);
347} 355}
348 356
349void LauncherIconView::setItemTextPos( ItemTextPos pos ) 357void LauncherIconView::setItemTextPos( ItemTextPos pos )
350{ 358{
351 calculateGrid( pos ); 359 calculateGrid( pos );
352 QIconView::setItemTextPos( pos ); 360 QIconView::setItemTextPos( pos );
353} 361}
354 362
355void LauncherIconView::drawBackground( QPainter *p, const QRect &r ) 363void LauncherIconView::drawBackground( QPainter *p, const QRect &r )
356{ 364{
357 if ( !bgPixmap.isNull() ) { 365 if ( bgPixmap.isNull() )
358 p->drawTiledPixmap( r, bgPixmap, 366 {
359 QPoint( (r.x() + contentsX()) % bgPixmap.width(),
360 (r.y() + contentsY()) % bgPixmap.height() ) );
361 } else {
362 p->fillRect( r, bgColor ); 367 p->fillRect( r, bgColor );
363 } 368 }
369 else
370 {
371 if ( staticBackground )
372 {
373 p->drawPixmap( r.x(), r.y(), bgPixmap, r.x(), r.y(), r.width(), r.height() );
374 }
375 else
376 {
377 p->drawTiledPixmap( r, bgPixmap, QPoint( (r.x() + contentsX()) % bgPixmap.width(),
378 (r.y() + contentsY()) % bgPixmap.height() ) );
379 }
380 }
364} 381}
365 382
366void LauncherIconView::addCatsAndMimes(AppLnk* app) 383void LauncherIconView::addCatsAndMimes(AppLnk* app)
367 { 384{
368 // QStringList c = app->categories(); 385 // QStringList c = app->categories();
369 // for (QStringList::ConstIterator cit=c.begin(); cit!=c.end(); ++cit) { 386 // for (QStringList::ConstIterator cit=c.begin(); cit!=c.end(); ++cit) {
370 // cats.replace(*cit,(void*)1); 387 // cats.replace(*cit,(void*)1);
371 // } 388 // }
372 QString maj=app->type(); 389 QString maj=app->type();
373 int sl=maj.find('/'); 390 int sl=maj.find('/');
374 if (sl>=0) { 391 if (sl>=0) {
375 QString k; 392 QString k;
376 k = maj.left(12) == "application/" ? maj : maj.left(sl); 393 k = maj.left(12) == "application/" ? maj : maj.left(sl);
377 mimes.replace(k,(void*)1); 394 mimes.replace(k,(void*)1);
378 } 395 }
379} 396}
380 397
381void LauncherIconView::setBusy(bool on) 398void LauncherIconView::setBusy(bool on)
382{ 399{
383#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY 400#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY
384 if ( busyPix.isNull() ) { 401 if ( busyPix.isNull() ) {
385 int size = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); 402 int size = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize();
386 busyPix.convertFromImage( Resource::loadImage( "busy" ).smoothScale( size * 16, size ) ); 403 busyPix.convertFromImage( Resource::loadImage( "busy" ).smoothScale( size * 16, size ) );
387 } 404 }
388#endif 405#endif
389 406
390 if ( on ) { 407 if ( on ) {
391 busyTimer = startTimer( 100 ); 408 busyTimer = startTimer( 100 );
392 } else { 409 } else {
393 if ( busyTimer ) { 410 if ( busyTimer ) {
394 killTimer( busyTimer ); 411 killTimer( busyTimer );
395 busyTimer = 0; 412 busyTimer = 0;
396 } 413 }
397 } 414 }
398 415
399 LauncherItem *c = on ? (LauncherItem*)currentItem() : 0; 416 LauncherItem *c = on ? (LauncherItem*)currentItem() : 0;
400 417
401 if ( bsy != c ) { 418 if ( bsy != c ) {
402 LauncherItem *oldBusy = bsy; 419 LauncherItem *oldBusy = bsy;
403 bsy = c; 420 bsy = c;
404 if ( oldBusy ) { 421 if ( oldBusy ) {
405 oldBusy->resetIcon(); 422 oldBusy->resetIcon();
406 } 423 }
407 if ( bsy ) { 424 if ( bsy ) {
408 bsy->setBusyIndicatorType( busyType ) ; 425 bsy->setBusyIndicatorType( busyType ) ;
409 bsy->animateIcon(); 426 bsy->animateIcon();
410 } 427 }
411 } 428 }
412} 429}
413 430
414void LauncherIconView::clear() 431void LauncherIconView::clear()
415{ 432{
416 mimes.clear(); 433 mimes.clear();
417 cats.clear(); 434 cats.clear();
418 QIconView::clear(); 435 QIconView::clear();
419 hidden.clear(); 436 hidden.clear();
420} 437}
421 438
422QStringList LauncherIconView::mimeTypes() const 439QStringList LauncherIconView::mimeTypes() const
423{ 440{
424 QStringList r; 441 QStringList r;
425 QDictIterator<void> it(mimes); 442 QDictIterator<void> it(mimes);
426 while (it.current()) { 443 while (it.current()) {
427 r.append(it.currentKey()); 444 r.append(it.currentKey());
428 ++it; 445 ++it;
429 } 446 }
430 r.sort(); 447 r.sort();
431 return r; 448 return r;
432} 449}
433 450
434LauncherItem*LauncherIconView::findDocItem(const QString&fname) 451LauncherItem*LauncherIconView::findDocItem(const QString&fname)
435{ 452{
436 LauncherItem* item = (LauncherItem*)firstItem(); 453 LauncherItem* item = (LauncherItem*)firstItem();
437 while (item) { 454 while (item) {
438 if (item->appLnk()->file()==fname) { 455 if (item->appLnk()->file()==fname) {
439 break; 456 break;
440 } 457 }
441 item = (LauncherItem*)item->nextItem(); 458 item = (LauncherItem*)item->nextItem();
442 } 459 }
443 return item; 460 return item;
444} 461}
445 462
446void LauncherIconView::setEyePixmap(const QPixmap&aPixmap,const QString&aFile,int width) 463void LauncherIconView::setEyePixmap(const QPixmap&aPixmap,const QString&aFile,int width)
447{ 464{
448 int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); 465 int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize();
449 if (s!=width) return; 466 if (s!=width) return;
450 LauncherItem*item = findDocItem(aFile); 467 LauncherItem*item = findDocItem(aFile);
451 if (!item||!item->isEyeImage()) return; 468 if (!item||!item->isEyeImage()) return;
452 (*sm_EyeCache)[aFile]=aPixmap; 469 (*sm_EyeCache)[aFile]=aPixmap;
453 item->setEyePixmap(aPixmap); 470 item->setEyePixmap(aPixmap);
454} 471}
455 472
456void LauncherIconView::checkCallback() 473void LauncherIconView::checkCallback()
457{ 474{
458 if (!m_EyeCallBack) { 475 if (!m_EyeCallBack) {
459 m_EyeCallBack = new LauncherThumbReceiver(); 476 m_EyeCallBack = new LauncherThumbReceiver();
460 connect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)), 477 connect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)),
461 this,SLOT(setEyePixmap(const QPixmap&,const QString&,int))); 478 this,SLOT(setEyePixmap(const QPixmap&,const QString&,int)));
462 } 479 }
463 m_eyeTimer.changeInterval(600000); 480 m_eyeTimer.changeInterval(600000);
464} 481}
465 482
466void LauncherIconView::addCheckItem(AppLnk* app) 483void LauncherIconView::addCheckItem(AppLnk* app)
467{ 484{
468 LauncherItem*item = new LauncherItem( this, app, bigIcns ); 485 LauncherItem*item = new LauncherItem( this, app, bigIcns );
469 if (item->isEyeImage()) { 486 if (item->isEyeImage()) {
470 checkCallback(); 487 checkCallback();
471 } 488 }
472} 489}
473 490
474void LauncherIconView::requestEyePix(const LauncherItem*item) 491void LauncherIconView::requestEyePix(const LauncherItem*item)
475{ 492{
476 if (!item) return; 493 if (!item) return;
477 if (item->isEyeImage()) { 494 if (item->isEyeImage()) {
478 checkCallback(); 495 checkCallback();
479 int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); 496 int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize();
480 m_EyeCallBack->requestThumb(item->appLnk()->file(),s,s); 497 m_EyeCallBack->requestThumb(item->appLnk()->file(),s,s);
481 } 498 }
482} 499}
483 500
484void LauncherIconView::stopEyeTimer() 501void LauncherIconView::stopEyeTimer()
485{ 502{
486 if (m_EyeCallBack) { 503 if (m_EyeCallBack) {
487 disconnect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)), 504 disconnect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)),
488 this,SLOT(setEyePixmap(const QPixmap&,const QString&,int))); 505 this,SLOT(setEyePixmap(const QPixmap&,const QString&,int)));
489 delete m_EyeCallBack; 506 delete m_EyeCallBack;
490 m_EyeCallBack=0; 507 m_EyeCallBack=0;
491 } 508 }
492 m_eyeTimer.stop(); 509 m_eyeTimer.stop();
493} 510}
494 511
495void LauncherIconView::updateCategoriesAndMimeTypes() 512void LauncherIconView::updateCategoriesAndMimeTypes()
496{ 513{
497 mimes.clear(); 514 mimes.clear();
498 cats.clear(); 515 cats.clear();
499 LauncherItem* item = (LauncherItem*)firstItem(); 516 LauncherItem* item = (LauncherItem*)firstItem();
500 while (item) { 517 while (item) {
501 addCatsAndMimes(item->appLnk()); 518 addCatsAndMimes(item->appLnk());
502 item = (LauncherItem*)item->nextItem(); 519 item = (LauncherItem*)item->nextItem();
503 } 520 }
504 QListIterator<AppLnk> it(hidden); 521 QListIterator<AppLnk> it(hidden);
505 AppLnk* l; 522 AppLnk* l;
506 while ((l=it.current())) { 523 while ((l=it.current())) {
507 addCatsAndMimes(l); 524 addCatsAndMimes(l);
508 ++it; 525 ++it;
509 } 526 }
510} 527}
511 528
512void LauncherIconView::hideOrShowItems(bool resort) 529void LauncherIconView::hideOrShowItems(bool resort)
513{ 530{
514 viewport()->setUpdatesEnabled( FALSE ); 531 viewport()->setUpdatesEnabled( FALSE );
515 hidden.setAutoDelete(FALSE); 532 hidden.setAutoDelete(FALSE);
516 QList<AppLnk> links=hidden; 533 QList<AppLnk> links=hidden;
517 hidden.clear(); 534 hidden.clear();
518 hidden.setAutoDelete(TRUE); 535 hidden.setAutoDelete(TRUE);
519 LauncherItem* item = (LauncherItem*)firstItem(); 536 LauncherItem* item = (LauncherItem*)firstItem();
520 while (item) { 537 while (item) {
521 links.append(item->takeAppLnk()); 538 links.append(item->takeAppLnk());
522 item = (LauncherItem*)item->nextItem(); 539 item = (LauncherItem*)item->nextItem();
523 } 540 }
524 clear(); 541 clear();
525 QListIterator<AppLnk> it(links); 542 QListIterator<AppLnk> it(links);
526 AppLnk* l; 543 AppLnk* l;
527 while ((l=it.current())) { 544 while ((l=it.current())) {
528 addItem(l,FALSE); 545 addItem(l,FALSE);
529 ++it; 546 ++it;
530 } 547 }
531 if ( resort && !autoArrange() ) 548 if ( resort && !autoArrange() )
532 sort(); 549 sort();
533 viewport()->setUpdatesEnabled( TRUE ); 550 viewport()->setUpdatesEnabled( TRUE );
534} 551}
535 552
536bool LauncherIconView::removeLink(const QString& linkfile,bool removeCache) 553bool LauncherIconView::removeLink(const QString& linkfile,bool removeCache)
537{ 554{
538 LauncherItem* item = (LauncherItem*)firstItem(); 555 LauncherItem* item = (LauncherItem*)firstItem();
539 AppLnk* l; 556 AppLnk* l;
540 bool did = FALSE; 557 bool did = FALSE;
541 DocLnk dl(linkfile); 558 DocLnk dl(linkfile);
542 while (item) { 559 while (item) {
543 l = item->appLnk(); 560 l = item->appLnk();
544 LauncherItem *nextItem = (LauncherItem *)item->nextItem(); 561 LauncherItem *nextItem = (LauncherItem *)item->nextItem();
545 if ( l->linkFileKnown() && l->linkFile() == linkfile || l->fileKnown() && 562 if ( l->linkFileKnown() && l->linkFile() == linkfile || l->fileKnown() &&
546 ( l->file() == linkfile || dl.isValid() && dl.file() == l->file() ) ) { 563 ( l->file() == linkfile || dl.isValid() && dl.file() == l->file() ) ) {
547 if (removeCache) sm_EyeCache->remove(l->file()); 564 if (removeCache) sm_EyeCache->remove(l->file());
548 delete item; 565 delete item;
549 did = TRUE; 566 did = TRUE;
550 } 567 }
551 item = nextItem; 568 item = nextItem;
552 } 569 }
553 QListIterator<AppLnk> it(hidden); 570 QListIterator<AppLnk> it(hidden);
554 while ((l=it.current())) { 571 while ((l=it.current())) {
555 ++it; 572 ++it;
556 if ( l->linkFileKnown() && l->linkFile() == linkfile 573 if ( l->linkFileKnown() && l->linkFile() == linkfile
557 || l->file() == linkfile 574 || l->file() == linkfile
558 || dl.isValid() && dl.file() == l->file() ) { 575 || dl.isValid() && dl.file() == l->file() ) {
559 hidden.removeRef(l); 576 hidden.removeRef(l);
560 did = TRUE; 577 did = TRUE;
561 } 578 }
562 } 579 }
563 return did; 580 return did;
564} 581}
565 582
566void LauncherIconView::addItem(AppLnk* app, bool resort) 583void LauncherIconView::addItem(AppLnk* app, bool resort)
567{ 584{
568 addCatsAndMimes(app); 585 addCatsAndMimes(app);
569 if ( (tf.isEmpty() || tf.match(app->type()) >= 0) 586 if ( (tf.isEmpty() || tf.match(app->type()) >= 0)
570 && (cf == 0 || app->categories().contains(cf) 587 && (cf == 0 || app->categories().contains(cf)
571 || cf == -1 && app->categories().count() == 0 ) ) { 588 || cf == -1 && app->categories().count() == 0 ) ) {
572 addCheckItem(app); 589 addCheckItem(app);
573 } else { 590 } else {
574 hidden.append(app); 591 hidden.append(app);
575 } 592 }
576 if ( resort ){ 593 if ( resort ){
577 sort(); 594 sort();
578 } 595 }
579} 596}
580 597
581void LauncherIconView::changeItem(const AppLnk&old,AppLnk*nlink) 598void LauncherIconView::changeItem(const AppLnk&old,AppLnk*nlink)
582{ 599{
583 QString oldfile = old.file(); 600 QString oldfile = old.file();
584 QString newfile = nlink->file(); 601 QString newfile = nlink->file();
585 602
586 if (newfile != oldfile) { 603 if (newfile != oldfile) {
587 QMap<QString,QPixmap>::Iterator it = sm_EyeCache->find(oldfile); 604 QMap<QString,QPixmap>::Iterator it = sm_EyeCache->find(oldfile);
588 if (it != sm_EyeCache->end()) { 605 if (it != sm_EyeCache->end()) {
589 (*sm_EyeCache)[newfile]=(*it); 606 (*sm_EyeCache)[newfile]=(*it);
590 } 607 }
591 removeLink(old.linkFile()); 608 removeLink(old.linkFile());
592 } else { 609 } else {
593 removeLink(old.linkFile(),false); 610 removeLink(old.linkFile(),false);
594 } 611 }
595 addItem(nlink,false); 612 addItem(nlink,false);
596} 613}
597 614
598void LauncherIconView::timerEvent( QTimerEvent *te ) 615void LauncherIconView::timerEvent( QTimerEvent *te )
599{ 616{
600 if ( te->timerId() == busyTimer ) { 617 if ( te->timerId() == busyTimer ) {
601 if ( bsy ) 618 if ( bsy )
602 bsy->animateIcon(); 619 bsy->animateIcon();
603 } else { 620 } else {
604 QIconView::timerEvent( te ); 621 QIconView::timerEvent( te );
605 } 622 }
606} 623}
607 624
608void LauncherIconView::setBigIcons( bool bi ) 625void LauncherIconView::setBigIcons( bool bi )
609{ 626{
610 sm_EyeCache->clear(); 627 sm_EyeCache->clear();
611 bigIcns = bi; 628 bigIcns = bi;
612#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY 629#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY
613 busyPix.resize(0,0); 630 busyPix.resize(0,0);
614#endif 631#endif
615} 632}
616 633
617QIconViewItem* LauncherIconView::busyItem() const 634QIconViewItem* LauncherIconView::busyItem() const
618{ 635{
619 return bsy; 636 return bsy;
620} 637}
621 638
622void LauncherIconView::setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } 639void LauncherIconView::setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; }
623 640
diff --git a/core/launcher/launcherview.h b/core/launcher/launcherview.h
index e2869eb..97b1dea 100644
--- a/core/launcher/launcherview.h
+++ b/core/launcher/launcherview.h
@@ -1,255 +1,254 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef LAUNCHERVIEW_H 20#ifndef LAUNCHERVIEW_H
21#define LAUNCHERVIEW_H 21#define LAUNCHERVIEW_H
22 22
23#include <qtopia/storage.h> 23#include <qtopia/storage.h>
24#include <qtopia/applnk.h> 24#include <qtopia/applnk.h>
25 25
26#include <qvbox.h> 26#include <qvbox.h>
27#include <qiconview.h> 27#include <qiconview.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qmap.h> 29#include <qmap.h>
30 30
31class CategorySelect; 31class CategorySelect;
32class LauncherIconView; 32class LauncherIconView;
33class LauncherItem; 33class LauncherItem;
34class QIconViewItem; 34class QIconViewItem;
35class QLabel; 35class QLabel;
36class QWidgetStack; 36class QWidgetStack;
37class MenuButton; 37class MenuButton;
38class QComboBox; 38class QComboBox;
39 39
40
41
42enum BusyIndicatorType { 40enum BusyIndicatorType {
43 BIT_Normal = 0, 41 BIT_Normal = 0,
44 BIT_Animated 42 BIT_Animated
45}; 43};
46 44
47class LauncherView : public QVBox 45class LauncherView : public QVBox
48{ 46{
49 Q_OBJECT 47 Q_OBJECT
50 48
51public: 49public:
52 LauncherView( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); 50 LauncherView( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
53 ~LauncherView(); 51 ~LauncherView();
54 52
55 void hideIcons(); 53 void hideIcons();
56 54
57 bool removeLink(const QString& linkfile); 55 bool removeLink(const QString& linkfile);
58 void addItem(AppLnk* app, bool resort=TRUE); 56 void addItem(AppLnk* app, bool resort=TRUE);
59 void changeItem(const AppLnk&old,AppLnk*nlink); 57 void changeItem(const AppLnk&old,AppLnk*nlink);
60 58
61 void removeAllItems(); 59 void removeAllItems();
62 void setSortEnabled(bool); 60 void setSortEnabled(bool);
63 void setUpdatesEnabled(bool); 61 void setUpdatesEnabled(bool);
64 void sort(); 62 void sort();
65 63
66 void setToolsEnabled(bool); 64 void setToolsEnabled(bool);
67 void updateTools(); 65 void updateTools();
68 66
69 void setBusy(bool); 67 void setBusy(bool);
70 void setBusyIndicatorType( const QString& ); 68 void setBusyIndicatorType( const QString& );
71 69
72 enum ViewMode { Icon, List }; 70 enum ViewMode { Icon, List };
73 void setViewMode( ViewMode m ); 71 void setViewMode( ViewMode m );
74 ViewMode viewMode() const { return vmode; } 72 ViewMode viewMode() const { return vmode; }
75 73
76 enum BackgroundType { Ruled, SolidColor, Image }; 74 enum BackgroundType { Ruled, SolidColor, Image };
77 void setBackgroundType( BackgroundType t, const QString & ); 75 void setBackgroundType( BackgroundType t, const QString & );
78 BackgroundType backgroundType() const { return bgType; } 76 BackgroundType backgroundType() const { return bgType; }
79 77
80 void setTextColor( const QColor & ); 78 void setTextColor( const QColor & );
81 QColor textColor() const { return textCol; } 79 QColor textColor() const { return textCol; }
82 80
83 void setViewFont( const QFont & ); 81 void setViewFont( const QFont & );
84 void clearViewFont(); 82 void clearViewFont();
85 83
86 void setColNumber( int ); 84 void setColNumber( int );
87 85
88 void relayout(void); 86 void relayout(void);
89 87
90signals: 88signals:
91 void clicked( const AppLnk * ); 89 void clicked( const AppLnk * );
92 void rightPressed( AppLnk * ); 90 void rightPressed( AppLnk * );
93 91
94protected slots: 92protected slots:
95 void selectionChanged(); 93 void selectionChanged();
96 void returnPressed( QIconViewItem *item ); 94 void returnPressed( QIconViewItem *item );
97 void itemClicked( int, QIconViewItem * ); 95 void itemClicked( int, QIconViewItem * );
98 void itemPressed( int, QIconViewItem * ); 96 void itemPressed( int, QIconViewItem * );
99 void sortBy(int); 97 void sortBy(int);
100 void showType(int); 98 void showType(int);
101 void showCategory( int ); 99 void showCategory( int );
102 void resizeEvent(QResizeEvent *); 100 void resizeEvent(QResizeEvent *);
103 void flushBgCache(); 101 void flushBgCache();
104 102
105protected: 103protected:
106 void paletteChange( const QPalette & ); 104 void paletteChange( const QPalette & );
107 105
108 void fontChanged(const QFont &); 106 void fontChanged(const QFont &);
109 107
110private: 108private:
111 static bool bsy; 109 static bool bsy;
112 QWidget* tools; 110 QWidget* tools;
113 LauncherIconView* icons; 111 LauncherIconView* icons;
114 QComboBox *typemb; 112 QComboBox *typemb;
115 QStringList typelist; 113 QStringList typelist;
116 CategorySelect *catmb; 114 CategorySelect *catmb;
117 ViewMode vmode; 115 ViewMode vmode;
118 BackgroundType bgType; 116 BackgroundType bgType;
119 QString bgName; 117 QString bgName;
120 QColor textCol; 118 QColor textCol;
121 119
122 QImage loadBackgroundImage(QString &fname); 120 QImage loadBackgroundImage(QString &fname);
123 121
124}; 122};
125 123
126/* from opie-eye */ 124/* from opie-eye */
127struct PixmapInfo { 125struct PixmapInfo {
128 PixmapInfo() : width( -1 ), height( -1 ) {} 126 PixmapInfo() : width( -1 ), height( -1 ) {}
129 bool operator==( const PixmapInfo& r ) { 127 bool operator==( const PixmapInfo& r ) {
130 if ( width != r.width ) return false; 128 if ( width != r.width ) return false;
131 if ( height != r.height ) return false; 129 if ( height != r.height ) return false;
132 if ( file != r.file ) return false; 130 if ( file != r.file ) return false;
133 return true; 131 return true;
134 } 132 }
135 int width, height; 133 int width, height;
136 QString file; 134 QString file;
137 QPixmap pixmap; 135 QPixmap pixmap;
138}; 136};
139 137
140class LauncherThumbReceiver:public QObject 138class LauncherThumbReceiver:public QObject
141{ 139{
142 Q_OBJECT 140 Q_OBJECT
143 typedef QValueList<PixmapInfo> PixmapInfos; 141 typedef QValueList<PixmapInfo> PixmapInfos;
144public: 142public:
145 LauncherThumbReceiver(); 143 LauncherThumbReceiver();
146 ~LauncherThumbReceiver(); 144 ~LauncherThumbReceiver();
147 void requestThumb(const QString&file,int width,int height); 145 void requestThumb(const QString&file,int width,int height);
148 146
149public slots: 147public slots:
150 void recieve( const QCString&, const QByteArray& ); 148 void recieve( const QCString&, const QByteArray& );
151protected slots: 149protected slots:
152 virtual void sendRequest(); 150 virtual void sendRequest();
153 151
154signals: 152signals:
155 void sig_Thumbnail(const QPixmap&,const QString&,int); 153 void sig_Thumbnail(const QPixmap&,const QString&,int);
156 154
157protected: 155protected:
158 PixmapInfos m_inThumbNail; 156 PixmapInfos m_inThumbNail;
159}; 157};
160 158
161class LauncherIconView : public QIconView { 159class LauncherIconView : public QIconView {
162 Q_OBJECT 160 Q_OBJECT
163public: 161public:
164 LauncherIconView( QWidget* parent, const char* name=0 ); 162 LauncherIconView( QWidget* parent, const char* name=0 );
165 ~LauncherIconView(); 163 ~LauncherIconView();
166 QIconViewItem* busyItem() const; 164 QIconViewItem* busyItem() const;
167 165
168#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY 166#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY
169 QPixmap busyPixmap() const { return busyPix; } 167 QPixmap busyPixmap() const { return busyPix; }
170#endif 168#endif
171 void setBigIcons( bool bi ); 169 void setBigIcons( bool bi );
172 void updateCategoriesAndMimeTypes(); 170 void updateCategoriesAndMimeTypes();
173 void setBusyIndicatorType ( BusyIndicatorType t ); 171 void setBusyIndicatorType ( BusyIndicatorType t );
174 void doAutoScroll() 172 void doAutoScroll()
175 { 173 {
176 // We don't want rubberbanding (yet) 174 // We don't want rubberbanding (yet)
177 } 175 }
178 176
179 void setBusy(bool on); 177 void setBusy(bool on);
180 bool inKeyEvent() const { return ike; } 178 bool inKeyEvent() const { return ike; }
181 179
182 void addItem(AppLnk* app, bool resort=TRUE); 180 void addItem(AppLnk* app, bool resort=TRUE);
183 bool removeLink(const QString& linkfile,bool removeCache = true); 181 bool removeLink(const QString& linkfile,bool removeCache = true);
184 void changeItem(const AppLnk&old,AppLnk*nlink); 182 void changeItem(const AppLnk&old,AppLnk*nlink);
185 183
186 QStringList mimeTypes() const; 184 QStringList mimeTypes() const;
187 QStringList categories() const; 185 QStringList categories() const;
188 void clear(); 186 void clear();
189 void addCatsAndMimes(AppLnk* app); 187 void addCatsAndMimes(AppLnk* app);
190 188
191 void setBackgroundOrigin( QWidget::BackgroundOrigin ) {} 189 void setBackgroundOrigin( QWidget::BackgroundOrigin ) {}
192 190
193 void setBackgroundPixmap( const QPixmap &pm ) { 191 void setBackgroundPixmap( const QPixmap &pm ) {
194 bgPixmap = pm; 192 bgPixmap = pm;
195 } 193 }
196 194
197 void setBackgroundColor( const QColor &c ) { 195 void setBackgroundColor( const QColor &c ) {
198 bgColor = c; 196 bgColor = c;
199 } 197 }
200 198
201 void setColNumber( int ); 199 void setColNumber( int );
202 200
203 void drawBackground( QPainter *p, const QRect &r ); 201 void drawBackground( QPainter *p, const QRect &r );
204 void setItemTextPos( ItemTextPos pos ); 202 void setItemTextPos( ItemTextPos pos );
205 void hideOrShowItems(bool resort); 203 void hideOrShowItems(bool resort);
206 204
207 void setTypeFilter(const QString& typefilter, bool resort); 205 void setTypeFilter(const QString& typefilter, bool resort);
208 void setCategoryFilter( int catfilter, bool resort ); 206 void setCategoryFilter( int catfilter, bool resort );
209 207
210 enum SortMethod { Name, Date, Type }; 208 enum SortMethod { Name, Date, Type };
211 209
212 void setSortMethod( SortMethod m ); 210 void setSortMethod( SortMethod m );
213 int compare(const AppLnk* a, const AppLnk* b); 211 int compare(const AppLnk* a, const AppLnk* b);
214 void requestEyePix(const LauncherItem*which); 212 void requestEyePix(const LauncherItem*which);
215 213
216 static QMap<QString,QPixmap>* sm_EyeCache; 214 static QMap<QString,QPixmap>* sm_EyeCache;
217 215
218protected: 216protected:
219 virtual void timerEvent( QTimerEvent *te ); 217 virtual void timerEvent( QTimerEvent *te );
220 void styleChange( QStyle &old ); 218 void styleChange( QStyle &old );
221 void calculateGrid( ItemTextPos pos ); 219 void calculateGrid( ItemTextPos pos );
222 void focusInEvent( QFocusEvent * ) {} 220 void focusInEvent( QFocusEvent * ) {}
223 void focusOutEvent( QFocusEvent * ) {} 221 void focusOutEvent( QFocusEvent * ) {}
224 LauncherItem*findDocItem(const QString&); 222 LauncherItem*findDocItem(const QString&);
225 void addCheckItem(AppLnk* app); 223 void addCheckItem(AppLnk* app);
226 void checkCallback(); 224 void checkCallback();
227 virtual void keyPressEvent(QKeyEvent* e); 225 virtual void keyPressEvent(QKeyEvent* e);
228 226
229protected slots: 227protected slots:
230 void setEyePixmap(const QPixmap&,const QString&,int width); 228 void setEyePixmap(const QPixmap&,const QString&,int width);
231 void stopEyeTimer(); 229 void stopEyeTimer();
232 230
233private: 231private:
234 QList<AppLnk> hidden; 232 QList<AppLnk> hidden;
235 QDict<void> mimes; 233 QDict<void> mimes;
236 QDict<void> cats; 234 QDict<void> cats;
237 SortMethod sortmeth; 235 SortMethod sortmeth;
238 QRegExp tf; 236 QRegExp tf;
239 int cf; 237 int cf;
240 LauncherItem* bsy; 238 LauncherItem* bsy;
241 int busyTimer; 239 int busyTimer;
242 bool ike; 240 bool ike;
243 bool bigIcns; 241 bool bigIcns;
244 QPixmap bgPixmap; 242 QPixmap bgPixmap;
245 QColor bgColor; 243 QColor bgColor;
246 LauncherThumbReceiver*m_EyeCallBack; 244 LauncherThumbReceiver*m_EyeCallBack;
247#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY 245#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY
248 QPixmap busyPix; 246 QPixmap busyPix;
249#endif 247#endif
250 BusyIndicatorType busyType; 248 BusyIndicatorType busyType;
251 QTimer m_eyeTimer; 249 QTimer m_eyeTimer;
252 int numColumns; 250 int numColumns;
251 bool staticBackground;
253}; 252};
254 253
255#endif // LAUNCHERVIEW_H 254#endif // LAUNCHERVIEW_H