Diffstat (limited to 'noncore/apps/opie-reader/fileBrowser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/fileBrowser.cpp | 185 |
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 | |||
3 | Derived from a file browser which was | ||
4 | |||
5 | ** copyright 2001 ljp ljp@llornkcor.com | ||
6 | |||
7 | Extensive 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 | |||
19 | fileBrowser::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 | |||
72 | void fileBrowser::resizeEvent(QResizeEvent* e) | ||
73 | { | ||
74 | ListView->setColumnWidth(1,(ListView->width())/4); | ||
75 | ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); | ||
76 | } | ||
77 | |||
78 | fileBrowser::~fileBrowser() | ||
79 | { | ||
80 | } | ||
81 | |||
82 | |||
83 | void 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 | |||
120 | void fileBrowser::upDir() | ||
121 | { | ||
122 | // qDebug(currentDir.canonicalPath()); | ||
123 | } | ||
124 | |||
125 | void 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 | ||
158 | void fileBrowser::listDoubleClicked(QListViewItem *selectedItem) | ||
159 | { | ||
160 | } | ||
161 | |||
162 | void 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 | |||
175 | void fileBrowser::OnRoot() | ||
176 | { | ||
177 | currentDir.cd("/", TRUE); | ||
178 | populateList(); | ||
179 | chdir("/"); | ||
180 | } | ||
181 | |||
182 | void fileBrowser::OnCancel() | ||
183 | { | ||
184 | reject(); | ||
185 | } | ||