-rw-r--r-- | core/apps/textedit/fileBrowser.cpp | 237 | ||||
-rw-r--r-- | core/apps/textedit/fileBrowser.h | 30 | ||||
-rw-r--r-- | core/apps/textedit/textedit.cpp | 4 |
3 files changed, 220 insertions, 51 deletions
diff --git a/core/apps/textedit/fileBrowser.cpp b/core/apps/textedit/fileBrowser.cpp index 1fdf9d9..c9366e7 100644 --- a/core/apps/textedit/fileBrowser.cpp +++ b/core/apps/textedit/fileBrowser.cpp @@ -5,125 +5,156 @@ ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include "fileBrowser.h" #include "inputDialog.h" #include <qpe/config.h> #include <qpe/resource.h> #include <qpe/fileselector.h> #include <qpe/qpeapplication.h> +#include <qpe/menubutton.h> +#include <qdict.h> #include <qwidgetstack.h> #include <qlistview.h> #include <qcombo.h> #include <qpushbutton.h> #include <qfile.h> #include <qmessagebox.h> #include <qlayout.h> #include <unistd.h> #include <qpopupmenu.h> #include <qlineedit.h> +#include <qstringlist.h> #include <unistd.h> #include <stdlib.h> static int u_id = 1; static int get_unique_id() { return u_id++; } fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "fileBrowser" ); setCaption(tr( name ) ); filterStr=filter; +// channel = new QCopChannel( "QPE/fileDialog", this ); +// connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), +// this, SLOT(receive(const QCString&, const QByteArray&)) ); + QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); + dirPathCombo = new QComboBox( FALSE, this, "dorPathCombo" ); + dirPathCombo->setEditable(TRUE); + + connect( dirPathCombo, SIGNAL( activated( const QString & ) ), + this, SLOT( dirPathComboActivated( const QString & ) ) ); + + connect( dirPathCombo->lineEdit(), SIGNAL( returnPressed( ) ), + this, SLOT( dirPathEditPressed( ) ) ); + + dirPathStringList << "/"; +// we can get the storage here + + layout->addMultiCellWidget( dirPathCombo, 0, 0, 0, 4 ); + + cdUpButton = new QPushButton(Resource::loadIconSet("up"),"",this,"cdUpButton"); + cdUpButton ->setMinimumSize( QSize( 20, 20 ) ); + cdUpButton ->setMaximumSize( QSize( 20, 20 ) ); + connect( cdUpButton ,SIGNAL(released()),this,SLOT( upDir()) ); + cdUpButton ->setFlat(TRUE); + layout->addMultiCellWidget( cdUpButton, 0, 0, 5, 5 ); - dirLabel = new QLabel(this, "DirLabel"); - dirLabel->setText(currentDir.canonicalPath()); - dirLabel->setMinimumSize( QSize( 50, 15 ) ); - dirLabel->setMaximumSize( QSize( 250, 15 ) ); - layout->addWidget( dirLabel, 0, 0 ); docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"",this,"docsButton"); - docButton->setMinimumSize( QSize( 25, 25 ) ); - docButton->setMaximumSize( QSize( 25, 25 ) ); + docButton->setMinimumSize( QSize( 20, 20 ) ); + docButton->setMaximumSize( QSize( 20, 20 ) ); connect( docButton,SIGNAL(released()),this,SLOT( docButtonPushed()) ); docButton->setFlat(TRUE); - layout->addWidget( docButton, 0, 1 ); + layout->addMultiCellWidget( docButton, 0, 0, 6, 6 ); homeButton = new QPushButton( Resource::loadIconSet("home"),"",this,"homeButton"); - homeButton->setMinimumSize( QSize( 25, 25 ) ); - homeButton->setMaximumSize( QSize( 25, 25 ) ); + homeButton->setMinimumSize( QSize( 20, 20 ) ); + homeButton->setMaximumSize( QSize( 20, 20 ) ); connect(homeButton,SIGNAL(released()),this,SLOT(homeButtonPushed()) ); homeButton->setFlat(TRUE); - layout->addWidget( homeButton, 0, 2 ); + layout->addMultiCellWidget( homeButton, 0, 0, 7, 7 ); FileStack = new QWidgetStack( this ); + ListView = new QListView( this, "ListView" ); ListView->setMinimumSize( QSize( 100, 25 ) ); ListView->addColumn( tr( "Name" ) ); ListView->setColumnWidth(0,120); ListView->setSorting( 2, FALSE); ListView->addColumn( tr( "Size" ) ); ListView->setColumnWidth(1,-1); ListView->addColumn( "Date",-1); -// ListView->addColumn( tr( "" ) ); + ListView->setColumnWidthMode(0,QListView::Manual); ListView->setColumnAlignment(1,QListView::AlignRight); ListView->setColumnAlignment(2,QListView::AlignRight); ListView->setAllColumnsShowFocus( TRUE ); QPEApplication::setStylusOperation( ListView->viewport(),QPEApplication::RightOnHold); connect( ListView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), this,SLOT( ListPressed(int, QListViewItem *, const QPoint&, int)) ); connect( ListView, SIGNAL( clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); FileStack->addWidget( ListView, get_unique_id() ); - - fileSelector = new FileSelector( "text/*", FileStack, "fileselector" , FALSE, FALSE); //buggy + mimeType="text/*"; + fileSelector = new FileSelector( mimeType, FileStack, "fileselector" , FALSE, FALSE); //buggy // connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( showEditTools() ) ); // connect( fileSelector, SIGNAL( newSelected( const DocLnk &) ), this, SLOT( newFile( const DocLnk & ) ) ); connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( docOpen( const DocLnk & ) ) ); - layout->addMultiCellWidget( FileStack, 1, 1, 0, 2 ); + layout->addMultiCellWidget( FileStack, 1, 1, 0, 7 ); SelectionCombo = new QComboBox( FALSE, this, "SelectionCombo" ); - SelectionCombo->setMinimumSize( QSize( 200, 25 ) ); SelectionCombo->insertItem( tr( "Documents" ) ); SelectionCombo->insertItem( tr( "All files" ) ); - SelectionCombo->insertItem( tr( "All files (incl. hidden)" ) ); - layout->addMultiCellWidget( SelectionCombo, 2, 2, 0, 2 ); + SelectionCombo->insertItem( tr( "Hidden files" ) ); +// SelectionCombo->setMaximumWidth(120); + layout->addMultiCellWidget( SelectionCombo, 2, 2, 0, 3 ); + connect( SelectionCombo, SIGNAL( activated( const QString & ) ), this, SLOT( selectionChanged( const QString & ) ) ); + typemb = new MenuButton(this); + typemb->setLabel(tr("Type: %1")); + typemb->setMinimumWidth(110); + typemb->setFixedHeight(22); + layout->addMultiCellWidget( typemb, 2, 2, 4, 7 ); + updateMimeTypeMenu() ; + currentDir.setPath(QDir::currentDirPath()); currentDir.setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden */| QDir::All); populateList(); move(0,15); } fileBrowser::~fileBrowser() { } void fileBrowser::setFileView( int selection ) { SelectionCombo->setCurrentItem( selection ); selectionChanged( SelectionCombo->currentText() ); } @@ -155,44 +186,59 @@ void fileBrowser::populateList() // qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); fileS.sprintf( "%10li", fi->size() ); fileL.sprintf( "%s",fi->fileName().data() ); fileDate= fi->lastModified().toString(); if( QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+fileL)).exists() ) { fileL+="/"; isDir=TRUE; // qDebug( fileL); } } if(fileL !="./") { item= new QListViewItem( ListView,fileL,fileS , fileDate); if(isDir || fileL.find("/",0,TRUE) != -1) item->setPixmap( 0, Resource::loadPixmap( "folder" )); else item->setPixmap( 0, Resource::loadPixmap( "fileopen" )); - } + } isDir=FALSE; ++it; } -// ListView->setSorting( 2, FALSE); ListView->setSorting( 3, FALSE); - dirLabel->setText(currentDir.canonicalPath()); + QString currentPath = currentDir.canonicalPath(); + + fillCombo( (const QString &)currentPath); +// dirPathCombo->lineEdit()->setText(currentPath); + +// if( dirPathStringList.grep(currentPath,TRUE).isEmpty() ) { +// dirPathCombo->clear(); +// dirPathStringList.prepend(currentPath ); +// dirPathCombo->insertStringList( dirPathStringList,-1); +// } } void fileBrowser::upDir() { -// qDebug(currentDir.canonicalPath()); + QString current = currentDir.canonicalPath(); + QDir dir(current); + dir.cdUp(); + current = dir.canonicalPath(); + chdir( current.latin1() ); + currentDir.cd( current, TRUE); + populateList(); + update(); } // you may want to switch these 2 functions. I like single clicks void fileBrowser::listClicked(QListViewItem *selectedItem) { QString strItem=selectedItem->text(0); QString strSize=selectedItem->text(1); // qDebug("strItem is "+strItem); strSize.stripWhiteSpace(); // qDebug(strSize); if(strItem.find("@",0,TRUE) !=-1 || strItem.find("->",0,TRUE) !=-1 ) { //if symlink // is symlink QString strItem2=strItem.right( (strItem.length()-strItem.find("->",0,TRUE)) -4); // qDebug("strItem symlink is "+strItem2); if(QDir(strItem2).exists() ) { @@ -227,100 +273,102 @@ void fileBrowser::listClicked(QListViewItem *selectedItem) } void fileBrowser::OnOK() { QListViewItemIterator it1( ListView); for ( ; it1.current(); ++it1 ) { if ( it1.current()->isSelected() ) { selectedFileName=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+it1.current()->text(0)); qDebug("selected filename is "+selectedFileName); fileList.append( selectedFileName ); } } accept(); } void fileBrowser::homeButtonPushed() { - chdir( QDir::homeDirPath().latin1() ); - currentDir.cd( QDir::homeDirPath(), TRUE); - populateList(); - update(); + QString current = QDir::homeDirPath(); + chdir( current.latin1() ); + currentDir.cd( current, TRUE); + populateList(); + update(); } void fileBrowser::docButtonPushed() { - chdir( QString(QPEApplication::documentDir()+"/text").latin1() ); - currentDir.cd( QPEApplication::documentDir()+"/text", TRUE); - populateList(); - update(); + QString current = QPEApplication::documentDir(); + chdir( current.latin1() ); + currentDir.cd( current, TRUE); + populateList(); + update(); } void fileBrowser::selectionChanged( const QString &select ) { - if ( select == "Documents") - { + if ( select == "Documents") { FileStack->raiseWidget( fileSelector ); - dirLabel->hide(); + dirPathCombo->hide(); + cdUpButton->hide(); docButton->hide(); homeButton->hide(); - } - else - { + } else { if ( select == "All files" ) currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::All); else currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); populateList(); update(); - dirLabel->show(); + dirPathCombo->show(); + cdUpButton->show(); docButton->show(); homeButton->show(); FileStack->raiseWidget( ListView ); } } void fileBrowser::docOpen( const DocLnk &doc ) { fileList.append( doc.file().latin1() ); accept(); } void fileBrowser::ListPressed( int mouse, QListViewItem *item, const QPoint &point, int i) { switch (mouse) { case 1: break; case 2: showListMenu(item); break; }; } void fileBrowser::showListMenu(QListViewItem *item) { QPopupMenu m;// = new QPopupMenu( Local_View ); if( item->text(0).find("/",0,TRUE)) m.insertItem( tr( "Change Directory" ), this, SLOT( doCd() )); else m.insertItem( tr( "Make Directory" ), this, SLOT( makDir() )); + m.insertItem( tr( "Rescan" ), this, SLOT( populateList()() )); m.insertItem( tr( "Rename" ), this, SLOT( localRename() )); m.insertSeparator(); m.insertItem( tr( "Delete" ), this, SLOT( localDelete() )); m.exec( QCursor::pos() ); - + } void fileBrowser::doCd() { listClicked( ListView->currentItem()); } void fileBrowser::makDir() { InputDialog *fileDlg; fileDlg = new InputDialog(this,"Make Directory",TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { QString filename = fileDlg->LineEdit1->text(); currentDir.mkdir( currentDir.canonicalPath()+"/"+filename); } populateList(); } @@ -339,38 +387,145 @@ void fileBrowser::localRename() { } populateList(); } void fileBrowser::localDelete() { QString f = ListView->currentItem()->text(0); if(QDir(f).exists() ) { switch ( QMessageBox::warning(this,"Delete","Do you really want to delete\n"+f+ " ?\nIt must be empty","Yes","No",0,0,1) ) { case 0: { f=currentDir.canonicalPath()+"/"+f; QString cmd="rmdir "+f; system( cmd.latin1()); populateList(); } break; - case 1: + case 1: // exit break; }; - + } else { switch ( QMessageBox::warning(this,"Delete","Do you really want to delete\n"+f +" ?","Yes","No",0,0,1) ) { case 0: { f=currentDir.canonicalPath()+"/"+f; QString cmd="rm "+f; system( cmd.latin1()); populateList(); } break; - case 1: + case 1: // exit break; }; } +} + +void fileBrowser::updateMimeTypeMenu() { + + disconnect( typemb, SIGNAL(selected(const QString&)), + this, SLOT(showType(const QString&)) ); + + QString prev; + + // Type filter + QStringList types; + types << tr("All"); + types << "--"; + types += getMimeTypes(); + prev = typemb->currentText(); + typemb->clear(); + typemb->insertItems(types); + // typemb->select(prev); + + connect(typemb, SIGNAL(selected(const QString&)), this, SLOT(showType(const QString&))); +} + +void fileBrowser::showType(const QString &t) { + + qDebug(t); + mimeType = t+"/*"; +// if(fileSelector) { +// disconnect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( docOpen( const DocLnk & ) ) ); +// delete fileSelector; + } + // fileSelector = new FileSelector( mimeType, FileStack, "fileselector" , FALSE, FALSE); //buggy +// connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( showEditTools() ) ); +// connect( fileSelector, SIGNAL( newSelected( const DocLnk &) ), this, SLOT( newFile( const DocLnk & ) ) ); + // connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( docOpen( const DocLnk & ) ) ); + fileSelector->reread(); + repaint(); +// if ( t == tr("All") ) { +// icons->setTypeFilter("",TRUE); +// } else { +// icons->setTypeFilter(t+"/*",TRUE); +// } + +} + +QStringList fileBrowser::getMimeTypes() { + QStringList r; + AppLnkSet apps( QPEApplication::qpeDir() + "apps" ); + QFile file( QPEApplication::qpeDir()+"etc/available.mime"); + file.open( IO_WriteOnly|IO_Truncate);//) + for ( QListIterator<AppLnk> it( apps.children() ); it.current(); ++it ) { + AppLnk* l; + l = it.current(); + QStringList maj = l->mimeTypes(); + QStringList::ConstIterator f; + for ( f = maj.begin(); f != maj.end(); f++ ) { + QString temp = *f; + int sl = temp.find('/'); + if (sl >= 0) { + QString k = temp.left(sl); + if( r.grep(k,TRUE).isEmpty() ) { + r << k; + k+="\n"; + file.writeBlock( k.latin1(), k.length()); + } + } + } + } + r.sort(); + file.close(); + return r; +} + +void fileBrowser::receive( const QCString &msg, const QByteArray &data ) { +// QDataStream stream( data, IO_ReadOnly ); +// if (msg == "keyRegister(int key, QString channel, QString message)") +// { +// int k; +// QString c, m; +// stream >> k; +// stream >> c; +// stream >> m; +} + +void fileBrowser::dirPathComboActivated( const QString & current) { + chdir( current.latin1() ); + currentDir.cd( current, TRUE); + populateList(); + update(); +} + +void fileBrowser::dirPathEditPressed() { + QString current = dirPathCombo->lineEdit()->text(); + chdir( current.latin1() ); + currentDir.cd( current, TRUE); + populateList(); + update(); +} + +void fileBrowser::fillCombo(const QString ¤tPath) { + + dirPathCombo->lineEdit()->setText(currentPath); + + if( dirPathStringList.grep(currentPath,TRUE).isEmpty() ) { + dirPathCombo->clear(); + dirPathStringList.prepend(currentPath ); + dirPathCombo->insertStringList( dirPathStringList,-1); + } } diff --git a/core/apps/textedit/fileBrowser.h b/core/apps/textedit/fileBrowser.h index 4f765dd..8a98365 100644 --- a/core/apps/textedit/fileBrowser.h +++ b/core/apps/textedit/fileBrowser.h @@ -9,79 +9,93 @@ ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** copyright Sun 02-17-2002 22:28:23 L. J. Potter ljp@llornkcor.com ****************************************************************************/ #ifndef FILEBROWSER_H #define FILEBROWSER_H //#include <qvariant.h> #include <qdialog.h> #include <qfile.h> #include <qdir.h> #include <qstringlist.h> #include <qlabel.h> #include <qstring.h> +#include <qdict.h> #include <qpe/filemanager.h> class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QListView; class QListViewItem; class QPushButton; class QComboBox; class QWidgetStack; class FileSelector; class QPoint; +class MenuButton; +class QRegExp; + class fileBrowser : public QDialog { Q_OBJECT public: void populateList(); fileBrowser( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ,const QString filter=0); ~fileBrowser(); void setFileView( int ); - QPushButton *buttonOk, *buttonCancel, *homeButton, *docButton, *hideButton; + QPushButton *buttonOk, *buttonCancel, *homeButton, *docButton, *hideButton, *cdUpButton; QListView* ListView; QLabel *dirLabel; QString selectedFileName, filterStr; QDir currentDir; QFile file; - QStringList fileList; + QStringList fileList, dirPathStringList; QListViewItem * item; - QComboBox *SelectionCombo; + QComboBox *SelectionCombo, *dirPathCombo; + MenuButton *typemb; QWidgetStack *FileStack; FileSelector *fileSelector; - + QString mimeType; public slots: + +private: +// QDict<void> mimes; + QRegExp tf; + QStringList getMimeTypes(); + void fillCombo( const QString&); +private slots: void homeButtonPushed(); void docButtonPushed(); void ListPressed( int, QListViewItem *, const QPoint&, int); void showListMenu(QListViewItem*); void doCd(); void makDir(); void localRename(); void localDelete(); -private: - -private slots: + void receive( const QCString &msg, const QByteArray &data ); + void dirPathComboActivated( const QString & ); void upDir(); void listClicked( QListViewItem * ); void selectionChanged( const QString & ); void OnOK(); void docOpen( const DocLnk & ); - + void updateMimeTypeMenu(); + void showType(const QString &); + void dirPathEditPressed(); + protected slots: protected: }; #endif // FILEBROWSER_H diff --git a/core/apps/textedit/textedit.cpp b/core/apps/textedit/textedit.cpp index 1a1b186..da74893 100644 --- a/core/apps/textedit/textedit.cpp +++ b/core/apps/textedit/textedit.cpp @@ -484,34 +484,34 @@ void TextEdit::setWordWrap(bool y) } void TextEdit::fileNew() { if( !bFromDocView ) { saveAs(); } newFile(DocLnk()); } void TextEdit::fileOpen() { browseForFiles=new fileBrowser(this,"Open File",TRUE,0, "*"); browseForFiles->setFileView( viewSelection ); browseForFiles->showMaximized(); if( browseForFiles->exec() != -1 ) { - QString selFile= browseForFiles->selectedFileName; - QStringList fileList=browseForFiles->fileList; + QString selFile = browseForFiles->selectedFileName; + QStringList fileList = browseForFiles->fileList; qDebug(selFile); QStringList::ConstIterator f; QString fileTemp; for ( f = fileList.begin(); f != fileList.end(); f++ ) { fileTemp = *f; fileTemp.right( fileTemp.length()-5); QString fileName = fileTemp; if( fileName != "Unnamed" || fileName != "Empty Text" ) { currentFileName = fileName; qDebug("please open "+currentFileName); openFile(fileName ); } } viewSelection = browseForFiles->SelectionCombo->currentItem(); } delete browseForFiles; |