summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector.cc135
-rw-r--r--libopie/ofileselector.h4
2 files changed, 69 insertions, 70 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index d1f1e1f..ce66f51 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -77,25 +77,26 @@ namespace {
};
OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName,
const QString &fileName, const QStringList &mimetypes ) : QWidget( wid )
{
if(wid!=0)
resize(wid->width(),wid->height());
m_selector = selector;
m_currentDir = dirName;
m_name = fileName;
- m_mimetypes = mimetypes;
+ requestedMimeTypesList = m_mimetypes = mimetypes;
+
// if( mimetypes.isEmpty() )
// m_autoMime = true;
m_mode = mode;
m_shTool = true;
m_shPerm = true;
m_shLne = true;
m_shChooser = true;
m_shYesNo = true;
// for FILESELECTOR only view is interesting
m_location = 0;
m_homeButton = 0;
@@ -177,58 +178,54 @@ void OFileSelector::initPics()
____________________
*/
void OFileSelector::delItems()
{
QLayoutIterator it = m_lay->iterator();
while ( it.current() != 0 ){
it.deleteCurrent();
}
}
void OFileSelector::init()
{
-
+// qDebug("init");
m_stack = new QWidgetStack(this, "wstack" );
- 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 );
connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) );
m_pseudoLayout = 0l;
- }else {
+ if( m_selector != NORMAL ) {
initializeListView();
}
-
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 );
}
-
if( m_shChooser )
initializeChooser();
-
if(m_shYesNo )
initializeYes();
-
+
+ m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, requestedMimeTypesList.first()) );
+ reparse();
}
void OFileSelector::setYesCancelVisible( bool show )
{
if ( show == m_shYesNo )
return;
m_shYesNo = show;
if( !show ){
delete m_ok;
delete m_cancel;
m_ok = 0;
@@ -407,30 +404,28 @@ void OFileSelector::updateLay()
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;
}
void OFileSelector::reparse()
{
+ 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()) ){
@@ -461,68 +456,69 @@ void OFileSelector::reparse()
/* 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() );
+// qWarning("Test: %s", fi->fileName().latin1() );
if(fi->isSymLink() ){
- qWarning("Symlink %s", fi->fileName().latin1() );
+// qWarning("Symlink %s", fi->fileName().latin1() );
QString file = fi->dirPath(true)+"/"+ fi->readLink();
- qWarning("File ->%s", file.latin1() );
+// 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" );
+// qWarning("does not exist" );
addSymlink(currMime, fi, TRUE );
break;
}else if( info.isDir() ){
- qWarning("isDir" );
+// qWarning("isDir" );
addDir(currMime, fi, TRUE );
break;
}else if( info.isFile() ){
- qWarning("isFile" );
+// qWarning("isFile" );
addFile(currMime, fi, TRUE );
break;
}else if( info.isSymLink() ){
file = info.dirPath(true)+ "/"+ info.readLink();
- qWarning("isSymlink again %s", file.latin1() );
+// 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" );
+// qWarning("level too deep" );
}
}
}else if( fi->isDir() ){
addDir(currMime, fi );
}else if( fi->isFile() ) { // file ?
addFile(currMime, fi );
}
++it;
}
m_View->sort();
+// m_View->ensureItemVisible();
}
QString OFileSelector::directory()const
{
QDir d( m_currentDir);
return d.absPath();
}
int OFileSelector::fileCount()
{
return 0;
}
@@ -577,25 +573,25 @@ void OFileSelector::initializeChooser()
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_autoMime )
// m_mimeCheck->insertItem(m_mimetypes.join("," ) );
// else{ // check
updateMimes();
- m_mimeCheck->insertStringList( m_mimetypes );
+ m_mimeCheck->insertStringList( m_mimetypes );
// }
connect( m_viewCheck, SIGNAL(activated(const QString &) ),
this, SLOT(slotViewCheck(const QString & ) ) );
connect( m_mimeCheck, SIGNAL(activated(const QString &) ),
this, SLOT(slotMimeCheck(const QString & ) ) );
}
void OFileSelector::slotMimeCheck(const QString &view ){
if(m_selector == NORMAL ){
delete m_select;
@@ -637,133 +633,136 @@ void OFileSelector::slotViewCheck(const QString &view ){
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 if(view == QString::fromLatin1("Files") ){
+ } else if(view == QString::fromLatin1("Files") ){
// remove from the stack
delete m_select;
m_select = 0;
delete m_View;
m_View = 0;
-
-
m_selector = EXTENDED;
- // create the ListView or IconView
initializeListView();
-
reparse();
- }else if(view == QString::fromLatin1("All Files") ) {
+ } 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();
- };
+ }
}
void OFileSelector::updateMimes() // lets check which mode is active
// check the current dir for items then
{
m_mimetypes.clear();
m_mimetypes.append("All" );
- if( m_selector == NORMAL ){
+// 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{
+// }else{
// should be allreday updatet
- ;
- }
+ // ;
+ // }
}
void OFileSelector::initializeListView()
-{
+{
+ // 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;
+ // if( m_View) delete m_View;
+// m_View = 0;
+// if(m_boxToolbar) delete m_boxToolbar;
+// if(m_homeButton) delete m_homeButton;
+// if(m_docButton) delete m_docButton;
+// if( m_location) delete m_location;
+// if(m_up) delete m_up;
//delete m_pseudo;
//if(m_pseudoLayout!=0 ) // why did you overload malloc
//delete m_pseudoLayout;
m_boxToolbar = 0;
m_homeButton = 0;
m_docButton = 0;
m_location = 0;
m_up = 0;
m_pseudo = 0;
m_pseudoLayout = 0;
- // time for the toolbar
+ qDebug(" time for the toolbar ");
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()));
m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"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);
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");
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 );
- // lets fill the combobox
+ qDebug("lets fill the 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 );
};
+
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);
m_View->addColumn(" ");
m_View->addColumn(tr("Name"),135 );
m_View->addColumn(tr("Size"),-1 );
@@ -774,36 +773,37 @@ void OFileSelector::initializeListView()
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
*/
void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){
- qWarning("Add Files" );
+// qWarning("Add Files" );
if( !m_files ){
- qWarning("not mfiles" );
+// qWarning("not mfiles" );
return;
}
MimeType type( info->filePath() );
QString name;
QString dir;
bool locked= false;
if(mime == "All" ){
;
}else if( type.id() != mime ) {
return;
}
@@ -892,86 +892,86 @@ void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
slotFileSelected(lnk.name() );
emit fileSelected( lnk );
}
void OFileSelector::slotSelectionChanged() // get the current items
// fixme
{
qWarning("selection changed" );
}
void OFileSelector::slotCurrentChanged(QListViewItem *item )
{
- qWarning("current changed" );
+// qWarning("current changed" );
if( item == 0 )
return;
if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
OFileSelectorItem *sel = (OFileSelectorItem*)item;
if(!sel->isDir() ){
- qWarning("is not dir" );
+// qWarning("is not dir" );
if(m_shLne ){
m_edit->setText(sel->text(1) );
- qWarning("setTexy" );
+// qWarning("setTexy" );
}
}
}else {
qWarning("mode not extended" );
}
}
// either select or change dir
void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &point, int )
{
if( item == 0 )
return;
if( button != Qt::LeftButton )
return;
- qWarning("clicked" );
+// qWarning("clicked" );
if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
- qWarning("inside" );
+// qWarning("inside" );
OFileSelectorItem *sel = (OFileSelectorItem*)item;
if(!sel->isLocked() ){ // not locked either changedir or open
QStringList str = QStringList::split("->", sel->text(1) );
if(sel->isDir() ){
cd( sel->directory() + "/" + str[0] );
} else {
- qWarning("file" );
+// qWarning("file" );
if(m_shLne )
m_edit->setText(str[0] );
emit fileSelected(str[0] );
// emit DocLnk need to do it
}
} 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" );
+// qWarning("right button" );
slotContextMenu(item);
}
void OFileSelector::slotContextMenu(QListViewItem *item)
{
- qWarning("context menu" );
+// 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() ) );
@@ -1005,45 +1005,48 @@ void OFileSelector::slotContextMenu(QListViewItem *item)
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() );
+// 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( pathList.grep( currentPath,TRUE).isEmpty() ) {
+ 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();
@@ -1066,25 +1069,25 @@ void OFileSelector::slotOpen()
void OFileSelector::slotRescan()
{
reparse();
}
void OFileSelector::slotRename()
{
// rename inline
}
void OFileSelector::slotDelete()
{
- qWarning("delete slot" );
+// 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
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] );
@@ -1092,47 +1095,43 @@ void OFileSelector::slotDelete()
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 );
- m_location->setCurrentItem( indexFromString(m_currentDir ));
+ insertLocationPath( m_currentDir, count);
+ m_location->setCurrentItem( indexByString( m_location, m_currentDir));
//this wont work in all instances
// FIXME
}
}
-int OFileSelector::indexFromString(const QString &str) {
-
- for(int i=0;i< m_location->count();i++) {
- if(str == m_location->text(i))
- return i;
- }
- return 0;
-}
-
void OFileSelector::slotHome()
{
cd(QDir::homeDirPath() );
}
void OFileSelector::slotDoc()
{
cd(QDir::homeDirPath() + "/Documents" );
}
void OFileSelector::slotNavigate()
{
}
void OFileSelector::locationComboActivated(const QString & file ) {
cd(file.left(file.find("<-",0,TRUE)));
reparse();
}
+
+void OFileSelector::locationComboChanged() {
+ cd( m_location->lineEdit()->text());
+ reparse();
+}
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h
index 81a9e63..babe09f 100644
--- a/libopie/ofileselector.h
+++ b/libopie/ofileselector.h
@@ -183,44 +183,44 @@ class OFileSelector : public QWidget {
void dirSelected(const QString &dir );
void closeMe();
void ok();
void cancel();
protected slots:
void slotOk();
void slotCancel();
void slotViewCheck(const QString & );
void slotMimeCheck(const QString & );
void locationComboActivated(const QString & );
void insertLocationPath(const QString &, int);
- int indexFromString(const QString &);
+ void locationComboChanged();
protected:
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;
QListView *m_View;
QCheckBox *m_checkPerm;
QWidget *m_pseudo;
QVBoxLayout *m_pseudoLayout;
QString m_currentDir;
QString m_name;
- QStringList m_mimetypes;
+ QStringList m_mimetypes, requestedMimeTypesList;
FileSelector *m_select;
QWidgetStack *m_stack;
QVBoxLayout *m_lay;
QGridLayout *m_Oselector;
QHBoxLayout *m_boxToolbar;
QHBoxLayout *m_boxOk;
QHBoxLayout *m_boxName;
QHBoxLayout *m_boxView;
QPopupMenu *m_custom;