summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/ofiledialog.cc6
-rw-r--r--libopie/ofiledialog.h6
-rw-r--r--libopie/ofileselector.cc118
-rw-r--r--libopie/ofileselector.h53
4 files changed, 147 insertions, 36 deletions
diff --git a/libopie/ofiledialog.cc b/libopie/ofiledialog.cc
index 164fadd..4783004 100644
--- a/libopie/ofiledialog.cc
+++ b/libopie/ofiledialog.cc
@@ -16,101 +16,101 @@
  _.=:.       :    :=>`: 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 <qpe/applnk.h>
#include <qstring.h>
#include <qapplication.h>
#include <qlayout.h>
#include "ofiledialog.h"
OFileDialog::OFileDialog(const QString &caption,
QWidget *wid, int mode, int selector,
const QString &dirName,
const QString &fileName,
- const QStringList &mimetypes )
+ const QMap<QString,QStringList>& mimetypes )
: QDialog( wid, "OFileDialog", true )
{
// QVBoxLayout *lay = new QVBoxLayout(this);
//showMaximized();
QVBoxLayout *lay = new QVBoxLayout(this );
file = new OFileSelector(this , mode, selector,
dirName, fileName,
mimetypes );
lay->addWidget( file );
//lay->addWidget( file );
//showFullScreen();
setCaption( caption.isEmpty() ? tr("FileDialog") : caption );
connect(file, SIGNAL(fileSelected(const QString&) ),
this, SLOT(slotFileSelected(const QString&) ) );
connect(file, SIGNAL(dirSelected(const QString &) ),
this, SLOT(slotDirSelected(const QString &) ) );
file->setYesCancelVisible( false ); // relayout
}
QString OFileDialog::mimetype()const
{
return QString::null;
}
QString OFileDialog::fileName()const
{
return file->selectedName();
}
DocLnk OFileDialog::selectedDocument()const
{
return file->selectedDocument();
}
QString OFileDialog::getOpenFileName(int selector,
const QString &startDir,
const QString &file,
- const QStringList &mimes,
+ const MimeTypes &mimes,
QWidget *wid,
const QString &caption )
{
QString ret;
OFileDialog dlg( caption.isEmpty() ? tr("Open") : caption,
wid, OFileSelector::OPEN, selector, startDir, file, mimes);
dlg.showMaximized();
if( dlg.exec() )
ret = dlg.fileName();
return ret;
}
QString OFileDialog::getSaveFileName(int selector,
const QString &startDir,
const QString &file,
- const QStringList &mimes,
+ const MimeTypes &mimes,
QWidget *wid,
const QString &caption )
{
QString ret;
OFileDialog dlg( caption.isEmpty() ? tr("Save") : caption,
wid, OFileSelector::SAVE, selector, startDir, file, mimes);
dlg.showMaximized();
if( dlg.exec() )
ret = dlg.fileName();
return ret;
}
void OFileDialog::slotFileSelected(const QString & )
{
accept();
}
void OFileDialog::slotDirSelected(const QString & )
{
// if mode
//accept();
}
diff --git a/libopie/ofiledialog.h b/libopie/ofiledialog.h
index 40d147e..e14253c 100644
--- a/libopie/ofiledialog.h
+++ b/libopie/ofiledialog.h
@@ -20,58 +20,58 @@
 -.   .:....=;==+<; 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 OpieFileDialog_h
#define OpieFileDialog_h
#include <qdialog.h>
#include <opie/ofileselector.h>
class OFileDialog : public QDialog {
Q_OBJECT
public:
OFileDialog(const QString &caption,
QWidget *, int mode, int selector,
const QString &dirName,
const QString &fileName = QString::null,
- const QStringList &mimetypes = QStringList() );
+ const MimeTypes &mimetypes = MimeTypes() );
QString mimetype() const;
QString fileName() const;
DocLnk selectedDocument()const;
// static methods
static QString getOpenFileName(int selector,
const QString& startDir = QString::null,
const QString &fileName = QString::null,
- const QStringList& mimefilter = QStringList(),
+ const MimeTypes& mime = MimeTypes(),
QWidget *wid = 0,
const QString &caption = QString::null );
static QString getSaveFileName(int selector,
const QString& startDir = QString::null,
const QString& fileName = QString::null,
- const QStringList& mimefilter = QStringList(),
+ const MimeTypes& mimefilter = MimeTypes(),
QWidget *wid = 0,
const QString &caption = QString::null );
//let's OFileSelector catch up first
//static QString getExistingDirectory(const QString& startDir = QString::null,
// QWidget *parent = 0,
// const QString& caption = QString::null );
private:
class OFileDialogPrivate;
OFileDialogPrivate *d;
OFileSelector *file;
private slots:
void slotFileSelected( const QString & );
void slotDirSelected(const QString & );
};
#endif
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index 7a67ab2..6c59f89 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -79,93 +79,99 @@ namespace {
ke.append("0" );
ke.append( text(1) );
}else{
ke.append("1" );
ke.append( text(1) );
}
}else if( id == 2 ){ // size
return text(2);
}else if( id == 3 ){ // date
return text(3);
}
return ke;
};
private:
bool mLocked:1;
bool dir:1;
QString m_dir;
};
};
OFileSelector::OFileSelector( QWidget *wid, int mode, int selector,
const QString &dirName,
const QString &fileName,
- const QStringList &mimeTypes )
+ const QMap<QString,QStringList>& mimeTypes)
: QWidget( wid, "OFileSelector")
{
m_mimetypes = mimeTypes;
+ if (mode == SAVE )
+ m_name = fileName;
initVars();
m_mode = mode;
m_selector = selector;
m_currentDir = dirName;
init();
-QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
+ //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
}
OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent,
const char *name, bool newVisible,
bool closeVisible )
: QWidget( parent, name )
{
- m_mimetypes = QStringList::split(";", mimeFilter );
+ if (!mimeFilter.isEmpty() ) {
+ QStringList list = QStringList::split(";", mimeFilter );
+ m_mimetypes.insert(mimeFilter, list );
+ }
initVars();
m_currentDir = QPEApplication::documentDir();
m_mode = OPEN;
m_selector = NORMAL;
m_shClose = closeVisible;
m_shNew = newVisible;
m_shLne = false;
m_shPerm = false;
m_shYesNo = false;
init();
}
OFileSelector::~OFileSelector()
{
+
}
void OFileSelector::setNewVisible( bool visible )
{
m_shNew = visible;
if( m_selector == NORMAL ){
delete m_select;
// we need to initialize but keep the selected mimetype
- QString mime = m_mimeCheck == 0 ? QString::null : m_mimeCheck->currentText() ;
- m_select = new FileSelector( m_autoMime ? mime : m_mimetypes.join(";") ,
+ QString mime = currentMimeType();
+ m_select = new FileSelector( mime ,
m_stack, "fileselector",
m_shNew, m_shClose);
connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
//connect to close me and other signals as well
m_stack->addWidget( m_select, NORMAL );
}else{
m_new->show();
}
}
void OFileSelector::setCloseVisible( bool visible )
{
m_shClose = visible;
if( m_selector == NORMAL ){
setNewVisible( m_shNew ); // yeah baby
}else{
m_close->show();
}
}
void OFileSelector::reread()
{
if( m_selector == NORMAL ){
setNewVisible( m_shNew ); // make it a initializeSelector
}else if ( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
@@ -404,176 +410,216 @@ DocLnk OFileSelector::selectedDocument() const
}
QValueList<DocLnk> OFileSelector::selectedDocuments() const
{
QValueList<DocLnk> docs;
docs.append( selectedDocument() );
return docs;
}
// slots internal
void OFileSelector::slotOk()
{
emit ok();
}
void OFileSelector::slotCancel()
{
emit cancel();
}
void OFileSelector::slotViewCheck(const QString &sel)
{
if( sel == tr("Documents" ) ){
if( m_select == 0 ){
// autMime? fix cause now we use All and not the current
- m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"),
+ // yes currentMime fixes that for us
+ QString mime = currentMimeType();
+ m_select = new FileSelector(mime,
m_stack, "fileselector",
FALSE, FALSE);
connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
//connect to close me and other signals as well
m_stack->addWidget( m_select, NORMAL );
}
m_stack->raiseWidget( NORMAL );
m_selector = NORMAL;
}else if( sel == tr("Files") ){
m_selector = EXTENDED;
initializeListView();
reparse();
m_stack->raiseWidget( EXTENDED );
}else if( sel == tr("All Files") ){
m_selector = EXTENDED_ALL;
initializeListView();
reparse();
m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter
}
}
+// not yet finished.....
+QString OFileSelector::currentMimeType() const{
+ QString mime;
+ QString currentText;
+ if (m_shChooser )
+ currentText = m_mimeCheck->currentText();
+
+ if (tr("All") == currentText ) return QString::null;
+ else if (currentText.isEmpty() ) {
+ ;
+ }else {
+ QMap<QString, QStringList>::ConstIterator it;
+ it = m_mimetypes.find( currentText );
+ if ( it == m_mimetypes.end() ) {
+ mime = it.data().join(";");
+ }else{
+ mime = currentText;
+ }
+ }
+ return mime;
+}
void OFileSelector::slotMimeCheck(const QString &mime)
{
if( m_selector == NORMAL ){
- if( m_autoMime ){
+ //if( m_autoMime ){
+ QString newMimeType;
+ if (mime != tr("All") ) {
+ QMap<QString, QStringList>::Iterator it;
+ it = m_mimetypes.find(mime);
+ if ( it != m_mimetypes.end() ) {
+ newMimeType = it.data().join(";");
+ }else{
+ newMimeType = mime;
+ }
+ }
delete m_select;
- m_select = new FileSelector( mime == tr("All") ? QString::null : mime,
+ m_select = new FileSelector( newMimeType,
m_stack, "fileselector",
FALSE, FALSE);
connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
//connect to close me and other signals as well
m_stack->addWidget( m_select, NORMAL );
m_stack->raiseWidget( NORMAL );
updateMimes();
- m_mimeCheck->clear();
- m_mimeCheck->insertStringList(m_mimetypes );
+ updateMimeCheck();
m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) );
- }
+ //}
}else{ // others
qWarning("Mime %s", mime.latin1() );
if(m_shChooser ){
qWarning("Current Text %s", m_mimeCheck->currentText().latin1() );
//m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) );
}
reparse();
}
}
void OFileSelector::slotLocationActivated(const QString &file)
{
cd(file.left(file.find("<-",0,TRUE)));
reparse();
}
void OFileSelector::slotInsertLocationPath(const QString &currentPath, int count)
{
QStringList pathList;
bool underDog = FALSE;
for(int i=0;i<count;i++) {
pathList << m_location->text(i);
if( m_location->text(i) == currentPath)
underDog = TRUE;
}
if( !underDog) {
m_location->clear();
if( currentPath.left(2)=="//")
pathList.append( currentPath.right(currentPath.length()-1) );
else
pathList.append( currentPath );
m_location->insertStringList( pathList,-1);
}
}
void OFileSelector::locationComboChanged()
{
cd( m_location->lineEdit()->text());
reparse();
}
void OFileSelector::init()
{
m_lay = new QVBoxLayout( this );
m_lay->setSpacing(0 );
m_stack = new QWidgetStack( this );
if( m_selector == NORMAL ){
- m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"),
+ QString mime;
+ if (!m_autoMime) {
+ if (!m_mimetypes.isEmpty() ) {
+ QMap<QString, QStringList>::Iterator it;
+ it = m_mimetypes.begin(); // cause we're in the init
+ mime = it.data().join(";");
+ }
+ }
+ m_select = new FileSelector(mime,
m_stack, "fileselector",
FALSE, FALSE);
connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
//connect to close me and other signals as well
m_stack->addWidget( m_select, NORMAL );
m_stack->raiseWidget( NORMAL );
}else{ // we're in init so it will be EXTENDED or EXTENDED_ALL
// and initializeListview will take care of those
// toolbar get's generade in initializeListView
initializeListView( ); // will raise the widget as well
}
m_lay->addWidget( m_stack, 100 ); // add to the layout 10 = stretch
if( m_shLne ) // the LineEdit with the current FileName
initializeName();
if( m_shPerm ) // the Permission QCheckBox
initializePerm();
if( m_shChooser ) // the Chooser for the view and Mimetypes
initializeChooser();
if( m_shYesNo ) // the Yes No button row
initializeYes( );
}
void OFileSelector::updateMimes()
{
if( m_autoMime ){
m_mimetypes.clear();
- m_mimetypes.append( tr("All") );
+ m_mimetypes.insert( tr("All"), QString::null );
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() );
+ m_mimetypes.insert( (*dit)->type(), (*dit)->type() );
}
}// else done in reparse
}
}
void OFileSelector::initVars()
{
if( m_mimetypes.isEmpty() )
m_autoMime = true;
else
m_autoMime = false;
m_shClose = false;
m_shNew = false;
m_shTool = true;
m_shPerm = false;
m_shLne = true;
m_shChooser = true;
m_shYesNo = true;
m_case = false;
m_dir = true;
m_files = true;
m_showPopup = false;
if(m_pixmaps == 0 ) // init the pixmaps
initPics();
@@ -660,98 +706,113 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
QString::number( info->size() ),
info->dirPath( true ), locked,
true );
}// else CUSTOM View
}
void OFileSelector::delItems()
{
}
void OFileSelector::initializeName()
{
/** Name Layout Line
* This is the Layout line arranged in
* horizontal way each components
* are next to each other
* but we will only do this if
* we didn't initialize a while ago.
*/
if( m_boxName == 0 ){
m_boxName = new QHBox( this ); // remove this this? or use a QHBox
m_fnLabel = new QLabel( m_boxName );
m_fnLabel->setText( tr("Name:") );
m_edit = new QLineEdit( m_boxName );
+ m_edit->setText( m_name );
//m_boxName->addWidget( m_fnLabel );
m_boxName->setMargin( 5 );
m_boxName->setSpacing( 8 );
//m_boxName->setStretchFactor(m_edit, 100 ); // 100 is stretch factor
m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout
}// else we already initialized
// maybe show the components?
//
}
void OFileSelector::initializeYes()
{
/** The Save Cancel bar
*
*/
if( m_boxOk == 0 ){
m_boxOk = new QHBox( this );
m_ok = new QPushButton( tr("&Save"),m_boxOk , "save" );
m_cancel = new QPushButton( tr("C&ancel"), m_boxOk, "cancel" );
//m_boxOk->addWidget( m_ok );
//m_boxOk->addWidget( m_cancel );
m_boxOk->setMargin( 5 );
m_boxOk->setSpacing( 10 );
m_lay->addWidget( m_boxOk, 0 );
connect( m_ok, SIGNAL( clicked() ),
this, SLOT(slotOk() ) );
connect( m_cancel, SIGNAL( clicked() ),
this, SLOT( slotCancel() ) );
}
}
+/*
+ * OK m_mimeCheck is a QComboBox we now want to fill
+ * out that combobox
+ * if automime we need to update the mimetypes
+ */
+void OFileSelector::updateMimeCheck() {
+ m_mimeCheck->clear();
+ if (m_autoMime ) {
+ //m_mimeCheck->insertItem( tr("All") );
+ updateMimes();
+ }
+
+ QMap<QString, QStringList>::Iterator it;
+ for (it = m_mimetypes.begin(); it != m_mimetypes.end(); ++it ) {
+ m_mimeCheck->insertItem( it.key() );
+ }
+}
+
void OFileSelector::initializeChooser()
{
if( m_boxView == 0 ){
m_boxView = new QHBox( this );
m_viewCheck = new QComboBox( m_boxView, "view check");
m_mimeCheck = new QComboBox( m_boxView, "mime check");
m_boxView->setSpacing( 8 );
m_lay->addWidget(m_boxView, 0 );
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{
- updateMimes();
- m_mimeCheck->insertStringList( m_mimetypes );
- }
+ updateMimeCheck();
+
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::initializeListView()
{
if( m_pseudo == 0 ){
m_pseudo = new QWidget( m_stack, "Pseudo Widget");
m_pseudoLayout = new QVBoxLayout( m_pseudo );
// toolbar
m_boxToolbar = new QHBox( m_pseudo );
m_boxToolbar->setSpacing(0 ); // next to each other please
// toolbar members
{
// location QComboBox
m_location = new QComboBox( m_boxToolbar );
m_location->setEditable( TRUE );
m_location->setDuplicatesEnabled( FALSE );
connect( m_location, SIGNAL(activated(const QString &) ),
this, SLOT( slotLocationActivated(const QString &) ) );
connect( m_location->lineEdit(), SIGNAL(returnPressed() ),
@@ -855,49 +916,54 @@ void OFileSelector::initPics()
m_pixmaps = new QMap<QString,QPixmap>;
QPixmap pm = Resource::loadPixmap( "folder" );
QPixmap lnk = Resource::loadPixmap( "opie/symlink" );
QPainter painter( &pm );
painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
pm.setMask( pm.createHeuristicMask( FALSE ) );
m_pixmaps->insert("dirsymlink", pm );
QPixmap pm2 = Resource::loadPixmap( "lockedfolder" );
QPainter pen(&pm2 );
pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk );
pm2.setMask( pm2.createHeuristicMask( FALSE ) );
m_pixmaps->insert("symlinkedlocked", pm2 );
}
// if a mime complies with the m_mimeCheck->currentItem
bool OFileSelector::compliesMime( const QString &path, const QString &mime )
{
if( mime == "All" )
return true;
MimeType type( path );
if( type.id() == mime )
return true;
return false;
}
+/* check if the mimetype in mime
+ * complies with the one which is current
+ */
+bool OFileSelector::compliesMime( const QString& mime ) {
+}
void OFileSelector::slotFileSelected( const QString &string )
{
if( m_shLne )
m_edit->setText( string );
emit fileSelected( string );
}
void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
{
slotFileSelected( lnk.name() );
// emit fileSelected( lnk );
}
void OFileSelector::slotSelectionChanged()
{
}
void OFileSelector::slotCurrentChanged(QListViewItem* item )
{
if( item == 0 )
return;
if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) {
OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;)
if(!sel->isDir() ){
if( m_shLne )
m_edit->setText( sel->text(1) );
@@ -1029,64 +1095,64 @@ void OFileSelector::reparse()
QString currentMimeType;
// let's update the mimetype
if( m_autoMime ){
m_mimetypes.clear();
// ok we can change mimetype so we need to be able to give a selection
if( m_shChooser ) {
currentMimeType = m_mimeCheck->currentText();
m_mimeCheck->clear();
// let's find possible mimetypes
QDir dir( m_currentDir );
dir.setFilter( QDir::Files | QDir::Readable );
dir.setSorting( QDir::Size );
const QFileInfoList *list = dir.entryInfoList();
QFileInfoListIterator it( *list );
QFileInfo *fi;
while( (fi=it.current() ) ) {
if( fi->extension() == QString::fromLatin1("desktop") ){
++it;
continue;
}
MimeType type( fi->absFilePath() );
if( !m_mimetypes.contains( type.id() ) ){
//qWarning("Type %s", type.id().latin1() );
- m_mimetypes.append( type.id() );
+ m_mimetypes.insert( type.id(), type.id() );
}
++it;
}
// add them to the chooser
- m_mimeCheck->insertItem( tr("All") );
- m_mimeCheck->insertStringList( m_mimetypes );
+ updateMimeCheck();
m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
currentMimeType = m_mimeCheck->currentText();
}
}else { // no autoMime
- currentMimeType = m_mimetypes.join(";");
+ // let the mimetype be set from out side the m_mimeCheck FEATURE
+
if( m_shChooser ){
- m_mimeCheck->clear();
- m_mimeCheck->insertItem(m_mimetypes.join(",") );
+ currentMimeType = m_mimeCheck->currentText();
+ updateMimeCheck();
}
}
// now we got our mimetypes we can add the files
QDir dir( m_currentDir );
int sort;
if ( m_case )
sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed);
else
sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed);
dir.setSorting( sort );
int filter;
if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){
filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
}else
filter = QDir::Files | QDir::Dirs | QDir::All;
dir.setFilter( filter );
// now go through all files
const QFileInfoList *list = dir.entryInfoList();
QFileInfoListIterator it( *list );
QFileInfo *fi;
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h
index 47697b9..f2d5f84 100644
--- a/libopie/ofileselector.h
+++ b/libopie/ofileselector.h
@@ -1,106 +1,140 @@
/*
- This is based on code and idea of
+ 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 <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 FileSelector;
class QGridLayout;
class QLineEdit;
class QLabel;
class QWidgetStack;
class QHBoxLayout;
class QVBoxLayout;
class QPopupMenu;
class QFileInfo;
class QHBox;
//
+typedef QMap< QString, QStringList> MimeTypes;
class OFileSelector : public QWidget {
Q_OBJECT
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
+ * EXTENDED_ALL also shows 'hidden' files
+ */
enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =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 QStringList &mimetypes = QStringList() );
+ 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
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
bool isToolbarVisible() const { return m_shTool; };
bool isPermissionBarVisible() const { return m_shPerm; };
bool isLineEditVisible()const { return m_shLne; };
bool isChooserVisible( )const { return m_shChooser; };
bool isYesCancelVisible()const { return m_shYesNo; };
void setYesCancelVisible( bool show );
void setToolbarVisible( bool show );
@@ -169,92 +203,103 @@ class OFileSelector : public QWidget {
void slotViewCheck(const QString & );
void slotMimeCheck(const QString & );
void slotLocationActivated(const QString & );
void slotInsertLocationPath(const QString &, int);
void locationComboChanged();
private:
void init();
void updateMimes();
protected:
private:
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;
+// QStringList m_mimetypes;
+ QMap<QString, QStringList> m_mimetypes;
FileSelector *m_select;
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 &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( );
};