summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcherview.cpp91
-rw-r--r--core/launcher/launcherview.h5
2 files changed, 64 insertions, 32 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
@@ -72,8 +72,14 @@ static void cleanup_cache()
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; }
@@ -87,8 +93,10 @@ public:
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;
@@ -98,34 +106,21 @@ private:
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());
@@ -139,8 +134,17 @@ LauncherItem::~LauncherItem()
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());
@@ -151,24 +155,22 @@ void LauncherItem::paintItem( QPainter *p, const QColorGroup &cg )
LauncherIconView* liv = (LauncherIconView*)iconView();
QBrush oldBrush( liv->itemTextBackground() );
QColorGroup mycg( cg );
if ( liv->currentItem() == this ) {
- liv->setItemTextBackground( cg.brush( QColorGroup::Highlight ) );
- mycg.setColor( QColorGroup::Text, cg.color( QColorGroup::HighlightedText ) );
+ liv->setItemTextBackground( cg.brush( QColorGroup::Highlight ) );
+ mycg.setColor( QColorGroup::Text, cg.color( QColorGroup::HighlightedText ) );
}
QIconViewItem::paintItem(p,mycg);
// Paint animation overlay
if ( liv->busyItem() == this )
- paintAnimatedIcon(p);
+ paintAnimatedIcon(p);
if ( liv->currentItem() == this )
- liv->setItemTextBackground( oldBrush );
+ liv->setItemTextBackground( oldBrush );
}
-
-
void LauncherItem::paintAnimatedIcon( QPainter *p )
{
LauncherIconView* liv = (LauncherIconView*)iconView();
int pic = iteration % 16;
@@ -254,8 +256,9 @@ void LauncherItem::setEyePixmap(const QPixmap&aIcon)
{
if (!isEyeImage()) return;
m_iPixmap = aIcon;
setPixmap(aIcon);
+ m_EyeImageSet = EYE_ICON;
}
//===========================================================================
// Implemantation of LauncherIconview start
@@ -420,13 +423,14 @@ LauncherItem*LauncherIconView::findDocItem(const QString&fname)
}
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()
@@ -434,19 +438,27 @@ 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)
@@ -632,8 +644,23 @@ 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();
}
@@ -1052,8 +1079,12 @@ void LauncherView::flushBgCache()
}
}
}
+/*
+ * 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;
@@ -1092,9 +1123,9 @@ void LauncherThumbReceiver::recieve( const QCString&str, const QByteArray&at )
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)
@@ -1103,15 +1134,15 @@ void LauncherThumbReceiver::requestThumb(const QString&file,int width,int height
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();
}
- 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
@@ -145,9 +145,9 @@ public slots:
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;
};
@@ -215,8 +215,9 @@ public:
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 );
@@ -227,9 +228,9 @@ protected:
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;