From 59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2 Mon Sep 17 00:00:00 2001 From: llornkcor Date: Mon, 01 Jul 2002 23:24:08 +0000 Subject: initial --- (limited to 'noncore/apps/opie-reader/fileBrowser.cpp') diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp new file mode 100644 index 0000000..def988f --- a/dev/null +++ b/noncore/apps/opie-reader/fileBrowser.cpp @@ -0,0 +1,185 @@ +/**************************************************************************** + +Derived from a file browser which was + +** copyright 2001 ljp ljp@llornkcor.com + +Extensive modification by Tim Wentford to allow it to work in rotated mode + +****************************************************************************/ +#include "fileBrowser.h" + +#include "QtrListView.h" +#include +#include +#include +#include +#include + +fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) + : QDialog( parent, name, modal, fl ) +{ +// showMaximized(); + if ( !name ) + setName( "fileBrowser" ); + if (parent != NULL) resize( parent->width(), parent->height() ); + setCaption(tr( "Browse for file" ) ); + filterStr=filter; + + buttonOk = new QPushButton( this, "buttonOk" ); + buttonOk->setFixedSize( 25, 25 ); + buttonOk->setText( tr( "/" ) ); + + dirLabel = new QLabel(this, "DirLabel"); + dirLabel->setText(currentDir.canonicalPath()); + + ListView = new QtrListView( this, "ListView" ); + ListView->addColumn( tr( "Name" ) ); + ListView->setSorting( 2, FALSE); + ListView->addColumn( tr( "Size" ) ); + ListView->setSelectionMode(QListView::Single); + + ListView->setAllColumnsShowFocus( TRUE ); + + // signals and slots connections + connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); + connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); + connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); + connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); + connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); + connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); + + QVBoxLayout* grid = new QVBoxLayout(this); + QHBoxLayout* hgrid = new QHBoxLayout(grid); + hgrid->addWidget(dirLabel,1); + hgrid->addWidget(buttonOk); + grid->addWidget(ListView,1); + + if (QFileInfo(iPath).exists()) + { + currentDir.setPath(iPath); + chdir(iPath.latin1()); + } + else + { + currentDir.setPath(QDir::currentDirPath()); + chdir(QDir::currentDirPath().latin1()); + } + + populateList(); +} + +void fileBrowser::resizeEvent(QResizeEvent* e) +{ + ListView->setColumnWidth(1,(ListView->width())/4); + ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); +} + +fileBrowser::~fileBrowser() +{ +} + + +void fileBrowser::populateList() +{ + ListView->clear(); +//qDebug(currentDir.canonicalPath()); +// currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks ); + currentDir.setFilter( QDir::All ); + currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); + currentDir.setMatchAllDirs(TRUE); + + currentDir.setNameFilter(filterStr); +// currentDir.setNameFilter("*.txt;*.etx"); + QString fileL, fileS; + const QFileInfoList *list = currentDir.entryInfoList(QDir::All); + QFileInfoListIterator it(*list); + QFileInfo *fi; + while ( (fi=it.current()) ) + { + if (fi->fileName() != ".") + { + fileS.sprintf( "%10li", fi->size() ); + fileL.sprintf( "%s",fi->fileName().data() ); + if( fi->isDir() ) + { + fileL+="/"; + } + else + { +// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); + } + new QListViewItem( ListView,fileL,fileS ); + } + ++it; + } + ListView->setSorting( 2, FALSE); + dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath()); +} + +void fileBrowser::upDir() +{ +// qDebug(currentDir.canonicalPath()); +} + +void fileBrowser::listClicked(QListViewItem *selectedItem) +{ + if (selectedItem == NULL) return; + QString strItem=selectedItem->text(0); + +// qDebug("%s", (const char*)strItem); + + + QString strSize=selectedItem->text(1); + + strSize.stripWhiteSpace(); + + bool ok; + + QFileInfo fi(strItem); + while (fi.isSymLink()) fi.setFile(fi.readLink()); + if (fi.isDir()) + { + strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem); + + if(QDir(strItem).exists()) + { + currentDir.cd(strItem, TRUE); + populateList(); + } + } else + OnOK(); + chdir(strItem.latin1()); +// + +} + +// you may want to switch these 2 functions. I like single clicks +void fileBrowser::listDoubleClicked(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::OnRoot() +{ + currentDir.cd("/", TRUE); + populateList(); + chdir("/"); +} + +void fileBrowser::OnCancel() +{ + reject(); +} -- cgit v0.9.0.2