-rw-r--r-- | libopie/ofileselector.cc | 64 | ||||
-rw-r--r-- | libopie/ofileselector.h | 6 |
2 files changed, 67 insertions, 3 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 53616f7..c9abde1 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -1,132 +1,138 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002 <> .>+-= _;:, .> :=|. This library is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This library is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=|` MERCHANTABILITY or FITNESS FOR A _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. .` .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <qnamespace.h> #include <qpushbutton.h> #include <qcombobox.h> #include <qhbox.h> #include <qvbox.h> #include <qlayout.h> #include <qwidgetstack.h> #include <qlineedit.h> #include <qcheckbox.h> #include <qlabel.h> #include <qpe/fileselector.h> +#include <qpe/applnk.h> +#include <qpe/global.h> #include "ofileselector.h" OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName, const QStringList mimetypes ) : QWidget( wid ) { m_selector = selector; m_currentDir = dirName; m_name = fileName; m_mimetypes = mimetypes; + if( mimetypes.isEmpty() ) + m_autoMime = true; + m_mode = mode; m_shTool = true; m_shPerm = true; m_shLne = true; m_shChooser = true; m_shYesNo = true; // for FILESELECTOR only view is interesting m_location = 0; m_homeButton = 0; m_docButton = 0; m_hideButton = 0; m_ok = 0; m_cancel = 0; m_reread = 0; m_up = 0; m_View = 0; m_select = 0; m_stack = 0; m_select = 0; m_stack = 0; m_lay = 0; m_boxToolbar = 0; m_boxOk = 0; m_edit = 0; m_fnLabel = 0; m_checkPerm = 0; m_mimeCheck = 0; m_viewCheck = 0; m_lay = new QVBoxLayout(this); init(); + m_edit->setText( fileName ); } // let's initialize the gui /** -------------------- | cmbBox Button | -------------------- | FileSlector | | or | | OSelector | | | | | ____________________ | LineEdit | ____________________ | Permission Bar | ____________________ | ViewChoose | ____________________ | Save Cancel| ____________________ */ void OFileSelector::delItems() { QLayoutIterator it = m_lay->iterator(); while ( it.current() != 0 ){ it.deleteCurrent(); } } void OFileSelector::init() { m_stack = new QWidgetStack(this, "wstack" ); m_select = new FileSelector(m_mimetypes.join(";"), m_stack, "fileselector", FALSE, FALSE ); m_stack->addWidget(m_select, NORMAL ); m_lay->addWidget(m_stack ); m_stack->raiseWidget(NORMAL ); if(m_shLne ){ initializeName(); } if(m_shPerm ){ m_checkPerm = new QCheckBox(tr("Set Permission"), this, "Permission" ); m_checkPerm->setChecked( false ); m_lay->addWidget(m_checkPerm ); } @@ -281,73 +287,127 @@ void OFileSelector::slotOk( ) } void OFileSelector::slotCancel( ) { emit cancel(); } void OFileSelector::initializeName() { m_boxName = new QHBoxLayout(this ); m_edit = new QLineEdit(this ); m_fnLabel = new QLabel(this ); m_fnLabel->setText(tr("Name:") ); m_boxName->addWidget(m_fnLabel ); m_boxName->insertSpacing(1, 8 ); m_boxName->addWidget(m_edit, 100 ); m_lay->addLayout(m_boxName); } void OFileSelector::initializeYes() { m_ok = new QPushButton("&Save", this, "save" ); m_cancel = new QPushButton("C&ancel", this, "cancel" ); m_boxOk = new QHBoxLayout(this ); m_boxOk->addWidget( m_ok, Qt::AlignHCenter ); m_boxOk->insertSpacing(1, 8 ); m_boxOk->addWidget( m_cancel, Qt::AlignHCenter); m_lay->addLayout(m_boxOk ); connect(m_ok, SIGNAL(clicked() ), this, SLOT(slotOk() ) ); connect(m_cancel, SIGNAL(clicked() ), this, SLOT(slotCancel() ) ); } void OFileSelector::initializeChooser() { m_boxView = new QHBoxLayout(this ); m_mimeCheck = new QComboBox(this, "mime check"); m_viewCheck = new QComboBox(this, "view check"); m_boxView->addWidget(m_viewCheck, 0 ); m_boxView->insertSpacing(1, 8 ); m_boxView->addWidget(m_mimeCheck, 0 ); m_lay->addLayout(m_boxView ); m_viewCheck->insertItem(tr("Documents") ); m_viewCheck->insertItem(tr("Files") ); m_viewCheck->insertItem(tr("All Files") ); + if(!m_autoMime ) + m_mimeCheck->insertItem(m_mimetypes.join("," ) ); + else{ // check + updateMimes(); + m_mimeCheck->insertStringList( m_mimetypes ); + } + connect( m_viewCheck, SIGNAL(activated(const QString &) ), this, SLOT(slotViewCheck(const QString & ) ) ); - + + connect( m_mimeCheck, SIGNAL(activated(const QString &) ), + this, SLOT(slotMimeCheck(const QString & ) ) ); } +void OFileSelector::slotMimeCheck(const QString &view ){ + if(m_selector == NORMAL ){ + delete m_select; + m_select = new FileSelector(view == "All" ? QString::null : view + , m_stack, "fileselector", FALSE, FALSE ); + m_stack->addWidget( m_select, NORMAL ); + m_stack->raiseWidget( NORMAL ); + }else{ + } +} + void OFileSelector::slotViewCheck(const QString &view ){ qWarning("changed: show %s", view.latin1() ); // if the current view is the one - + QString currMime = m_mimeCheck->currentText(); if( view == QString::fromLatin1("Documents") ){ // get the mimetype now // check if we're the current widget and return + delete m_select; + m_select = new FileSelector( currMime == "All" ? QString::null : currMime, + m_stack,"fileselector", FALSE, FALSE ); + m_stack->addWidget( m_select, NORMAL ); + m_stack->raiseWidget( NORMAL ); + m_selector = NORMAL; + }else if(view == QString::fromLatin1("Files") ){ if( m_select != 0 ){ // remove from the stack delete m_select; m_select = 0; + m_selector = EXTENDED; + // create the ListView or IconView + + reparse(); } }else if(view == QString::fromLatin1("All Files") ) { // remove from the stack delete m_select; m_select = 0; + m_selector = EXTENDED_ALL; + + reparse(); }; }; + + +void OFileSelector::updateMimes() // lets check which mode is active + // check the current dir for items then +{ + m_mimetypes.clear(); + m_mimetypes.append("All" ); + if( m_selector == NORMAL ){ + DocLnkSet set; + Global::findDocuments(&set, QString::null ); + QListIterator<DocLnk> dit( set.children() ); + for ( ; dit.current(); ++dit ) { + if( !m_mimetypes.contains((*dit)->type() ) ) + m_mimetypes.append( (*dit)->type() ); + } + }else{ + + + } +}; diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 3f53fa9..757a960 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h @@ -39,134 +39,138 @@ #include <qpixmap.h> #include <qstringlist.h> #include <qlistview.h> /** This is OPIEs FileDialog Widget. You can use it * as a dropin replacement of the fileselector and * or use any of the new features. * This is also a complete FileSave and FileLoad widget * If you look for a Dialog check OFileDialog * */ class DocLnk; class QCheckBox; class QComboBox; class QPushButton; class FileSelector; class QGridLayout; class QLineEdit; class QLabel; class QWidgetStack; class QHBoxLayout; class QVBoxLayout; class OFileSelectorItem : public QListViewItem { public: OFileSelectorItem(QListView *view, const QPixmap &pixmap, const QString &path, const QString &date, const QString &size, bool isDir=false ): QListViewItem(view) { setPixmap(0, pixmap ); setText(1, path ); setText(2, size ); setText(3, date ); dir = isDir; } bool isDir()const{ return dir; } QString path()const{ return text(1 ); } private: bool dir:1; }; class OFileSelector : public QWidget { Q_OBJECT public: enum Mode {OPEN=1, SAVE, FILESELECTOR }; - enum Selector{NORMAL=1, EXTENDED }; + enum Selector{NORMAL=1, EXTENDED = 2, EXTENDED_ALL =4 }; + enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName = QString::null, const QStringList mimetypes = QStringList() ); bool showToolbar() const { return m_shTool; }; bool showPermissionBar() const { return m_shPerm; }; bool showLineEdit()const { return m_shLne; }; bool showChooser( )const { return m_shChooser; }; bool showYesCancel()const { return m_shYesNo; }; void setShowYesCancel( bool show ); void setShowToolbar( bool show ); void setShowPermissionBar( bool show ); void setShowLineEdit(bool show) ; void setShowChooser( bool chooser ); QCheckBox* permissionCheckbox(); bool setPermission() const; void setPermissionChecked( bool check ); void setMode( int ); int mode()const { return m_mode; }; int selector()const { return m_selector; }; void setSelector( int ); QString selectedName( ); const DocLnk* selectedDocument()const; void updateLay(); void reparse(); // re reads the dir QString directory(); int fileCount(); signals: void fileSelected( const DocLnk & ); void fileSelected( const QString & ); void closeMe(); void ok(); void cancel(); protected slots: void slotOk(); void slotCancel(); void slotViewCheck(const QString & ); + void slotMimeCheck(const QString & ); protected: void init(); + void updateMimes(); int m_mode, m_selector; QComboBox *m_location, *m_mimeCheck, *m_viewCheck; QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; QPushButton *m_reread, *m_up; QListView *m_View; QCheckBox *m_checkPerm; QString m_currentDir; QString m_name; QStringList m_mimetypes; FileSelector *m_select; QWidgetStack *m_stack; QVBoxLayout *m_lay; QGridLayout *m_Oselector; QHBoxLayout *m_boxToolbar; QHBoxLayout *m_boxOk; QHBoxLayout *m_boxName; QHBoxLayout *m_boxView; QLineEdit *m_edit; QLabel *m_fnLabel; bool m_shTool:1; bool m_shPerm:1; bool m_shLne:1; bool m_shChooser:1; bool m_shYesNo:1; bool m_boCheckPerm:1; + bool m_autoMime:1; protected: private: void delItems(); void initializeName(); void initializeYes(); void initializeChooser(); class OFileSelectorPrivate; OFileSelectorPrivate *d; }; #endif |