Diffstat (limited to 'libopie/ofileselector/ofileselector.h') (more/less context) (show whitespace changes)
-rw-r--r-- | libopie/ofileselector/ofileselector.h | 474 |
1 files changed, 474 insertions, 0 deletions
diff --git a/libopie/ofileselector/ofileselector.h b/libopie/ofileselector/ofileselector.h new file mode 100644 index 0000000..937569d --- a/dev/null +++ b/libopie/ofileselector/ofileselector.h @@ -0,0 +1,474 @@ +/* + 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 <zecke@handhelds.org> + .>+-= + _;:, .> :=|. 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. + +*/ + +#ifndef opiefileselector_h +#define opiefileselector_h + +#include <qpe/fileselector.h> + +#include <qdir.h> +#include <qwidget.h> +#include <qstring.h> +#include <qpixmap.h> +#include <qstringlist.h> +#include <qmap.h> +#include <qvaluelist.h> + +#include <qpe/applnk.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 QGridLayout; +class QLineEdit; +class QLabel; +class QWidgetStack; +class QHBoxLayout; +class QVBoxLayout; +class QPopupMenu; +class QFileInfo; +class QHBox; +class OFileView; +// + +/* 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 ); + + /** + * 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<DocLnk> selectedDocuments()const; + + OFileView* currentView(); + int filter(); + int sorting(); + + 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: + + 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; +// QStringList m_mimetypes; + QMap<QString, QStringList> m_mimetypes; + + + QWidgetStack *m_stack; + QVBoxLayout *m_lay; + QGridLayout *m_Oselector; + + QHBox *m_boxToolbar; + QHBox *m_boxOk; // (no layout anymore) wait + QHBox *m_boxName; // (no Layout anymore) wait + QHBox *m_boxView; + + QPopupMenu *m_custom; + + 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; + + void initVars(); + virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); + virtual void addDir( const QString &mime, QFileInfo *info , bool symlink = FALSE ); + virtual void addSymlink(const QString &, QFileInfo *, bool = FALSE ){}; + void delItems(); + void initializeName(); + void initializeYes(); + void initializeChooser(); + void initializeListView(); + 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(); + + /** + * Returns the current mimetype + */ + QString currentMimeType()const; + class OFileSelectorPrivate; + OFileSelectorPrivate *d; + static QMap<QString,QPixmap> *m_pixmaps; + +private slots: + void slotFileSelected(const QString & ); // not really meant to be a slot + void slotFileBridgeSelected( const DocLnk & ); + virtual void slotSelectionChanged(); + virtual void slotCurrentChanged(QListViewItem* ); + virtual void slotClicked( int, QListViewItem *item, const QPoint &, int); + virtual void slotRightButton(int, QListViewItem *, const QPoint &, int ); + virtual void slotContextMenu( QListViewItem *item); + // listview above + // popup below + virtual void slotChangedDir(); + virtual void slotOpen(); + virtual void slotRescan(); + virtual void slotRename(); + 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 + |