-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp index c037d0d..f173ecc 100644 --- a/noncore/graphics/opie-eye/gui/iconview.cpp +++ b/noncore/graphics/opie-eye/gui/iconview.cpp | |||
@@ -75,69 +75,61 @@ namespace { | |||
75 | QPixmap *pixmap()const; | 75 | QPixmap *pixmap()const; |
76 | void setText( const QString& ); | 76 | void setText( const QString& ); |
77 | }; | 77 | }; |
78 | class ThumbViewItem : public IconViewItem { | 78 | class ThumbViewItem : public IconViewItem { |
79 | ThumbViewItem( QIconView*, const QString& path, const QString& name, int a_iconsize, bool isDir = false ); | 79 | ThumbViewItem( QIconView*, const QString& path, const QString& name, int a_iconsize, bool isDir = false ); |
80 | QPixmap *pixmap()const; | 80 | QPixmap *pixmap()const; |
81 | void setText( const QString& ); | 81 | void setText( const QString& ); |
82 | }; | 82 | }; |
83 | 83 | ||
84 | 84 | ||
85 | /* | 85 | /* |
86 | * If we request an Image or String | 86 | * If we request an Image or String |
87 | * we add it to the map | 87 | * we add it to the map |
88 | */ | 88 | */ |
89 | static QMap<QString, IconViewItem*> g_stringInf; | 89 | static QMap<QString, IconViewItem*> g_stringInf; |
90 | static QMap<QString, IconViewItem*> g_stringPix; | 90 | static QMap<QString, IconViewItem*> g_stringPix; |
91 | 91 | ||
92 | IconViewItem::IconViewItem( QIconView* view,const QString& path, | 92 | IconViewItem::IconViewItem( QIconView* view,const QString& path, |
93 | const QString& name, int a_iconsize, bool isDir) | 93 | const QString& name, int a_iconsize, bool isDir) |
94 | : QIconViewItem( view, name ), m_path( path ), m_isDir( isDir ), | 94 | : QIconViewItem( view, name ), m_path( path ), m_isDir( isDir ), |
95 | m_noInfo( false ),m_textOnly(false),m_Pixset(false) | 95 | m_noInfo( false ),m_textOnly(false),m_Pixset(false) |
96 | { | 96 | { |
97 | m_iconsize = a_iconsize; | 97 | m_iconsize = a_iconsize; |
98 | if ( isDir ) { | 98 | if ( isDir ) { |
99 | if (_dirPix && _dirPix->width()!=m_iconsize) { | ||
100 | delete _dirPix; | ||
101 | _dirPix = 0; | ||
102 | } | ||
103 | if (!_dirPix ) { | 99 | if (!_dirPix ) { |
104 | _dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser")); | 100 | _dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser")); |
105 | } | 101 | } |
106 | } else { | 102 | } else { |
107 | if (!_unkPix ) { | 103 | if (!_unkPix ) { |
108 | _unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) ); | 104 | _unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) ); |
109 | } | 105 | } |
110 | } | 106 | } |
111 | check_pix(); | 107 | check_pix(); |
112 | } | 108 | } |
113 | 109 | ||
114 | inline void IconViewItem::check_pix()const | 110 | inline void IconViewItem::check_pix()const |
115 | { | 111 | { |
116 | if (_cpyPix && _cpyPix->width()!=m_iconsize) { | ||
117 | delete _cpyPix; | ||
118 | _cpyPix = 0; | ||
119 | } | ||
120 | if (_dirPix && _dirPix->width()>m_iconsize) { | 112 | if (_dirPix && _dirPix->width()>m_iconsize) { |
121 | QPixmap*Pix = new QPixmap(*_dirPix); | 113 | QPixmap*Pix = new QPixmap(*_dirPix); |
122 | Pix->resize(m_iconsize,m_iconsize); | 114 | Pix->resize(m_iconsize,m_iconsize); |
123 | delete _dirPix; | 115 | delete _dirPix; |
124 | _dirPix = Pix; | 116 | _dirPix = Pix; |
125 | } | 117 | } |
126 | if (!_cpyPix && _unkPix) { | 118 | if (!_cpyPix && _unkPix) { |
127 | if (_unkPix->width()>=m_iconsize) { | 119 | if (_unkPix->width()>=m_iconsize) { |
128 | _cpyPix = new QPixmap(*_unkPix); | 120 | _cpyPix = new QPixmap(*_unkPix); |
129 | if (_unkPix->width()>m_iconsize) | 121 | if (_unkPix->width()>m_iconsize) |
130 | _cpyPix->resize(m_iconsize,m_iconsize); | 122 | _cpyPix->resize(m_iconsize,m_iconsize); |
131 | } else { | 123 | } else { |
132 | _cpyPix = new QPixmap(m_iconsize,m_iconsize); | 124 | _cpyPix = new QPixmap(m_iconsize,m_iconsize); |
133 | _cpyPix->fill(); | 125 | _cpyPix->fill(); |
134 | QPainter pa(_cpyPix); | 126 | QPainter pa(_cpyPix); |
135 | int offset = (m_iconsize-_unkPix->width())/2; | 127 | int offset = (m_iconsize-_unkPix->width())/2; |
136 | int offy = (m_iconsize-_unkPix->height())/2; | 128 | int offy = (m_iconsize-_unkPix->height())/2; |
137 | if (offy<0) offy=0; | 129 | if (offy<0) offy=0; |
138 | pa.drawPixmap(offset,offy,*_unkPix); | 130 | pa.drawPixmap(offset,offy,*_unkPix); |
139 | pa.end(); | 131 | pa.end(); |
140 | } | 132 | } |
141 | } | 133 | } |
142 | } | 134 | } |
143 | 135 | ||
@@ -402,51 +394,63 @@ void PIconView::slotTrash() { | |||
402 | tr("the Image %1" ).arg(pa))) | 394 | tr("the Image %1" ).arg(pa))) |
403 | return | 395 | return |
404 | 396 | ||
405 | 397 | ||
406 | currentView()->dirLister()->deleteImage( pa ); | 398 | currentView()->dirLister()->deleteImage( pa ); |
407 | delete m_view->currentItem(); | 399 | delete m_view->currentItem(); |
408 | } | 400 | } |
409 | 401 | ||
410 | /* | 402 | /* |
411 | * see what views are available | 403 | * see what views are available |
412 | */ | 404 | */ |
413 | void PIconView::loadViews() { | 405 | void PIconView::loadViews() { |
414 | ViewMap::Iterator it; | 406 | ViewMap::Iterator it; |
415 | ViewMap* map = viewMap(); | 407 | ViewMap* map = viewMap(); |
416 | for ( it = map->begin(); it != map->end(); ++it ) | 408 | for ( it = map->begin(); it != map->end(); ++it ) |
417 | m_views->insertItem( it.key() ); | 409 | m_views->insertItem( it.key() ); |
418 | } | 410 | } |
419 | 411 | ||
420 | void PIconView::resetView() { | 412 | void PIconView::resetView() { |
421 | m_internalReset = true; | 413 | m_internalReset = true; |
422 | // Also invalidate the cache. We can't cancel the operations anyway | 414 | // Also invalidate the cache. We can't cancel the operations anyway |
423 | g_stringPix.clear(); | 415 | g_stringPix.clear(); |
424 | g_stringInf.clear(); | 416 | g_stringInf.clear(); |
425 | if (m_mode>1) { | 417 | if (m_mode>1) { |
418 | int osize = m_iconsize; | ||
426 | m_iconsize = m_cfg->readNumEntry("iconsize", 32); | 419 | m_iconsize = m_cfg->readNumEntry("iconsize", 32); |
427 | if (m_iconsize<12)m_iconsize = 12; | 420 | if (m_iconsize<12)m_iconsize = 12; |
428 | if (m_iconsize>64)m_iconsize = 64; | 421 | if (m_iconsize>64)m_iconsize = 64; |
422 | if (osize != m_iconsize) { | ||
423 | if (_dirPix){ | ||
424 | delete _dirPix; | ||
425 | _dirPix = 0; | ||
426 | } | ||
427 | if (_cpyPix){ | ||
428 | delete _cpyPix; | ||
429 | _cpyPix = 0; | ||
430 | } | ||
431 | calculateGrid(); | ||
432 | } | ||
429 | } else { | 433 | } else { |
430 | m_iconsize = 64; | 434 | m_iconsize = 64; |
431 | } | 435 | } |
432 | slotViewChanged(m_views->currentItem()); | 436 | slotViewChanged(m_views->currentItem()); |
433 | m_internalReset = false; | 437 | m_internalReset = false; |
434 | } | 438 | } |
435 | 439 | ||
436 | /* | 440 | /* |
437 | *swicth view reloadDir and connect signals | 441 | *swicth view reloadDir and connect signals |
438 | */ | 442 | */ |
439 | void PIconView::slotViewChanged( int i) { | 443 | void PIconView::slotViewChanged( int i) { |
440 | if (!m_views->count() ) { | 444 | if (!m_views->count() ) { |
441 | setCurrentView( 0l); | 445 | setCurrentView( 0l); |
442 | return; | 446 | return; |
443 | } | 447 | } |
444 | 448 | ||
445 | PDirView* cur = currentView(); | 449 | PDirView* cur = currentView(); |
446 | if (cur) delete cur; | 450 | if (cur) delete cur; |
447 | QString str = m_views->text(i); | 451 | QString str = m_views->text(i); |
448 | ViewMap* map = viewMap(); | 452 | ViewMap* map = viewMap(); |
449 | if (!map) { | 453 | if (!map) { |
450 | setCurrentView(0l); | 454 | setCurrentView(0l); |
451 | return; | 455 | return; |
452 | } | 456 | } |
@@ -786,80 +790,92 @@ void PIconView::slotImageInfo( const QString& name) { | |||
786 | PDirLister *lister = currentView()->dirLister(); | 790 | PDirLister *lister = currentView()->dirLister(); |
787 | QString r_name = lister->nameToFname(name); | 791 | QString r_name = lister->nameToFname(name); |
788 | emit sig_showInfo(r_name ); | 792 | emit sig_showInfo(r_name ); |
789 | } | 793 | } |
790 | 794 | ||
791 | 795 | ||
792 | void PIconView::slotChangeMode( int mode ) { | 796 | void PIconView::slotChangeMode( int mode ) { |
793 | if ( mode >= 1 && mode <= 3 ) { | 797 | if ( mode >= 1 && mode <= 3 ) { |
794 | m_mode = mode; | 798 | m_mode = mode; |
795 | m_cfg->writeEntry("ListViewMode", m_mode); | 799 | m_cfg->writeEntry("ListViewMode", m_mode); |
796 | /* performance! */ | 800 | /* performance! */ |
797 | m_view->clear(); | 801 | m_view->clear(); |
798 | if (m_mode >1) { | 802 | if (m_mode >1) { |
799 | m_view->setResizeMode(QIconView::Adjust); | 803 | m_view->setResizeMode(QIconView::Adjust); |
800 | } else { | 804 | } else { |
801 | m_view->setResizeMode(QIconView::Fixed); | 805 | m_view->setResizeMode(QIconView::Fixed); |
802 | } | 806 | } |
803 | if (m_mode==1) { | 807 | if (m_mode==1) { |
804 | m_iconsize = 64; | 808 | m_iconsize = 64; |
805 | } else { | 809 | } else { |
806 | m_iconsize = m_cfg->readNumEntry("iconsize", 32); | 810 | m_iconsize = m_cfg->readNumEntry("iconsize", 32); |
807 | if (m_iconsize<12)m_iconsize = 12; | 811 | if (m_iconsize<12)m_iconsize = 12; |
808 | if (m_iconsize>64)m_iconsize = 64; | 812 | if (m_iconsize>64)m_iconsize = 64; |
809 | } | 813 | } |
810 | 814 | if (_dirPix){ | |
815 | delete _dirPix; | ||
816 | _dirPix = 0; | ||
817 | } | ||
818 | if (_cpyPix){ | ||
819 | delete _cpyPix; | ||
820 | _cpyPix = 0; | ||
821 | } | ||
811 | calculateGrid(); | 822 | calculateGrid(); |
812 | slotReloadDir(); | 823 | slotReloadDir(); |
813 | } | 824 | } |
814 | } | 825 | } |
815 | 826 | ||
816 | 827 | ||
817 | void PIconView::resizeEvent( QResizeEvent* re ) { | 828 | void PIconView::resizeEvent( QResizeEvent* re ) { |
818 | calculateGrid(re); | 829 | calculateGrid(re); |
819 | QVBox::resizeEvent( re ); | 830 | QVBox::resizeEvent( re ); |
820 | //calculateGrid(); | 831 | //calculateGrid(); |
821 | } | 832 | } |
822 | 833 | ||
823 | 834 | ||
824 | void PIconView::calculateGrid(QResizeEvent* re) | 835 | void PIconView::calculateGrid(QResizeEvent* re) |
825 | { | 836 | { |
826 | int viewerWidth; | 837 | int viewerWidth; |
827 | if (re) { | 838 | if (re) { |
828 | viewerWidth=re->size().width(); | 839 | viewerWidth=re->size().width(); |
829 | } else { | 840 | } else { |
830 | int dw = QApplication::desktop()->width(); | 841 | int dw = QApplication::desktop()->width(); |
831 | viewerWidth = dw-style().scrollBarExtent().width(); | 842 | viewerWidth = dw-style().scrollBarExtent().width(); |
832 | } | 843 | } |
833 | 844 | ||
834 | QIconView::ItemTextPos pos; | 845 | QIconView::ItemTextPos pos; |
835 | switch( m_mode ) { | 846 | switch( m_mode ) { |
836 | case 2: | 847 | case 2: |
837 | pos = QIconView::Bottom; | 848 | pos = QIconView::Bottom; |
838 | break; | 849 | break; |
839 | case 3: | 850 | case 3: |
840 | case 1: | 851 | case 1: |
841 | default: | 852 | default: |
842 | pos = QIconView::Right; | 853 | pos = QIconView::Right; |
843 | break; | 854 | break; |
844 | } | 855 | } |
856 | int cache = 0; | ||
845 | m_view->setItemTextPos( pos ); | 857 | m_view->setItemTextPos( pos ); |
846 | switch (m_mode) { | 858 | switch (m_mode) { |
847 | case 2: | 859 | case 2: |
860 | m_view->setSpacing(2); | ||
848 | m_view->setGridX(m_iconsize); | 861 | m_view->setGridX(m_iconsize); |
849 | m_view->setGridY(-1); | 862 | m_view->setGridY(-1); |
850 | PPixmapCache::self()->setMaxImages(40); | 863 | cache = (int)((double)64/(double)m_iconsize*40.0); |
864 | odebug << "cache size: " << cache << oendl; | ||
865 | PPixmapCache::self()->setMaxImages(cache); | ||
851 | break; | 866 | break; |
852 | case 3: | 867 | case 3: |
868 | m_view->setSpacing(10); | ||
853 | m_view->setGridX( fontMetrics().width("testimage.jpg")+20); | 869 | m_view->setGridX( fontMetrics().width("testimage.jpg")+20); |
854 | m_view->setGridY(8); | 870 | m_view->setGridY(8); |
855 | PPixmapCache::self()->setMaxImages(2); | 871 | PPixmapCache::self()->setMaxImages(2); |
856 | break; | 872 | break; |
857 | case 1: | 873 | case 1: |
858 | default: | 874 | default: |
875 | m_view->setSpacing(10); | ||
859 | m_view->setGridX( viewerWidth-3*m_view->spacing()); | 876 | m_view->setGridX( viewerWidth-3*m_view->spacing()); |
860 | m_view->setGridY( fontMetrics().height()*2+40 ); | 877 | m_view->setGridY( fontMetrics().height()*2+40 ); |
861 | PPixmapCache::self()->setMaxImages(20); | 878 | PPixmapCache::self()->setMaxImages(20); |
862 | break; | 879 | break; |
863 | } | 880 | } |
864 | m_view->setSpacing(10); | ||
865 | } | 881 | } |