author | alwin <alwin> | 2004-11-10 23:42:14 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-11-10 23:42:14 (UTC) |
commit | 79060b829e9231cddc0acfe2dd2b7da3f13dfbc4 (patch) (side-by-side diff) | |
tree | 0e7a6a344bfce1aaf76bedd939a9765014f6ec09 | |
parent | a57e46d9b290712fa1ff106a1be133f4f9751a96 (diff) | |
download | opie-79060b829e9231cddc0acfe2dd2b7da3f13dfbc4.zip opie-79060b829e9231cddc0acfe2dd2b7da3f13dfbc4.tar.gz opie-79060b829e9231cddc0acfe2dd2b7da3f13dfbc4.tar.bz2 |
lister modules can insert special widgets.
doc_dirlister will insert a category select widget
-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.cpp | 22 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.h | 2 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/iface/dirlister.h | 1 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/iface/dirview.h | 2 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/dcim/dcim_dirview.cpp | 5 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/dcim/dcim_dirview.h | 2 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/dir/dir_dirview.cpp | 5 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/dir/dir_dirview.h | 1 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/doc/doc_dirview.cpp | 7 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/doc/doc_dirview.h | 4 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/doc/doc_lister.cpp | 41 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/impl/doc/doc_lister.h | 7 |
12 files changed, 91 insertions, 8 deletions
diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp index 5472ead..948477c 100644 --- a/noncore/graphics/opie-eye/gui/iconview.cpp +++ b/noncore/graphics/opie-eye/gui/iconview.cpp @@ -182,38 +182,39 @@ namespace { /* * Set up the GUI.. initialize the slave set up gui * and also load a dir */ PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg ) : QVBox( wid ), m_cfg( cfg ), m_updatet( false ) { { QCopEnvelope( "QPE/Application/opie-eye_slave", "refUp()" ); } m_path = QDir::homeDirPath(); m_mode = 0; m_iconsize = 32; m_internalReset = false; + m_customWidget = 0; - QHBox *hbox = new QHBox( this ); - QLabel* lbl = new QLabel( hbox ); + m_hbox = new QHBox( this ); + QLabel* lbl = new QLabel( m_hbox ); lbl->setText( tr("View as" ) ); - m_views = new QComboBox( hbox, "View As" ); + m_views = new QComboBox( m_hbox, "View As" ); m_view= new QIconView( this ); connect(m_view, SIGNAL(clicked(QIconViewItem*) ), this, SLOT(slotClicked(QIconViewItem*)) ); connect(m_view, SIGNAL(returnPressed(QIconViewItem*)), this, SLOT(slotClicked(QIconViewItem*)) ); m_view->setArrangement( QIconView::LeftToRight ); 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) { @@ -436,63 +437,74 @@ void PIconView::resetView() { } else { m_iconsize = 64; } slotViewChanged(m_views->currentItem()); m_internalReset = false; } /* *swicth view reloadDir and connect signals */ void PIconView::slotViewChanged( int i) { if (!m_views->count() ) { setCurrentView( 0l); return; } + if (m_customWidget) { + delete m_customWidget; + m_customWidget = 0; + } PDirView* cur = currentView(); - if (cur) delete cur; + if (cur) { + delete cur; + } QString str = m_views->text(i); ViewMap* map = viewMap(); if (!map) { setCurrentView(0l); return; } if (map->find(str) == map->end()) { owarn << "Key not found" << oendl; setCurrentView(0l); return; } m_cfg->writeEntry("LastView",str); m_cfg->write(); cur = (*(*map)[str])(*m_cfg); setCurrentView( cur ); + m_customWidget = cur->widget(m_hbox); + if (m_customWidget) { + odebug << "Got a widget" << oendl; + m_customWidget->show(); + } /* connect to the signals of the lister */ PDirLister* lis = cur->dirLister(); connect(lis, SIGNAL(sig_thumbInfo(const QString&, const QString& )), this, SLOT( slotThumbInfo(const QString&, const QString&))); connect(lis, SIGNAL( sig_thumbNail(const QString&, const QPixmap&)), this, SLOT(slotThumbNail(const QString&, const QPixmap&))); connect(lis, SIGNAL(sig_start()), this, SLOT(slotStart())); connect(lis, SIGNAL(sig_end()) , this, SLOT(slotEnd()) ); - + connect(lis,SIGNAL(sig_reloadDir()),this,SLOT(slotReloadDir())); /* reload now with default Path * but only if it isn't a reset like from setupdlg */ if (!m_internalReset) { m_path = lis->defaultPath(); } QTimer::singleShot( 0, this, SLOT(slotReloadDir())); } void PIconView::slotReloadDir() { slotChangeDir( m_path ); } diff --git a/noncore/graphics/opie-eye/gui/iconview.h b/noncore/graphics/opie-eye/gui/iconview.h index b018c51..78dda58 100644 --- a/noncore/graphics/opie-eye/gui/iconview.h +++ b/noncore/graphics/opie-eye/gui/iconview.h @@ -84,19 +84,21 @@ private slots: /**/ void slotThumbInfo(const QString&, const QString&); void slotThumbNail(const QString&, const QPixmap&); void slotChangeMode( int ); private: Opie::Core::OKeyConfigManager *m_viewManager; Opie::Core::OConfig *m_cfg; QComboBox* m_views; QIconView* m_view; QString m_path; bool m_updatet : 1; int m_mode; bool m_internalReset:1; int m_iconsize; + QHBox*m_hbox; + QWidget*m_customWidget; }; #endif diff --git a/noncore/graphics/opie-eye/iface/dirlister.h b/noncore/graphics/opie-eye/iface/dirlister.h index 68e8495..6997f52 100644 --- a/noncore/graphics/opie-eye/iface/dirlister.h +++ b/noncore/graphics/opie-eye/iface/dirlister.h @@ -31,22 +31,23 @@ public slots: virtual void deleteImage( const QString& ) = 0; virtual void imageInfo( const QString&) = 0; virtual void fullImageInfo( const QString& ) = 0; virtual void thumbNail( const QString&, int max_wid, int max_h ) = 0; virtual QImage image( const QString&, Factor, int max = 0) = 0; signals: void sig_dirchanged(); void sig_filechanged(); void sig_start(); void sig_end(); // If this app ever happens to get multithreaded... void sig_thumbInfo( const QString&, const QString& ); void sig_fullInfo( const QString&, const QString& ); void sig_thumbNail( const QString&, const QPixmap& ); + void sig_reloadDir(); protected: virtual ~PDirLister(); }; #endif diff --git a/noncore/graphics/opie-eye/iface/dirview.h b/noncore/graphics/opie-eye/iface/dirview.h index 20d9062..3c05b60 100644 --- a/noncore/graphics/opie-eye/iface/dirview.h +++ b/noncore/graphics/opie-eye/iface/dirview.h @@ -1,36 +1,38 @@ /* * GPLv2 zecke@handhelds.org * No WArranty... */ #ifndef PHUNK_DIR_VIEW_H #define PHUNK_DIR_VIEW_H #include <qmap.h> #include <qpe/config.h> class PInterfaceInfo; class PDirLister; +class QWidget; struct PDirView { PDirView( const Config& ); virtual ~PDirView(); virtual PInterfaceInfo* interfaceInfo()const = 0; virtual PDirLister* dirLister()const = 0; + virtual QWidget* widget(QWidget*)=0; }; typedef PDirView* (*phunkViewCreateFunc )(const Config& ); typedef QMap<QString,phunkViewCreateFunc> ViewMap; ViewMap* viewMap(); PDirView* currentView(); void setCurrentView( PDirView* ); #define PHUNK_VIEW_INTERFACE( NAME, IMPL ) \ static PDirView *create_ ## IMPL( const Config& cfg ) { \ return new IMPL( cfg ); \ } \ static ViewMap::Iterator dummy_ ## IMPL = viewMap()->insert( NAME, create_ ## IMPL ); diff --git a/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.cpp b/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.cpp index e55c27a..3f6044f 100644 --- a/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.cpp +++ b/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.cpp @@ -13,16 +13,21 @@ DCIM_DirView::~DCIM_DirView() {} PInterfaceInfo* DCIM_DirView::interfaceInfo()const { if ( !m_info ) m_info = new DCIM_InterfaceInfo; return m_info; } PDirLister* DCIM_DirView::dirLister()const { if ( !m_lister ) m_lister = new DCIM_DirLister(); return m_lister; } + +QWidget* DCIM_DirView::widget(QWidget*) +{ + return 0L; +} diff --git a/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.h b/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.h index 7fc38ec..8394b34 100644 --- a/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.h +++ b/noncore/graphics/opie-eye/impl/dcim/dcim_dirview.h @@ -4,23 +4,23 @@ #ifndef DCIM_DIR_VIEW_H #define DCIM_DIR_VIEW_H #include <iface/dirview.h> /* * Implementation for USB Host Digital Cameras * like my Casio QV 500 and boring Yakumo */ struct DCIM_DirView : public PDirView { DCIM_DirView( const Config& ); ~DCIM_DirView(); PInterfaceInfo* interfaceInfo()const; PDirLister * dirLister ()const; - + virtual QWidget* widget(QWidget*); private: mutable PDirLister *m_lister; mutable PInterfaceInfo *m_info ; }; #endif diff --git a/noncore/graphics/opie-eye/impl/dir/dir_dirview.cpp b/noncore/graphics/opie-eye/impl/dir/dir_dirview.cpp index fc502d4..9c2c840 100644 --- a/noncore/graphics/opie-eye/impl/dir/dir_dirview.cpp +++ b/noncore/graphics/opie-eye/impl/dir/dir_dirview.cpp @@ -18,16 +18,21 @@ Dir_DirView::Dir_DirView( const Config& cfg) Dir_DirView::~Dir_DirView() { } PInterfaceInfo* Dir_DirView::interfaceInfo()const{ if (!m_info ) { m_info = new DirInterfaceInfo; } return m_info; } PDirLister* Dir_DirView::dirLister()const{ if (!m_lister ) { m_lister = new Dir_DirLister(m_cfg,m_recursive,m_recursive_depth); } return m_lister; } + +QWidget* Dir_DirView::widget(QWidget*) +{ + return 0L; +}
\ No newline at end of file diff --git a/noncore/graphics/opie-eye/impl/dir/dir_dirview.h b/noncore/graphics/opie-eye/impl/dir/dir_dirview.h index 89cf6c9..ae53a5c 100644 --- a/noncore/graphics/opie-eye/impl/dir/dir_dirview.h +++ b/noncore/graphics/opie-eye/impl/dir/dir_dirview.h @@ -1,26 +1,27 @@ /* * GPLv2 only zecke@handhelds.org */ #ifndef DIR_DIR_VIEW_H #define DIR_DIR_VIEW_H #include <iface/dirview.h> struct Dir_DirView : public PDirView { Dir_DirView( const Config& ); ~Dir_DirView(); PInterfaceInfo* interfaceInfo()const; PDirLister* dirLister()const; + virtual QWidget* widget(QWidget*); private: bool m_cfg : 1; bool m_recursive:1; int m_recursive_depth; mutable PDirLister* m_lister; mutable PInterfaceInfo *m_info; }; #endif diff --git a/noncore/graphics/opie-eye/impl/doc/doc_dirview.cpp b/noncore/graphics/opie-eye/impl/doc/doc_dirview.cpp index 0d6e25f..2cc897b 100644 --- a/noncore/graphics/opie-eye/impl/doc/doc_dirview.cpp +++ b/noncore/graphics/opie-eye/impl/doc/doc_dirview.cpp @@ -13,16 +13,23 @@ Doc_DirView::Doc_DirView( const Config& cfg) } Doc_DirView::~Doc_DirView() { } PInterfaceInfo* Doc_DirView::interfaceInfo()const{ if (!m_info ) m_info =new DocInterfaceInfo; return m_info; } PDirLister* Doc_DirView::dirLister()const{ if (!m_lister ) m_lister = new Doc_DirLister(); return m_lister; } + +QWidget* Doc_DirView::widget(QWidget*parent) +{ + if (!m_lister) + dirLister(); + return m_lister->widget(parent); +} diff --git a/noncore/graphics/opie-eye/impl/doc/doc_dirview.h b/noncore/graphics/opie-eye/impl/doc/doc_dirview.h index 3a2fd71..55ba6f2 100644 --- a/noncore/graphics/opie-eye/impl/doc/doc_dirview.h +++ b/noncore/graphics/opie-eye/impl/doc/doc_dirview.h @@ -1,24 +1,26 @@ /* * GPLv2 only zecke@handhelds.org */ #ifndef DOC_DIR_VIEW_H #define DOC_DIR_VIEW_H #include <iface/dirview.h> +class Doc_DirLister; struct Doc_DirView : public PDirView { Doc_DirView( const Config& ); ~Doc_DirView(); PInterfaceInfo* interfaceInfo()const; PDirLister* dirLister()const; + QWidget* widget(QWidget*parent); private: bool m_cfg : 1; - mutable PDirLister* m_lister; + mutable Doc_DirLister* m_lister; mutable PInterfaceInfo *m_info; }; #endif diff --git a/noncore/graphics/opie-eye/impl/doc/doc_lister.cpp b/noncore/graphics/opie-eye/impl/doc/doc_lister.cpp index 722fb95..d60149f 100644 --- a/noncore/graphics/opie-eye/impl/doc/doc_lister.cpp +++ b/noncore/graphics/opie-eye/impl/doc/doc_lister.cpp @@ -1,66 +1,80 @@ /* * GPLv2 zecke@handhelds.org */ #include "doc_lister.h" #include <lib/slavemaster.h> /* OPIE */ #include <opie2/odebug.h> #include <qpe/config.h> #include <qpe/qpeapplication.h> #include <qpe/applnk.h> +#include <qtopia/private/categories.h> +#include <qtopia/categoryselect.h> + using namespace Opie::Core; /* QT */ #include <qdir.h> #include <qfileinfo.h> Doc_DirLister::Doc_DirLister() : PDirLister( "doc_dir_lister" ) { /* connect the signals */ + m_catFilter = 0; SlaveMaster* master = SlaveMaster::self(); connect( master, SIGNAL(sig_start()), this, SIGNAL(sig_start()) ); connect( master, SIGNAL(sig_end()), this, SIGNAL(sig_end()) ); connect( master, SIGNAL(sig_thumbInfo(const QString&, const QString&)), this, SLOT(slotThumbInfo(const QString&, const QString&)) ); connect( master, SIGNAL(sig_fullInfo(const QString&, const QString&)), this, SLOT(slotFullInfo(const QString&, const QString&)) ); connect( master, SIGNAL(sig_thumbNail(const QString&, const QPixmap&)), this, SLOT(slotThumbNail(const QString&, const QPixmap&)) ); m_namemap.clear(); m_filemap.clear(); } QString Doc_DirLister::defaultPath()const { return QString::null; } +bool Doc_DirLister::matchCat(const AppLnk* app) +{ + if (!app) return false; + if (m_catFilter==0 || app->categories().contains(m_catFilter) || m_catFilter == -1 && app->categories().count() == 0 ) { + return true; + } + return false; +} + QString Doc_DirLister::setStartPath(const QString&) { static const QString Mtype_str("image/jpeg;image/gif;image/bmp;image/png"); if (m_namemap.isEmpty()) { DocLnkSet ds; Global::findDocuments(&ds,Mtype_str); QListIterator<DocLnk> dit(ds.children()); for( ; dit.current(); ++dit) { -// if (! (*dit)->isValid()) continue; + if (! (*dit)->isValid()) continue; + if (!matchCat((*dit))) continue; m_namemap[(*dit)->name()]=(*dit)->file(); m_filemap[(*dit)->file()]=(*dit)->name(); } } return QString::null; } QString Doc_DirLister::currentPath()const { return QString::null; } QStringList Doc_DirLister::folders()const { return QStringList(); } @@ -134,16 +148,41 @@ void Doc_DirLister::slotThumbNail(const QString&f, const QPixmap&p) } QString name = m_filemap[f]; emit sig_thumbNail(name, p); } QString Doc_DirLister::nameToFname(const QString&name)const { if (m_namemap.find(name)==m_namemap.end()) { return QString::null; } return m_namemap[name]; } QString Doc_DirLister::dirUp( const QString& p ) const{ return p; } + +QWidget* Doc_DirLister::widget(QWidget*parent) +{ + CategorySelect * catmb = new CategorySelect(parent); + Categories cats( 0 ); + cats.load( categoryFileName() ); + QArray<int> vl( 0 ); + catmb->setCategories( vl, "Document View", // No tr + "Document View" ); + catmb->setRemoveCategoryEdit( TRUE ); + catmb->setAllCategories( TRUE ); + connect(catmb, SIGNAL(signalSelected(int)), this, SLOT(showCategory(int))); + catmb->setCurrentCategory(-2); + return catmb; +} + +void Doc_DirLister::showCategory(int which) +{ + Categories cat; + cat.load( categoryFileName() ); + m_catFilter = which==-2?0:which; + m_namemap.clear(); + setStartPath(""); + emit sig_reloadDir(); +} diff --git a/noncore/graphics/opie-eye/impl/doc/doc_lister.h b/noncore/graphics/opie-eye/impl/doc/doc_lister.h index 5884a35..e148ac0 100644 --- a/noncore/graphics/opie-eye/impl/doc/doc_lister.h +++ b/noncore/graphics/opie-eye/impl/doc/doc_lister.h @@ -1,42 +1,49 @@ /* * GPLv2 zecke@handhelds.org */ #ifndef DOC_LISTER_INTERFACE_LISTER_H #define DOC_LISTER_INTERFACE_LISTER_H #include <iface/dirlister.h> #include <qstring.h> #include <qmap.h> class Config; +class AppLnk; + class Doc_DirLister : public PDirLister { Q_OBJECT public: Doc_DirLister(); virtual ~Doc_DirLister(){} QString defaultPath()const; QString setStartPath( const QString& ); QString currentPath()const; QStringList folders()const; QStringList files()const; void deleteImage( const QString& ); void thumbNail( const QString&, int, int ); QImage image( const QString&, Factor, int ); void imageInfo( const QString& ); void fullImageInfo( const QString& ); virtual QString nameToFname(const QString&name)const; QString dirUp( const QString& )const; + QWidget* widget(QWidget*parent); private: QMap<QString,QString> m_namemap,m_filemap; + int m_catFilter; + bool matchCat(const AppLnk* app); + protected slots: virtual void slotFullInfo(const QString&, const QString&); virtual void slotThumbInfo(const QString&, const QString&); virtual void slotThumbNail(const QString&, const QPixmap&); + virtual void showCategory(int); }; #endif |