author | alwin <alwin> | 2004-11-06 02:57:25 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-11-06 02:57:25 (UTC) |
commit | 90d458c63d274a66ca427710b88e2f090a0ab11b (patch) (side-by-side diff) | |
tree | 582f2c051681e5c10313a9a79fdc7b544c288f26 /noncore | |
parent | a93a0ee1fce8b2fb7abac475a97dac8001aed8e0 (diff) | |
download | opie-90d458c63d274a66ca427710b88e2f090a0ab11b.zip opie-90d458c63d274a66ca427710b88e2f090a0ab11b.tar.gz opie-90d458c63d274a66ca427710b88e2f090a0ab11b.tar.bz2 |
a lots of tests with the iconview, user can now setup the prefered icon-size,
but still some rewrites/redesigns needed. QIconView(Item) is sometimes horrible.
some default-values changed
-rw-r--r-- | noncore/graphics/opie-eye/gui/basesetup.cpp | 28 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/basesetup.h | 3 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.cpp | 173 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.h | 3 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/mainwindow.cpp | 4 |
5 files changed, 168 insertions, 43 deletions
diff --git a/noncore/graphics/opie-eye/gui/basesetup.cpp b/noncore/graphics/opie-eye/gui/basesetup.cpp index 20dda5a..fdf3466 100644 --- a/noncore/graphics/opie-eye/gui/basesetup.cpp +++ b/noncore/graphics/opie-eye/gui/basesetup.cpp @@ -10,12 +10,13 @@ BaseSetup::BaseSetup(Opie::Core::OConfig *a_cfg,QWidget * parent, const char * n { setFrameStyle(Box|Raised); m_cfg = a_cfg; m_MainLayout = new QVBoxLayout( this, 11, 6, "m_MainLayout"); m_SlidetimeLayout = new QGridLayout( 0, 1, 1, 0, 6, "m_SlidetimeLayout"); + m_IconsizeLayout = new QGridLayout( 0, 1, 1, 0, 6, "m_IconsizeLayout"); m_SlideShowTime = new QSpinBox( this, "m_SlideShowTime" ); m_SlideShowTime->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed)); m_SlideShowTime->setButtonSymbols( QSpinBox::PlusMinus ); m_SlideShowTime->setMaxValue( 60 ); m_SlideShowTime->setMinValue(0); @@ -26,35 +27,54 @@ BaseSetup::BaseSetup(Opie::Core::OConfig *a_cfg,QWidget * parent, const char * n m_SlidetimeLabel = new QLabel( this, "m_SlidetimeLabel" ); m_SlidetimeLabel->setText(tr("Slideshow timeout:")); m_SlidetimeLayout->addWidget( m_SlidetimeLabel, 0, 0 ); m_MainLayout->addLayout( m_SlidetimeLayout ); + m_Iconsize = new QSpinBox( this, "m_Iconsize" ); + m_Iconsize->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed)); + m_Iconsize->setButtonSymbols( QSpinBox::PlusMinus ); + m_Iconsize->setMaxValue( 64 ); + m_Iconsize->setMinValue(12); + m_Iconsize->setValue( 32 ); + m_Iconsize->setSuffix(tr(" pixel")); + m_IconsizeLayout->addWidget( m_Iconsize, 0, 1 ); + m_IconsizeLabel = new QLabel( this, "m_IconsizeLabel" ); + m_IconsizeLabel->setText(tr("Size of thumbnails:")); + m_IconsizeLayout->addWidget( m_IconsizeLabel, 0, 0 ); + m_MainLayout->addLayout(m_IconsizeLayout); + + #if 0 m_ShowToolBar = new QCheckBox( this, "m_ShowToolBar" ); m_ShowToolBar->setText(tr("Show toolbar on startup")); m_MainLayout->addWidget( m_ShowToolBar ); #endif m_SaveStateAuto = new QCheckBox( this, "m_SaveStateAuto" ); m_SaveStateAuto->setText(tr("Save status of fullscreen/autorotate")); m_MainLayout->addWidget( m_SaveStateAuto ); spacer1 = new QSpacerItem( 20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding ); m_MainLayout->addItem( spacer1 ); - int stime = m_cfg->readNumEntry("base_slideshowtimeout",2); + int stime = m_cfg->readNumEntry("slideshowtimeout",2); if (stime<0) stime=2; if (stime>60) stime=60; m_SlideShowTime->setValue(stime); - m_SaveStateAuto->setChecked(m_cfg->readBoolEntry("base_savestatus",false)); + m_SaveStateAuto->setChecked(m_cfg->readBoolEntry("savestatus",true)); + stime = m_cfg->readNumEntry("iconsize", 32); + if (stime<12)stime = 12; + if (stime>64)stime = 64; + m_Iconsize->setValue(stime); } BaseSetup::~BaseSetup() { } void BaseSetup::save_values() { if (!m_cfg) return; - m_cfg->writeEntry("base_slideshowtimeout",m_SlideShowTime->value()); - m_cfg->writeEntry("base_savestatus",m_SaveStateAuto->isChecked()); + m_cfg->writeEntry("slideshowtimeout",m_SlideShowTime->value()); + m_cfg->writeEntry("savestatus",m_SaveStateAuto->isChecked()); + m_cfg->writeEntry("iconsize",m_Iconsize->value()); } diff --git a/noncore/graphics/opie-eye/gui/basesetup.h b/noncore/graphics/opie-eye/gui/basesetup.h index c343f88..95929f2 100644 --- a/noncore/graphics/opie-eye/gui/basesetup.h +++ b/noncore/graphics/opie-eye/gui/basesetup.h @@ -27,9 +27,12 @@ protected: QVBoxLayout * m_MainLayout; QGridLayout * m_SlidetimeLayout; QSpinBox * m_SlideShowTime; QLabel * m_SlidetimeLabel; QCheckBox *m_SaveStateAuto; QSpacerItem *spacer1; + QGridLayout * m_IconsizeLayout; + QSpinBox * m_Iconsize; + QLabel * m_IconsizeLabel; }; #endif diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp index eafff1d..c037d0d 100644 --- a/noncore/graphics/opie-eye/gui/iconview.cpp +++ b/noncore/graphics/opie-eye/gui/iconview.cpp @@ -38,16 +38,17 @@ using Opie::Core::OKeyConfigItem; /* * The Icons, Request Cache and IconViewItem for the IconView */ namespace { static QPixmap* _dirPix = 0; static QPixmap* _unkPix = 0; + static QPixmap* _cpyPix = 0; static QPixmap* _emptyPix = 0; class IconViewItem : public QIconViewItem { public: - IconViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false); + IconViewItem( QIconView*, const QString& path, const QString& name,int a_iconsize, bool isDir = false); QPixmap* pixmap()const; QString path()const { return m_path; } bool isDir()const { return m_isDir; } void setText( const QString& ); bool textOnly()const{return m_textOnly;} void setTextOnly(bool how){m_textOnly=how;} @@ -55,28 +56,30 @@ namespace { virtual void setPixmap( const QPixmap & icon, bool recalc, bool redraw = TRUE ); /* just for starting recalc of item rect! */ virtual void setPixmap( const QPixmap & icon); protected: mutable QPixmap* m_pix; + int m_iconsize; + void check_pix()const; private: QString m_path; bool m_isDir : 1; bool m_noInfo :1; bool m_textOnly:1; bool m_NameOnly:1; bool m_Pixset:1; }; class TextViewItem : public IconViewItem { - TextViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false ); + TextViewItem( QIconView*, const QString& path, const QString& name, int a_iconsize , bool isDir = false); QPixmap *pixmap()const; void setText( const QString& ); }; class ThumbViewItem : public IconViewItem { - ThumbViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false ); + ThumbViewItem( QIconView*, const QString& path, const QString& name, int a_iconsize, bool isDir = false ); QPixmap *pixmap()const; void setText( const QString& ); }; /* @@ -84,20 +87,61 @@ namespace { * we add it to the map */ static QMap<QString, IconViewItem*> g_stringInf; static QMap<QString, IconViewItem*> g_stringPix; IconViewItem::IconViewItem( QIconView* view,const QString& path, - const QString& name, bool isDir ) + const QString& name, int a_iconsize, bool isDir) : QIconViewItem( view, name ), m_path( path ), m_isDir( isDir ), m_noInfo( false ),m_textOnly(false),m_Pixset(false) { - if ( isDir && !_dirPix ) - _dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser")); - else if ( !isDir && !_unkPix ) - _unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) ); + m_iconsize = a_iconsize; + if ( isDir ) { + if (_dirPix && _dirPix->width()!=m_iconsize) { + delete _dirPix; + _dirPix = 0; + } + if (!_dirPix ) { + _dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser")); + } + } else { + if (!_unkPix ) { + _unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) ); + } + } + check_pix(); + } + + inline void IconViewItem::check_pix()const + { + if (_cpyPix && _cpyPix->width()!=m_iconsize) { + delete _cpyPix; + _cpyPix = 0; + } + if (_dirPix && _dirPix->width()>m_iconsize) { + QPixmap*Pix = new QPixmap(*_dirPix); + Pix->resize(m_iconsize,m_iconsize); + delete _dirPix; + _dirPix = Pix; + } + if (!_cpyPix && _unkPix) { + if (_unkPix->width()>=m_iconsize) { + _cpyPix = new QPixmap(*_unkPix); + if (_unkPix->width()>m_iconsize) + _cpyPix->resize(m_iconsize,m_iconsize); + } else { + _cpyPix = new QPixmap(m_iconsize,m_iconsize); + _cpyPix->fill(); + QPainter pa(_cpyPix); + int offset = (m_iconsize-_unkPix->width())/2; + int offy = (m_iconsize-_unkPix->height())/2; + if (offy<0) offy=0; + pa.drawPixmap(offset,offy,*_unkPix); + pa.end(); + } + } } inline void IconViewItem::setPixmap( const QPixmap & , bool, bool ) { m_Pixset = true; calcRect(text()); @@ -118,22 +162,23 @@ namespace { return _emptyPix; } if ( m_isDir ) return _dirPix; else{ if (!m_noInfo && !g_stringInf.contains( m_path ) ) { - currentView()->dirLister()->imageInfo( m_path ); g_stringInf.insert( m_path, const_cast<IconViewItem*>(this)); + currentView()->dirLister()->imageInfo( m_path ); } - m_pix = PPixmapCache::self()->cachedImage( m_path, 64, 64 ); + m_pix = PPixmapCache::self()->cachedImage( m_path, m_iconsize, m_iconsize ); if (!m_pix && !g_stringPix.contains( m_path )) { - currentView()->dirLister()->thumbNail( m_path, 64, 64 ); + check_pix(); g_stringPix.insert( m_path, const_cast<IconViewItem*>(this)); + currentView()->dirLister()->thumbNail( m_path, m_iconsize, m_iconsize); } - return m_pix ? m_pix : _unkPix; + return m_pix ? m_pix : _cpyPix; } } inline void IconViewItem::setText( const QString& str ) { QString text = QIconViewItem::text()+"\n"+str; m_noInfo = true; QIconViewItem::setText( text ); @@ -150,12 +195,13 @@ PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg ) { { QCopEnvelope( "QPE/Application/opie-eye_slave", "refUp()" ); } m_path = QDir::homeDirPath(); m_mode = 0; + m_iconsize = 32; m_internalReset = false; QHBox *hbox = new QHBox( this ); QLabel* lbl = new QLabel( hbox ); lbl->setText( tr("View as" ) ); @@ -172,12 +218,20 @@ PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg ) m_mode = m_cfg->readNumEntry("ListViewMode", 1); QString lastView = m_cfg->readEntry("LastView",""); if (m_mode < 1 || m_mode>3) m_mode = 1; m_view->setItemTextPos( QIconView::Right ); + if (m_mode >1) { + m_view->setResizeMode(QIconView::Adjust); + } else { + m_view->setResizeMode(QIconView::Fixed); + } + m_iconsize = m_cfg->readNumEntry("iconsize", 32); + if (m_iconsize<12)m_iconsize = 12; + if (m_iconsize>64)m_iconsize = 64; calculateGrid(); initKeys(); loadViews(); @@ -277,23 +331,23 @@ void PIconView::slotChangeDir(const QString& path) { lister->setStartPath( path ); m_path = lister->currentPath(); m_view->viewport()->setUpdatesEnabled( false ); m_view->clear(); + // Also invalidate the cache. We can't cancel the operations anyway + g_stringPix.clear(); + g_stringInf.clear(); + /* * add files and folders */ addFolders( lister->folders() ); addFiles( lister->files() ); m_view->viewport()->setUpdatesEnabled( true ); - // Also invalidate the cache. We can't cancel the operations anyway - g_stringPix.clear(); - g_stringInf.clear(); - // looks ugly static_cast<QMainWindow*>(parent())->setCaption( QObject::tr("%1 - O View", "Name of the dir").arg( m_path ) ); } /** * get the current file name @@ -362,12 +416,22 @@ void PIconView::loadViews() { for ( it = map->begin(); it != map->end(); ++it ) m_views->insertItem( it.key() ); } void PIconView::resetView() { m_internalReset = true; + // Also invalidate the cache. We can't cancel the operations anyway + g_stringPix.clear(); + g_stringInf.clear(); + if (m_mode>1) { + m_iconsize = m_cfg->readNumEntry("iconsize", 32); + if (m_iconsize<12)m_iconsize = 12; + if (m_iconsize>64)m_iconsize = 64; + } else { + m_iconsize = 64; + } slotViewChanged(m_views->currentItem()); m_internalReset = false; } /* *swicth view reloadDir and connect signals @@ -410,14 +474,15 @@ void PIconView::slotViewChanged( int i) { this, SLOT(slotEnd()) ); /* reload now with default Path * but only if it isn't a reset like from setupdlg */ - if (!m_internalReset) + if (!m_internalReset) { m_path = lis->defaultPath(); + } QTimer::singleShot( 0, this, SLOT(slotReloadDir())); } void PIconView::slotReloadDir() { slotChangeDir( m_path ); @@ -429,13 +494,13 @@ void PIconView::slotReloadDir() { */ void PIconView::addFolders( const QStringList& lst) { QStringList::ConstIterator it; IconViewItem * _iv; for(it=lst.begin(); it != lst.end(); ++it ) { - _iv = new IconViewItem( m_view, m_path+"/"+(*it), (*it), true ); + _iv = new IconViewItem( m_view, m_path+"/"+(*it), (*it),m_iconsize, true ); if (m_mode==3) _iv->setTextOnly(true); } } void PIconView::addFiles( const QStringList& lst) { QStringList::ConstIterator it; @@ -443,14 +508,14 @@ void PIconView::addFiles( const QStringList& lst) { QPixmap*m_pix = 0; QString pre = ""; if (!m_path.isEmpty()) { pre = m_path+"/"; } for (it=lst.begin(); it!= lst.end(); ++it ) { - m_pix = PPixmapCache::self()->cachedImage( pre+(*it), 64, 64 ); - _iv = new IconViewItem( m_view, pre+(*it), (*it) ); + m_pix = PPixmapCache::self()->cachedImage( pre+(*it), m_iconsize, m_iconsize ); + _iv = new IconViewItem( m_view, pre+(*it), (*it),m_iconsize ); if (m_mode==3) { _iv->setTextOnly(true); _iv->setPixmap(QPixmap()); @@ -521,18 +586,33 @@ void PIconView::slotThumbNail(const QString& _path, const QPixmap &pix) { if ( item->intersects(QRect( m_view->contentsX(),m_view->contentsY(), m_view->contentsWidth(), m_view->contentsHeight() ) ) ) m_updatet = true; if (pix.width()>0) { - PPixmapCache::self()->insertImage( _path, pix, 64, 64 ); - item->setPixmap(pix,true); + if (pix.width()<m_iconsize) { + QPixmap p(m_iconsize,m_iconsize); + p.fill(); + QPainter pa(&p); + int offset = (m_iconsize-pix.width())/2; + int offy = (m_iconsize-pix.height())/2; + if (offy<0) offy=0; + pa.drawPixmap(offset,offy,pix); + pa.end(); + PPixmapCache::self()->insertImage( _path, p, m_iconsize, m_iconsize ); + item->setPixmap(p,true); + } else { + PPixmapCache::self()->insertImage( _path, pix, m_iconsize, m_iconsize ); + item->setPixmap(pix,true); + } + } else { - PPixmapCache::self()->insertImage( _path, Resource::loadPixmap( "UnknownDocument" ), 64, 64 ); + PPixmapCache::self()->insertImage( _path, Resource::loadPixmap( "UnknownDocument" ), m_iconsize, m_iconsize ); } g_stringPix.remove( _path ); + m_view->arrangeItemsInGrid(true); } /* * FIXME rename */ @@ -688,13 +768,13 @@ void PIconView::slotStartSlide() { if (isDir) { if (!slotShowFirst()) return; } else { slotShowImage( name ); } - int t = m_cfg->readNumEntry("base_slideshowtimeout", 2); + int t = m_cfg->readNumEntry("slideshowtimeout", 2); emit sig_startslide(t); } void PIconView::slotImageInfo() { bool isDir = false; QString name = currentFileName(isDir); @@ -707,32 +787,52 @@ void PIconView::slotImageInfo( const QString& name) { QString r_name = lister->nameToFname(name); emit sig_showInfo(r_name ); } void PIconView::slotChangeMode( int mode ) { - if ( mode >= 1 && mode <= 3 ) + if ( mode >= 1 && mode <= 3 ) { m_mode = mode; + m_cfg->writeEntry("ListViewMode", m_mode); + /* performance! */ + m_view->clear(); + if (m_mode >1) { + m_view->setResizeMode(QIconView::Adjust); + } else { + m_view->setResizeMode(QIconView::Fixed); + } + if (m_mode==1) { + m_iconsize = 64; + } else { + m_iconsize = m_cfg->readNumEntry("iconsize", 32); + if (m_iconsize<12)m_iconsize = 12; + if (m_iconsize>64)m_iconsize = 64; + } - m_cfg->writeEntry("ListViewMode", m_mode); - /* performance! */ - m_view->clear(); - calculateGrid(); - slotReloadDir(); + calculateGrid(); + slotReloadDir(); + } } void PIconView::resizeEvent( QResizeEvent* re ) { + calculateGrid(re); QVBox::resizeEvent( re ); - calculateGrid(); + //calculateGrid(); } -void PIconView::calculateGrid() { - int dw = QApplication::desktop()->width(); - int viewerWidth = dw-style().scrollBarExtent().width(); +void PIconView::calculateGrid(QResizeEvent* re) +{ + int viewerWidth; + if (re) { + viewerWidth=re->size().width(); + } else { + int dw = QApplication::desktop()->width(); + viewerWidth = dw-style().scrollBarExtent().width(); + } QIconView::ItemTextPos pos; switch( m_mode ) { case 2: pos = QIconView::Bottom; break; @@ -742,14 +842,14 @@ void PIconView::calculateGrid() { pos = QIconView::Right; break; } m_view->setItemTextPos( pos ); switch (m_mode) { case 2: - m_view->setGridX(50); - m_view->setGridY(20); + m_view->setGridX(m_iconsize); + m_view->setGridY(-1); PPixmapCache::self()->setMaxImages(40); break; case 3: m_view->setGridX( fontMetrics().width("testimage.jpg")+20); m_view->setGridY(8); PPixmapCache::self()->setMaxImages(2); @@ -758,7 +858,8 @@ void PIconView::calculateGrid() { default: m_view->setGridX( viewerWidth-3*m_view->spacing()); m_view->setGridY( fontMetrics().height()*2+40 ); PPixmapCache::self()->setMaxImages(20); break; } + m_view->setSpacing(10); } diff --git a/noncore/graphics/opie-eye/gui/iconview.h b/noncore/graphics/opie-eye/gui/iconview.h index bea35c2..b018c51 100644 --- a/noncore/graphics/opie-eye/gui/iconview.h +++ b/noncore/graphics/opie-eye/gui/iconview.h @@ -52,13 +52,13 @@ protected: private: void initKeys(); QString currentFileName(bool &isDir)const; QString nextFileName(bool &isDir)const; QString prevFileName(bool &isDir)const; void loadViews(); - void calculateGrid(); + void calculateGrid(QResizeEvent*e = 0); private slots: void slotDirUp(); void slotChangeDir(const QString&); void slotTrash(); void slotViewChanged( int ); @@ -93,9 +93,10 @@ private: QComboBox* m_views; QIconView* m_view; QString m_path; bool m_updatet : 1; int m_mode; bool m_internalReset:1; + int m_iconsize; }; #endif diff --git a/noncore/graphics/opie-eye/gui/mainwindow.cpp b/noncore/graphics/opie-eye/gui/mainwindow.cpp index 30c9bf1..67eb277 100644 --- a/noncore/graphics/opie-eye/gui/mainwindow.cpp +++ b/noncore/graphics/opie-eye/gui/mainwindow.cpp @@ -201,18 +201,18 @@ void PMainWindow::slotConfig() { it.key()->interfaceInfo()->writeConfig(it.data(), *m_cfg); delete it.key(); } if ( act ) { - m_view->resetView(); keyWid->save(); m_disp->manager()->save(); m_info->manager()->save(); m_view->manager()->save(); bSetup->save_values(); + m_view->resetView(); readConfig(); } delete keyWid; m_stack->raiseWidget(w); if (remdisp) { @@ -689,8 +689,8 @@ void PMainWindow::listviewselected(QAction*which) } emit changeListMode(val); } void PMainWindow::readConfig() { - autoSave =m_cfg->readBoolEntry("base_savestatus",true); + autoSave =m_cfg->readBoolEntry("savestatus",true); } |