summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-03-18 01:43:17 (UTC)
committer llornkcor <llornkcor>2002-03-18 01:43:17 (UTC)
commitd9290bfa0b37c3026dbe0ffbd88663379df44fa2 (patch) (side-by-side diff)
tree45d17ef84edc8543cdfe1f7b659c76fd36a54311
parent4c0bbc662731b8d3e61f43735fd6131746da306f (diff)
downloadopie-d9290bfa0b37c3026dbe0ffbd88663379df44fa2.zip
opie-d9290bfa0b37c3026dbe0ffbd88663379df44fa2.tar.gz
opie-d9290bfa0b37c3026dbe0ffbd88663379df44fa2.tar.bz2
added a popupmenu to filedialog
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/textedit/fileBrowser.cpp106
-rw-r--r--core/apps/textedit/fileBrowser.h8
-rw-r--r--core/apps/textedit/textedit.pro6
3 files changed, 113 insertions, 7 deletions
diff --git a/core/apps/textedit/fileBrowser.cpp b/core/apps/textedit/fileBrowser.cpp
index 8cb7c38..1fdf9d9 100644
--- a/core/apps/textedit/fileBrowser.cpp
+++ b/core/apps/textedit/fileBrowser.cpp
@@ -1,274 +1,376 @@
/****************************************************************************
** copyright 2001 ljp ljp@llornkcor.com
** Created: Fri Dec 14 08:16:46 2001
**
** 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 <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 <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;
QGridLayout *layout = new QGridLayout( this );
layout->setSpacing( 4 );
layout->setMargin( 4 );
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 ) );
connect( docButton,SIGNAL(released()),this,SLOT( docButtonPushed()) );
docButton->setFlat(TRUE);
layout->addWidget( docButton, 0, 1 );
homeButton = new QPushButton( Resource::loadIconSet("home"),"",this,"homeButton");
homeButton->setMinimumSize( QSize( 25, 25 ) );
homeButton->setMaximumSize( QSize( 25, 25 ) );
connect(homeButton,SIGNAL(released()),this,SLOT(homeButtonPushed()) );
homeButton->setFlat(TRUE);
layout->addWidget( homeButton, 0, 2 );
FileStack = new QWidgetStack( this );
- ListView = new QListView( this, "ListView" );
+ 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 );
- connect( ListView, SIGNAL(pressed( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
+ 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
// 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 );
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 );
connect( SelectionCombo, SIGNAL( activated( const QString & ) ),
this, SLOT( selectionChanged( const QString & ) ) );
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() );
}
void fileBrowser::populateList()
{
ListView->clear();
bool isDir=FALSE;
//qDebug(currentDir.canonicalPath());
currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
currentDir.setMatchAllDirs(TRUE);
currentDir.setNameFilter(filterStr);
// currentDir.setNameFilter("*.txt;*.etx");
QString fileL, fileS, fileDate;
const QFileInfoList *list = currentDir.entryInfoList( /*QDir::All*/ /*, QDir::SortByMask*/);
QFileInfoListIterator it(*list);
QFileInfo *fi;
while ( (fi=it.current()) ) {
if (fi->isSymLink() ){
QString symLink=fi->readLink();
// qDebug("Symlink detected "+symLink);
QFileInfo sym( symLink);
fileS.sprintf( "%10li", sym.size() );
fileL.sprintf( "%s -> %s", sym.fileName().data(),sym.absFilePath().data() );
fileDate = sym.lastModified().toString();
} else {
// 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());
}
void fileBrowser::upDir()
{
// qDebug(currentDir.canonicalPath());
}
// 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() ) {
currentDir.cd(strItem2, TRUE);
populateList();
}
} else { // not a symlink
if(strItem.find(". .",0,TRUE) && strItem.find("/",0,TRUE)!=-1 ) {
if(QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem)).exists() ) {
strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
currentDir.cd(strItem,FALSE);
// qDebug("Path is "+strItem);
populateList();
} else {
currentDir.cdUp();
populateList();
}
if(QDir(strItem).exists()){
currentDir.cd(strItem, TRUE);
populateList();
}
} else {
strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
if( QFile::exists(strItem ) ) {
//currentDir.canonicalPath()
qDebug("We found our files!!"+strItem);
OnOK();
}
} //end not symlink
chdir(strItem.latin1());
}
}
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();
}
void fileBrowser::docButtonPushed() {
chdir( QString(QPEApplication::documentDir()+"/text").latin1() );
currentDir.cd( QPEApplication::documentDir()+"/text", TRUE);
populateList();
update();
}
void fileBrowser::selectionChanged( const QString &select )
{
if ( select == "Documents")
{
FileStack->raiseWidget( fileSelector );
dirLabel->hide();
docButton->hide();
homeButton->hide();
}
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();
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( "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();
+}
+
+void fileBrowser::localRename() {
+ QString curFile = ListView->currentItem()->text(0);
+ InputDialog *fileDlg;
+ fileDlg = new InputDialog(this,"Rename",TRUE, 0);
+ fileDlg->inputText = curFile;
+ fileDlg->exec();
+ if( fileDlg->result() == 1 ) {
+ QString oldname = currentDir.canonicalPath() + "/" + curFile;
+ QString newName = currentDir.canonicalPath() + "/" + fileDlg->LineEdit1->text();//+".playlist";
+ if( rename(oldname.latin1(), newName.latin1())== -1)
+ QMessageBox::message("Note","Could not rename");
+ }
+ 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:
+ // 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:
+ // exit
+ break;
+ };
+ }
+
+}
diff --git a/core/apps/textedit/fileBrowser.h b/core/apps/textedit/fileBrowser.h
index d8f0d0d..4f765dd 100644
--- a/core/apps/textedit/fileBrowser.h
+++ b/core/apps/textedit/fileBrowser.h
@@ -1,81 +1,87 @@
/****************************************************************************
**
** Created: Fri Dec 14 08:16:02 2001
**
** 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.
**
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 <qpe/filemanager.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QListView;
class QListViewItem;
class QPushButton;
class QComboBox;
class QWidgetStack;
class FileSelector;
+class QPoint;
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;
QListView* ListView;
QLabel *dirLabel;
QString selectedFileName, filterStr;
QDir currentDir;
QFile file;
QStringList fileList;
QListViewItem * item;
QComboBox *SelectionCombo;
QWidgetStack *FileStack;
FileSelector *fileSelector;
public 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 upDir();
void listClicked( QListViewItem * );
void selectionChanged( const QString & );
void OnOK();
void docOpen( const DocLnk & );
protected slots:
protected:
};
#endif // FILEBROWSER_H
diff --git a/core/apps/textedit/textedit.pro b/core/apps/textedit/textedit.pro
index 2c25d43..f019bf7 100644
--- a/core/apps/textedit/textedit.pro
+++ b/core/apps/textedit/textedit.pro
@@ -1,16 +1,14 @@
TEMPLATE = app
CONFIG += qt warn_on release
DESTDIR = $(OPIEDIR)/bin
-
-HEADERS = textedit.h fileBrowser.h fontDialog.h fileSaver.h filePermissions.h
-
-SOURCES = main.cpp textedit.cpp fileBrowser.cpp fontDialog.cpp fileSaver.cpp filePermissions.cpp
+HEADERS = textedit.h fileBrowser.h fontDialog.h fileSaver.h filePermissions.h inputDialog.h
+SOURCES = main.cpp textedit.cpp fileBrowser.cpp fontDialog.cpp fileSaver.cpp filePermissions.cpp inputDialog.cpp
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe
TARGET = textedit
TRANSLATIONS = ../i18n/de/textedit.ts