summaryrefslogtreecommitdiff
authoralwin <alwin>2004-04-19 09:16:15 (UTC)
committer alwin <alwin>2004-04-19 09:16:15 (UTC)
commite3ca538f7ce2e7b7df2f29f263778acc342d51db (patch) (unidiff)
treecb3e3c769ae12542d24eff7d17168635ddef65af
parent0b59a16b5a5a179c46ddb3f8c585dbca59b2826e (diff)
downloadopie-e3ca538f7ce2e7b7df2f29f263778acc342d51db.zip
opie-e3ca538f7ce2e7b7df2f29f263778acc342d51db.tar.gz
opie-e3ca538f7ce2e7b7df2f29f263778acc342d51db.tar.bz2
re-enabled the cache as designed.
for that, pixcache has now a method setting the size of cache (parameter count of pix) and it will switched between the different views. setPixmap is overloaded that way, that we don't store the pix inside the item but calling calcRect which is accessing the cached pixmap. voila. Zecke: Should we make a configure item where users can setup how much pix-previews should cache? Should we setup a thumbnail cache like .xvpics?
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/gui/iconview.cpp26
-rw-r--r--noncore/graphics/opie-eye/lib/imagecache.cpp6
-rw-r--r--noncore/graphics/opie-eye/lib/imagecache.h5
3 files changed, 27 insertions, 10 deletions
diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp
index 039f53f..d546b64 100644
--- a/noncore/graphics/opie-eye/gui/iconview.cpp
+++ b/noncore/graphics/opie-eye/gui/iconview.cpp
@@ -7,176 +7,175 @@
7 7
8#include <lib/imagecache.h> 8#include <lib/imagecache.h>
9#include <gui/imageinfoui.h> 9#include <gui/imageinfoui.h>
10 10
11#include <iface/dirview.h> 11#include <iface/dirview.h>
12#include <iface/dirlister.h> 12#include <iface/dirlister.h>
13 13
14#include <opie2/oconfig.h> 14#include <opie2/oconfig.h>
15#include <opie2/okeyconfigwidget.h> 15#include <opie2/okeyconfigwidget.h>
16#include <opie2/odebug.h> 16#include <opie2/odebug.h>
17#include <opie2/oimagescrollview.h> 17#include <opie2/oimagescrollview.h>
18 18
19#include <qpe/resource.h> 19#include <qpe/resource.h>
20#include <qpe/qpemessagebox.h> 20#include <qpe/qpemessagebox.h>
21#include <qpe/ir.h> 21#include <qpe/ir.h>
22#include <qpe/qcopenvelope_qws.h> 22#include <qpe/qcopenvelope_qws.h>
23#include <qpe/qpeapplication.h> 23#include <qpe/qpeapplication.h>
24 24
25#include <qiconview.h> 25#include <qiconview.h>
26#include <qlabel.h> 26#include <qlabel.h>
27#include <qhbox.h> 27#include <qhbox.h>
28#include <qcombobox.h> 28#include <qcombobox.h>
29#include <qdir.h> 29#include <qdir.h>
30#include <qapplication.h> 30#include <qapplication.h>
31#include <qmainwindow.h> 31#include <qmainwindow.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qstyle.h> 33#include <qstyle.h>
34 34
35 35
36using Opie::Core::OKeyConfigItem; 36using Opie::Core::OKeyConfigItem;
37 37
38/* 38/*
39 * The Icons, Request Cache and IconViewItem for the IconView 39 * The Icons, Request Cache and IconViewItem for the IconView
40 */ 40 */
41namespace { 41namespace {
42 static QPixmap* _dirPix = 0; 42 static QPixmap* _dirPix = 0;
43 static QPixmap* _unkPix = 0; 43 static QPixmap* _unkPix = 0;
44 static QPixmap* _picPix = 0; 44 static QPixmap* _picPix = 0;
45 static QPixmap* _emptyPix = 0; 45 static QPixmap* _emptyPix = 0;
46 class IconViewItem : public QIconViewItem { 46 class IconViewItem : public QIconViewItem {
47 public: 47 public:
48 IconViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false); 48 IconViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false);
49 QPixmap* pixmap()const; 49 QPixmap* pixmap()const;
50 QString path()const { return m_path; } 50 QString path()const { return m_path; }
51 bool isDir()const { return m_isDir; } 51 bool isDir()const { return m_isDir; }
52 void setText( const QString& ); 52 void setText( const QString& );
53 bool textOnly()const{return m_textOnly;} 53 bool textOnly()const{return m_textOnly;}
54 void setTextOnly(bool how){m_textOnly=how;} 54 void setTextOnly(bool how){m_textOnly=how;}
55 /* just for starting recalc of item rect! */
55 virtual void setPixmap( const QPixmap & icon, bool recalc, bool redraw = TRUE ); 56 virtual void setPixmap( const QPixmap & icon, bool recalc, bool redraw = TRUE );
57 /* just for starting recalc of item rect! */
56 virtual void setPixmap( const QPixmap & icon); 58 virtual void setPixmap( const QPixmap & icon);
57 59
58 protected: 60 protected:
59 mutable QPixmap* m_pix; 61 mutable QPixmap* m_pix;
60 62
61 private: 63 private:
62 QString m_path; 64 QString m_path;
63 bool m_isDir : 1; 65 bool m_isDir : 1;
64 bool m_noInfo :1; 66 bool m_noInfo :1;
65 bool m_textOnly:1; 67 bool m_textOnly:1;
66 bool m_NameOnly:1; 68 bool m_NameOnly:1;
67 bool m_Pixset:1; 69 bool m_Pixset:1;
68 }; 70 };
69 class TextViewItem : public IconViewItem { 71 class TextViewItem : public IconViewItem {
70 TextViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false ); 72 TextViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false );
71 QPixmap *pixmap()const; 73 QPixmap *pixmap()const;
72 void setText( const QString& ); 74 void setText( const QString& );
73 }; 75 };
74 class ThumbViewItem : public IconViewItem { 76 class ThumbViewItem : public IconViewItem {
75 ThumbViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false ); 77 ThumbViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false );
76 QPixmap *pixmap()const; 78 QPixmap *pixmap()const;
77 void setText( const QString& ); 79 void setText( const QString& );
78 }; 80 };
79 81
80 82
81/* 83/*
82 * If we request an Image or String 84 * If we request an Image or String
83 * we add it to the map 85 * we add it to the map
84 */ 86 */
85 static QMap<QString, IconViewItem*> g_stringInf; 87 static QMap<QString, IconViewItem*> g_stringInf;
86 static QMap<QString, IconViewItem*> g_stringPix; 88 static QMap<QString, IconViewItem*> g_stringPix;
87 89
88 IconViewItem::IconViewItem( QIconView* view,const QString& path, 90 IconViewItem::IconViewItem( QIconView* view,const QString& path,
89 const QString& name, bool isDir ) 91 const QString& name, bool isDir )
90 : QIconViewItem( view, name ), m_path( path ), m_isDir( isDir ), 92 : QIconViewItem( view, name ), m_path( path ), m_isDir( isDir ),
91 m_noInfo( false ),m_textOnly(false),m_Pixset(false) 93 m_noInfo( false ),m_textOnly(false),m_Pixset(false)
92 { 94 {
93 if ( isDir && !_dirPix ) 95 if ( isDir && !_dirPix )
94 _dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser")); 96 _dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser"));
95 else if ( !isDir && !_unkPix ) 97 else if ( !isDir && !_unkPix )
96 _unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) ); 98 _unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) );
97 } 99 }
98 100
99 inline void IconViewItem::setPixmap( const QPixmap & icon, bool recalc, bool redraw) 101 inline void IconViewItem::setPixmap( const QPixmap & icon, bool recalc, bool redraw)
100 { 102 {
101 m_Pixset = true; 103 m_Pixset = true;
102 QIconViewItem::setPixmap(icon,recalc,redraw); 104 calcRect(text());
103 } 105 }
104 inline void IconViewItem::setPixmap( const QPixmap & icon) 106 inline void IconViewItem::setPixmap( const QPixmap & icon)
105 { 107 {
106 m_Pixset = true; 108 m_Pixset = true;
107 QIconViewItem::setPixmap(icon); 109 calcRect(text());
108 } 110 }
109 111
110 inline QPixmap* IconViewItem::pixmap()const { 112 inline QPixmap* IconViewItem::pixmap()const {
111// qWarning( "Name is " + m_path.right( 15 ) + " rect is %d %d %d %d | %d %d", 113// qWarning( "Name is " + m_path.right( 15 ) + " rect is %d %d %d %d | %d %d",
112// rect().x(),rect().y(),rect().width(),rect().height(), 114// rect().x(),rect().y(),rect().width(),rect().height(),
113// iconView()->contentsX(), iconView()->contentsY()); 115// iconView()->contentsX(), iconView()->contentsY());
114 116
115 if (textOnly()&&!m_isDir) { 117 if (textOnly()&&!m_isDir) {
116 if (!_emptyPix) _emptyPix = new QPixmap(0,0,1); 118 if (!_emptyPix) _emptyPix = new QPixmap(0,0,1);
117 return _emptyPix; 119 return _emptyPix;
118 } 120 }
119 if ( m_isDir ) 121 if ( m_isDir )
120 return _dirPix; 122 return _dirPix;
121 else{ 123 else{
122 if (!m_noInfo && !g_stringInf.contains( m_path ) ) { 124 if (!m_noInfo && !g_stringInf.contains( m_path ) ) {
123 currentView()->dirLister()->imageInfo( m_path ); 125 currentView()->dirLister()->imageInfo( m_path );
124 g_stringInf.insert( m_path, const_cast<IconViewItem*>(this)); 126 g_stringInf.insert( m_path, const_cast<IconViewItem*>(this));
125 } 127 }
126 128
127 m_pix = PPixmapCache::self()->cachedImage( m_path, 64, 64 ); 129 m_pix = PPixmapCache::self()->cachedImage( m_path, 64, 64 );
128 if (!m_pix && !g_stringPix.contains( m_path )&&!m_Pixset) { 130 if (!m_pix && !g_stringPix.contains( m_path )) {
129 currentView()->dirLister()->thumbNail( m_path, 64, 64 ); 131 currentView()->dirLister()->thumbNail( m_path, 64, 64 );
130 g_stringPix.insert( m_path, const_cast<IconViewItem*>(this)); 132 g_stringPix.insert( m_path, const_cast<IconViewItem*>(this));
131 } 133 }
132 if (m_Pixset) {
133 return QIconViewItem::pixmap();
134 }
135 return m_pix ? m_pix : _unkPix; 134 return m_pix ? m_pix : _unkPix;
136 } 135 }
137 } 136 }
138 inline void IconViewItem::setText( const QString& str ) { 137 inline void IconViewItem::setText( const QString& str ) {
139 QString text = QIconViewItem::text()+"\n"+str; 138 QString text = QIconViewItem::text()+"\n"+str;
140 m_noInfo = true; 139 m_noInfo = true;
141 QIconViewItem::setText( text ); 140 QIconViewItem::setText( text );
142 } 141 }
143} 142}
144 143
145 144
146/* 145/*
147 * Set up the GUI.. initialize the slave set up gui 146 * Set up the GUI.. initialize the slave set up gui
148 * and also load a dir 147 * and also load a dir
149 */ 148 */
150PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg ) 149PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg )
151 : QVBox( wid ), m_cfg( cfg ), m_updatet( false ) 150 : QVBox( wid ), m_cfg( cfg ), m_updatet( false )
152{ 151{
153 { 152 {
154 QCopEnvelope( "QPE/Application/opie-eye_slave", "refUp()" ); 153 QCopEnvelope( "QPE/Application/opie-eye_slave", "refUp()" );
155 } 154 }
156 m_path = QDir::homeDirPath(); 155 m_path = QDir::homeDirPath();
157 m_mode = 0; 156 m_mode = 0;
158 157
159 QHBox *hbox = new QHBox( this ); 158 QHBox *hbox = new QHBox( this );
160 QLabel* lbl = new QLabel( hbox ); 159 QLabel* lbl = new QLabel( hbox );
161 lbl->setText( tr("View as" ) ); 160 lbl->setText( tr("View as" ) );
162 161
163 m_views = new QComboBox( hbox, "View As" ); 162 m_views = new QComboBox( hbox, "View As" );
164 connect( m_views, SIGNAL(activated(int)), 163 connect( m_views, SIGNAL(activated(int)),
165 this, SLOT(slotViewChanged(int)) ); 164 this, SLOT(slotViewChanged(int)) );
166 165
167 m_view= new QIconView( this ); 166 m_view= new QIconView( this );
168 connect(m_view, SIGNAL(clicked(QIconViewItem*) ), 167 connect(m_view, SIGNAL(clicked(QIconViewItem*) ),
169 this, SLOT(slotClicked(QIconViewItem*)) ); 168 this, SLOT(slotClicked(QIconViewItem*)) );
170 connect(m_view, SIGNAL(returnPressed(QIconViewItem*)), 169 connect(m_view, SIGNAL(returnPressed(QIconViewItem*)),
171 this, SLOT(slotClicked(QIconViewItem*)) ); 170 this, SLOT(slotClicked(QIconViewItem*)) );
172 171
173 m_view->setArrangement( QIconView::LeftToRight ); 172 m_view->setArrangement( QIconView::LeftToRight );
174 m_view->setItemTextPos( QIconView::Right ); 173 m_view->setItemTextPos( QIconView::Right );
175 174
176 int dw = QApplication::desktop()->width(); 175 int dw = QApplication::desktop()->width();
177 int viewerWidth = dw-style().scrollBarExtent().width(); 176 int viewerWidth = dw-style().scrollBarExtent().width();
178 m_view->setGridX( viewerWidth-3*m_view->spacing()); 177 m_view->setGridX( viewerWidth-3*m_view->spacing());
179 m_view->setGridY( fontMetrics().height()*2+40 ); 178 m_view->setGridY( fontMetrics().height()*2+40 );
180 179
181 180
182 initKeys(); 181 initKeys();
@@ -364,98 +363,102 @@ void PIconView::slotViewChanged( int i) {
364 PDirView* cur = currentView(); 363 PDirView* cur = currentView();
365 delete cur; 364 delete cur;
366 QString str = m_views->text(i); 365 QString str = m_views->text(i);
367 cur = (*(*viewMap())[str])(*m_cfg); 366 cur = (*(*viewMap())[str])(*m_cfg);
368 setCurrentView( cur ); 367 setCurrentView( cur );
369 368
370 /* connect to the signals of the lister */ 369 /* connect to the signals of the lister */
371 PDirLister* lis = cur->dirLister(); 370 PDirLister* lis = cur->dirLister();
372 connect(lis, SIGNAL(sig_thumbInfo(const QString&, const QString& )), 371 connect(lis, SIGNAL(sig_thumbInfo(const QString&, const QString& )),
373 this, SLOT( slotThumbInfo(const QString&, const QString&))); 372 this, SLOT( slotThumbInfo(const QString&, const QString&)));
374 connect(lis, SIGNAL( sig_thumbNail(const QString&, const QPixmap&)), 373 connect(lis, SIGNAL( sig_thumbNail(const QString&, const QPixmap&)),
375 this, SLOT(slotThumbNail(const QString&, const QPixmap&))); 374 this, SLOT(slotThumbNail(const QString&, const QPixmap&)));
376 connect(lis, SIGNAL(sig_start()), 375 connect(lis, SIGNAL(sig_start()),
377 this, SLOT(slotStart())); 376 this, SLOT(slotStart()));
378 connect(lis, SIGNAL(sig_end()) , 377 connect(lis, SIGNAL(sig_end()) ,
379 this, SLOT(slotEnd()) ); 378 this, SLOT(slotEnd()) );
380 379
381 380
382 /* reload now */ 381 /* reload now */
383 QTimer::singleShot( 0, this, SLOT(slotReloadDir())); 382 QTimer::singleShot( 0, this, SLOT(slotReloadDir()));
384} 383}
385 384
386 385
387void PIconView::slotReloadDir() { 386void PIconView::slotReloadDir() {
388 slotChangeDir( m_path ); 387 slotChangeDir( m_path );
389} 388}
390 389
391 390
392/* 391/*
393 * add files and folders 392 * add files and folders
394 */ 393 */
395void PIconView::addFolders( const QStringList& lst) { 394void PIconView::addFolders( const QStringList& lst) {
396 QStringList::ConstIterator it; 395 QStringList::ConstIterator it;
397 IconViewItem * _iv; 396 IconViewItem * _iv;
398 397
399 for(it=lst.begin(); it != lst.end(); ++it ) { 398 for(it=lst.begin(); it != lst.end(); ++it ) {
400 _iv = new IconViewItem( m_view, m_path+"/"+(*it), (*it), true ); 399 _iv = new IconViewItem( m_view, m_path+"/"+(*it), (*it), true );
401 if (m_mode==3) _iv->setTextOnly(true); 400 if (m_mode==3) _iv->setTextOnly(true);
402 } 401 }
403} 402}
404 403
405void PIconView::addFiles( const QStringList& lst) { 404void PIconView::addFiles( const QStringList& lst) {
406 QStringList::ConstIterator it; 405 QStringList::ConstIterator it;
407 IconViewItem * _iv; 406 IconViewItem * _iv;
408 QPixmap*m_pix = 0; 407 QPixmap*m_pix = 0;
409 for (it=lst.begin(); it!= lst.end(); ++it ) { 408 for (it=lst.begin(); it!= lst.end(); ++it ) {
410 m_pix = PPixmapCache::self()->cachedImage( m_path+"/"+(*it), 64, 64 ); 409 m_pix = PPixmapCache::self()->cachedImage( m_path+"/"+(*it), 64, 64 );
411 _iv = new IconViewItem( m_view, m_path+"/"+(*it), (*it) ); 410 _iv = new IconViewItem( m_view, m_path+"/"+(*it), (*it) );
412 if (m_mode==3) _iv->setTextOnly(true); 411 if (m_mode==3) {
413 if (m_pix) _iv->setPixmap(*m_pix); 412 _iv->setTextOnly(true);
413 _iv->setPixmap(QPixmap());
414 } else {
415 if (m_pix) _iv->setPixmap(*m_pix);
416 }
414 } 417 }
415 418
416} 419}
417 420
418/* 421/*
419 * user clicked on the item. Change dir or view 422 * user clicked on the item. Change dir or view
420 */ 423 */
421void PIconView::slotClicked(QIconViewItem* _it) { 424void PIconView::slotClicked(QIconViewItem* _it) {
422 if(!_it ) 425 if(!_it )
423 return; 426 return;
424 427
425 IconViewItem* it = static_cast<IconViewItem*>(_it); 428 IconViewItem* it = static_cast<IconViewItem*>(_it);
426 if( it->isDir() ) 429 if( it->isDir() )
427 slotChangeDir( it->path() ); 430 slotChangeDir( it->path() );
428 else // view image 431 else // view image
429 slotShowImage(); 432 slotShowImage();
430} 433}
431 434
432/* 435/*
433 * got thumb info add to the cache if items is visible 436 * got thumb info add to the cache if items is visible
434 * we later need update after processing of slave is done 437 * we later need update after processing of slave is done
435 */ 438 */
436void PIconView::slotThumbInfo( const QString& _path, const QString& str ) { 439void PIconView::slotThumbInfo( const QString& _path, const QString& str ) {
437 IconViewItem* item = g_stringInf[_path]; 440 IconViewItem* item = g_stringInf[_path];
438 if (!item ) 441 if (!item )
439 return; 442 return;
440 443
441 if (m_mode == 2) { 444 if (m_mode == 2) {
442 return; 445 return;
443 } 446 }
444 if ( item->intersects(QRect( m_view->contentsX(),m_view->contentsY(), 447 if ( item->intersects(QRect( m_view->contentsX(),m_view->contentsY(),
445 m_view->contentsWidth(), m_view->contentsHeight() ) ) ) 448 m_view->contentsWidth(), m_view->contentsHeight() ) ) )
446 m_updatet = true; 449 m_updatet = true;
447 450
448 item->setText( str ); 451 item->setText( str );
449 g_stringInf.remove( _path ); 452 g_stringInf.remove( _path );
450} 453}
451 454
452/* 455/*
453 * got thumbnail and see if it is visible so we need to update later 456 * got thumbnail and see if it is visible so we need to update later
454 */ 457 */
455void PIconView::slotThumbNail(const QString& _path, const QPixmap &pix) { 458void PIconView::slotThumbNail(const QString& _path, const QPixmap &pix) {
456 IconViewItem* item = g_stringPix[_path]; 459 IconViewItem* item = g_stringPix[_path];
457 if (!item ) 460 if (!item )
458 return; 461 return;
459 462
460 if ( item->intersects(QRect( m_view->contentsX(),m_view->contentsY(), 463 if ( item->intersects(QRect( m_view->contentsX(),m_view->contentsY(),
461 m_view->contentsWidth(), m_view->contentsHeight() ) ) ) 464 m_view->contentsWidth(), m_view->contentsHeight() ) ) )
@@ -547,62 +550,65 @@ void PIconView::slotShowImage( const QString& name) {
547} 550}
548void PIconView::slotImageInfo() { 551void PIconView::slotImageInfo() {
549 bool isDir = false; 552 bool isDir = false;
550 QString name = currentFileName(isDir); 553 QString name = currentFileName(isDir);
551 if (isDir) return; 554 if (isDir) return;
552 555
553 slotImageInfo( name ); 556 slotImageInfo( name );
554} 557}
555 558
556void PIconView::slotImageInfo( const QString& name) { 559void PIconView::slotImageInfo( const QString& name) {
557 emit sig_showInfo( name ); 560 emit sig_showInfo( name );
558} 561}
559 562
560 563
561void PIconView::slotChangeMode( int mode ) { 564void PIconView::slotChangeMode( int mode ) {
562 if ( mode >= 1 && mode <= 3 ) 565 if ( mode >= 1 && mode <= 3 )
563 m_mode = mode; 566 m_mode = mode;
564 567
565 QIconView::ItemTextPos pos; 568 QIconView::ItemTextPos pos;
566 switch( m_mode ) { 569 switch( m_mode ) {
567 case 2: 570 case 2:
568 pos = QIconView::Bottom; 571 pos = QIconView::Bottom;
569 break; 572 break;
570 case 3: 573 case 3:
571 case 1: 574 case 1:
572 default: 575 default:
573 pos = QIconView::Right; 576 pos = QIconView::Right;
574 break; 577 break;
575 } 578 }
576 m_view->setItemTextPos( pos ); 579 m_view->setItemTextPos( pos );
577 580
578 calculateGrid(); 581 calculateGrid();
579 slotReloadDir(); 582 slotReloadDir();
580} 583}
581 584
582 585
583void PIconView::resizeEvent( QResizeEvent* re ) { 586void PIconView::resizeEvent( QResizeEvent* re ) {
584 QVBox::resizeEvent( re ); 587 QVBox::resizeEvent( re );
585 calculateGrid(); 588 calculateGrid();
586} 589}
587 590
588 591
589void PIconView::calculateGrid() { 592void PIconView::calculateGrid() {
590 odebug << "Calc grid: x=" << m_view->gridX() << " y=" << m_view->gridY() << oendl; 593 odebug << "Calc grid: x=" << m_view->gridX() << " y=" << m_view->gridY() << oendl;
591 odebug << "Size of view: " << m_view->size() << oendl; 594 odebug << "Size of view: " << m_view->size() << oendl;
592 595
593 switch (m_mode) { 596 switch (m_mode) {
594 case 2: 597 case 2:
595 m_view->setGridX(80); 598 m_view->setGridX(50);
596 m_view->setGridY(80); 599 m_view->setGridY(20);
600 PPixmapCache::self()->setMaxImages(40);
597 break; 601 break;
598 case 3: 602 case 3:
599 m_view->setGridX(m_view->width()); 603 m_view->setGridX(m_view->width());
600 m_view->setGridY(8); 604 m_view->setGridY(8);
605 PPixmapCache::self()->setMaxImages(2);
601 break; 606 break;
602 case 1: 607 case 1:
603 default: 608 default:
604 m_view->setGridX(m_view->width()); 609 m_view->setGridX(m_view->width());
605 m_view->setGridY(80); 610 m_view->setGridY(80);
611 PPixmapCache::self()->setMaxImages(20);
606 break; 612 break;
607 } 613 }
608} 614}
diff --git a/noncore/graphics/opie-eye/lib/imagecache.cpp b/noncore/graphics/opie-eye/lib/imagecache.cpp
index 3b74a83..f1042a4 100644
--- a/noncore/graphics/opie-eye/lib/imagecache.cpp
+++ b/noncore/graphics/opie-eye/lib/imagecache.cpp
@@ -17,71 +17,77 @@ namespace {
17PImageCache::PImageCache() 17PImageCache::PImageCache()
18 : QCache<QImage>() 18 : QCache<QImage>()
19{ 19{
20 /* just to set an initial value.. 4 big images */ 20 /* just to set an initial value.. 4 big images */
21 setMaxCost( (1024*1024*16)/8*4 ); 21 setMaxCost( (1024*1024*16)/8*4 );
22} 22}
23 23
24PImageCache::~PImageCache() { 24PImageCache::~PImageCache() {
25} 25}
26 26
27PImageCache* PImageCache::self() { 27PImageCache* PImageCache::self() {
28 if ( !_imgCache ) 28 if ( !_imgCache )
29 _imgCache = new PImageCache; 29 _imgCache = new PImageCache;
30 return _imgCache; 30 return _imgCache;
31} 31}
32 32
33QImage* PImageCache::cachedImage( const QString& _path, int ori, int max ) { 33QImage* PImageCache::cachedImage( const QString& _path, int ori, int max ) {
34 QString path = QString( "%1_%2:" ).arg( ori ).arg( max ); 34 QString path = QString( "%1_%2:" ).arg( ori ).arg( max );
35 path += _path; 35 path += _path;
36 36
37 QImage* img = find( path ); 37 QImage* img = find( path );
38 if ( !img ) { 38 if ( !img ) {
39// img = currentView()->dirLister()->image( _path, PDirLister::Factor(ori), max); 39// img = currentView()->dirLister()->image( _path, PDirLister::Factor(ori), max);
40// insertImage( _path, img, ori, max ); 40// insertImage( _path, img, ori, max );
41 currentView()->dirLister()->image( _path, PDirLister::Factor( ori ), max ); 41 currentView()->dirLister()->image( _path, PDirLister::Factor( ori ), max );
42 } 42 }
43 43
44 44
45 return img; 45 return img;
46} 46}
47 47
48void PImageCache::insertImage( const QString& _path, const QImage* img, int ori, int max ) { 48void PImageCache::insertImage( const QString& _path, const QImage* img, int ori, int max ) {
49 QString path = QString("%1_%2:" ).arg( ori ).arg( max ); 49 QString path = QString("%1_%2:" ).arg( ori ).arg( max );
50 path += _path; 50 path += _path;
51 insert( path, img, (img->height()*img->width()*img->depth())/8 ); 51 insert( path, img, (img->height()*img->width()*img->depth())/8 );
52} 52}
53 53
54 54
55PPixmapCache::PPixmapCache() { 55PPixmapCache::PPixmapCache() {
56 /* 56 /*
57 * 20 64x64 16 bit images 57 * 20 64x64 16 bit images
58 */ 58 */
59 setMaxCost( 64*64*QPixmap::defaultDepth()/8*20 ); 59 setMaxCost( 64*64*QPixmap::defaultDepth()/8*20 );
60} 60}
61 61
62PPixmapCache::~PPixmapCache() { 62PPixmapCache::~PPixmapCache() {
63} 63}
64 64
65void PPixmapCache::setMaxImages(unsigned int aMax)
66{
67 m_MaxImages = aMax;
68 setMaxCost( 64*64*QPixmap::defaultDepth()/8*m_MaxImages);
69}
70
65PPixmapCache* PPixmapCache::self() { 71PPixmapCache* PPixmapCache::self() {
66 if ( !_pxmCache ) 72 if ( !_pxmCache )
67 _pxmCache = new PPixmapCache; 73 _pxmCache = new PPixmapCache;
68 74
69 return _pxmCache; 75 return _pxmCache;
70} 76}
71 77
72QPixmap* PPixmapCache::cachedImage( const QString& _path, int width, int height ) { 78QPixmap* PPixmapCache::cachedImage( const QString& _path, int width, int height ) {
73 QString path = QString( "%1_%2:" ).arg( width ).arg( height ); 79 QString path = QString( "%1_%2:" ).arg( width ).arg( height );
74 path += _path; 80 path += _path;
75 81
76 QPixmap* pxm = find( path ); 82 QPixmap* pxm = find( path );
77 83
78 84
79 85
80 return pxm; 86 return pxm;
81} 87}
82 88
83void PPixmapCache::insertImage( const QString& _path, const QPixmap* pix, int width, int height ) { 89void PPixmapCache::insertImage( const QString& _path, const QPixmap* pix, int width, int height ) {
84 QString path = QString("%1_%2:" ).arg( width ).arg( height ); 90 QString path = QString("%1_%2:" ).arg( width ).arg( height );
85 path += _path; 91 path += _path;
86 insert( path, pix, (pix->height()*pix->width()*pix->depth())/8 ); 92 insert( path, pix, (pix->height()*pix->width()*pix->depth())/8 );
87} 93}
diff --git a/noncore/graphics/opie-eye/lib/imagecache.h b/noncore/graphics/opie-eye/lib/imagecache.h
index 076ecd3..939247a 100644
--- a/noncore/graphics/opie-eye/lib/imagecache.h
+++ b/noncore/graphics/opie-eye/lib/imagecache.h
@@ -1,46 +1,51 @@
1/* 1/*
2 * GPLv2 zecke@handhelds.org 2 * GPLv2 zecke@handhelds.org
3 * No WArranty... 3 * No WArranty...
4 */ 4 */
5 5
6#ifndef PHUNK_IMAGE_CACHE_H 6#ifndef PHUNK_IMAGE_CACHE_H
7#define PHUNK_IMAGE_CACHE_H 7#define PHUNK_IMAGE_CACHE_H
8 8
9#include <qimage.h> 9#include <qimage.h>
10#include <qpixmap.h> 10#include <qpixmap.h>
11#include <qcache.h> 11#include <qcache.h>
12 12
13 13
14class PImageCache : public QCache<QImage> { 14class PImageCache : public QCache<QImage> {
15private: 15private:
16 PImageCache(); 16 PImageCache();
17 ~PImageCache(); 17 ~PImageCache();
18 18
19public: 19public:
20 static PImageCache *self(); 20 static PImageCache *self();
21 QImage* cachedImage( const QString& path, int orientation = 3, int max = 0); //const; 21 QImage* cachedImage( const QString& path, int orientation = 3, int max = 0); //const;
22 void insertImage( const QString& path, const QImage &, int orien = 3, int max = 0); 22 void insertImage( const QString& path, const QImage &, int orien = 3, int max = 0);
23 void insertImage( const QString& path, const QImage *, int orien=3, int max = 0 ); 23 void insertImage( const QString& path, const QImage *, int orien=3, int max = 0 );
24}; 24};
25 25
26 26
27class PPixmapCache : public QCache<QPixmap> { 27class PPixmapCache : public QCache<QPixmap> {
28private: 28private:
29 PPixmapCache(); 29 PPixmapCache();
30 ~PPixmapCache(); 30 ~PPixmapCache();
31
32 unsigned int m_MaxImages;
33
31public: 34public:
32 static PPixmapCache *self(); 35 static PPixmapCache *self();
33 QPixmap* cachedImage( const QString& path, int width, int height ); 36 QPixmap* cachedImage( const QString& path, int width, int height );
34 void insertImage( const QString& path, const QPixmap &, int width, int height ); 37 void insertImage( const QString& path, const QPixmap &, int width, int height );
35 void insertImage( const QString& path, const QPixmap *, int width, int height ); 38 void insertImage( const QString& path, const QPixmap *, int width, int height );
39 void setMaxImages(unsigned int aMax);
40 unsigned int maxImages()const{return m_MaxImages;}
36}; 41};
37 42
38inline void PPixmapCache::insertImage( const QString& path, const QPixmap& p, int width, int height ) { 43inline void PPixmapCache::insertImage( const QString& path, const QPixmap& p, int width, int height ) {
39 insertImage( path, new QPixmap( p ), width, height ); 44 insertImage( path, new QPixmap( p ), width, height );
40} 45}
41 46
42inline void PImageCache::insertImage( const QString& path, const QImage& p, int width, int height ) { 47inline void PImageCache::insertImage( const QString& path, const QImage& p, int width, int height ) {
43 insertImage( path, new QImage( p ), width, height ); 48 insertImage( path, new QImage( p ), width, height );
44} 49}
45 50
46#endif 51#endif