summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/fileBrowser.cpp
Unidiff
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 @@
1/****************************************************************************
2
3Derived from a file browser which was
4
5** copyright 2001 ljp ljp@llornkcor.com
6
7Extensive modification by Tim Wentford to allow it to work in rotated mode
8
9****************************************************************************/
10#include "fileBrowser.h"
11
12#include "QtrListView.h"
13#include <qpushbutton.h>
14#include <qfile.h>
15#include <qmessagebox.h>
16#include <unistd.h>
17#include <qlayout.h>
18
19fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath )
20 : QDialog( parent, name, modal, fl )
21{
22// showMaximized();
23 if ( !name )
24 setName( "fileBrowser" );
25 if (parent != NULL) resize( parent->width(), parent->height() );
26 setCaption(tr( "Browse for file" ) );
27 filterStr=filter;
28
29 buttonOk = new QPushButton( this, "buttonOk" );
30 buttonOk->setFixedSize( 25, 25 );
31 buttonOk->setText( tr( "/" ) );
32
33 dirLabel = new QLabel(this, "DirLabel");
34 dirLabel->setText(currentDir.canonicalPath());
35
36 ListView = new QtrListView( this, "ListView" );
37 ListView->addColumn( tr( "Name" ) );
38 ListView->setSorting( 2, FALSE);
39 ListView->addColumn( tr( "Size" ) );
40 ListView->setSelectionMode(QListView::Single);
41
42 ListView->setAllColumnsShowFocus( TRUE );
43
44 // signals and slots connections
45 connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) );
46 connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) );
47 connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
48 connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
49 connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
50 connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) );
51
52 QVBoxLayout* grid = new QVBoxLayout(this);
53 QHBoxLayout* hgrid = new QHBoxLayout(grid);
54 hgrid->addWidget(dirLabel,1);
55 hgrid->addWidget(buttonOk);
56 grid->addWidget(ListView,1);
57
58 if (QFileInfo(iPath).exists())
59 {
60 currentDir.setPath(iPath);
61 chdir(iPath.latin1());
62 }
63 else
64 {
65 currentDir.setPath(QDir::currentDirPath());
66 chdir(QDir::currentDirPath().latin1());
67 }
68
69 populateList();
70}
71
72void fileBrowser::resizeEvent(QResizeEvent* e)
73{
74 ListView->setColumnWidth(1,(ListView->width())/4);
75 ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1));
76}
77
78fileBrowser::~fileBrowser()
79{
80}
81
82
83void fileBrowser::populateList()
84{
85 ListView->clear();
86//qDebug(currentDir.canonicalPath());
87// currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks );
88 currentDir.setFilter( QDir::All );
89 currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
90 currentDir.setMatchAllDirs(TRUE);
91
92 currentDir.setNameFilter(filterStr);
93// currentDir.setNameFilter("*.txt;*.etx");
94 QString fileL, fileS;
95 const QFileInfoList *list = currentDir.entryInfoList(QDir::All);
96 QFileInfoListIterator it(*list);
97 QFileInfo *fi;
98 while ( (fi=it.current()) )
99 {
100 if (fi->fileName() != ".")
101 {
102 fileS.sprintf( "%10li", fi->size() );
103 fileL.sprintf( "%s",fi->fileName().data() );
104 if( fi->isDir() )
105 {
106 fileL+="/";
107 }
108 else
109 {
110// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL);
111 }
112 new QListViewItem( ListView,fileL,fileS );
113 }
114 ++it;
115 }
116 ListView->setSorting( 2, FALSE);
117 dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath());
118}
119
120void fileBrowser::upDir()
121{
122// qDebug(currentDir.canonicalPath());
123}
124
125void fileBrowser::listClicked(QListViewItem *selectedItem)
126{
127 if (selectedItem == NULL) return;
128 QString strItem=selectedItem->text(0);
129
130// qDebug("%s", (const char*)strItem);
131
132
133 QString strSize=selectedItem->text(1);
134
135 strSize.stripWhiteSpace();
136
137 bool ok;
138
139 QFileInfo fi(strItem);
140 while (fi.isSymLink()) fi.setFile(fi.readLink());
141 if (fi.isDir())
142 {
143 strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
144
145 if(QDir(strItem).exists())
146 {
147 currentDir.cd(strItem, TRUE);
148 populateList();
149 }
150 } else
151 OnOK();
152 chdir(strItem.latin1());
153//
154
155}
156
157// you may want to switch these 2 functions. I like single clicks
158void fileBrowser::listDoubleClicked(QListViewItem *selectedItem)
159{
160}
161
162void fileBrowser::OnOK() {
163
164 QListViewItemIterator it1( ListView);
165 for ( ; it1.current(); ++it1 ) {
166 if ( it1.current()->isSelected() ) {
167 selectedFileName=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+it1.current()->text(0));
168 // qDebug("selected filename is "+selectedFileName);
169 fileList.append( selectedFileName );
170 }
171 }
172 accept();
173}
174
175void fileBrowser::OnRoot()
176{
177 currentDir.cd("/", TRUE);
178 populateList();
179 chdir("/");
180}
181
182void fileBrowser::OnCancel()
183{
184 reject();
185}