/* This is based on code and ideas of L. J. Potter ljp@llornkcor.com Thanks a lot                =. This file is part of the OPIE Project              .=l. Copyright (c) 2002 Holger Freyther            .>+-=  _;:,     .>    :=|. 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_,=:_.      -`: 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. */ #ifndef opiefileselector_h #define opiefileselector_h #include #include #include #include #include #include #include #include #include #include #include /** 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 QGridLayout; class QLineEdit; class QLabel; class QWidgetStack; class QHBoxLayout; class QVBoxLayout; class QPopupMenu; class QFileInfo; class QHBox; class OFileView; class OLister; class OFileSelectorMain; class OFileFactory; // /* the mimetypes one name and a list of mimetypes */ typedef QMap< QString, QStringList> MimeTypes; /** * FIXME later */ struct OPopupMenuFactory { OPopupMenuFactory() {} }; /** * Opie the default OFileSelector * It features multiple views. */ class OFileSelector : public QWidget { Q_OBJECT /* friends are evil but I don't want to make the * methods public */ friend class OLister; friend class OFileView; public: /** * The mode of the file selector * Either open, save, fileselector or dir browsing mode * */ enum Mode {Open = 1, Save = 2, Fileselector = 4, Dir = 8 }; /** * Selector. Either Normal for the one shipped with * libqpe or Extended. for the Extended * ExtendedAll also shows 'hidden' files */ enum Selector{Normal=0, Extended = 1, ExtendedAll = 2}; /** * This is reserved for futrue views */ enum View { Dirs = 1, Files = 2, Tree = 4, Icon = 8 }; /** * A c'tor which should be used for advanced mode * @param wid the parent * @param mode the Mode of the Selector * @param selector the current View of the Selector * @param dirName in which dir to start * @param fileName a proposed filename * @param mimetypes A list of mimetypes \ * QString is for a identifier name like "Text files" * the coresponding QStringList is used for the mimetypes * if empty it'll fill the list of mimetypes depending * on the content of the current directory */ OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName = QString::null, const MimeTypes &mimetypes = MimeTypes() ); /** * This is a QPE compatible c'tor */ OFileSelector(const QString &mimeFilter, QWidget *parent, const char *name, bool newVisible = TRUE, bool closeVisible = FALSE ); ~OFileSelector(); // currently only for the FileSelector Mode /* compability mode but only work * with FileSelector */ void setNewVisible( bool /*b*/ ); void setCloseVisible(bool /*b*/ ); // end file selector mode // deprecated void reread(); // make sure not to leak please const DocLnk *selected(); // end deprecated /** * @return if the toolbar is visible */ bool isToolbarVisible() const { return m_shTool; }; /** * @return if the permissionBas is visible */ bool isPermissionBarVisible() const { return m_shPerm; }; /** * @return if the lineEdit is visible */ bool isLineEditVisible()const { return m_shLne; }; /** * if the chooser is visible */ bool isChooserVisible( )const { return m_shChooser; }; /** * @return if the yesCancel Bar is visible */ bool isYesCancelVisible()const { return m_shYesNo; }; /** * set Yes/Cancel visible */ void setYesCancelVisible( bool show ); /** * set the toolbar visible */ void setToolbarVisible( bool show ); /** * set the permissionBar to be visible */ void setPermissionBarVisible( bool show ); /** * set the lineedit for file entering visible */ void setLineEditVisible(bool show) ; /** * set the chooser is visible */ void setChooserVisible( bool chooser ); /** * The permissionCheckbox * */ QCheckBox* permissionCheckbox(); /** * setPermission */ bool setPermission() const; /** * set ther permission to bool */ void setPermissionChecked( bool check ); /** * set the Selector Mode */ void setMode( int ); void setLister( const QString& name ); void setView( const QString& all ); /** * whether or not to show dirs */ bool showDirs()const { return m_dir; } /** * setShowDirs */ void setShowDirs(bool ); /** * set CaseSensetive */ bool isCaseSensetive()const { return m_case; } /** * set if to be case sensetive */ void setCaseSensetive(bool caSe ); /** * @return if to show files */ bool showFiles()const { return m_files; }; /** * set if files should be shown */ void setShowFiles(bool ); /** * change dir to path */ bool cd(const QString &path ); /** * return the mode of the fileselector */ int mode()const { return m_mode; }; /** * return the selector */ int selector()const { return m_selector; }; /** * set the Selector */ void setSelector( int ); /** * wether or not to show popups */ bool showPopup()const { return m_showPopup; }; /** * set show popups */ void setShowPopup( bool pop ) { m_showPopup = pop; } /** * set the popup factory */ void setPopupFactory( OPopupMenuFactory * ); /** * reparse the current directory and updates * the views + mimetypes */ void reparse(); // re reads the dir /** * return the selected name */ QString selectedName( )const; /** * for multiple selections return multiple * filenames */ QStringList selectedNames()const; /** * return the complete to the file */ QString selectedPath() const; /** * return the completed paths */ QStringList selectedPaths() const; /** * the current directory */ QString directory()const; /** * fileCount */ int fileCount(); DocLnk selectedDocument()const; QValueList selectedDocuments()const; OFileView* currentView(); OFileView* currentView()const; OLister* currentLister()const; OFileFactory* factory(); int filter(); int sorting(); QPixmap pixmap( const QString& ); /* our tool bar */ QWidget* toolBar(); signals: void fileSelected( const DocLnk & ); void fileSelected( const QString & ); void dirSelected(const QString &dir ); void dirSelected( const QDir& ); void closeMe(); void ok(); void cancel(); void contextMenu(); private slots: void slotOk(); void slotCancel(); void slotViewCheck(const QString & ); void slotMimeCheck(const QString & ); void slotLocationActivated(const QString & ); void slotInsertLocationPath(const QString &, int); void locationComboChanged(); private: void init(); void updateMimes(); private: OFileFactory* m_fileFactory; OFileSelectorMain* m_mainView; OLister* m_lister; QString m_listerName; OFileView* m_fileView; FileSelector* m_select; 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, *m_new, *m_close; QListView *m_View; QCheckBox *m_checkPerm; QWidget *m_pseudo; QVBoxLayout *m_pseudoLayout; QString m_currentDir; QString m_name; QMap m_mimetypes; QVBoxLayout *m_lay; QGridLayout *m_Oselector; QHBox *m_boxToolbar; QHBox *m_boxOk; QHBox *m_boxName; QHBox *m_boxView; QLineEdit *m_edit; QLabel *m_fnLabel; bool m_shClose : 1; bool m_shNew : 1; 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; bool m_case : 1; bool m_dir : 1; bool m_files : 1; bool m_showPopup : 1; bool m_showHidden : 1; void initVars(); void delItems(); void initializeName(); void initializeYes(); void initializeChooser(); void initializePerm(); void initPics(); bool compliesMime(const QString &path, const QString &mime); bool compliesMime(const QString& mime ); /** * Updates the QComboBox with the current mimetypes */ void updateMimeCheck(); void initializeOldSelector(); void initToolbar(); void initLocations(); void initializeView(); // FIXME void fillList(); void initFactory(); /** * Returns the current mimetype */ QString currentMimeType()const; class OFileSelectorPrivate; OFileSelectorPrivate *d; static QMap *m_pixmaps; private slots: void slotFileSelected(const QString & ); // not really meant to be a slot void slotFileBridgeSelected( const DocLnk & ); // listview above // popup below virtual void slotDelete(); virtual void cdUP(); virtual void slotHome(); virtual void slotDoc(); virtual void slotNavigate( ); /* for OLister */ private: /* for OFileView */ private: void internFileSelected( const QString& ); void internFileSelected( const DocLnk& ); void internContextMenu(); void internChangedDir( const QString& ); void internChangedDir( const QDir& ) ; }; #endif