Diffstat (limited to 'core/launcher/launcherview.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | core/launcher/launcherview.cpp | 98 |
1 files changed, 95 insertions, 3 deletions
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp index cd9c14b..1317bda 100644 --- a/core/launcher/launcherview.cpp +++ b/core/launcher/launcherview.cpp @@ -31,2 +31,4 @@ using namespace Opie::Core; +#include <qpe/qcopenvelope_qws.h> + /* QT */ @@ -81,2 +83,3 @@ public: void resetIcon(); + bool isEyeImage()const{return m_EyeImage;} @@ -86,2 +89,3 @@ public: void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } + void setEyePixmap(const QPixmap&aIcon); protected: @@ -90,2 +94,3 @@ protected: AppLnk* app; + private: @@ -93,2 +98,6 @@ private: BusyIndicatorType busyType; + int psize; + QPixmap m_iPixmap; + bool m_EyeImage; + LauncherThumbReceiver*m_EyeCallback; }; @@ -379,4 +388,13 @@ LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon ) iteration(0), - app(applnk) // Takes ownership + app(applnk), // Takes ownership + psize( (bigIcon ? applnk->bigPixmap().width() :applnk->pixmap().width() ) ), + m_iPixmap(), + m_EyeImage(false) { + m_EyeCallback = new LauncherThumbReceiver(this); + if (applnk->type().lower().startsWith("image/") && applnk->exec().contains("opie-eye",false)) { + m_EyeImage = true; + m_iPixmap = (bigIcon ? applnk->bigPixmap():applnk->pixmap()); + m_EyeCallback->requestThumb(applnk->file(),m_iPixmap.width(),m_iPixmap.height()); + } } @@ -389,2 +407,3 @@ LauncherItem::~LauncherItem() delete app; + if (m_EyeCallback) delete m_EyeCallback; } @@ -462,3 +481,3 @@ void LauncherItem::animateIcon() if ( iteration == 0 ) { - QPixmap src = isBigIcon ? app->bigPixmap() : app->pixmap(); + QPixmap src = (isEyeImage()?m_iPixmap:(isBigIcon ? app->bigPixmap() : app->pixmap())); QImage img = src.convertToImage(); @@ -498,3 +517,10 @@ void LauncherItem::resetIcon() iteration = 0; - setPixmap( isBigIcon ? app->bigPixmap() : app->pixmap() ); + setPixmap((isEyeImage()?m_iPixmap:(isBigIcon ? app->bigPixmap() : app->pixmap()))); +} + +void LauncherItem::setEyePixmap(const QPixmap&aIcon) +{ + if (!isEyeImage()) return; + m_iPixmap = aIcon; + setPixmap(aIcon); } @@ -1061 +1087,67 @@ void LauncherView::flushBgCache() +/* 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; +} + +LauncherThumbReceiver::LauncherThumbReceiver(LauncherItem*parent) + :QObject() +{ + m_parent = parent; + QCopChannel * chan = new QCopChannel( "QPE/opie-eye",this ); + connect(chan, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(recieve(const QCString&,const QByteArray&)) ); + + { + QCopEnvelope( "QPE/Application/opie-eye_slave", "refUp()" ); + } + m_waiting = false; +} + +LauncherThumbReceiver::~LauncherThumbReceiver() +{ + { + QCopEnvelope( "QPE/Application/opie-eye_slave", "refDown()" ); + } +} + +void LauncherThumbReceiver::recieve( const QCString&str, const QByteArray&at ) +{ + PixmapInfos pixinfos; + QDataStream stream( at, IO_ReadOnly ); + if (!m_parent || !m_waiting) return; + /* we are just interested in thumbmails */ + if ( str == "pixmapsHandled(PixmapList)" ) + stream >> pixinfos; + + for ( PixmapInfos::Iterator it = pixinfos.begin(); it != pixinfos.end(); ++it ) { + if ((*it).file==m_reqFile) { + m_parent->setEyePixmap((*it).pixmap); + m_waiting = false; + break; + } + } +} + +void LauncherThumbReceiver::requestThumb(const QString&file,int width,int height) +{ + m_reqFile = file; + rItem.file = file; + rItem.width = width; + rItem.height = height; + QTimer::singleShot(1, this, SLOT(sendRequest())); +} + +void LauncherThumbReceiver::sendRequest() +{ + PixmapInfos m_inThumbNail; + m_inThumbNail.append(rItem); + QCopEnvelope env("QPE/opie-eye_slave", "pixmapInfos(PixmapInfos)" ); + env << m_inThumbNail; + m_waiting = true; +} |