summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/fileBrowser.cpp
authorllornkcor <llornkcor>2002-07-01 23:24:08 (UTC)
committer llornkcor <llornkcor>2002-07-01 23:24:08 (UTC)
commit59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2 (patch) (side-by-side diff)
treef148d4858859dac3b413e675c760acfdab24b8e6 /noncore/apps/opie-reader/fileBrowser.cpp
parentc08be8ae22dcc1bfb83cfdec807149b161d770f5 (diff)
downloadopie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.zip
opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.tar.gz
opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.tar.bz2
initial
Diffstat (limited to 'noncore/apps/opie-reader/fileBrowser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/fileBrowser.cpp185
1 files changed, 185 insertions, 0 deletions
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 <qpushbutton.h>
+#include <qfile.h>
+#include <qmessagebox.h>
+#include <unistd.h>
+#include <qlayout.h>
+
+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();
+}