-rw-r--r-- | core/apps/textedit/fileBrowser.cpp | 219 | ||||
-rw-r--r-- | core/apps/textedit/fileBrowser.h | 28 | ||||
-rw-r--r-- | core/apps/textedit/textedit.cpp | 0 |
3 files changed, 208 insertions, 39 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 @@ -20,3 +20,5 @@ #include <qpe/qpeapplication.h> +#include <qpe/menubutton.h> +#include <qdict.h> #include <qwidgetstack.h> @@ -31,2 +33,3 @@ #include <qlineedit.h> +#include <qstringlist.h> @@ -49,2 +52,6 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags +// 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 ); @@ -53,22 +60,37 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags + 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 ); @@ -76,2 +98,3 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags + ListView = new QListView( this, "ListView" ); @@ -84,3 +107,3 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags ListView->addColumn( "Date",-1); -// ListView->addColumn( tr( "" ) ); + ListView->setColumnWidthMode(0,QListView::Manual); @@ -97,4 +120,4 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags 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() ) ); @@ -102,10 +125,11 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags 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 & ) ), @@ -113,2 +137,9 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags + 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()); @@ -174,5 +205,13 @@ void fileBrowser::populateList() } -// 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); +// } } @@ -181,3 +220,10 @@ 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(); } @@ -242,4 +288,5 @@ void fileBrowser::OnOK() void fileBrowser::homeButtonPushed() { - chdir( QDir::homeDirPath().latin1() ); - currentDir.cd( QDir::homeDirPath(), TRUE); + QString current = QDir::homeDirPath(); + chdir( current.latin1() ); + currentDir.cd( current, TRUE); populateList(); @@ -249,4 +296,5 @@ void fileBrowser::homeButtonPushed() { void fileBrowser::docButtonPushed() { - chdir( QString(QPEApplication::documentDir()+"/text").latin1() ); - currentDir.cd( QPEApplication::documentDir()+"/text", TRUE); + QString current = QPEApplication::documentDir(); + chdir( current.latin1() ); + currentDir.cd( current, TRUE); populateList(); @@ -258,11 +306,9 @@ 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" ) @@ -274,3 +320,4 @@ void fileBrowser::selectionChanged( const QString &select ) update(); - dirLabel->show(); + dirPathCombo->show(); + cdUpButton->show(); docButton->show(); @@ -305,2 +352,3 @@ void fileBrowser::showListMenu(QListViewItem *item) { m.insertItem( tr( "Make Directory" ), this, SLOT( makDir() )); + m.insertItem( tr( "Rescan" ), this, SLOT( populateList()() )); m.insertItem( tr( "Rename" ), this, SLOT( localRename() )); @@ -374,2 +422,109 @@ void fileBrowser::localDelete() { } +} + +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 @@ -24,2 +24,3 @@ copyright Sun 02-17-2002 22:28:23 L. J. Potter ljp@llornkcor.com #include <qstring.h> +#include <qdict.h> @@ -37,2 +38,5 @@ class FileSelector; class QPoint; +class MenuButton; +class QRegExp; + @@ -49,3 +53,3 @@ public: - QPushButton *buttonOk, *buttonCancel, *homeButton, *docButton, *hideButton; + QPushButton *buttonOk, *buttonCancel, *homeButton, *docButton, *hideButton, *cdUpButton; QListView* ListView; @@ -56,9 +60,17 @@ public: 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(); @@ -71,5 +83,4 @@ public slots: void localDelete(); -private: - -private slots: + void receive( const QCString &msg, const QByteArray &data ); + void dirPathComboActivated( const QString & ); void upDir(); @@ -79,2 +90,5 @@ private slots: void docOpen( const DocLnk & ); + void updateMimeTypeMenu(); + void showType(const QString &); + void dirPathEditPressed(); 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 |