author | alwin <alwin> | 2004-11-10 21:18:37 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-11-10 21:18:37 (UTC) |
commit | 660b61a7f8b9fb885226507d7f6716ab2dcedbb8 (patch) (side-by-side diff) | |
tree | 5ebbfc6ca71b1a2205d5f2516b919c9c2dd4fced /core/launcher/launcherview.cpp | |
parent | d2f3b6f525be4d652fbac7c87ab0ad40e21af184 (diff) | |
download | opie-660b61a7f8b9fb885226507d7f6716ab2dcedbb8.zip opie-660b61a7f8b9fb885226507d7f6716ab2dcedbb8.tar.gz opie-660b61a7f8b9fb885226507d7f6716ab2dcedbb8.tar.bz2 |
implemented icon cache so it will not scan every time when changing the
doctab categorie
ToDo: implement a cache flush
Diffstat (limited to 'core/launcher/launcherview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/launcher/launcherview.cpp | 109 |
1 files changed, 79 insertions, 30 deletions
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp index ff26133..c9efacb 100644 --- a/core/launcher/launcherview.cpp +++ b/core/launcher/launcherview.cpp @@ -45,4 +45,5 @@ using namespace Opie::Core; #define BOUNCE_BUSY_ICON +typedef QMap<QString,QPixmap>::Iterator pixiter; class BgPixmap @@ -106,5 +107,4 @@ private: BusyIndicatorType busyType; int psize; - QPixmap m_iPixmap; bool m_EyeImage; iconstate_t m_EyeImageSet; @@ -118,5 +118,4 @@ LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon ) app(applnk), // Takes ownership psize( (bigIcon ? applnk->bigPixmap().width() :applnk->pixmap().width() ) ), - m_iPixmap(), m_EyeImage(false), m_EyeImageSet(BASE_ICON) @@ -124,5 +123,9 @@ LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon ) if (applnk->type().lower().startsWith("image/") && applnk->exec().contains("opie-eye",false)) { m_EyeImage = true; - m_iPixmap = (bigIcon ? applnk->bigPixmap():applnk->pixmap()); + QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(applnk->file()); + if (it != LauncherIconView::sm_EyeCache->end()) { + m_EyeImageSet = EYE_ICON; + setPixmap(*it); + } } } @@ -214,5 +217,11 @@ void LauncherItem::animateIcon() // Highlight the icon if ( iteration == 0 ) { - QPixmap src = (isEyeImage()?m_iPixmap:(isBigIcon ? app->bigPixmap() : app->pixmap())); + QPixmap src; + pixiter it; + if (isEyeImage() && (it=LauncherIconView::sm_EyeCache->find(appLnk()->file()))!=LauncherIconView::sm_EyeCache->end()) { + src = (*it); + } else { + src = ((isBigIcon ? app->bigPixmap() : app->pixmap())); + } QImage img = src.convertToImage(); QRgb *rgb; @@ -250,5 +259,12 @@ void LauncherItem::resetIcon() { iteration = 0; - setPixmap((isEyeImage()?m_iPixmap:(isBigIcon ? app->bigPixmap() : app->pixmap()))); + if (isEyeImage()) { + QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(appLnk()->file()); + if (it != LauncherIconView::sm_EyeCache->end()) { + setPixmap(*it); + return; + } + } + setPixmap(isBigIcon ? app->bigPixmap() : app->pixmap()); } @@ -256,5 +272,4 @@ void LauncherItem::setEyePixmap(const QPixmap&aIcon) { if (!isEyeImage()) return; - m_iPixmap = aIcon; setPixmap(aIcon); m_EyeImageSet = EYE_ICON; @@ -264,8 +279,12 @@ void LauncherItem::setEyePixmap(const QPixmap&aIcon) // Implemantation of LauncherIconview start //=========================================================================== + +QMap<QString,QPixmap>* LauncherIconView::sm_EyeCache=0; + LauncherIconView::LauncherIconView( QWidget* parent, const char* name ) : QIconView(parent,name),tf(""),cf(0),bsy(0),busyTimer(0),bigIcns(TRUE),bgColor(white) { m_EyeCallBack = 0; + if (!sm_EyeCache) sm_EyeCache = new QMap<QString,QPixmap>(); sortmeth = Name; hidden.setAutoDelete(TRUE); @@ -433,4 +452,5 @@ void LauncherIconView::setEyePixmap(const QPixmap&aPixmap,const QString&aFile,in LauncherItem*item = findDocItem(aFile); if (!item||!item->isEyeImage()) return; + (*sm_EyeCache)[aFile]=aPixmap; item->setEyePixmap(aPixmap); } @@ -442,6 +462,6 @@ void LauncherIconView::checkCallback() connect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)), this,SLOT(setEyePixmap(const QPixmap&,const QString&,int))); - m_eyeTimer.changeInterval(600000); } + m_eyeTimer.changeInterval(600000); } @@ -467,4 +487,6 @@ void LauncherIconView::stopEyeTimer() { if (m_EyeCallBack) { + disconnect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)), + this,SLOT(setEyePixmap(const QPixmap&,const QString&,int))); delete m_EyeCallBack; m_EyeCallBack=0; @@ -473,19 +495,4 @@ void LauncherIconView::stopEyeTimer() } -void LauncherIconView::addItem(AppLnk* app, bool resort) -{ - addCatsAndMimes(app); - if ( (tf.isEmpty() || tf.match(app->type()) >= 0) - && (cf == 0 || app->categories().contains(cf) - || cf == -1 && app->categories().count() == 0 ) ) { - addCheckItem(app); - } else { - hidden.append(app); - } - if ( resort ){ - sort(); - } -} - void LauncherIconView::updateCategoriesAndMimeTypes() { @@ -529,5 +536,5 @@ void LauncherIconView::hideOrShowItems(bool resort) } -bool LauncherIconView::removeLink(const QString& linkfile) +bool LauncherIconView::removeLink(const QString& linkfile,bool removeCache) { LauncherItem* item = (LauncherItem*)firstItem(); @@ -540,4 +547,5 @@ bool LauncherIconView::removeLink(const QString& linkfile) if ( l->linkFileKnown() && l->linkFile() == linkfile || l->fileKnown() && ( l->file() == linkfile || dl.isValid() && dl.file() == l->file() ) ) { + if (removeCache) sm_EyeCache->remove(l->file()); delete item; did = TRUE; @@ -558,4 +566,36 @@ bool LauncherIconView::removeLink(const QString& linkfile) } +void LauncherIconView::addItem(AppLnk* app, bool resort) +{ + addCatsAndMimes(app); + if ( (tf.isEmpty() || tf.match(app->type()) >= 0) + && (cf == 0 || app->categories().contains(cf) + || cf == -1 && app->categories().count() == 0 ) ) { + addCheckItem(app); + } else { + hidden.append(app); + } + if ( resort ){ + sort(); + } +} + +void LauncherIconView::changeItem(const AppLnk&old,AppLnk*nlink) +{ + QString oldfile = old.file(); + QString newfile = nlink->file(); + + if (newfile != oldfile) { + QMap<QString,QPixmap>::Iterator it = sm_EyeCache->find(oldfile); + if (it != sm_EyeCache->end()) { + (*sm_EyeCache)[newfile]=(*it); + } + removeLink(old.linkFile()); + } else { + removeLink(old.linkFile(),false); + } + addItem(nlink,false); +} + void LauncherIconView::timerEvent( QTimerEvent *te ) { @@ -570,4 +610,5 @@ void LauncherIconView::timerEvent( QTimerEvent *te ) void LauncherIconView::setBigIcons( bool bi ) { + sm_EyeCache->clear(); bigIcns = bi; #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY @@ -757,6 +798,9 @@ void LauncherView::updateTools() int pcat = catmb ? catmb->currentCategory() : -2; - if ( !catmb ) + if ( !catmb ) { catmb = new CategorySelect(tools); + } else if (pcat!=-2) { + + } Categories cats( 0 ); cats.load( categoryFileName() ); @@ -1021,5 +1065,5 @@ void LauncherView::itemClicked( int btn, QIconViewItem *item ) emit clicked( appLnk ); } - item->setSelected(FALSE); + item->setSelected(FALSE); } } @@ -1048,4 +1092,14 @@ bool LauncherView::removeLink(const QString& linkfile) } +void LauncherView::addItem(AppLnk* app, bool resort) +{ + icons->addItem(app,resort); +} + +void LauncherView::changeItem(const AppLnk&old,AppLnk*nlink) +{ + icons->changeItem(old,nlink); +} + void LauncherView::setSortEnabled( bool v ) { @@ -1065,9 +1119,4 @@ void LauncherView::sort() } -void LauncherView::addItem(AppLnk* app, bool resort) -{ - icons->addItem(app,resort); -} - void LauncherView::paletteChange( const QPalette &p ) { |