-rw-r--r-- | core/launcher/launcherview.cpp | 83 | ||||
-rw-r--r-- | core/launcher/launcherview.h | 5 |
2 files changed, 60 insertions, 28 deletions
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp index 673e53c..506c11e 100644 --- a/core/launcher/launcherview.cpp +++ b/core/launcher/launcherview.cpp @@ -68,83 +68,87 @@ static void cleanup_cache() delete bgCache; bgCache = 0; } class LauncherItem : public QIconViewItem { public: + enum iconstate_t { + BASE_ICON, + WAITING_ICON, + EYE_ICON + }; + LauncherItem( QIconView *parent, AppLnk* applnk, bool bigIcon=TRUE ); ~LauncherItem(); AppLnk *appLnk() const { return app; } AppLnk *takeAppLnk() { AppLnk* r=app; app=0; return r; } void animateIcon(); void resetIcon(); bool isEyeImage()const{return m_EyeImage;} virtual int compare ( QIconViewItem * i ) const; void paintItem( QPainter *p, const QColorGroup &cg ); void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } void setEyePixmap(const QPixmap&aIcon); + virtual QPixmap*pixmap()const; + protected: bool isBigIcon; int iteration; AppLnk* app; private: void paintAnimatedIcon( QPainter *p ); BusyIndicatorType busyType; int psize; QPixmap m_iPixmap; bool m_EyeImage; + iconstate_t m_EyeImageSet; }; - -bool LauncherView::bsy=FALSE; - -void LauncherView::setBusy(bool on) -{ - icons->setBusy(on); -} - -void LauncherView::setBusyIndicatorType( const QString& type ) { - if ( type. lower ( ) == "animated" ) - icons->setBusyIndicatorType( BIT_Animated ) ; - else - icons->setBusyIndicatorType( BIT_Normal ) ; -} - LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon ) : QIconViewItem( parent, applnk->name(), bigIcon ? applnk->bigPixmap() :applnk->pixmap() ), isBigIcon( bigIcon ), iteration(0), app(applnk), // Takes ownership psize( (bigIcon ? applnk->bigPixmap().width() :applnk->pixmap().width() ) ), m_iPixmap(), - m_EyeImage(false) + m_EyeImage(false), + m_EyeImageSet(BASE_ICON) { if (applnk->type().lower().startsWith("image/") && applnk->exec().contains("opie-eye",false)) { m_EyeImage = true; m_iPixmap = (bigIcon ? applnk->bigPixmap():applnk->pixmap()); } } LauncherItem::~LauncherItem() { LauncherIconView* liv = (LauncherIconView*)iconView(); if ( liv->busyItem() == this ) liv->setBusy(FALSE); delete app; } +QPixmap*LauncherItem::pixmap()const +{ + if (m_EyeImage && m_EyeImageSet == BASE_ICON) { + LauncherIconView* liv = (LauncherIconView*)iconView(); + liv->requestEyePix(this); + } + return QIconViewItem::pixmap(); +} + int LauncherItem::compare ( QIconViewItem * i ) const { LauncherIconView* view = (LauncherIconView*)iconView(); return view->compare(app,((LauncherItem *)i)->appLnk()); } void LauncherItem::paintItem( QPainter *p, const QColorGroup &cg ) { @@ -161,18 +165,16 @@ void LauncherItem::paintItem( QPainter *p, const QColorGroup &cg ) // Paint animation overlay if ( liv->busyItem() == this ) paintAnimatedIcon(p); if ( liv->currentItem() == this ) liv->setItemTextBackground( oldBrush ); } - - void LauncherItem::paintAnimatedIcon( QPainter *p ) { LauncherIconView* liv = (LauncherIconView*)iconView(); int pic = iteration % 16; int w = pixmap()->width(), h = pixmap()->height(); QPixmap dblBuf( w, h + 4 ); QPainter p2( &dblBuf ); int x1, y1; @@ -250,16 +252,17 @@ void LauncherItem::resetIcon() setPixmap((isEyeImage()?m_iPixmap:(isBigIcon ? app->bigPixmap() : app->pixmap()))); } void LauncherItem::setEyePixmap(const QPixmap&aIcon) { if (!isEyeImage()) return; m_iPixmap = aIcon; setPixmap(aIcon); + m_EyeImageSet = EYE_ICON; } //=========================================================================== // Implemantation of LauncherIconview start //=========================================================================== LauncherIconView::LauncherIconView( QWidget* parent, const char* name ) : QIconView(parent,name),tf(""),cf(0),bsy(0),busyTimer(0),bigIcns(TRUE),bgColor(white) { @@ -416,41 +419,50 @@ LauncherItem*LauncherIconView::findDocItem(const QString&fname) if (item->appLnk()->file()==fname) { break; } item = (LauncherItem*)item->nextItem(); } return item; } -void LauncherIconView::setEyePixmap(const QPixmap&aPixmap,const QString&aFile) +void LauncherIconView::setEyePixmap(const QPixmap&aPixmap,const QString&aFile,int width) { + int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); + if (s!=width) return; LauncherItem*item = findDocItem(aFile); if (!item||!item->isEyeImage()) return; - item->setEyePixmap(aPixmap); } void LauncherIconView::checkCallback() { if (m_EyeCallBack) { return; } m_EyeCallBack = new LauncherThumbReceiver(); - connect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&)), - this,SLOT(setEyePixmap(const QPixmap&,const QString&))); + connect(m_EyeCallBack,SIGNAL(sig_Thumbnail(const QPixmap&,const QString&,int)), + this,SLOT(setEyePixmap(const QPixmap&,const QString&,int))); } void LauncherIconView::addCheckItem(AppLnk* app) { LauncherItem*item = new LauncherItem( this, app, bigIcns ); if (item->isEyeImage()) { checkCallback(); + } +} + +void LauncherIconView::requestEyePix(const LauncherItem*item) +{ + if (!item) return; + if (item->isEyeImage()) { + checkCallback(); int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); - m_EyeCallBack->requestThumb(app->file(),s,s); + m_EyeCallBack->requestThumb(item->appLnk()->file(),s,s); } } void LauncherIconView::addItem(AppLnk* app, bool resort) { addCatsAndMimes(app); if ( (tf.isEmpty() || tf.match(app->type()) >= 0) && (cf == 0 || app->categories().contains(cf) @@ -628,16 +640,31 @@ LauncherView::LauncherView( QWidget* parent, const char* name, WFlags fl ) } LauncherView::~LauncherView() { if ( bgCache && bgCache->contains( bgName ) ) (*bgCache)[bgName]->ref--; } + +bool LauncherView::bsy=FALSE; + +void LauncherView::setBusy(bool on) +{ + icons->setBusy(on); +} + +void LauncherView::setBusyIndicatorType( const QString& type ) { + if ( type. lower ( ) == "animated" ) + icons->setBusyIndicatorType( BIT_Animated ) ; + else + icons->setBusyIndicatorType( BIT_Normal ) ; +} + void LauncherView::hideIcons() { icons->hide(); } void LauncherView::setToolsEnabled(bool y) { if ( !y != !tools ) { @@ -1048,16 +1075,20 @@ void LauncherView::flushBgCache() ++it; if ( (*curr)->ref == 0 ) { delete (*curr); bgCache->remove( curr ); } } } +/* + * Launcherthumbnail handling for image files + */ + /* special image handling - based on opie eye */ QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) { s >> inf.file >> inf.pixmap >> inf.width >> inf.height; return s; } QDataStream &operator<<( QDataStream& s, const PixmapInfo& inf) { return s << inf.file << inf.width << inf.height; @@ -1088,30 +1119,30 @@ void LauncherThumbReceiver::recieve( const QCString&str, const QByteArray&at ) QDataStream stream( at, IO_ReadOnly ); /* we are just interested in thumbmails */ if ( str == "pixmapsHandled(PixmapList)" ) stream >> pixinfos; for ( PixmapInfos::Iterator it = pixinfos.begin(); it != pixinfos.end(); ++it ) { odebug << "Pixinfos: " << (*it).file << " - " << (*it).width << oendl; - emit sig_Thumbnail((*it).pixmap,(*it).file); + emit sig_Thumbnail((*it).pixmap,(*it).file,(*it).width); } } void LauncherThumbReceiver::requestThumb(const QString&file,int width,int height) { PixmapInfo rItem; rItem.file = file; rItem.width = width; rItem.height = height; m_inThumbNail.append(rItem); - QTimer::singleShot(2, this, SLOT(sendRequest())); + QTimer::singleShot(0, this, SLOT(sendRequest())); } void LauncherThumbReceiver::sendRequest() { if (m_inThumbNail.count()>0) { QCopEnvelope env("QPE/opie-eye_slave", "pixmapInfos(PixmapInfos)" ); env << m_inThumbNail; - } m_inThumbNail.clear(); } +} diff --git a/core/launcher/launcherview.h b/core/launcher/launcherview.h index 3cca7f7..0be9a1f 100644 --- a/core/launcher/launcherview.h +++ b/core/launcher/launcherview.h @@ -141,17 +141,17 @@ public: void requestThumb(const QString&file,int width,int height); public slots: void recieve( const QCString&, const QByteArray& ); protected slots: virtual void sendRequest(); signals: - void sig_Thumbnail(const QPixmap&,const QString&); + void sig_Thumbnail(const QPixmap&,const QString&,int); protected: PixmapInfos m_inThumbNail; }; class LauncherIconView : public QIconView { Q_OBJECT public: @@ -211,29 +211,30 @@ public: void setTypeFilter(const QString& typefilter, bool resort); void setCategoryFilter( int catfilter, bool resort ); enum SortMethod { Name, Date, Type }; void setSortMethod( SortMethod m ); int compare(const AppLnk* a, const AppLnk* b); + void requestEyePix(const LauncherItem*which); protected: void timerEvent( QTimerEvent *te ); void styleChange( QStyle &old ); void calculateGrid( ItemTextPos pos ); void focusInEvent( QFocusEvent * ) {} void focusOutEvent( QFocusEvent * ) {} LauncherItem*findDocItem(const QString&); void addCheckItem(AppLnk* app); void checkCallback(); protected slots: - void setEyePixmap(const QPixmap&,const QString&); + void setEyePixmap(const QPixmap&,const QString&,int width); private: QList<AppLnk> hidden; QDict<void> mimes; QDict<void> cats; SortMethod sortmeth; QRegExp tf; int cf; |