summaryrefslogtreecommitdiff
path: root/core
authoralwin <alwin>2004-11-10 21:18:37 (UTC)
committer alwin <alwin>2004-11-10 21:18:37 (UTC)
commit660b61a7f8b9fb885226507d7f6716ab2dcedbb8 (patch) (side-by-side diff)
tree5ebbfc6ca71b1a2205d5f2516b919c9c2dd4fced /core
parentd2f3b6f525be4d652fbac7c87ab0ad40e21af184 (diff)
downloadopie-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') (more/less context) (show whitespace changes)
-rw-r--r--core/launcher/launcher.cpp17
-rw-r--r--core/launcher/launcher.h2
-rw-r--r--core/launcher/launcherview.cpp107
-rw-r--r--core/launcher/launcherview.h7
4 files changed, 98 insertions, 35 deletions
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp
index 5ec1cf8..ccc2114 100644
--- a/core/launcher/launcher.cpp
+++ b/core/launcher/launcher.cpp
@@ -76,9 +76,9 @@
static bool isVisibleWindow( int );
//===========================================================================
LauncherTabWidget::LauncherTabWidget( Launcher* parent ) :
- QVBox( parent ), docview( 0 )
+ QVBox( parent ), docview( 0 ),docTabEnabled(true),m_DocumentTabId(0)
{
docLoadingWidgetEnabled = false;
docLoadingWidget = 0;
docLoadingWidgetProgress = 0;
@@ -127,9 +127,9 @@ void LauncherTabWidget::createDocLoadingWidget()
waitPixmap->setAlignment( int( QLabel::AlignCenter ) );
Config cfg( "Launcher" );
cfg.setGroup( "DocTab" );
- bool docTabEnabled = cfg.readBoolEntry( "Enable", true );
+ docTabEnabled = cfg.readBoolEntry( "Enable", true );
QLabel *textLabel = new QLabel( docLoadingVBox );
textLabel->setAlignment( int( QLabel::AlignCenter ) );
docLoadingWidgetProgress = new QProgressBar( docLoadingVBox );
@@ -215,16 +215,19 @@ LauncherView* LauncherTabWidget::newView( const QString& id, const QPixmap& pm,
this, SIGNAL(clicked(const AppLnk*)));
connect( view, SIGNAL(rightPressed(AppLnk*)),
this, SIGNAL(rightPressed(AppLnk*)));
+
int n = categoryBar->count();
+
stack->addWidget( view, n );
LauncherTab *tab = new LauncherTab( id, view, pm, label );
categoryBar->insertTab( tab, n-1 );
-
- if ( id == "Documents" )
+ if ( id == "Documents" ) {
docview = view;
+ m_DocumentTabId = n;
+ }
odebug << "inserting " << id << " at " << n-1 << "" << oendl;
Config cfg("Launcher");
@@ -603,9 +606,8 @@ void Launcher::properties( AppLnk *appLnk )
/* ### libqtopia FIXME also moving docLnks... */
LnkProperties prop(appLnk,0 );
if (QPEApplication::execDialog( &prop )==QDialog::Accepted && tabs->currentView()==tabs->docView()) {
- tabs->docView()->updateTools();
}
}
}
@@ -720,10 +722,15 @@ void Launcher::documentRemoved( const DocLnk& doc )
}
void Launcher::documentChanged( const DocLnk& oldDoc, const DocLnk& newDoc )
{
+#if 0
documentRemoved( oldDoc );
documentAdded( newDoc );
+// tabs->docView()->updateTools();
+#else
+ tabs->docView()->changeItem(oldDoc,new DocLnk(newDoc));
+#endif
}
void Launcher::allDocumentsRemoved()
{
diff --git a/core/launcher/launcher.h b/core/launcher/launcher.h
index 2eaf77c..db6ac54 100644
--- a/core/launcher/launcher.h
+++ b/core/launcher/launcher.h
@@ -89,8 +89,10 @@ private:
QWidgetStack *stack;
LauncherView *docLoadingWidget;
QProgressBar *docLoadingWidgetProgress;
bool docLoadingWidgetEnabled;
+ bool docTabEnabled;
+ int m_DocumentTabId;
};
class Launcher : public QMainWindow, public ServerInterface
{
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
@@ -43,8 +43,9 @@ using namespace Opie::Core;
//#define ALPHA_FADE_BUSY_ICON
//#define USE_ANIMATED_BUSY_ICON_OVERLAY
#define BOUNCE_BUSY_ICON
+typedef QMap<QString,QPixmap>::Iterator pixiter;
class BgPixmap
{
public:
@@ -104,9 +105,8 @@ protected:
private:
void paintAnimatedIcon( QPainter *p );
BusyIndicatorType busyType;
int psize;
- QPixmap m_iPixmap;
bool m_EyeImage;
iconstate_t m_EyeImageSet;
};
@@ -116,15 +116,18 @@ LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk, bool bigIcon )
isBigIcon( bigIcon ),
iteration(0),
app(applnk), // Takes ownership
psize( (bigIcon ? applnk->bigPixmap().width() :applnk->pixmap().width() ) ),
- m_iPixmap(),
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());
+ QMap<QString,QPixmap>::Iterator it = LauncherIconView::sm_EyeCache->find(applnk->file());
+ if (it != LauncherIconView::sm_EyeCache->end()) {
+ m_EyeImageSet = EYE_ICON;
+ setPixmap(*it);
+ }
}
}
LauncherItem::~LauncherItem()
@@ -212,9 +215,15 @@ void LauncherItem::animateIcon()
return;
// 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;
int count;
if ( img.depth() == 32 ) {
@@ -248,26 +257,36 @@ void LauncherItem::animateIcon()
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());
}
void LauncherItem::setEyePixmap(const QPixmap&aIcon)
{
if (!isEyeImage()) return;
- m_iPixmap = aIcon;
setPixmap(aIcon);
m_EyeImageSet = EYE_ICON;
}
//===========================================================================
// 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);
ike = FALSE;
calculateGrid( Bottom );
@@ -431,8 +450,9 @@ void LauncherIconView::setEyePixmap(const QPixmap&aPixmap,const QString&aFile,in
int s = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize();
if (s!=width) return;
LauncherItem*item = findDocItem(aFile);
if (!item||!item->isEyeImage()) return;
+ (*sm_EyeCache)[aFile]=aPixmap;
item->setEyePixmap(aPixmap);
}
void LauncherIconView::checkCallback()
@@ -440,10 +460,10 @@ void LauncherIconView::checkCallback()
if (!m_EyeCallBack) {
m_EyeCallBack = new LauncherThumbReceiver();
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);
}
void LauncherIconView::addCheckItem(AppLnk* app)
{
@@ -465,29 +485,16 @@ void LauncherIconView::requestEyePix(const LauncherItem*item)
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;
}
m_eyeTimer.stop();
}
-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()
{
mimes.clear();
cats.clear();
@@ -527,9 +534,9 @@ void LauncherIconView::hideOrShowItems(bool resort)
sort();
viewport()->setUpdatesEnabled( TRUE );
}
-bool LauncherIconView::removeLink(const QString& linkfile)
+bool LauncherIconView::removeLink(const QString& linkfile,bool removeCache)
{
LauncherItem* item = (LauncherItem*)firstItem();
AppLnk* l;
bool did = FALSE;
@@ -538,8 +545,9 @@ bool LauncherIconView::removeLink(const QString& linkfile)
l = item->appLnk();
LauncherItem *nextItem = (LauncherItem *)item->nextItem();
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;
}
item = nextItem;
@@ -556,8 +564,40 @@ bool LauncherIconView::removeLink(const QString& linkfile)
}
return did;
}
+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 )
{
if ( te->timerId() == busyTimer ) {
if ( bsy )
@@ -568,8 +608,9 @@ void LauncherIconView::timerEvent( QTimerEvent *te )
}
void LauncherIconView::setBigIcons( bool bi )
{
+ sm_EyeCache->clear();
bigIcns = bi;
#ifdef USE_ANIMATED_BUSY_ICON_OVERLAY
busyPix.resize(0,0);
#endif
@@ -755,10 +796,13 @@ void LauncherView::updateTools()
typemb->setCurrentItem(typemb->count()-1);
}
int pcat = catmb ? catmb->currentCategory() : -2;
- if ( !catmb )
+ if ( !catmb ) {
catmb = new CategorySelect(tools);
+ } else if (pcat!=-2) {
+
+ }
Categories cats( 0 );
cats.load( categoryFileName() );
QArray<int> vl( 0 );
catmb->setCategories( vl, "Document View", // No tr
@@ -1046,8 +1090,18 @@ bool LauncherView::removeLink(const QString& linkfile)
{
return icons->removeLink(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 )
{
icons->setSorting( v );
if ( v )
@@ -1063,13 +1117,8 @@ void LauncherView::sort()
{
icons->sort();
}
-void LauncherView::addItem(AppLnk* app, bool resort)
-{
- icons->addItem(app,resort);
-}
-
void LauncherView::paletteChange( const QPalette &p )
{
icons->unsetPalette();
QVBox::paletteChange( p );
diff --git a/core/launcher/launcherview.h b/core/launcher/launcherview.h
index 6d94539..05073ab 100644
--- a/core/launcher/launcherview.h
+++ b/core/launcher/launcherview.h
@@ -55,8 +55,10 @@ public:
void hideIcons();
bool removeLink(const QString& linkfile);
void addItem(AppLnk* app, bool resort=TRUE);
+ void changeItem(const AppLnk&old,AppLnk*nlink);
+
void removeAllItems();
void setSortEnabled(bool);
void setUpdatesEnabled(bool);
void sort();
@@ -175,9 +177,10 @@ public:
void setBusy(bool on);
bool inKeyEvent() const { return ike; }
void addItem(AppLnk* app, bool resort=TRUE);
- bool removeLink(const QString& linkfile);
+ bool removeLink(const QString& linkfile,bool removeCache = true);
+ void changeItem(const AppLnk&old,AppLnk*nlink);
QStringList mimeTypes() const;
QStringList categories() const;
void clear();
@@ -205,8 +208,10 @@ public:
void setSortMethod( SortMethod m );
int compare(const AppLnk* a, const AppLnk* b);
void requestEyePix(const LauncherItem*which);
+ static QMap<QString,QPixmap>* sm_EyeCache;
+
protected:
virtual void timerEvent( QTimerEvent *te );
void styleChange( QStyle &old );
void calculateGrid( ItemTextPos pos );