summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/ofileselector.cc1529
-rw-r--r--libopie/ofileselector.h39
2 files changed, 756 insertions, 812 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index 9cf3f36..d780da9 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -1,1194 +1,1133 @@
-/*
-               =. 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.
-*/
-#include <qnamespace.h>
-#include <qpushbutton.h>
+#include <qcheckbox.h>
#include <qcombobox.h>
-#include <qhbox.h>
-#include <qvbox.h>
+#include <qheader.h>
+#include <qlabel.h>
+#include <qabstractlayout.h>
#include <qlayout.h>
-#include <qwidgetstack.h>
#include <qlineedit.h>
-#include <qcheckbox.h>
-#include <qlabel.h>
-#include <qheader.h>
-#include <qdir.h>
-#include <qpainter.h>
-#include <qaction.h>
-#include <qpopupmenu.h>
-#include <qcursor.h>
-#include <qstringlist.h>
+#include <qlistview.h>
#include <qmessagebox.h>
+#include <qpushbutton.h>
+#include <qwidgetstack.h>
+#include <qpopupmenu.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtimer.h>
#include <qpe/qpeapplication.h>
-#include <qpe/fileselector.h>
#include <qpe/applnk.h>
+#include <qpe/fileselector.h>
#include <qpe/global.h>
#include <qpe/mimetype.h>
#include <qpe/resource.h>
#include <qpe/storage.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "ofileselector.h"
-//#include "ofileview.h"
+
QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0;
namespace {
-
int indexByString( const QComboBox *box, const QString &str ){
- int index= -1;
+ int index= 0;
for(int i= 0; i < box->count(); i++ ){
if( str == box->text(i ) ){
index= i;
break;
}
}
return index;
}
class OFileSelectorItem : public QListViewItem {
public:
OFileSelectorItem(QListView *view, const QPixmap &pixmap, const QString &path,
const QString &date, const QString &size, const QString &mDir,
bool isLocked=false, bool isDir=false ): QListViewItem(view) {
setPixmap(0, pixmap );
setText(1, path );
setText(2, size );
setText(3, date );
//setText(4, mDir );
m_dir = mDir;
dir = isDir;
mLocked = isLocked;
}
bool isLocked() const{
return mLocked;
}
QString directory()const{
return m_dir;
}
bool isDir()const{
return dir;
}
QString path()const{
return text(1 );
}
QString key(int id, bool )const {
QString ke;
if( id == 0 || id == 1 ){ // name
if( dir ){
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 ) : QWidget( wid )
+OFileSelector::OFileSelector( QWidget *wid, int mode, int selector,
+ const QString &dirName,
+ const QString &fileName,
+ const QStringList &mimeTypes )
+ : QWidget( wid, "OFileSelector")
{
- if(wid!=0)
- resize(wid->width(),wid->height());
+ m_mimetypes = mimeTypes;
+ initVars();
+ m_mode = mode;
m_selector = selector;
m_currentDir = dirName;
- m_name = fileName;
- m_mimetypes = mimetypes;
-
- if( mimetypes.isEmpty() )
- m_autoMime = true;
-
- qWarning("OFileSelector mimetypes %s", mimetypes.join(" ").latin1() );
- 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_pseudo = 0;
- m_pseudoLayout = 0;
-
- m_dir = true;
- m_files = true;
- m_custom = 0;
- m_showPopup = true;
-
- if(m_pixmaps == 0 ) // init the pixmaps
- initPics();
-
- m_lay = new QVBoxLayout(this);
init();
- m_edit->setText( fileName );
+QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
}
-void OFileSelector::initPics()
+OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent,
+ const char *name, bool newVisible = TRUE,
+ bool closeVisible = FALSE )
+ : QWidget( parent, name )
{
- qWarning("init pics" );
- 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 );
+ m_mimetypes = QStringList::split(";", mimeFilter );
+ 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();
- 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 );
}
-// let's initialize the gui
-/**
- --------------------
- | cmbBox Button |
- --------------------
- | FileSlector |
- | or |
- | OSelector |
- | |
- | |
- ____________________
- | LineEdit |
- ____________________
- | Permission Bar |
- ____________________
- | ViewChoose |
- ____________________
- | Save Cancel|
- ____________________
- */
-void OFileSelector::delItems()
+OFileSelector::~OFileSelector()
{
- QLayoutIterator it = m_lay->iterator();
- while ( it.current() != 0 ){
- it.deleteCurrent();
- }
+
}
-void OFileSelector::init()
+void OFileSelector::setNewVisible( bool visible )
{
-// qDebug("init");
- m_stack = new QWidgetStack(this, "wstack" );
+ m_shNew = visible;
if( m_selector == NORMAL ){
- QString currMime;
- if( m_mimeCheck != 0 )
- currMime = m_mimeCheck->currentText();
- updateMimes();
- m_select = new FileSelector( currMime == "All" ? QString::null : currMime ,
- m_stack, "fileselector", FALSE, FALSE );
- m_stack->addWidget(m_select, NORMAL );
- m_lay->addWidget(m_stack );
- m_stack->raiseWidget(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(";") ,
+ m_stack, "fileselector",
+ m_shNew, m_shClose);
connect(m_select, SIGNAL(fileSelected( const DocLnk &) ),
this, SLOT(slotFileBridgeSelected(const DocLnk &) ) );
- m_pseudoLayout = 0l;
-
+ //connect to close me and other signals as well
+ m_stack->addWidget( m_select, NORMAL );
} else {
- initializeListView();
+ m_new->show();
}
- 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 );
+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 ){
+ reparse();
+ //}else{
+ //;
+ }
}
- if( m_shChooser )
- initializeChooser();
- if(m_shYesNo )
- initializeYes();
-
- // m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, requestedMimeTypesList.first()) );
- // reparse();
+const DocLnk *OFileSelector::selected()
+{
+ if( m_selector == NORMAL ){
+ return m_select->selected();
+ }else{
+ DocLnk *lnk = new DocLnk(selectedDocument() );
+ return lnk;
+ }
}
void OFileSelector::setYesCancelVisible( bool show )
{
- if ( show == m_shYesNo )
- return;
+ initializeYes(); // FIXME if YesCancel is not shown we will initialize it to hide it :(
m_shYesNo = show;
- if( !show ){
- delete m_ok;
- delete m_cancel;
- m_ok = 0;
- m_cancel = 0;
- // delete m_boxOk; all ready deleted in delItems
- }
- updateLay(); // recreate it and save the other states
-}
+ if( m_shYesNo )
+ m_boxOk->show();
+ else
+ m_boxOk->hide();
+}
void OFileSelector::setToolbarVisible( bool show )
{
- if ( m_shTool == show )
- return;
+ m_shTool = show;
+ initializeListView(); // FIXME see above waste of memory
if(!m_shTool ){
- delete m_boxToolbar;
- delete m_homeButton;
- delete m_docButton;
- delete m_location;
- delete m_up;
- m_boxToolbar = 0;
- m_homeButton = 0;
- m_docButton = 0;
- m_location = 0;
- m_up = 0;
- };
- updateLay();// overkill fix it
+ m_location->hide();
+ m_up->hide();
+ m_homeButton->hide();
+ m_docButton->hide();
+ }else{
+ m_location->show();
+ m_up->show();
+ m_homeButton->show();
+ m_docButton->show();
+ }
}
-
void OFileSelector::setPermissionBarVisible( bool show )
{
- if( show == m_shPerm )
- return;
-
m_shPerm = show;
-
- updateLay();
+ initializePerm();
+ if( m_shPerm )
+ m_checkPerm->show();
+ else
+ m_checkPerm->hide();
}
-
void OFileSelector::setLineEditVisible( bool show )
{
- if( show == m_shLne )
- return;
-
- m_shLne = show;
- if( !show ){
- delete m_edit;
- delete m_fnLabel;
- m_edit = 0;
- m_fnLabel = 0;
- //delete m_boxName; will be deleted
+ if( show ){
+ initializeName();
+ m_boxName->show();
+ }else{
+ if( m_shLne && m_boxName != 0 ){ // check if we showed before this is the way to go
+ m_boxName->hide();
}
- updateLay();
+ }
+ m_shLne = show;
}
void OFileSelector::setChooserVisible( bool show )
{
- if( show = m_shChooser )
- return;
m_shChooser = show;
- if( !show ){
- delete m_mimeCheck;
- delete m_viewCheck;
- m_mimeCheck = 0;
- m_viewCheck = 0;
+ initializeChooser();
+ if( m_shChooser ){
+ m_boxView->hide();
+ }else{
+ m_boxView->show();
}
- updateLay();
}
QCheckBox* OFileSelector::permissionCheckbox( )
{
+ if( m_selector == NORMAL )
+ return 0l;
+ else
return m_checkPerm;
}
+bool OFileSelector::setPermission()const
+{
+ return m_checkPerm == 0 ? false : m_checkPerm->isChecked();
+}
+void OFileSelector::setPermissionChecked( bool check )
+{
+ if( m_checkPerm )
+ m_checkPerm->setChecked( check );
+}
+void OFileSelector::setMode(int mode) // FIXME do direct raising
+{
+ m_mode = mode;
+ if( m_selector == NORMAL )
+ return;
+}
+void OFileSelector::setShowDirs(bool )
+{
+ m_dir = true;
+ reparse();
+}
void OFileSelector::setCaseSensetive( bool caSe )
{
m_case = caSe;
reparse();
}
-
-void OFileSelector::setShowFiles(bool files ){
- m_files = files;
+void OFileSelector::setShowFiles(bool show )
+{
+ m_files = show;
reparse();
}
-
-void OFileSelector::setPopupMenu(QPopupMenu *pop )
+///
+bool OFileSelector::cd(const QString &path )
{
- //delete oldpopup;
- m_custom = pop;
+ m_currentDir = path;
+ reparse();
+ return true;
}
-
-bool OFileSelector::setPermission( ) const
+void OFileSelector::setSelector(int mode )
{
- if( m_checkPerm == 0 )
- return false;
- else
- return m_checkPerm->isChecked();
+QString text;
+ switch( mode ){
+ case NORMAL:
+ text = tr("Documents");
+ break;
+ case EXTENDED:
+ text = tr("Files");
+ break;
+ case EXTENDED_ALL:
+ text = tr("All Files");
+ break;
+ }
+ slotViewCheck( text );
}
-void OFileSelector::setPermissionChecked( bool check )
+void OFileSelector::setPopupMenu(QPopupMenu *popup )
{
- if( m_checkPerm == 0 )
- return;
- m_checkPerm->setChecked( check );
+ m_custom = popup;
+ m_showPopup = true;
}
+//void OFileSelector::updateL
+
QString OFileSelector::selectedName( )const
{
- QString string;
+ QString name;
if( m_selector == NORMAL ){
const DocLnk *lnk = m_select->selected();
- string = lnk->file();
+ name = lnk->file();
+ delete lnk;
}else if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ) {
QListViewItem *item = m_View->currentItem();
- if(item != 0 ){
- string = m_currentDir + "/" + item->text( 1 );
- }
+ if( item != 0 )
+ name = m_currentDir + "/" + item->text( 1 );
+ }else { // installed view
+ ;
}
- return string;
+ return name;
}
-
QStringList OFileSelector::selectedNames()const
{
QStringList list;
+ if( m_selector == NORMAL ){
+ list << selectedName();
+ }else if ( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) {
+ list << selectedName(); // FIXME implement multiple Selections
+ }
return list;
}
-
-DocLnk OFileSelector::selectedDocument( )const
+/** If mode is set to the Dir selection this will return the selected path.
+ *
+ *
+ */
+QString OFileSelector::selectedPath()const
{
- DocLnk lnk;
- return lnk;
+ QString path;
+ if( m_selector == NORMAL ){
+ path = QPEApplication::documentDir();
+ }else if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
+ ;
}
-void OFileSelector::updateLay()
-{
- /* if( m_shTool )
- //
- else
- // hide
- */
- // save the state
- bool check = false;
- if( m_checkPerm != 0 )
- check = m_checkPerm->isChecked();
- QString text;
-
- if( m_edit != 0 )
- text = m_edit->text();
- // save current mimetype
-
- delItems();
- delete m_checkPerm;
- m_checkPerm = 0;
- delete m_edit;
- m_edit = 0;
- delete m_fnLabel;
- m_fnLabel = 0;
- delete m_ok;
- m_ok = 0;
- delete m_cancel;
- m_cancel = 0;
- delete m_mimeCheck;
- m_mimeCheck = 0;
- delete m_viewCheck;
- m_viewCheck = 0;
- delete m_select; // test
- delete m_stack;
- //delete m_list;
- init();
- if( m_shLne )
- m_edit->setText(text );
- if( m_shPerm )
- m_checkPerm->setChecked(check );
+ return path;
}
-
-// let's update the mimetypes. Use the current mimefilter for the 2nd QDir retrieve
-// insert QListViewItems with the right options
-bool OFileSelector::compliesMime(const QString &path, const QString &mime )
+QStringList OFileSelector::selectedPaths() const
{
- if( mime == "All" )
- return true;
- MimeType type( path );
- if( type.id() == mime )
- return true;
- return false;
+ QStringList list;
+ list << selectedPath();
+ return list;
}
-
-void OFileSelector::reparse()
+QString OFileSelector::directory()const
{
- qDebug("reparse");
- if(m_View== 0 || m_selector == NORMAL)
- return;
- m_View->clear();
- QString currMime =m_mimeCheck->currentText();
- // update the mimetype now
- if( m_autoMime ) {
- QDir dir( m_currentDir );
- m_mimetypes.clear();
- m_mimeCheck->clear();
- 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->filePath() );
- if( !m_mimetypes.contains( type.id() ) )
- m_mimetypes.append( type.id() );
+ if( m_selector == NORMAL )
+ return QPEApplication::documentDir();
- ++it;
- }
- m_mimetypes.prepend("All" );
- m_mimeCheck->insertStringList(m_mimetypes );
- // set it to the current mimetype
- m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currMime ) );
- }else{
- m_mimeCheck->clear();
- m_mimeCheck->insertItem( m_mimetypes.join(";") );
+ return QDir(m_currentDir).absPath();
}
- QDir dir( m_currentDir );
- //dir.setFilter(-1 );
- int sort = QDir::Name | QDir::DirsFirst | QDir::Reversed;
- if( m_case )
- sort = QDir::IgnoreCase;
- dir.setSorting( sort );
-
- int filter;
- /* if( m_dir && !m_files)
- filter |= QDir::Dirs;
- else if( !m_dir && m_files )
- filter |= QDir::Files;
- else
- filter |= QDir::All;
- */
- if( m_selector == EXTENDED_ALL )
- filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
- else
- filter = QDir::Files | QDir::Dirs | QDir::All;
- dir.setFilter( filter );
- qDebug("infoList");
- const QFileInfoList *list = dir.entryInfoList();
- QFileInfoListIterator it( *list );
- QFileInfo *fi;
- while( (fi=it.current()) ){
- if(fi->fileName() == ".." || fi->fileName() == "." ){
- ++it;
- continue;
- }
-// qWarning("Test: %s", fi->fileName().latin1() );
- if(fi->isSymLink() ){
-// qWarning("Symlink %s", fi->fileName().latin1() );
- QString file = fi->dirPath(true)+"/"+ fi->readLink();
-// qWarning("File ->%s", file.latin1() );
- for(int i=0; i<=4; i++ ){ // prepend from dos
- QFileInfo info( file );
- if( !info.exists() ){
-// qWarning("does not exist" );
- addSymlink(currMime, fi, TRUE );
- break;
- }else if( info.isDir() ){
-// qWarning("isDir" );
- addDir(currMime, fi, TRUE );
+int OFileSelector::fileCount()
+{
+ int count;
+ switch( m_selector ){
+ case NORMAL:
+ count = m_select->fileCount();
break;
- }else if( info.isFile() ){
-// qWarning("isFile" );
- addFile(currMime, fi, TRUE );
+ //case CUSTOM:
+ case EXTENDED:
+ case EXTENDED_ALL:
+ default:
+ count = m_View->childCount();
break;
- }else if( info.isSymLink() ){
- file = info.dirPath(true)+ "/"+ info.readLink();
-// qWarning("isSymlink again %s", file.latin1() );
- }else if( i == 4 ){ // just insert it and have the symlink symbol
- addSymlink(currMime, fi );
-// qWarning("level too deep" );
}
+ return count;
}
- }else if( fi->isDir() ){
- addDir(currMime, fi );
- }else if( fi->isFile() ) { // file ?
- addFile(currMime, fi );
+DocLnk OFileSelector::selectedDocument() const
+{
+ DocLnk lnk;
+ switch( m_selector ){
+ case NORMAL:{
+ const DocLnk *lnk2 = m_select->selected();
+ lnk = DocLnk(*lnk2 ); // copy
+ delete lnk2;
+ break;
}
- ++it;
+ case EXTENDED:
+ case EXTENDED_ALL:
+ default:
+ lnk = DocLnk( selectedName() ); // new DocLnk
+ break;
}
- m_View->sort();
-// m_View->ensureItemVisible();
+ return lnk;
}
-
-QString OFileSelector::directory()const
+QValueList<DocLnk> OFileSelector::selectedDocuments() const
{
- QDir d( m_currentDir);
- return d.absPath();
+ QValueList<DocLnk> docs;
+ docs.append( selectedDocument() );
+ return docs;
}
-int OFileSelector::fileCount()
-{
- return 0;
-}
+
+// slots internal
void OFileSelector::slotOk( )
{
emit ok();
}
-
void OFileSelector::slotCancel( )
{
emit cancel();
}
-
-void OFileSelector::initializeName()
+void OFileSelector::slotViewCheck(const QString &sel)
{
- 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 );
+ 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(";"),
+ 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_lay->addLayout(m_boxName);
+ m_stack->addWidget( m_select, NORMAL );
}
-
-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() ) );
-
+ 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
}
-
-void OFileSelector::initializeChooser()
+}
+void OFileSelector::slotMimeCheck(const QString &mime)
{
- 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(2, 8 );
- m_boxView->addWidget(m_mimeCheck, 0 );
- m_lay->addLayout(m_boxView );
- m_lay->insertSpacing( 4, 8);
-
- m_viewCheck->insertItem(tr("Documents") );
- m_viewCheck->insertItem(tr("Files") );
- m_viewCheck->insertItem(tr("All Files") );
+ if( m_selector == NORMAL ){
+ if( m_autoMime ){
+ delete m_select;
+ m_select = new FileSelector( mime == tr("All") ? QString::null : mime,
+ m_stack, "fileselector",
+ FALSE, FALSE);
- if(!m_autoMime )
- m_mimeCheck->insertItem(m_mimetypes.join("," ) );
- else{ // check
+ 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 );
+ m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) );
}
-
- connect( m_viewCheck, SIGNAL(activated(const QString &) ),
- this, SLOT(slotViewCheck(const QString & ) ) );
-
- connect( m_mimeCheck, SIGNAL(activated(const QString &) ),
- this, SLOT(slotMimeCheck(const QString & ) ) );
+ }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::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::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::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
- if( m_View != 0) { // delete 0 shouldn't crash but it did :(
- delete m_View;
- delete m_boxToolbar;
- delete m_homeButton;
- delete m_docButton;
- delete m_location;
- delete m_up;
- delete m_pseudo;
- //if(m_pseudoLayout!=0 )
-// delete m_pseudoLayout;
}
- m_View = 0;
- m_boxToolbar = 0;
- m_homeButton = 0;
- m_docButton = 0;
- m_location = 0;
- m_up = 0;
- m_pseudo = 0;
- m_pseudoLayout = 0;
+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(";"),
+ 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
- delete m_select;
- m_select = new FileSelector( currMime == "All" ? QString::null : currMime,
- m_stack,"fileselector", FALSE, FALSE );
m_stack->addWidget( m_select, NORMAL );
- m_mimeCheck->clear();
- m_selector = NORMAL;
- updateMimes();
- m_mimeCheck->insertStringList( m_mimetypes );
m_stack->raiseWidget( NORMAL );
- connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) );
+ }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
- } else if(view == QString::fromLatin1("Files") ){
- // remove from the stack
- delete m_select;
- m_select = 0;
- delete m_View;
- m_View = 0;
+ if( m_shLne ) // the LineEdit with the current FileName
+ initializeName();
- m_selector = EXTENDED;
- initializeListView();
- reparse();
- } else if(view == QString::fromLatin1("All Files") ) {
- // remove from the stack
- delete m_select;
- m_select = 0;
- delete m_View;
- m_View = 0;
-
- m_selector = EXTENDED_ALL;
- initializeListView();
- reparse();
- }
-}
+ if( m_shPerm ) // the Permission QCheckBox
+ initializePerm();
+ if( m_shChooser ) // the Chooser for the view and Mimetypes
+ initializeChooser();
-void OFileSelector::updateMimes() // lets check which mode is active
- // check the current dir for items then
+ if( m_shYesNo ) // the Yes No button row
+ initializeYes( );
+}
+void OFileSelector::updateMimes()
{
if( m_autoMime ){
m_mimetypes.clear();
- m_mimetypes.append("All" );
+ m_mimetypes.append( tr("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{
- // should be allreday updatet
- ;
- }
+ }// else done in reparse
}
}
-
-void OFileSelector::initializeListView()
+void OFileSelector::initVars()
{
- // in the instance that a developer selected the view to be Files or Entended,
- // in the initial initialization, you are deleting objects here
- // that aren't even existing yet.
-
- // just to make sure but clean it up better FIXME
- delete m_View;
- m_View = 0;
- delete m_boxToolbar;
- delete m_homeButton;
- delete m_docButton;
- delete m_location;
- delete m_up;
- delete m_pseudo;
+ 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();
- m_boxToolbar = 0;
+ // pointers
+ m_location = 0;
+ m_mimeCheck = 0;
+ m_viewCheck = 0;
m_homeButton = 0;
m_docButton = 0;
- m_location = 0;
+ m_hideButton = 0;
+ m_ok = 0;
+ m_cancel = 0;
+ m_reread = 0;
m_up = 0;
+ m_View = 0;
+ m_checkPerm = 0;
m_pseudo = 0;
m_pseudoLayout = 0;
- qDebug(" time for the toolbar ");
+ m_select = 0;
+ m_stack = 0;
+ m_lay = 0;
+ m_Oselector = 0;
+ m_boxToolbar = 0;
+ m_boxOk = 0;
+ m_boxName = 0;
+ m_boxView = 0;
+ m_custom = 0;
+ m_edit = 0;
+ m_fnLabel = 0;
+ m_new = 0;
+ m_close = 0;
+}
+void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink)
+{
+ if(!m_files)
+ return;
+ // if( !compliesMime(info->absFilePath(), mime ) )
+ // return;
+ MimeType type( info->absFilePath() );
+ if( mime != tr("All") && type.id() != mime )
+ return;
+ QPixmap pix = type.pixmap();
+ QString dir;
+ QString name;
+ bool locked;
+ if( pix.isNull() )
+ pix = Resource::loadPixmap( "UnknownDocument-14");
+ dir = info->dirPath( true );
+ if( symlink )
+ name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink();
+ else {
+ name = info->fileName();
+ if( ( m_mode == OPEN && !info->isReadable() )||
+ ( m_mode == SAVE && !info->isWritable() ) ){
+
+ locked = true; pix = Resource::loadPixmap("locked");
+ }
+ }
+ new OFileSelectorItem( m_View, pix, name,
+ info->lastModified().toString(),
+ QString::number( info->size() ),
+ dir, locked );
+}
+void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
+{
+ if(!m_dir)
+ return;
+ if( m_selector == EXTENDED_ALL || m_selector == EXTENDED ){
+ bool locked = false;
+ QString name;
+ QPixmap pix;
+ if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){
+ locked = true;
+ if( symlink )
+ pix = (*m_pixmaps)["symlinkedlocked"];
+ else
+ pix = Resource::loadPixmap("lockedfolder");
+ }else { // readable
+ pix = symlink ? (*m_pixmaps)["dirsymlink"] : Resource::loadPixmap("folder") ;
+ }
+ name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ;
+ new OFileSelectorItem( m_View, pix, name,
+ info->lastModified().toString(),
+ 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_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() ) );
+ }
+}
+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 );
+ }
+ 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 );
- if(m_shTool ){
- m_boxToolbar = new QHBoxLayout( );
- m_boxToolbar->setAutoAdd( true );
- m_location = new QComboBox(m_pseudo );
- m_location ->setEditable(TRUE);
- connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( locationComboActivated(const QString & ) ) );
- connect( m_location->lineEdit(),SIGNAL(returnPressed()), this,SLOT( locationComboChanged()));
+ // toolbar
+ m_boxToolbar = new QHBox( m_pseudo );
+ m_boxToolbar->setSpacing(0 ); // next to each other please
- m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton");
+ // 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() ),
+ this, SLOT(locationComboChanged() ) );
+ // UP Button
+ m_up = new QPushButton(Resource::loadIconSet("up"),"",
+ m_boxToolbar,"cdUpButton");
m_up->setFixedSize( QSize( 20, 20 ) );
connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) );
m_up->setFlat(TRUE);
- m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo);
+ // Home Button
+ m_homeButton = new QPushButton(Resource::loadIconSet("home") ,
+ "", m_boxToolbar);
m_homeButton->setFixedSize( QSize( 20, 20 ) );
connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) );
m_homeButton->setFlat(TRUE);
-
- m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", m_pseudo,"docsButton");
+ // Documents Button
+ m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"",
+ m_boxToolbar,"docsButton");
m_docButton->setFixedSize( QSize( 20, 20 ) );
connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) );
m_docButton->setFlat(TRUE);
- m_boxToolbar->addWidget(m_location );
- m_boxToolbar->addWidget(m_up );
- m_boxToolbar->addWidget(m_homeButton );
- m_boxToolbar->addWidget(m_docButton );
- m_pseudoLayout->addLayout(m_boxToolbar );
- qDebug("lets fill the combobox");
+ // Close button
+ m_close = new QPushButton( Resource::loadIconSet( "close"), "",
+ m_boxToolbar );
+ connect( m_close, SIGNAL(clicked() ), this, SIGNAL(closeMe() ) );
+ m_close->setFixedSize( 20, 20 );
+
+ m_boxToolbar->setFixedHeight( 20 );
+ m_pseudoLayout->addWidget(m_boxToolbar );
+
+ // let;s fill the Location ComboBox
StorageInfo storage;
const QList<FileSystem> &fs = storage.fileSystems();
QListIterator<FileSystem> it ( fs );
for( ; it.current(); ++it ){
const QString disk = (*it)->name();
const QString path = (*it)->path();
m_location->insertItem(path+ "<-"+disk );
}
int count = m_location->count();
m_location->insertItem(m_currentDir );
m_location->setCurrentItem( count );
- };
-
+ // due to the New and Close button we can not simply hide m_boxToolBar to not show it
+ if( !m_shTool ){
+ m_location->hide( );
+ m_up->hide( );
+ m_homeButton->hide( );
+ m_docButton->hide( );
+ }
+ if(!m_shClose )
+ m_close->hide();
+ if(!m_shNew)
+ m_close->hide();
+
+ } // off toolbar
+ // the Main ListView
+ // make a QWidgetStack first so Views can share the Toolbar
m_View = new QListView(m_pseudo, "Extended view" );
- m_stack->addWidget( m_pseudo, EXTENDED );
- m_stack->raiseWidget( EXTENDED );
- m_pseudoLayout->addWidget(m_View );
- QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold);
- // set up the stuff
- // Pixmap Name Date Size mime
- //(m_View->header() )->hide();
- //m_View->setRootIsDecorated(false);
+ QPEApplication::setStylusOperation( m_View->viewport(),
+ QPEApplication::RightOnHold);
m_View->addColumn(" ");
m_View->addColumn(tr("Name"),135 );
m_View->addColumn(tr("Size"),-1 );
m_View->addColumn(tr("Date"), 60 );
m_View->addColumn(tr("Mime Type"),-1 );
QHeader *header = m_View->header();
header->hide();
m_View->setSorting(1 );
m_View->setAllColumnsShowFocus( TRUE);
- // connect now
- connect(m_View, SIGNAL(selectionChanged() ), this, SLOT(slotSelectionChanged() ) );
- connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), this, SLOT(slotCurrentChanged(QListViewItem * ) ) );
- connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ),
- this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) );
- connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )),
- this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) );
-
-
-};
-/* If a item is locked depends on the mode
- if we're in OPEN !isReadable is locked
- if we're in SAVE !isWriteable is locked
+ connect(m_View, SIGNAL(selectionChanged() ),
+ this, SLOT(slotSelectionChanged() ) );
+ connect(m_View, SIGNAL(currentChanged(QListViewItem *) ),
+ this, SLOT(slotCurrentChanged(QListViewItem * ) ) );
- */
-
+ connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ),
+ this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) );
-void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){
-// qWarning("Add Files" );
- if( !m_files ){
-// qWarning("not mfiles" );
- return;
- }
+ connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )),
+ this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) );
- MimeType type( info->filePath() );
- QString name;
- QString dir;
- bool locked= false;
- if(mime == "All" ){
- ;
- }else if( type.id() != mime ) {
- return;
- }
- QPixmap pix = type.pixmap();
- if(pix.isNull() )
- pix = Resource::loadPixmap( "UnknownDocument-14" );
- dir = info->dirPath( true );
- if( symlink ) { // check if the readLink is readable
- // do it right later
- name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink();
- }else{ // keep track of the icons
- name = info->fileName();
- if( m_mode == OPEN ){
- if( !info->isReadable() ){
- locked = true;
- pix = Resource::loadPixmap("locked" );
- }
- }else if( m_mode == SAVE ){
- if( !info->isWritable() ){
- locked = true;
- pix = Resource::loadPixmap("locked" );
- }
- }
+ m_pseudoLayout->addWidget( m_View, 288 );
+ m_stack->addWidget( m_pseudo, EXTENDED );
}
- new OFileSelectorItem( m_View, pix, name,
- info->lastModified().toString(),
- QString::number( info->size() ),
- dir, locked );
}
-
-void OFileSelector::addDir(const QString &/*mime*/, QFileInfo *info, bool symlink )
-{
- if(!m_dir )
- return;
- //if( showDirs )
+void OFileSelector::initializePerm()
{
- bool locked=false;
- QString name;
- QPixmap pix;
- if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){
- locked = true;
- if( symlink ){
- pix = (*m_pixmaps)["symlinkedlocked"];
- }else{
- pix = Resource::loadPixmap("lockedfolder" );
- }
- }else{
- if( symlink ){
- pix = (*m_pixmaps)["dirsymlink" ];
- }else{
- pix = Resource::loadPixmap("folder" );
- }
- }
- if( symlink){
- name = info->fileName()+ "->"+ info->dirPath(true) +"/" +info->readLink();
-
- }else{
- //if(info->isReadable() )
- name = info->fileName();
- }
-
- new OFileSelectorItem(m_View, pix,
- name, info->lastModified().toString(),
- QString::number(info->size() ),info->dirPath(true), locked, true );
+ if( m_checkPerm == 0 ){
+ m_checkPerm = new QCheckBox(tr("Ser Permission"), this, "perm");
+ m_checkPerm->setChecked( false );
+ m_lay->addWidget( m_checkPerm );
}
}
+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 );
-void OFileSelector::setShowDirs(bool dir )
+ 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 )
{
- m_dir = dir;
- reparse();
+ if( mime == "All" )
+ return true;
+ MimeType type( path );
+ if( type.id() == mime )
+ return true;
+ return false;
}
void OFileSelector::slotFileSelected(const QString &string )
{
if(m_shLne )
m_edit->setText( string );
-
emit fileSelected( string );
- // do AppLnk stuff
}
-
void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
{
slotFileSelected(lnk.name() );
- emit fileSelected( lnk );
+ // emit fileSelected( lnk );
}
-
-void OFileSelector::slotSelectionChanged() // get the current items
- // fixme
+void OFileSelector::slotSelectionChanged()
{
- qWarning("selection changed" );
-}
+}
void OFileSelector::slotCurrentChanged(QListViewItem *item )
{
-// qWarning("current changed" );
if( item == 0 )
return;
-
if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
- OFileSelectorItem *sel = (OFileSelectorItem*)item;
+ OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;)
if(!sel->isDir() ){
-// qWarning("is not dir" );
- if(m_shLne ){
+ if( m_shLne )
m_edit->setText(sel->text(1) );
-// qWarning("setTexy" );
}
}
- }else {
- qWarning("mode not extended" );
- }
}
-
-// either select or change dir
-void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &/*point*/, int )
+void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int)
{
if( item == 0 )
return;
if( button != Qt::LeftButton )
return;
-// qWarning("clicked" );
- if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
-// qWarning("inside" );
+ switch( m_selector ){
+ default:
+ break;
+ case EXTENDED: // fall through
+ case EXTENDED_ALL:{
OFileSelectorItem *sel = (OFileSelectorItem*)item;
- if(!sel->isLocked() ){ // not locked either changedir or open
+ if(!sel->isLocked() ){
QStringList str = QStringList::split("->", sel->text(1) );
if(sel->isDir() ){
- cd( sel->directory() + "/" + str[0] );
+ cd( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ // if MODE Dir m_shLne set the Text
} else {
-// qWarning("file" );
if(m_shLne )
- m_edit->setText(str[0] );
- emit fileSelected(str[0] );
- // emit DocLnk need to do it
+ m_edit->setText( str[0].stripWhiteSpace() );
+ emit fileSelected( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ }
+ }
+ break;
}
- } else {
- qWarning( "locked" );
}
- };
}
-
void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int )
{
if (item == 0 )
return;
if( button != Qt::RightButton )
return;
-// qWarning("right button" );
slotContextMenu(item);
}
-
void OFileSelector::slotContextMenu(QListViewItem *item)
{
-// qWarning("context menu" );
- if( item ==0 || !m_showPopup )
- return;
-
- if( m_custom !=0){
- m_custom->exec();
- }else{
- QPopupMenu menu;
- QAction up;
- up.setText("cd up");
- up.addTo( &menu );
- connect(&up, SIGNAL(activated() ),
- this, SLOT(cdUP() ) );
-
- QAction act;
- OFileSelectorItem *sel = (OFileSelectorItem*)item;
- if(sel->isDir() ){
- act.setText( tr("Change Directory") );
- act.addTo(&menu );
- connect(&act, SIGNAL(activated() ),
- this, SLOT(slotChangedDir() ) );
- }else{
- act.setText( tr("Open file" ) );
- act.addTo( &menu );
- connect(&act, SIGNAL(activated() ),
- this, SLOT(slotOpen() ) );
- }
- QAction rescan;
- rescan.setText( tr("Rescan") );
- rescan.addTo( &menu );
- connect(&rescan, SIGNAL(activated() ),
- this, SLOT(slotRescan() ) );
-
- QAction rename;
- rename.setText( tr("Rename") );
- rename.addTo( &menu );
- connect(&rename, SIGNAL(activated() ),
- this, SLOT(slotRename() ) );
-
- menu.insertSeparator();
- QAction delItem;
- delItem.setText( tr("Delete") );
- delItem.addTo(&menu );
- connect(&delItem, SIGNAL(activated() ),
- this, SLOT(slotDelete() ) );
-
- menu.exec(QCursor::pos() );
- }
-}
-bool OFileSelector::cd(const QString &str )
-{
-// qWarning(" dir %s", str.latin1() );
- QDir dir( str);
- if(dir.exists() ){
- m_currentDir = dir.absPath();
- reparse();
- if(m_shTool ){
- int count = m_location->count();
- insertLocationPath( str ,count );
- m_location->setCurrentItem( count );
- }
- return true;
}
- return false;
-}
-
-void OFileSelector::insertLocationPath(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::slotChangedDir()
{
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
if(sel->isDir() ){
QStringList str = QStringList::split("->", sel->text(1) );
- cd( sel->directory() + "/" + str[0] );
-
+ cd( sel->directory() + "/" + str[0].stripWhiteSpace() );
}
}
-
void OFileSelector::slotOpen()
{
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
if(!sel->isDir() ){
QStringList str = QStringList::split("->", sel->text(1) );
- slotFileSelected( str[0] );
+ slotFileSelected( sel->directory() +"/" +str[0].stripWhiteSpace() );
}
}
-
void OFileSelector::slotRescan()
{
- reparse();
-}
+}
void OFileSelector::slotRename()
{
- // rename inline
+ reparse();
}
-
void OFileSelector::slotDelete()
{
-// qWarning("delete slot" );
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
QStringList list = QStringList::split("->", sel->text(1) );
if( sel->isDir() ){
- QString str = QString::fromLatin1("rm -rf ") + list[0]; //better safe than sorry
+ QString str = QString::fromLatin1("rm -rf ") + sel->directory() +"/" + list[0]; //better safe than sorry
switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+list[0],
tr("Yes"),tr("No"),0,1,1) ) {
case 0:
::system(str.utf8().data() );
break;
}
} else {
QFile::remove( list[0] );
}
m_View->takeItem( sel );
delete sel;
}
-
void OFileSelector::cdUP()
{
QDir dir( m_currentDir );
dir.cdUp();
if(dir.exists() ){
m_currentDir = dir.absPath();
reparse();
int count = m_location->count();
- insertLocationPath( m_currentDir, count);
+ slotInsertLocationPath( m_currentDir, count);
m_location->setCurrentItem( indexByString( m_location, m_currentDir));
//this wont work in all instances
// FIXME
}
}
-
void OFileSelector::slotHome()
{
cd(QDir::homeDirPath() );
}
-
void OFileSelector::slotDoc()
{
- cd(QDir::homeDirPath() + "/Documents" );
+ cd(QPEApplication::documentDir() );
}
-
void OFileSelector::slotNavigate()
{
}
+// fill the View with life
+void OFileSelector::reparse()
+{
+ if( m_selector == NORMAL )
+ return;
+ if( m_selector == EXTENDED || m_selector == EXTENDED_ALL )
+ m_View->clear();
+ else // custom view
+ ; // currentView()->clear();
+ if( m_shChooser)
+ qWarning("reparse %s", m_mimeCheck->currentText().latin1() );
-void OFileSelector::locationComboActivated(const QString & file ) {
- cd(file.left(file.find("<-",0,TRUE)));
- 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() );
}
-void OFileSelector::locationComboChanged() {
- cd( m_location->lineEdit()->text());
- reparse();
+ ++it;
+ }
+ // add them to the chooser
+ m_mimeCheck->insertItem( tr("All") );
+ m_mimeCheck->insertStringList( m_mimetypes );
+ m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
+ currentMimeType = m_mimeCheck->currentText();
+ }
+ }else { // no autoMime
+ currentMimeType = m_mimetypes.join(";");
+ if( m_shChooser ){
+ m_mimeCheck->clear();
+ m_mimeCheck->insertItem(m_mimetypes.join(",") );
+ }
+ }
+ // 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;
+ while( (fi=it.current() ) ){
+ //qWarning("True and only" );
+ if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){
+ //qWarning(".. or ." );
+ ++it;
+ continue;
+ }
+ if( fi->isSymLink() ){
+ QString file = fi->dirPath( true ) + "/" + fi->readLink();
+ for( int i = 0; i<=4; i++) { // 5 tries to prevent dos
+ QFileInfo info( file );
+ if( !info.exists() ){
+ addSymlink( currentMimeType, fi, TRUE );
+ break;
+ }else if( info.isDir() ){
+ addDir( currentMimeType, fi, TRUE );
+ break;
+ }else if( info.isFile() ){
+ addFile( currentMimeType, fi, TRUE );
+ break;
+ }else if( info.isSymLink() ){
+ file = info.dirPath(true ) + "/" + info.readLink() ;
+ break;
+ }else if( i == 4){
+ addSymlink( currentMimeType, fi );
+ }
+ } // off for loop
+ }else if( fi->isDir() ){
+ addDir( currentMimeType, fi );
+ }else if( fi->isFile() ){
+ addFile( currentMimeType, fi );
+ }
+ //qWarning( "%s", fi->fileName().latin1() );
+ ++it;
+ } // of while loop
+ m_View->sort();
+ if( m_shTool ){
+ m_location->insertItem( m_currentDir );
+
+ }
+ // reenable painting and updates
}
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h
index 5c38ac4..47697b9 100644
--- a/libopie/ofileselector.h
+++ b/libopie/ofileselector.h
@@ -1,259 +1,264 @@
/*
This is based on code and idea 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;
//
class OFileSelector : public QWidget {
Q_OBJECT
public:
enum Mode {OPEN=1, SAVE=2, FILESELECTOR=4, DIR=8 };
enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 };
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() );
OFileSelector(const QString &mimeFilter, QWidget *parent,
const char *name, bool newVisible = TRUE,
- bool closeVisible = FALSE ) { };
+ bool closeVisible = FALSE );
- ~OFileSelector() {};
+ ~OFileSelector();
// currently only for the FILESELECTOR Mode
- void setNewVisible( bool /*b*/ ) { };
- void setCloseVisible(bool /*b*/ ) { };
+ void setNewVisible( bool /*b*/ );
+ void setCloseVisible(bool /*b*/ );
// end file selector mode
// deprecated
- void reread() { reparse(); };
+ 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 );
void setPermissionBarVisible( bool show );
void setLineEditVisible(bool show) ;
void setChooserVisible( bool chooser );
QCheckBox* permissionCheckbox();
bool setPermission() const;
void setPermissionChecked( bool check );
void setMode( int );
bool showDirs()const { return m_dir; }
void setShowDirs(bool );
const QListView* listView() { return m_View; };
bool isCaseSensetive()const { return m_case; }
void setCaseSensetive(bool caSe );
bool showFiles()const { return m_files; };
void setShowFiles(bool );
bool cd(const QString &path );
int mode()const { return m_mode; };
int selector()const { return m_selector; };
void setSelector( int );
bool showPopup()const { return m_showPopup; };
void setShowPopup( bool pop ) { m_showPopup = pop; };
void setPopupMenu( QPopupMenu * );
- void updateLay();
+ // void updateLay();
void reparse(); // re reads the dir
QString selectedName( )const;
QStringList selectedNames()const;
QString selectedPath() const;
QStringList selectedPaths() const;
QString directory()const;
int fileCount();
/* the user needs to delete it */
DocLnk selectedDocument()const;
/* the user needs to delete it */
QValueList<DocLnk> selectedDocuments()const;
signals:
void fileSelected( const DocLnk & );
void fileSelected( const QString & );
void dirSelected(const QString &dir );
void closeMe();
void ok();
void cancel();
+ void contextMenu();
- protected slots:
+ private slots:
+ void slotTest() { qWarning("slotTest" ); setLineEditVisible(false ); };
void slotOk();
void slotCancel();
void slotViewCheck(const QString & );
void slotMimeCheck(const QString & );
- void locationComboActivated(const QString & );
- void insertLocationPath(const QString &, int);
+ void slotLocationActivated(const QString & );
+ void slotInsertLocationPath(const QString &, int);
void locationComboChanged();
- protected:
+
+ 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;
+ 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, requestedMimeTypesList;
+ 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;
+ 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;
- // implementation todo
+ 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);
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( );
};
#endif