author | zecke <zecke> | 2002-05-02 07:15:29 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-05-02 07:15:29 (UTC) |
commit | 9a3f2b67dab939993a56db83c1d473fc7ae6d57a (patch) (unidiff) | |
tree | b35b8d840400996e270dace0a11648bf361ed31e | |
parent | a52fd4b1995e34963888397587aa2592ea858da6 (diff) | |
download | opie-9a3f2b67dab939993a56db83c1d473fc7ae6d57a.zip opie-9a3f2b67dab939993a56db83c1d473fc7ae6d57a.tar.gz opie-9a3f2b67dab939993a56db83c1d473fc7ae6d57a.tar.bz2 |
Here is the rewrite of ofileselector
Mostly the layout was fixed and it should be much easier to
understand whats going on
It also got more functionality with less code
Next is MultipleSelections, Open Dir mode save dir mode and
installingViews
-rw-r--r-- | libopie/ofileselector.cc | 1699 | ||||
-rw-r--r-- | libopie/ofileselector.h | 39 |
2 files changed, 841 insertions, 897 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 9cf3f36..d780da9 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc | |||
@@ -1,1194 +1,1133 @@ | |||
1 | /* | 1 | |
2 | =. This file is part of the OPIE Project | 2 | |
3 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> | 3 | #include <qcheckbox.h> |
4 | .>+-= | ||
5 | _;:, .> :=|. This library is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This library is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | ||
17 | ..}^=.= = ; Library General Public License for more | ||
18 | ++= -. .` .: details. | ||
19 | : = ...= . :.=- | ||
20 | -. .:....=;==+<; You should have received a copy of the GNU | ||
21 | -_. . . )=. = Library General Public License along with | ||
22 | -- :-=` this library; see the file COPYING.LIB. | ||
23 | If not, write to the Free Software Foundation, | ||
24 | Inc., 59 Temple Place - Suite 330, | ||
25 | Boston, MA 02111-1307, USA. | ||
26 | |||
27 | */ | ||
28 | |||
29 | #include <qnamespace.h> | ||
30 | #include <qpushbutton.h> | ||
31 | #include <qcombobox.h> | 4 | #include <qcombobox.h> |
32 | #include <qhbox.h> | 5 | #include <qheader.h> |
33 | #include <qvbox.h> | 6 | #include <qlabel.h> |
7 | #include <qabstractlayout.h> | ||
34 | #include <qlayout.h> | 8 | #include <qlayout.h> |
35 | #include <qwidgetstack.h> | ||
36 | #include <qlineedit.h> | 9 | #include <qlineedit.h> |
37 | #include <qcheckbox.h> | 10 | #include <qlistview.h> |
38 | #include <qlabel.h> | ||
39 | #include <qheader.h> | ||
40 | #include <qdir.h> | ||
41 | #include <qpainter.h> | ||
42 | #include <qaction.h> | ||
43 | #include <qpopupmenu.h> | ||
44 | #include <qcursor.h> | ||
45 | #include <qstringlist.h> | ||
46 | #include <qmessagebox.h> | 11 | #include <qmessagebox.h> |
12 | #include <qpushbutton.h> | ||
13 | #include <qwidgetstack.h> | ||
14 | #include <qpopupmenu.h> | ||
15 | #include <qdir.h> | ||
16 | #include <qfile.h> | ||
17 | #include <qfileinfo.h> | ||
18 | #include <qtimer.h> | ||
47 | 19 | ||
48 | #include <qpe/qpeapplication.h> | 20 | #include <qpe/qpeapplication.h> |
49 | #include <qpe/fileselector.h> | ||
50 | #include <qpe/applnk.h> | 21 | #include <qpe/applnk.h> |
22 | #include <qpe/fileselector.h> | ||
51 | #include <qpe/global.h> | 23 | #include <qpe/global.h> |
52 | #include <qpe/mimetype.h> | 24 | #include <qpe/mimetype.h> |
53 | #include <qpe/resource.h> | 25 | #include <qpe/resource.h> |
54 | #include <qpe/storage.h> | 26 | #include <qpe/storage.h> |
55 | 27 | ||
56 | #include <unistd.h> | 28 | #include <unistd.h> |
57 | #include <stdlib.h> | 29 | #include <stdlib.h> |
58 | #include <sys/stat.h> | 30 | #include <sys/stat.h> |
59 | 31 | ||
60 | #include "ofileselector.h" | 32 | #include "ofileselector.h" |
61 | //#include "ofileview.h" | 33 | |
62 | 34 | ||
63 | QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0; | 35 | QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0; |
64 | 36 | ||
65 | namespace { | 37 | namespace { |
66 | |||
67 | int indexByString( const QComboBox *box, const QString &str ){ | 38 | int indexByString( const QComboBox *box, const QString &str ){ |
68 | int index= -1; | 39 | int index= 0; |
69 | for(int i= 0; i < box->count(); i++ ){ | 40 | for(int i= 0; i < box->count(); i++ ){ |
70 | if( str == box->text(i ) ){ | 41 | if( str == box->text(i ) ){ |
71 | index= i; | 42 | index= i; |
72 | break; | 43 | break; |
73 | } | 44 | } |
74 | } | 45 | } |
75 | return index; | 46 | return index; |
76 | } | 47 | } |
77 | class OFileSelectorItem : public QListViewItem { | 48 | class OFileSelectorItem : public QListViewItem { |
78 | public: | 49 | public: |
79 | OFileSelectorItem(QListView *view, const QPixmap &pixmap, const QString &path, | 50 | OFileSelectorItem(QListView *view, const QPixmap &pixmap, const QString &path, |
80 | const QString &date, const QString &size, const QString &mDir, | 51 | const QString &date, const QString &size, const QString &mDir, |
81 | bool isLocked=false, bool isDir=false ): QListViewItem(view) { | 52 | bool isLocked=false, bool isDir=false ): QListViewItem(view) { |
82 | setPixmap(0, pixmap ); | 53 | setPixmap(0, pixmap ); |
83 | setText(1, path ); | 54 | setText(1, path ); |
84 | setText(2, size ); | 55 | setText(2, size ); |
85 | setText(3, date ); | 56 | setText(3, date ); |
86 | //setText(4, mDir ); | 57 | //setText(4, mDir ); |
87 | m_dir = mDir; | 58 | m_dir = mDir; |
88 | dir = isDir; | 59 | dir = isDir; |
89 | mLocked = isLocked; | 60 | mLocked = isLocked; |
90 | } | 61 | } |
91 | bool isLocked() const{ | 62 | bool isLocked() const{ |
92 | return mLocked; | 63 | return mLocked; |
93 | } | 64 | } |
94 | QString directory()const{ | 65 | QString directory()const{ |
95 | return m_dir; | 66 | return m_dir; |
96 | } | 67 | } |
97 | bool isDir()const{ | 68 | bool isDir()const{ |
98 | return dir; | 69 | return dir; |
99 | } | 70 | } |
100 | QString path()const{ | 71 | QString path()const{ |
101 | return text(1 ); | 72 | return text(1 ); |
102 | } | 73 | } |
103 | QString key(int id, bool )const { | 74 | QString key(int id, bool )const { |
104 | QString ke; | 75 | QString ke; |
105 | if( id == 0 || id == 1 ){ // name | 76 | if( id == 0 || id == 1 ){ // name |
106 | if( dir ){ | 77 | if( dir ){ |
107 | ke.append("0" ); | 78 | ke.append("0" ); |
108 | ke.append( text(1) ); | 79 | ke.append( text(1) ); |
109 | }else{ | 80 | }else{ |
110 | ke.append("1" ); | 81 | ke.append("1" ); |
111 | ke.append( text(1) ); | 82 | ke.append( text(1) ); |
112 | } | 83 | } |
113 | }else if( id == 2 ){ // size | 84 | }else if( id == 2 ){ // size |
114 | return text(2); | 85 | return text(2); |
115 | }else if( id == 3 ){ // date | 86 | }else if( id == 3 ){ // date |
116 | return text(3); | 87 | return text(3); |
117 | } | 88 | } |
118 | return ke; | 89 | return ke; |
119 | }; | 90 | }; |
120 | private: | 91 | private: |
121 | bool mLocked:1; | 92 | bool mLocked:1; |
122 | bool dir:1; | 93 | bool dir:1; |
123 | QString m_dir; | 94 | QString m_dir; |
124 | }; | 95 | }; |
125 | }; | 96 | }; |
126 | 97 | ||
127 | 98 | ||
128 | OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, | 99 | OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, |
129 | const QString &fileName, const QStringList &mimetypes ) : QWidget( wid ) | 100 | const QString &dirName, |
101 | const QString &fileName, | ||
102 | const QStringList &mimeTypes ) | ||
103 | : QWidget( wid, "OFileSelector") | ||
130 | { | 104 | { |
131 | if(wid!=0) | 105 | m_mimetypes = mimeTypes; |
132 | resize(wid->width(),wid->height()); | 106 | initVars(); |
133 | m_selector = selector; | ||
134 | m_currentDir = dirName; | ||
135 | m_name = fileName; | ||
136 | m_mimetypes = mimetypes; | ||
137 | |||
138 | if( mimetypes.isEmpty() ) | ||
139 | m_autoMime = true; | ||
140 | |||
141 | qWarning("OFileSelector mimetypes %s", mimetypes.join(" ").latin1() ); | ||
142 | m_mode = mode; | 107 | m_mode = mode; |
143 | m_shTool = true; | 108 | m_selector = selector; |
144 | m_shPerm = true; | 109 | m_currentDir = dirName; |
145 | m_shLne = true; | ||
146 | m_shChooser = true; | ||
147 | m_shYesNo = true; | ||
148 | |||
149 | // for FILESELECTOR only view is interesting | ||
150 | m_location = 0; | ||
151 | m_homeButton = 0; | ||
152 | m_docButton = 0; | ||
153 | m_hideButton = 0; | ||
154 | m_ok = 0; | ||
155 | m_cancel = 0; | ||
156 | m_reread = 0; | ||
157 | m_up = 0; | ||
158 | m_View = 0; | ||
159 | m_select = 0; | ||
160 | m_stack = 0; | ||
161 | |||
162 | m_select = 0; | ||
163 | m_stack = 0; | ||
164 | m_lay = 0; | ||
165 | m_boxToolbar = 0; | ||
166 | m_boxOk = 0; | ||
167 | m_edit = 0; | ||
168 | |||
169 | m_fnLabel = 0; | ||
170 | m_checkPerm = 0; | ||
171 | m_mimeCheck = 0; | ||
172 | m_viewCheck = 0; | ||
173 | |||
174 | m_pseudo = 0; | ||
175 | m_pseudoLayout = 0; | ||
176 | |||
177 | m_dir = true; | ||
178 | m_files = true; | ||
179 | m_custom = 0; | ||
180 | m_showPopup = true; | ||
181 | |||
182 | if(m_pixmaps == 0 ) // init the pixmaps | ||
183 | initPics(); | ||
184 | |||
185 | m_lay = new QVBoxLayout(this); | ||
186 | init(); | 110 | init(); |
187 | m_edit->setText( fileName ); | 111 | QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); |
188 | } | 112 | } |
189 | 113 | ||
190 | void OFileSelector::initPics() | 114 | OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, |
115 | const char *name, bool newVisible = TRUE, | ||
116 | bool closeVisible = FALSE ) | ||
117 | : QWidget( parent, name ) | ||
191 | { | 118 | { |
192 | qWarning("init pics" ); | 119 | m_mimetypes = QStringList::split(";", mimeFilter ); |
193 | m_pixmaps = new QMap<QString,QPixmap>; | 120 | initVars(); |
194 | QPixmap pm = Resource::loadPixmap( "folder" ); | 121 | m_currentDir = QPEApplication::documentDir(); |
195 | QPixmap lnk = Resource::loadPixmap( "opie/symlink" ); | 122 | m_mode = OPEN; |
196 | QPainter painter( &pm ); | 123 | m_selector = NORMAL; |
197 | painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); | 124 | m_shClose = closeVisible; |
198 | pm.setMask( pm.createHeuristicMask( FALSE ) ); | 125 | m_shNew = newVisible; |
199 | m_pixmaps->insert("dirsymlink", pm ); | 126 | m_shLne = false; |
200 | 127 | m_shPerm = false; | |
201 | QPixmap pm2 = Resource::loadPixmap( "lockedfolder" ); | 128 | m_shYesNo = false; |
202 | QPainter pen(&pm2 ); | 129 | init(); |
203 | pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk ); | ||
204 | pm2.setMask( pm2.createHeuristicMask( FALSE ) ); | ||
205 | m_pixmaps->insert("symlinkedlocked", pm2 ); | ||
206 | 130 | ||
131 | |||
207 | } | 132 | } |
208 | 133 | ||
209 | // let's initialize the gui | 134 | OFileSelector::~OFileSelector() |
210 | /** | ||
211 | -------------------- | ||
212 | | cmbBox Button | | ||
213 | -------------------- | ||
214 | | FileSlector | | ||
215 | | or | | ||
216 | | OSelector | | ||
217 | | | | ||
218 | | | | ||
219 | ____________________ | ||
220 | | LineEdit | | ||
221 | ____________________ | ||
222 | | Permission Bar | | ||
223 | ____________________ | ||
224 | | ViewChoose | | ||
225 | ____________________ | ||
226 | | Save Cancel| | ||
227 | ____________________ | ||
228 | */ | ||
229 | void OFileSelector::delItems() | ||
230 | { | 135 | { |
231 | QLayoutIterator it = m_lay->iterator(); | 136 | |
232 | while ( it.current() != 0 ){ | ||
233 | it.deleteCurrent(); | ||
234 | } | ||
235 | } | 137 | } |
236 | 138 | ||
237 | void OFileSelector::init() | 139 | void OFileSelector::setNewVisible( bool visible ) |
238 | { | 140 | { |
239 | // qDebug("init"); | 141 | m_shNew = visible; |
240 | m_stack = new QWidgetStack(this, "wstack" ); | ||
241 | if( m_selector == NORMAL ){ | 142 | if( m_selector == NORMAL ){ |
242 | QString currMime; | 143 | delete m_select; |
243 | if( m_mimeCheck != 0 ) | 144 | // we need to initialize but keep the selected mimetype |
244 | currMime = m_mimeCheck->currentText(); | 145 | QString mime = m_mimeCheck == 0 ? QString::null : m_mimeCheck->currentText() ; |
245 | updateMimes(); | 146 | m_select = new FileSelector( m_autoMime ? mime : m_mimetypes.join(";") , |
246 | m_select = new FileSelector( currMime == "All" ? QString::null : currMime , | 147 | m_stack, "fileselector", |
247 | m_stack, "fileselector", FALSE, FALSE ); | 148 | m_shNew, m_shClose); |
248 | m_stack->addWidget(m_select, NORMAL ); | 149 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
249 | m_lay->addWidget(m_stack ); | 150 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); |
250 | m_stack->raiseWidget(NORMAL ); | 151 | //connect to close me and other signals as well |
251 | connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), | 152 | m_stack->addWidget( m_select, NORMAL ); |
252 | this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); | 153 | }else{ |
253 | m_pseudoLayout = 0l; | 154 | m_new->show(); |
254 | |||
255 | } else { | ||
256 | initializeListView(); | ||
257 | } | 155 | } |
258 | if(m_shLne ){ | 156 | } |
259 | initializeName(); | 157 | void OFileSelector::setCloseVisible( bool visible ) |
158 | { | ||
159 | m_shClose = visible; | ||
160 | if( m_selector == NORMAL ){ | ||
161 | setNewVisible( m_shNew ); // yeah baby | ||
162 | }else{ | ||
163 | m_close->show(); | ||
260 | } | 164 | } |
261 | if(m_shPerm ){ | 165 | } |
262 | m_checkPerm = new QCheckBox(tr("Set Permission"), this, "Permission" ); | 166 | void OFileSelector::reread() |
263 | m_checkPerm->setChecked( false ); | 167 | { |
264 | m_lay->addWidget(m_checkPerm ); | 168 | if( m_selector == NORMAL ){ |
169 | setNewVisible( m_shNew ); // make it a initializeSelector | ||
170 | }else if ( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ | ||
171 | reparse(); | ||
172 | //}else{ | ||
173 | //; | ||
265 | } | 174 | } |
266 | if( m_shChooser ) | 175 | } |
267 | initializeChooser(); | ||
268 | if(m_shYesNo ) | ||
269 | initializeYes(); | ||
270 | 176 | ||
271 | // m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, requestedMimeTypesList.first()) ); | 177 | const DocLnk *OFileSelector::selected() |
272 | // reparse(); | 178 | { |
273 | 179 | if( m_selector == NORMAL ){ | |
180 | return m_select->selected(); | ||
181 | }else{ | ||
182 | DocLnk *lnk = new DocLnk(selectedDocument() ); | ||
183 | return lnk; | ||
184 | } | ||
274 | } | 185 | } |
275 | 186 | ||
276 | void OFileSelector::setYesCancelVisible( bool show ) | 187 | void OFileSelector::setYesCancelVisible( bool show ) |
277 | { | 188 | { |
278 | if ( show == m_shYesNo ) | 189 | initializeYes(); // FIXME if YesCancel is not shown we will initialize it to hide it :( |
279 | return; | ||
280 | m_shYesNo = show; | 190 | m_shYesNo = show; |
281 | if( !show ){ | 191 | if( m_shYesNo ) |
282 | delete m_ok; | 192 | m_boxOk->show(); |
283 | delete m_cancel; | 193 | else |
284 | m_ok = 0; | 194 | m_boxOk->hide(); |
285 | m_cancel = 0; | ||
286 | // delete m_boxOk; all ready deleted in delItems | ||
287 | } | ||
288 | updateLay(); // recreate it and save the other states | ||
289 | } | ||
290 | 195 | ||
196 | } | ||
291 | void OFileSelector::setToolbarVisible( bool show ) | 197 | void OFileSelector::setToolbarVisible( bool show ) |
292 | { | 198 | { |
293 | if ( m_shTool == show ) | 199 | m_shTool = show; |
294 | return; | 200 | initializeListView(); // FIXME see above waste of memory |
295 | if(!m_shTool ){ | 201 | if(!m_shTool ){ |
296 | delete m_boxToolbar; | 202 | m_location->hide(); |
297 | delete m_homeButton; | 203 | m_up->hide(); |
298 | delete m_docButton; | 204 | m_homeButton->hide(); |
299 | delete m_location; | 205 | m_docButton->hide(); |
300 | delete m_up; | 206 | }else{ |
301 | m_boxToolbar = 0; | 207 | m_location->show(); |
302 | m_homeButton = 0; | 208 | m_up->show(); |
303 | m_docButton = 0; | 209 | m_homeButton->show(); |
304 | m_location = 0; | 210 | m_docButton->show(); |
305 | m_up = 0; | 211 | } |
306 | }; | ||
307 | updateLay();// overkill fix it | ||
308 | } | 212 | } |
309 | |||
310 | void OFileSelector::setPermissionBarVisible( bool show ) | 213 | void OFileSelector::setPermissionBarVisible( bool show ) |
311 | { | 214 | { |
312 | if( show == m_shPerm ) | ||
313 | return; | ||
314 | |||
315 | m_shPerm = show; | 215 | m_shPerm = show; |
316 | 216 | initializePerm(); | |
317 | updateLay(); | 217 | if( m_shPerm ) |
218 | m_checkPerm->show(); | ||
219 | else | ||
220 | m_checkPerm->hide(); | ||
318 | } | 221 | } |
319 | |||
320 | void OFileSelector::setLineEditVisible( bool show ) | 222 | void OFileSelector::setLineEditVisible( bool show ) |
321 | { | 223 | { |
322 | if( show == m_shLne ) | 224 | if( show ){ |
323 | return; | 225 | initializeName(); |
324 | 226 | m_boxName->show(); | |
325 | m_shLne = show; | 227 | }else{ |
326 | if( !show ){ | 228 | if( m_shLne && m_boxName != 0 ){ // check if we showed before this is the way to go |
327 | delete m_edit; | 229 | m_boxName->hide(); |
328 | delete m_fnLabel; | 230 | } |
329 | m_edit = 0; | ||
330 | m_fnLabel = 0; | ||
331 | //delete m_boxName; will be deleted | ||
332 | } | 231 | } |
333 | updateLay(); | 232 | m_shLne = show; |
334 | } | 233 | } |
335 | 234 | ||
336 | void OFileSelector::setChooserVisible( bool show ) | 235 | void OFileSelector::setChooserVisible( bool show ) |
337 | { | 236 | { |
338 | if( show = m_shChooser ) | ||
339 | return; | ||
340 | m_shChooser = show; | 237 | m_shChooser = show; |
341 | if( !show ){ | 238 | initializeChooser(); |
342 | delete m_mimeCheck; | 239 | if( m_shChooser ){ |
343 | delete m_viewCheck; | 240 | m_boxView->hide(); |
344 | m_mimeCheck = 0; | 241 | }else{ |
345 | m_viewCheck = 0; | 242 | m_boxView->show(); |
346 | } | 243 | } |
347 | updateLay(); | ||
348 | } | 244 | } |
349 | 245 | ||
350 | QCheckBox* OFileSelector::permissionCheckbox( ) | 246 | QCheckBox* OFileSelector::permissionCheckbox() |
247 | { | ||
248 | if( m_selector == NORMAL ) | ||
249 | return 0l; | ||
250 | else | ||
251 | return m_checkPerm; | ||
252 | } | ||
253 | bool OFileSelector::setPermission()const | ||
351 | { | 254 | { |
352 | return m_checkPerm; | 255 | return m_checkPerm == 0 ? false : m_checkPerm->isChecked(); |
256 | } | ||
257 | void OFileSelector::setPermissionChecked( bool check ) | ||
258 | { | ||
259 | if( m_checkPerm ) | ||
260 | m_checkPerm->setChecked( check ); | ||
353 | } | 261 | } |
354 | 262 | ||
355 | void OFileSelector::setCaseSensetive( bool caSe ) | 263 | void OFileSelector::setMode(int mode) // FIXME do direct raising |
264 | { | ||
265 | m_mode = mode; | ||
266 | if( m_selector == NORMAL ) | ||
267 | return; | ||
268 | } | ||
269 | void OFileSelector::setShowDirs(bool ) | ||
270 | { | ||
271 | m_dir = true; | ||
272 | reparse(); | ||
273 | } | ||
274 | void OFileSelector::setCaseSensetive(bool caSe ) | ||
356 | { | 275 | { |
357 | m_case = caSe; | 276 | m_case = caSe; |
358 | reparse(); | 277 | reparse(); |
359 | } | 278 | } |
360 | 279 | void OFileSelector::setShowFiles(bool show ) | |
361 | void OFileSelector::setShowFiles(bool files ){ | 280 | { |
362 | m_files = files; | 281 | m_files = show; |
363 | reparse(); | 282 | reparse(); |
364 | } | 283 | } |
365 | 284 | /// | |
366 | void OFileSelector::setPopupMenu(QPopupMenu *pop ) | 285 | bool OFileSelector::cd(const QString &path ) |
367 | { | 286 | { |
368 | //delete oldpopup; | 287 | m_currentDir = path; |
369 | m_custom = pop; | 288 | reparse(); |
289 | return true; | ||
370 | } | 290 | } |
371 | 291 | void OFileSelector::setSelector(int mode ) | |
372 | bool OFileSelector::setPermission( ) const | ||
373 | { | 292 | { |
374 | if( m_checkPerm == 0 ) | 293 | QString text; |
375 | return false; | 294 | switch( mode ){ |
376 | else | 295 | case NORMAL: |
377 | return m_checkPerm->isChecked(); | 296 | text = tr("Documents"); |
297 | break; | ||
298 | case EXTENDED: | ||
299 | text = tr("Files"); | ||
300 | break; | ||
301 | case EXTENDED_ALL: | ||
302 | text = tr("All Files"); | ||
303 | break; | ||
304 | } | ||
305 | slotViewCheck( text ); | ||
378 | } | 306 | } |
379 | 307 | ||
380 | void OFileSelector::setPermissionChecked( bool check ) | 308 | void OFileSelector::setPopupMenu(QPopupMenu *popup ) |
381 | { | 309 | { |
382 | if( m_checkPerm == 0 ) | 310 | m_custom = popup; |
383 | return; | 311 | m_showPopup = true; |
384 | m_checkPerm->setChecked( check ); | ||
385 | } | 312 | } |
386 | 313 | ||
387 | QString OFileSelector::selectedName( )const | 314 | //void OFileSelector::updateL |
315 | |||
316 | QString OFileSelector::selectedName() const | ||
388 | { | 317 | { |
389 | QString string; | 318 | QString name; |
390 | if( m_selector == NORMAL ){ | 319 | if( m_selector == NORMAL ){ |
391 | const DocLnk *lnk = m_select->selected(); | 320 | const DocLnk *lnk = m_select->selected(); |
392 | string = lnk->file(); | 321 | name = lnk->file(); |
393 | }else if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { | 322 | delete lnk; |
394 | QListViewItem *item = m_View->currentItem(); | 323 | }else if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ |
395 | if(item != 0 ){ | 324 | QListViewItem *item = m_View->currentItem(); |
396 | string = m_currentDir + "/" + item->text( 1 ); | 325 | if( item != 0 ) |
397 | } | 326 | name = m_currentDir + "/" + item->text( 1 ); |
327 | }else { // installed view | ||
328 | ; | ||
398 | } | 329 | } |
399 | return string; | 330 | return name; |
400 | } | 331 | } |
401 | |||
402 | QStringList OFileSelector::selectedNames()const | 332 | QStringList OFileSelector::selectedNames()const |
403 | { | 333 | { |
404 | QStringList list; | 334 | QStringList list; |
335 | if( m_selector == NORMAL ){ | ||
336 | list << selectedName(); | ||
337 | }else if ( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { | ||
338 | list << selectedName(); // FIXME implement multiple Selections | ||
339 | } | ||
405 | return list; | 340 | return list; |
406 | } | 341 | } |
407 | 342 | /** If mode is set to the Dir selection this will return the selected path. | |
408 | DocLnk OFileSelector::selectedDocument( )const | 343 | * |
344 | * | ||
345 | */ | ||
346 | QString OFileSelector::selectedPath()const | ||
409 | { | 347 | { |
410 | DocLnk lnk; | 348 | QString path; |
411 | return lnk; | 349 | if( m_selector == NORMAL ){ |
350 | path = QPEApplication::documentDir(); | ||
351 | }else if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ | ||
352 | ; | ||
353 | } | ||
354 | return path; | ||
412 | } | 355 | } |
413 | void OFileSelector::updateLay() | 356 | QStringList OFileSelector::selectedPaths() const |
414 | { | 357 | { |
415 | /* if( m_shTool ) | 358 | QStringList list; |
416 | // | 359 | list << selectedPath(); |
417 | else | 360 | return list; |
418 | // hide | ||
419 | */ | ||
420 | // save the state | ||
421 | bool check = false; | ||
422 | if( m_checkPerm != 0 ) | ||
423 | check = m_checkPerm->isChecked(); | ||
424 | QString text; | ||
425 | |||
426 | if( m_edit != 0 ) | ||
427 | text = m_edit->text(); | ||
428 | // save current mimetype | ||
429 | |||
430 | delItems(); | ||
431 | delete m_checkPerm; | ||
432 | m_checkPerm = 0; | ||
433 | delete m_edit; | ||
434 | m_edit = 0; | ||
435 | delete m_fnLabel; | ||
436 | m_fnLabel = 0; | ||
437 | delete m_ok; | ||
438 | m_ok = 0; | ||
439 | delete m_cancel; | ||
440 | m_cancel = 0; | ||
441 | delete m_mimeCheck; | ||
442 | m_mimeCheck = 0; | ||
443 | delete m_viewCheck; | ||
444 | m_viewCheck = 0; | ||
445 | delete m_select; // test | ||
446 | delete m_stack; | ||
447 | //delete m_list; | ||
448 | init(); | ||
449 | if( m_shLne ) | ||
450 | m_edit->setText(text ); | ||
451 | if( m_shPerm ) | ||
452 | m_checkPerm->setChecked(check ); | ||
453 | } | 361 | } |
454 | 362 | QString OFileSelector::directory()const | |
455 | // let's update the mimetypes. Use the current mimefilter for the 2nd QDir retrieve | ||
456 | // insert QListViewItems with the right options | ||
457 | bool OFileSelector::compliesMime(const QString &path, const QString &mime ) | ||
458 | { | 363 | { |
459 | if( mime == "All" ) | 364 | if( m_selector == NORMAL ) |
460 | return true; | 365 | return QPEApplication::documentDir(); |
461 | MimeType type( path ); | 366 | |
462 | if( type.id() == mime ) | 367 | return QDir(m_currentDir).absPath(); |
463 | return true; | ||
464 | return false; | ||
465 | } | 368 | } |
466 | 369 | ||
467 | void OFileSelector::reparse() | 370 | int OFileSelector::fileCount() |
468 | { | 371 | { |
469 | qDebug("reparse"); | 372 | int count; |
470 | if(m_View== 0 || m_selector == NORMAL) | 373 | switch( m_selector ){ |
471 | return; | 374 | case NORMAL: |
472 | m_View->clear(); | 375 | count = m_select->fileCount(); |
473 | QString currMime =m_mimeCheck->currentText(); | ||
474 | // update the mimetype now | ||
475 | if( m_autoMime ) { | ||
476 | QDir dir( m_currentDir ); | ||
477 | m_mimetypes.clear(); | ||
478 | m_mimeCheck->clear(); | ||
479 | dir.setFilter( QDir::Files | QDir::Readable ); | ||
480 | dir.setSorting(QDir::Size ); | ||
481 | const QFileInfoList *list = dir.entryInfoList(); | ||
482 | QFileInfoListIterator it( *list ); | ||
483 | QFileInfo *fi; | ||
484 | while( (fi=it.current()) ){ | ||
485 | if(fi->extension() == QString::fromLatin1("desktop") ){ | ||
486 | ++it; | ||
487 | continue; | ||
488 | } | ||
489 | MimeType type(fi->filePath() ); | ||
490 | if( !m_mimetypes.contains( type.id() ) ) | ||
491 | m_mimetypes.append( type.id() ); | ||
492 | |||
493 | ++it; | ||
494 | } | ||
495 | m_mimetypes.prepend("All" ); | ||
496 | m_mimeCheck->insertStringList(m_mimetypes ); | ||
497 | // set it to the current mimetype | ||
498 | m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currMime ) ); | ||
499 | }else{ | ||
500 | m_mimeCheck->clear(); | ||
501 | m_mimeCheck->insertItem( m_mimetypes.join(";") ); | ||
502 | } | ||
503 | |||
504 | QDir dir( m_currentDir ); | ||
505 | //dir.setFilter(-1 ); | ||
506 | int sort = QDir::Name | QDir::DirsFirst | QDir::Reversed; | ||
507 | if( m_case ) | ||
508 | sort = QDir::IgnoreCase; | ||
509 | dir.setSorting( sort ); | ||
510 | |||
511 | int filter; | ||
512 | /* if( m_dir && !m_files) | ||
513 | filter |= QDir::Dirs; | ||
514 | else if( !m_dir && m_files ) | ||
515 | filter |= QDir::Files; | ||
516 | else | ||
517 | filter |= QDir::All; | ||
518 | */ | ||
519 | if( m_selector == EXTENDED_ALL ) | ||
520 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; | ||
521 | else | ||
522 | filter = QDir::Files | QDir::Dirs | QDir::All; | ||
523 | dir.setFilter( filter ); | ||
524 | qDebug("infoList"); | ||
525 | const QFileInfoList *list = dir.entryInfoList(); | ||
526 | QFileInfoListIterator it( *list ); | ||
527 | QFileInfo *fi; | ||
528 | while( (fi=it.current()) ){ | ||
529 | if(fi->fileName() == ".." || fi->fileName() == "." ){ | ||
530 | ++it; | ||
531 | continue; | ||
532 | } | ||
533 | // qWarning("Test: %s", fi->fileName().latin1() ); | ||
534 | if(fi->isSymLink() ){ | ||
535 | // qWarning("Symlink %s", fi->fileName().latin1() ); | ||
536 | QString file = fi->dirPath(true)+"/"+ fi->readLink(); | ||
537 | // qWarning("File ->%s", file.latin1() ); | ||
538 | for(int i=0; i<=4; i++ ){ // prepend from dos | ||
539 | QFileInfo info( file ); | ||
540 | if( !info.exists() ){ | ||
541 | // qWarning("does not exist" ); | ||
542 | addSymlink(currMime, fi, TRUE ); | ||
543 | break; | 376 | break; |
544 | }else if( info.isDir() ){ | 377 | //case CUSTOM: |
545 | // qWarning("isDir" ); | 378 | case EXTENDED: |
546 | addDir(currMime, fi, TRUE ); | 379 | case EXTENDED_ALL: |
380 | default: | ||
381 | count = m_View->childCount(); | ||
547 | break; | 382 | break; |
548 | }else if( info.isFile() ){ | 383 | } |
549 | // qWarning("isFile" ); | 384 | return count; |
550 | addFile(currMime, fi, TRUE ); | 385 | } |
386 | DocLnk OFileSelector::selectedDocument() const | ||
387 | { | ||
388 | DocLnk lnk; | ||
389 | switch( m_selector ){ | ||
390 | case NORMAL:{ | ||
391 | const DocLnk *lnk2 = m_select->selected(); | ||
392 | lnk = DocLnk(*lnk2 ); // copy | ||
393 | delete lnk2; | ||
551 | break; | 394 | break; |
552 | }else if( info.isSymLink() ){ | ||
553 | file = info.dirPath(true)+ "/"+ info.readLink(); | ||
554 | // qWarning("isSymlink again %s", file.latin1() ); | ||
555 | }else if( i == 4 ){ // just insert it and have the symlink symbol | ||
556 | addSymlink(currMime, fi ); | ||
557 | // qWarning("level too deep" ); | ||
558 | } | 395 | } |
559 | } | 396 | case EXTENDED: |
560 | }else if( fi->isDir() ){ | 397 | case EXTENDED_ALL: |
561 | addDir(currMime, fi ); | 398 | default: |
562 | }else if( fi->isFile() ) { // file ? | 399 | lnk = DocLnk( selectedName() ); // new DocLnk |
563 | addFile(currMime, fi ); | 400 | break; |
564 | } | ||
565 | ++it; | ||
566 | } | 401 | } |
567 | m_View->sort(); | 402 | return lnk; |
568 | // m_View->ensureItemVisible(); | ||
569 | } | 403 | } |
570 | 404 | QValueList<DocLnk> OFileSelector::selectedDocuments() const | |
571 | QString OFileSelector::directory()const | ||
572 | { | 405 | { |
573 | QDir d( m_currentDir); | 406 | QValueList<DocLnk> docs; |
574 | return d.absPath(); | 407 | docs.append( selectedDocument() ); |
408 | return docs; | ||
575 | } | 409 | } |
576 | 410 | ||
577 | int OFileSelector::fileCount() | ||
578 | { | ||
579 | return 0; | ||
580 | } | ||
581 | 411 | ||
582 | void OFileSelector::slotOk( ) | 412 | // slots internal |
413 | |||
414 | void OFileSelector::slotOk() | ||
583 | { | 415 | { |
584 | emit ok(); | 416 | emit ok(); |
585 | } | 417 | } |
586 | 418 | void OFileSelector::slotCancel() | |
587 | void OFileSelector::slotCancel( ) | ||
588 | { | 419 | { |
589 | emit cancel(); | 420 | emit cancel(); |
590 | } | 421 | } |
591 | 422 | void OFileSelector::slotViewCheck(const QString &sel) | |
592 | void OFileSelector::initializeName() | ||
593 | { | 423 | { |
594 | m_boxName = new QHBoxLayout(this ); | 424 | if( sel == tr("Documents" ) ){ |
595 | m_edit = new QLineEdit(this ); | 425 | if( m_select == 0 ){ |
596 | m_fnLabel = new QLabel(this ); | 426 | // autMime? fix cause now we use All and not the current |
597 | m_fnLabel->setText(tr("Name:") ); | 427 | m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), |
598 | m_boxName->addWidget(m_fnLabel ); | 428 | m_stack, "fileselector", |
599 | m_boxName->insertSpacing(1, 8 ); | 429 | FALSE, FALSE); |
600 | m_boxName->addWidget(m_edit, 100 ); | 430 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
601 | 431 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | |
602 | m_lay->addLayout(m_boxName); | 432 | //connect to close me and other signals as well |
433 | |||
434 | m_stack->addWidget( m_select, NORMAL ); | ||
435 | } | ||
436 | m_stack->raiseWidget( NORMAL ); | ||
437 | m_selector = NORMAL; | ||
438 | }else if( sel == tr("Files") ){ | ||
439 | m_selector = EXTENDED; | ||
440 | initializeListView(); | ||
441 | reparse(); | ||
442 | m_stack->raiseWidget( EXTENDED ); | ||
443 | }else if( sel == tr("All Files") ){ | ||
444 | m_selector = EXTENDED_ALL; | ||
445 | initializeListView(); | ||
446 | reparse(); | ||
447 | m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter | ||
448 | } | ||
603 | } | 449 | } |
604 | 450 | void OFileSelector::slotMimeCheck(const QString &mime) | |
605 | void OFileSelector::initializeYes() | ||
606 | { | 451 | { |
607 | m_ok = new QPushButton("&Save", this, "save" ); | 452 | if( m_selector == NORMAL ){ |
608 | m_cancel = new QPushButton("C&ancel", this, "cancel" ); | 453 | if( m_autoMime ){ |
609 | m_boxOk = new QHBoxLayout(this ); | 454 | delete m_select; |
610 | m_boxOk->addWidget( m_ok, Qt::AlignHCenter ); | 455 | m_select = new FileSelector( mime == tr("All") ? QString::null : mime, |
611 | m_boxOk->insertSpacing(1, 8 ); | 456 | m_stack, "fileselector", |
612 | m_boxOk->addWidget( m_cancel, Qt::AlignHCenter); | 457 | FALSE, FALSE); |
613 | m_lay->addLayout(m_boxOk ); | 458 | |
614 | connect(m_ok, SIGNAL(clicked() ), | 459 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
615 | this, SLOT(slotOk() ) ); | 460 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); |
616 | connect(m_cancel, SIGNAL(clicked() ), | 461 | //connect to close me and other signals as well |
617 | this, SLOT(slotCancel() ) ); | 462 | m_stack->addWidget( m_select, NORMAL ); |
463 | m_stack->raiseWidget( NORMAL ); | ||
464 | updateMimes(); | ||
465 | m_mimeCheck->clear(); | ||
466 | m_mimeCheck->insertStringList(m_mimetypes ); | ||
467 | m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); | ||
468 | } | ||
469 | }else{ // others | ||
470 | qWarning("Mime %s", mime.latin1() ); | ||
471 | if(m_shChooser ){ | ||
472 | qWarning("Current Text %s", m_mimeCheck->currentText().latin1() ); | ||
473 | //m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); | ||
474 | } | ||
475 | reparse(); | ||
476 | } | ||
618 | 477 | ||
619 | } | 478 | } |
620 | 479 | void OFileSelector::slotLocationActivated(const QString &file) | |
621 | void OFileSelector::initializeChooser() | ||
622 | { | 480 | { |
623 | m_boxView = new QHBoxLayout(this ); | 481 | cd(file.left(file.find("<-",0,TRUE))); |
624 | 482 | reparse(); | |
625 | m_mimeCheck = new QComboBox(this, "mime check"); | ||
626 | m_viewCheck = new QComboBox(this, "view check"); | ||
627 | m_boxView->addWidget(m_viewCheck, 0 ); | ||
628 | m_boxView->insertSpacing(2, 8 ); | ||
629 | m_boxView->addWidget(m_mimeCheck, 0 ); | ||
630 | m_lay->addLayout(m_boxView ); | ||
631 | m_lay->insertSpacing( 4, 8); | ||
632 | |||
633 | m_viewCheck->insertItem(tr("Documents") ); | ||
634 | m_viewCheck->insertItem(tr("Files") ); | ||
635 | m_viewCheck->insertItem(tr("All Files") ); | ||
636 | |||
637 | if(!m_autoMime ) | ||
638 | m_mimeCheck->insertItem(m_mimetypes.join("," ) ); | ||
639 | else{ // check | ||
640 | updateMimes(); | ||
641 | m_mimeCheck->insertStringList( m_mimetypes ); | ||
642 | } | ||
643 | |||
644 | connect( m_viewCheck, SIGNAL(activated(const QString &) ), | ||
645 | this, SLOT(slotViewCheck(const QString & ) ) ); | ||
646 | |||
647 | connect( m_mimeCheck, SIGNAL(activated(const QString &) ), | ||
648 | this, SLOT(slotMimeCheck(const QString & ) ) ); | ||
649 | } | 483 | } |
650 | 484 | void OFileSelector::slotInsertLocationPath(const QString ¤tPath, int count) | |
651 | void OFileSelector::slotMimeCheck(const QString &view ){ | 485 | { |
652 | if(m_selector == NORMAL ){ | 486 | QStringList pathList; |
653 | delete m_select; | 487 | bool underDog = FALSE; |
654 | m_select = new FileSelector(view == "All" ? QString::null : view | 488 | for(int i=0;i<count;i++) { |
655 | , m_stack, "fileselector", FALSE, FALSE ); | 489 | pathList << m_location->text(i); |
656 | m_stack->addWidget( m_select, NORMAL ); | 490 | if( m_location->text(i) == currentPath) |
657 | m_stack->raiseWidget( NORMAL ); | 491 | underDog = TRUE; |
658 | }else{ | 492 | } |
659 | reparse(); | 493 | if( !underDog) { |
494 | m_location->clear(); | ||
495 | if( currentPath.left(2)=="//") | ||
496 | pathList.append( currentPath.right(currentPath.length()-1) ); | ||
497 | else | ||
498 | pathList.append( currentPath ); | ||
499 | m_location->insertStringList( pathList,-1); | ||
660 | } | 500 | } |
661 | } | 501 | } |
502 | void OFileSelector::locationComboChanged() | ||
503 | { | ||
504 | cd( m_location->lineEdit()->text()); | ||
505 | reparse(); | ||
506 | } | ||
507 | void OFileSelector::init() | ||
508 | { | ||
509 | m_lay = new QVBoxLayout( this ); | ||
510 | m_lay->setSpacing(0 ); | ||
662 | 511 | ||
663 | void OFileSelector::slotViewCheck(const QString &view ){ | 512 | m_stack = new QWidgetStack( this ); |
664 | qWarning("changed: show %s", view.latin1() ); | 513 | if( m_selector == NORMAL ){ |
665 | // if the current view is the one | 514 | m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), |
666 | QString currMime = m_mimeCheck->currentText(); | 515 | m_stack, "fileselector", |
667 | if( view == QString::fromLatin1("Documents") ){ | 516 | FALSE, FALSE); |
668 | // get the mimetype now | 517 | |
669 | // check if we're the current widget and return | 518 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
670 | if( m_View != 0) { // delete 0 shouldn't crash but it did :( | 519 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); |
671 | delete m_View; | 520 | //connect to close me and other signals as well |
672 | delete m_boxToolbar; | ||
673 | delete m_homeButton; | ||
674 | delete m_docButton; | ||
675 | delete m_location; | ||
676 | delete m_up; | ||
677 | delete m_pseudo; | ||
678 | //if(m_pseudoLayout!=0 ) | ||
679 | // delete m_pseudoLayout; | ||
680 | } | ||
681 | m_View = 0; | ||
682 | m_boxToolbar = 0; | ||
683 | m_homeButton = 0; | ||
684 | m_docButton = 0; | ||
685 | m_location = 0; | ||
686 | m_up = 0; | ||
687 | m_pseudo = 0; | ||
688 | m_pseudoLayout = 0; | ||
689 | 521 | ||
690 | delete m_select; | ||
691 | m_select = new FileSelector( currMime == "All" ? QString::null : currMime, | ||
692 | m_stack,"fileselector", FALSE, FALSE ); | ||
693 | m_stack->addWidget( m_select, NORMAL ); | 522 | m_stack->addWidget( m_select, NORMAL ); |
694 | m_mimeCheck->clear(); | ||
695 | m_selector = NORMAL; | ||
696 | updateMimes(); | ||
697 | m_mimeCheck->insertStringList( m_mimetypes ); | ||
698 | m_stack->raiseWidget( NORMAL ); | 523 | m_stack->raiseWidget( NORMAL ); |
699 | connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); | 524 | }else{ // we're in init so it will be EXTENDED or EXTENDED_ALL |
525 | // and initializeListview will take care of those | ||
526 | // toolbar get's generade in initializeListView | ||
527 | initializeListView( ); // will raise the widget as well | ||
528 | } | ||
529 | m_lay->addWidget( m_stack, 100 ); // add to the layout 10 = stretch | ||
700 | 530 | ||
701 | } else if(view == QString::fromLatin1("Files") ){ | 531 | if( m_shLne ) // the LineEdit with the current FileName |
702 | // remove from the stack | 532 | initializeName(); |
703 | delete m_select; | ||
704 | m_select = 0; | ||
705 | delete m_View; | ||
706 | m_View = 0; | ||
707 | 533 | ||
708 | m_selector = EXTENDED; | 534 | if( m_shPerm ) // the Permission QCheckBox |
709 | initializeListView(); | 535 | initializePerm(); |
710 | reparse(); | ||
711 | } else if(view == QString::fromLatin1("All Files") ) { | ||
712 | // remove from the stack | ||
713 | delete m_select; | ||
714 | m_select = 0; | ||
715 | delete m_View; | ||
716 | m_View = 0; | ||
717 | |||
718 | m_selector = EXTENDED_ALL; | ||
719 | initializeListView(); | ||
720 | reparse(); | ||
721 | } | ||
722 | } | ||
723 | 536 | ||
537 | if( m_shChooser ) // the Chooser for the view and Mimetypes | ||
538 | initializeChooser(); | ||
724 | 539 | ||
725 | void OFileSelector::updateMimes() // lets check which mode is active | 540 | if( m_shYesNo ) // the Yes No button row |
726 | // check the current dir for items then | 541 | initializeYes( ); |
542 | } | ||
543 | void OFileSelector::updateMimes() | ||
727 | { | 544 | { |
728 | if( m_autoMime ){ | 545 | if( m_autoMime ){ |
729 | m_mimetypes.clear(); | 546 | m_mimetypes.clear(); |
730 | m_mimetypes.append("All" ); | 547 | m_mimetypes.append( tr("All") ); |
731 | if( m_selector == NORMAL ){ | 548 | if( m_selector == NORMAL ){ |
732 | DocLnkSet set; | 549 | DocLnkSet set; |
733 | Global::findDocuments(&set, QString::null ); | 550 | Global::findDocuments(&set, QString::null ); |
734 | QListIterator<DocLnk> dit( set.children() ); | 551 | QListIterator<DocLnk> dit( set.children() ); |
735 | for ( ; dit.current(); ++dit ) { | 552 | for( ; dit.current(); ++dit ){ |
736 | if( !m_mimetypes.contains((*dit)->type() ) ) | 553 | if( !m_mimetypes.contains( (*dit)->type() ) ) |
737 | m_mimetypes.append( (*dit)->type() ); | 554 | m_mimetypes.append( (*dit)->type() ); |
738 | } | 555 | } |
739 | }else{ | 556 | }// else done in reparse |
740 | // should be allreday updatet | 557 | } |
741 | ; | ||
742 | } | ||
743 | } | ||
744 | } | 558 | } |
745 | 559 | void OFileSelector::initVars() | |
746 | void OFileSelector::initializeListView() | ||
747 | { | 560 | { |
748 | // in the instance that a developer selected the view to be Files or Entended, | 561 | if( m_mimetypes.isEmpty() ) |
749 | // in the initial initialization, you are deleting objects here | 562 | m_autoMime = true; |
750 | // that aren't even existing yet. | 563 | else |
751 | 564 | m_autoMime = false; | |
752 | // just to make sure but clean it up better FIXME | 565 | m_shClose = false; |
753 | delete m_View; | 566 | m_shNew = false; |
754 | m_View = 0; | 567 | m_shTool = true; |
755 | delete m_boxToolbar; | 568 | m_shPerm = false; |
756 | delete m_homeButton; | 569 | m_shLne = true; |
757 | delete m_docButton; | 570 | m_shChooser = true; |
758 | delete m_location; | 571 | m_shYesNo = true; |
759 | delete m_up; | 572 | m_case = false; |
760 | delete m_pseudo; | 573 | m_dir = true; |
574 | m_files = true; | ||
575 | m_showPopup = false; | ||
576 | if(m_pixmaps == 0 ) // init the pixmaps | ||
577 | initPics(); | ||
761 | 578 | ||
762 | m_boxToolbar = 0; | 579 | // pointers |
580 | m_location = 0; | ||
581 | m_mimeCheck = 0; | ||
582 | m_viewCheck = 0; | ||
763 | m_homeButton = 0; | 583 | m_homeButton = 0; |
764 | m_docButton = 0; | 584 | m_docButton = 0; |
765 | m_location = 0; | 585 | m_hideButton = 0; |
586 | m_ok = 0; | ||
587 | m_cancel = 0; | ||
588 | m_reread = 0; | ||
766 | m_up = 0; | 589 | m_up = 0; |
590 | m_View = 0; | ||
591 | m_checkPerm = 0; | ||
767 | m_pseudo = 0; | 592 | m_pseudo = 0; |
768 | m_pseudoLayout = 0; | 593 | m_pseudoLayout = 0; |
769 | qDebug(" time for the toolbar "); | 594 | m_select = 0; |
770 | m_pseudo = new QWidget(m_stack, "Pseudo Widget"); | 595 | m_stack = 0; |
771 | m_pseudoLayout = new QVBoxLayout(m_pseudo ); | 596 | m_lay = 0; |
772 | if(m_shTool ){ | 597 | m_Oselector = 0; |
773 | m_boxToolbar = new QHBoxLayout( ); | 598 | m_boxToolbar = 0; |
774 | m_boxToolbar->setAutoAdd( true ); | 599 | m_boxOk = 0; |
775 | m_location = new QComboBox(m_pseudo ); | 600 | m_boxName = 0; |
776 | m_location ->setEditable(TRUE); | 601 | m_boxView = 0; |
777 | connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( locationComboActivated(const QString & ) ) ); | 602 | m_custom = 0; |
778 | connect( m_location->lineEdit(),SIGNAL(returnPressed()), this,SLOT( locationComboChanged())); | 603 | m_edit = 0; |
779 | 604 | m_fnLabel = 0; | |
780 | m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton"); | 605 | m_new = 0; |
781 | m_up->setFixedSize( QSize( 20, 20 ) ); | 606 | m_close = 0; |
782 | connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); | 607 | } |
783 | m_up->setFlat(TRUE); | 608 | void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) |
784 | 609 | { | |
785 | m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo); | 610 | if(!m_files) |
786 | m_homeButton->setFixedSize( QSize( 20, 20 ) ); | ||
787 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); | ||
788 | m_homeButton->setFlat(TRUE); | ||
789 | |||
790 | m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", m_pseudo,"docsButton"); | ||
791 | m_docButton->setFixedSize( QSize( 20, 20 ) ); | ||
792 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); | ||
793 | m_docButton->setFlat(TRUE); | ||
794 | |||
795 | m_boxToolbar->addWidget(m_location ); | ||
796 | m_boxToolbar->addWidget(m_up ); | ||
797 | m_boxToolbar->addWidget(m_homeButton ); | ||
798 | m_boxToolbar->addWidget(m_docButton ); | ||
799 | m_pseudoLayout->addLayout(m_boxToolbar ); | ||
800 | qDebug("lets fill the combobox"); | ||
801 | StorageInfo storage; | ||
802 | const QList<FileSystem> &fs = storage.fileSystems(); | ||
803 | QListIterator<FileSystem> it ( fs ); | ||
804 | for( ; it.current(); ++it ){ | ||
805 | const QString disk = (*it)->name(); | ||
806 | const QString path = (*it)->path(); | ||
807 | m_location->insertItem(path+ "<-"+disk ); | ||
808 | } | ||
809 | int count = m_location->count(); | ||
810 | m_location->insertItem(m_currentDir ); | ||
811 | m_location->setCurrentItem( count ); | ||
812 | }; | ||
813 | |||
814 | m_View = new QListView(m_pseudo, "Extended view" ); | ||
815 | m_stack->addWidget( m_pseudo, EXTENDED ); | ||
816 | m_stack->raiseWidget( EXTENDED ); | ||
817 | m_pseudoLayout->addWidget(m_View ); | ||
818 | QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold); | ||
819 | // set up the stuff | ||
820 | // Pixmap Name Date Size mime | ||
821 | //(m_View->header() )->hide(); | ||
822 | //m_View->setRootIsDecorated(false); | ||
823 | m_View->addColumn(" "); | ||
824 | m_View->addColumn(tr("Name"),135 ); | ||
825 | m_View->addColumn(tr("Size"),-1 ); | ||
826 | m_View->addColumn(tr("Date"), 60 ); | ||
827 | m_View->addColumn(tr("Mime Type"),-1 ); | ||
828 | QHeader *header = m_View->header(); | ||
829 | header->hide(); | ||
830 | m_View->setSorting(1 ); | ||
831 | m_View->setAllColumnsShowFocus( TRUE); | ||
832 | // connect now | ||
833 | connect(m_View, SIGNAL(selectionChanged() ), this, SLOT(slotSelectionChanged() ) ); | ||
834 | connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); | ||
835 | connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), | ||
836 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); | ||
837 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), | ||
838 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); | ||
839 | |||
840 | |||
841 | }; | ||
842 | |||
843 | /* If a item is locked depends on the mode | ||
844 | if we're in OPEN !isReadable is locked | ||
845 | if we're in SAVE !isWriteable is locked | ||
846 | |||
847 | |||
848 | */ | ||
849 | |||
850 | |||
851 | void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){ | ||
852 | // qWarning("Add Files" ); | ||
853 | if( !m_files ){ | ||
854 | // qWarning("not mfiles" ); | ||
855 | return; | 611 | return; |
856 | } | 612 | // if( !compliesMime(info->absFilePath(), mime ) ) |
857 | 613 | // return; | |
858 | MimeType type( info->filePath() ); | 614 | MimeType type( info->absFilePath() ); |
859 | QString name; | 615 | if( mime != tr("All") && type.id() != mime ) |
860 | QString dir; | ||
861 | bool locked= false; | ||
862 | if(mime == "All" ){ | ||
863 | ; | ||
864 | }else if( type.id() != mime ) { | ||
865 | return; | 616 | return; |
866 | } | 617 | QPixmap pix = type.pixmap(); |
867 | QPixmap pix = type.pixmap(); | 618 | QString dir; |
868 | if(pix.isNull() ) | 619 | QString name; |
869 | pix = Resource::loadPixmap( "UnknownDocument-14" ); | 620 | bool locked; |
621 | if( pix.isNull() ) | ||
622 | pix = Resource::loadPixmap( "UnknownDocument-14"); | ||
870 | dir = info->dirPath( true ); | 623 | dir = info->dirPath( true ); |
871 | if( symlink ) { // check if the readLink is readable | 624 | if( symlink ) |
872 | // do it right later | 625 | name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink(); |
873 | name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink(); | 626 | else { |
874 | }else{ // keep track of the icons | ||
875 | name = info->fileName(); | 627 | name = info->fileName(); |
876 | if( m_mode == OPEN ){ | 628 | if( ( m_mode == OPEN && !info->isReadable() )|| |
877 | if( !info->isReadable() ){ | 629 | ( m_mode == SAVE && !info->isWritable() ) ){ |
878 | locked = true; | 630 | |
879 | pix = Resource::loadPixmap("locked" ); | 631 | locked = true; pix = Resource::loadPixmap("locked"); |
880 | } | 632 | } |
881 | }else if( m_mode == SAVE ){ | ||
882 | if( !info->isWritable() ){ | ||
883 | locked = true; | ||
884 | pix = Resource::loadPixmap("locked" ); | ||
885 | } | ||
886 | } | ||
887 | } | 633 | } |
888 | new OFileSelectorItem( m_View, pix, name, | 634 | new OFileSelectorItem( m_View, pix, name, |
889 | info->lastModified().toString(), | 635 | info->lastModified().toString(), |
890 | QString::number( info->size() ), | 636 | QString::number( info->size() ), |
891 | dir, locked ); | 637 | dir, locked ); |
892 | } | 638 | } |
893 | 639 | void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) | |
894 | void OFileSelector::addDir(const QString &/*mime*/, QFileInfo *info, bool symlink ) | ||
895 | { | 640 | { |
896 | if(!m_dir ) | 641 | if(!m_dir) |
897 | return; | 642 | return; |
898 | //if( showDirs ) | 643 | if( m_selector == EXTENDED_ALL || m_selector == EXTENDED ){ |
899 | { | 644 | bool locked = false; |
900 | bool locked=false; | ||
901 | QString name; | 645 | QString name; |
902 | QPixmap pix; | 646 | QPixmap pix; |
903 | if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ | 647 | if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ |
904 | locked = true; | 648 | locked = true; |
905 | if( symlink ){ | 649 | if( symlink ) |
906 | pix = (*m_pixmaps)["symlinkedlocked"]; | 650 | pix = (*m_pixmaps)["symlinkedlocked"]; |
907 | }else{ | 651 | else |
908 | pix = Resource::loadPixmap("lockedfolder" ); | 652 | pix = Resource::loadPixmap("lockedfolder"); |
909 | } | 653 | }else { // readable |
910 | }else{ | 654 | pix = symlink ? (*m_pixmaps)["dirsymlink"] : Resource::loadPixmap("folder") ; |
911 | if( symlink ){ | ||
912 | pix = (*m_pixmaps)["dirsymlink" ]; | ||
913 | }else{ | ||
914 | pix = Resource::loadPixmap("folder" ); | ||
915 | } | ||
916 | } | 655 | } |
917 | if( symlink){ | 656 | name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; |
918 | name = info->fileName()+ "->"+ info->dirPath(true) +"/" +info->readLink(); | 657 | new OFileSelectorItem( m_View, pix, name, |
658 | info->lastModified().toString(), | ||
659 | QString::number( info->size() ), | ||
660 | info->dirPath( true ), locked, | ||
661 | true ); | ||
662 | |||
663 | }// else CUSTOM View | ||
664 | } | ||
665 | void OFileSelector::delItems() | ||
666 | { | ||
919 | 667 | ||
920 | }else{ | 668 | } |
921 | //if(info->isReadable() ) | 669 | void OFileSelector::initializeName() |
922 | name = info->fileName(); | 670 | { |
671 | /** Name Layout Line | ||
672 | * This is the Layout line arranged in | ||
673 | * horizontal way each components | ||
674 | * are next to each other | ||
675 | * but we will only do this if | ||
676 | * we didn't initialize a while ago. | ||
677 | */ | ||
678 | if( m_boxName == 0 ){ | ||
679 | m_boxName = new QHBox( this ); // remove this this? or use a QHBox | ||
680 | m_fnLabel = new QLabel( m_boxName ); | ||
681 | m_fnLabel->setText( tr("Name:") ); | ||
682 | m_edit = new QLineEdit( m_boxName ); | ||
683 | //m_boxName->addWidget( m_fnLabel ); | ||
684 | m_boxName->setMargin( 5 ); | ||
685 | m_boxName->setSpacing( 8 ); | ||
686 | //m_boxName->setStretchFactor(m_edit, 100 ); // 100 is stretch factor | ||
687 | |||
688 | m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout | ||
689 | }// else we already initialized | ||
690 | // maybe show the components? | ||
691 | // | ||
692 | } | ||
693 | void OFileSelector::initializeYes() | ||
694 | { | ||
695 | /** The Save Cancel bar | ||
696 | * | ||
697 | */ | ||
698 | if( m_boxOk == 0 ){ | ||
699 | m_boxOk = new QHBox( this ); | ||
700 | m_ok = new QPushButton( tr("&Save"),m_boxOk , "save" ); | ||
701 | m_cancel = new QPushButton( tr("C&ancel"), m_boxOk, "cancel" ); | ||
702 | |||
703 | //m_boxOk->addWidget( m_ok ); | ||
704 | //m_boxOk->addWidget( m_cancel ); | ||
705 | m_boxOk->setMargin( 5 ); | ||
706 | m_boxOk->setSpacing( 10 ); | ||
707 | m_lay->addWidget( m_boxOk, 0 ); | ||
708 | |||
709 | connect( m_ok, SIGNAL( clicked() ), | ||
710 | this, SLOT(slotOk() ) ); | ||
711 | connect( m_cancel, SIGNAL( clicked() ), | ||
712 | this, SLOT( slotCancel() ) ); | ||
713 | } | ||
714 | } | ||
715 | void OFileSelector::initializeChooser() | ||
716 | { | ||
717 | if( m_boxView == 0 ){ | ||
718 | m_boxView = new QHBox( this ); | ||
719 | m_viewCheck = new QComboBox( m_boxView, "view check"); | ||
720 | m_mimeCheck = new QComboBox( m_boxView, "mime check"); | ||
721 | m_boxView->setSpacing( 8 ); | ||
722 | m_lay->addWidget(m_boxView, 0 ); | ||
723 | |||
724 | m_viewCheck->insertItem( tr("Documents") ); | ||
725 | m_viewCheck->insertItem( tr("Files") ); | ||
726 | m_viewCheck->insertItem( tr("All Files") ); | ||
727 | if(!m_autoMime ) | ||
728 | m_mimeCheck->insertItem(m_mimetypes.join(",") ); | ||
729 | else{ | ||
730 | updateMimes(); | ||
731 | m_mimeCheck->insertStringList( m_mimetypes ); | ||
923 | } | 732 | } |
924 | 733 | connect( m_viewCheck, SIGNAL( activated(const QString & ) ), | |
925 | new OFileSelectorItem(m_View, pix, | 734 | this, SLOT( slotViewCheck(const QString & ) ) ); |
926 | name, info->lastModified().toString(), | 735 | connect( m_mimeCheck, SIGNAL( activated(const QString & ) ), |
927 | QString::number(info->size() ),info->dirPath(true), locked, true ); | 736 | this, SLOT( slotMimeCheck( const QString & ) ) ); |
737 | } | ||
738 | } | ||
739 | void OFileSelector::initializeListView() | ||
740 | { | ||
741 | if( m_pseudo == 0 ){ | ||
742 | m_pseudo = new QWidget( m_stack, "Pseudo Widget"); | ||
743 | m_pseudoLayout = new QVBoxLayout( m_pseudo ); | ||
744 | // toolbar | ||
745 | m_boxToolbar = new QHBox( m_pseudo ); | ||
746 | m_boxToolbar->setSpacing(0 ); // next to each other please | ||
747 | |||
748 | // toolbar members | ||
749 | { | ||
750 | // location QComboBox | ||
751 | m_location = new QComboBox( m_boxToolbar ); | ||
752 | m_location->setEditable( TRUE ); | ||
753 | m_location->setDuplicatesEnabled( FALSE ); | ||
754 | connect( m_location, SIGNAL(activated(const QString &) ), | ||
755 | this, SLOT( slotLocationActivated(const QString &) ) ); | ||
756 | connect( m_location->lineEdit(), SIGNAL(returnPressed() ), | ||
757 | this, SLOT(locationComboChanged() ) ); | ||
758 | // UP Button | ||
759 | m_up = new QPushButton(Resource::loadIconSet("up"),"", | ||
760 | m_boxToolbar,"cdUpButton"); | ||
761 | m_up->setFixedSize( QSize( 20, 20 ) ); | ||
762 | connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); | ||
763 | m_up->setFlat(TRUE); | ||
764 | |||
765 | // Home Button | ||
766 | m_homeButton = new QPushButton(Resource::loadIconSet("home") , | ||
767 | "", m_boxToolbar); | ||
768 | m_homeButton->setFixedSize( QSize( 20, 20 ) ); | ||
769 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); | ||
770 | m_homeButton->setFlat(TRUE); | ||
771 | // Documents Button | ||
772 | m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", | ||
773 | m_boxToolbar,"docsButton"); | ||
774 | m_docButton->setFixedSize( QSize( 20, 20 ) ); | ||
775 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); | ||
776 | m_docButton->setFlat(TRUE); | ||
777 | |||
778 | // Close button | ||
779 | m_close = new QPushButton( Resource::loadIconSet( "close"), "", | ||
780 | m_boxToolbar ); | ||
781 | connect( m_close, SIGNAL(clicked() ), this, SIGNAL(closeMe() ) ); | ||
782 | m_close->setFixedSize( 20, 20 ); | ||
783 | |||
784 | m_boxToolbar->setFixedHeight( 20 ); | ||
785 | m_pseudoLayout->addWidget(m_boxToolbar ); | ||
786 | |||
787 | // let;s fill the Location ComboBox | ||
788 | StorageInfo storage; | ||
789 | const QList<FileSystem> &fs = storage.fileSystems(); | ||
790 | QListIterator<FileSystem> it ( fs ); | ||
791 | for( ; it.current(); ++it ){ | ||
792 | const QString disk = (*it)->name(); | ||
793 | const QString path = (*it)->path(); | ||
794 | m_location->insertItem(path+ "<-"+disk ); | ||
795 | } | ||
796 | int count = m_location->count(); | ||
797 | m_location->insertItem( m_currentDir ); | ||
798 | m_location->setCurrentItem( count ); | ||
799 | // due to the New and Close button we can not simply hide m_boxToolBar to not show it | ||
800 | if( !m_shTool ){ | ||
801 | m_location->hide( ); | ||
802 | m_up->hide( ); | ||
803 | m_homeButton->hide( ); | ||
804 | m_docButton->hide( ); | ||
805 | } | ||
806 | if(!m_shClose ) | ||
807 | m_close->hide(); | ||
808 | if(!m_shNew) | ||
809 | m_close->hide(); | ||
810 | |||
811 | } // off toolbar | ||
812 | // the Main ListView | ||
813 | // make a QWidgetStack first so Views can share the Toolbar | ||
814 | m_View = new QListView( m_pseudo, "Extended view"); | ||
815 | QPEApplication::setStylusOperation( m_View->viewport(), | ||
816 | QPEApplication::RightOnHold); | ||
817 | m_View->addColumn(" " ); | ||
818 | m_View->addColumn(tr("Name"), 135 ); | ||
819 | m_View->addColumn(tr("Size"), -1 ); | ||
820 | m_View->addColumn(tr("Date"), 60 ); | ||
821 | m_View->addColumn(tr("Mime Type"), -1 ); | ||
822 | QHeader *header = m_View->header(); | ||
823 | header->hide(); | ||
824 | m_View->setSorting( 1 ); | ||
825 | m_View->setAllColumnsShowFocus( TRUE ); | ||
826 | |||
827 | connect(m_View, SIGNAL(selectionChanged() ), | ||
828 | this, SLOT(slotSelectionChanged() ) ); | ||
829 | |||
830 | connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), | ||
831 | this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); | ||
832 | |||
833 | connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), | ||
834 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); | ||
835 | |||
836 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), | ||
837 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); | ||
838 | |||
839 | m_pseudoLayout->addWidget( m_View, 288 ); | ||
840 | m_stack->addWidget( m_pseudo, EXTENDED ); | ||
841 | } | ||
842 | } | ||
843 | void OFileSelector::initializePerm() | ||
844 | { | ||
845 | if( m_checkPerm == 0 ){ | ||
846 | m_checkPerm = new QCheckBox(tr("Ser Permission"), this, "perm"); | ||
847 | m_checkPerm->setChecked( false ); | ||
848 | m_lay->addWidget( m_checkPerm ); | ||
928 | 849 | ||
929 | } | 850 | } |
930 | } | 851 | } |
852 | void OFileSelector::initPics() | ||
853 | { | ||
854 | m_pixmaps = new QMap<QString,QPixmap>; | ||
855 | QPixmap pm = Resource::loadPixmap( "folder" ); | ||
856 | QPixmap lnk = Resource::loadPixmap( "opie/symlink" ); | ||
857 | QPainter painter( &pm ); | ||
858 | painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); | ||
859 | pm.setMask( pm.createHeuristicMask( FALSE ) ); | ||
860 | m_pixmaps->insert("dirsymlink", pm ); | ||
931 | 861 | ||
932 | void OFileSelector::setShowDirs(bool dir ) | 862 | QPixmap pm2 = Resource::loadPixmap( "lockedfolder" ); |
863 | QPainter pen(&pm2 ); | ||
864 | pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk ); | ||
865 | pm2.setMask( pm2.createHeuristicMask( FALSE ) ); | ||
866 | m_pixmaps->insert("symlinkedlocked", pm2 ); | ||
867 | } | ||
868 | // if a mime complies with the m_mimeCheck->currentItem | ||
869 | bool OFileSelector::compliesMime( const QString &path, const QString &mime ) | ||
933 | { | 870 | { |
934 | m_dir = dir; | 871 | if( mime == "All" ) |
935 | reparse(); | 872 | return true; |
873 | MimeType type( path ); | ||
874 | if( type.id() == mime ) | ||
875 | return true; | ||
876 | return false; | ||
936 | } | 877 | } |
937 | 878 | ||
938 | void OFileSelector::slotFileSelected(const QString &string ) | 879 | void OFileSelector::slotFileSelected( const QString &string ) |
939 | { | 880 | { |
940 | if(m_shLne ) | 881 | if( m_shLne ) |
941 | m_edit->setText( string ); | 882 | m_edit->setText( string ); |
942 | |||
943 | emit fileSelected( string ); | 883 | emit fileSelected( string ); |
944 | // do AppLnk stuff | 884 | } |
945 | } | ||
946 | |||
947 | void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) | 885 | void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) |
948 | { | 886 | { |
949 | slotFileSelected(lnk.name() ); | 887 | slotFileSelected( lnk.name() ); |
950 | emit fileSelected( lnk ); | 888 | // emit fileSelected( lnk ); |
951 | } | 889 | } |
952 | 890 | void OFileSelector::slotSelectionChanged() | |
953 | void OFileSelector::slotSelectionChanged() // get the current items | ||
954 | // fixme | ||
955 | { | 891 | { |
956 | qWarning("selection changed" ); | ||
957 | } | ||
958 | 892 | ||
959 | void OFileSelector::slotCurrentChanged(QListViewItem *item ) | 893 | } |
894 | void OFileSelector::slotCurrentChanged(QListViewItem* item ) | ||
960 | { | 895 | { |
961 | // qWarning("current changed" ); | ||
962 | if( item == 0 ) | 896 | if( item == 0 ) |
963 | return; | 897 | return; |
964 | 898 | if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { | |
965 | if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ | 899 | OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;) |
966 | OFileSelectorItem *sel = (OFileSelectorItem*)item; | ||
967 | if(!sel->isDir() ){ | 900 | if(!sel->isDir() ){ |
968 | // qWarning("is not dir" ); | 901 | if( m_shLne ) |
969 | if(m_shLne ){ | 902 | m_edit->setText( sel->text(1) ); |
970 | m_edit->setText(sel->text(1) ); | ||
971 | // qWarning("setTexy" ); | ||
972 | } | ||
973 | } | 903 | } |
974 | }else { | ||
975 | qWarning("mode not extended" ); | ||
976 | } | 904 | } |
977 | } | 905 | } |
978 | 906 | void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int) | |
979 | // either select or change dir | ||
980 | void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &/*point*/, int ) | ||
981 | { | 907 | { |
982 | if( item == 0 ) | 908 | if ( item == 0 ) |
983 | return; | 909 | return; |
984 | 910 | ||
985 | if( button != Qt::LeftButton ) | 911 | if( button != Qt::LeftButton ) |
986 | return; | 912 | return; |
987 | 913 | ||
988 | // qWarning("clicked" ); | 914 | switch( m_selector ){ |
989 | if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ | 915 | default: |
990 | // qWarning("inside" ); | 916 | break; |
917 | case EXTENDED: // fall through | ||
918 | case EXTENDED_ALL:{ | ||
991 | OFileSelectorItem *sel = (OFileSelectorItem*)item; | 919 | OFileSelectorItem *sel = (OFileSelectorItem*)item; |
992 | if(!sel->isLocked() ){ // not locked either changedir or open | 920 | if(!sel->isLocked() ){ |
993 | QStringList str = QStringList::split("->", sel->text(1) ); | 921 | QStringList str = QStringList::split("->", sel->text(1) ); |
994 | if(sel->isDir() ){ | 922 | if( sel->isDir() ){ |
995 | cd( sel->directory() + "/" + str[0] ); | 923 | cd( sel->directory() + "/" + str[0].stripWhiteSpace() ); |
996 | } else { | 924 | // if MODE Dir m_shLne set the Text |
997 | // qWarning("file" ); | 925 | }else{ |
998 | if(m_shLne ) | 926 | if( m_shLne ) |
999 | m_edit->setText(str[0] ); | 927 | m_edit->setText( str[0].stripWhiteSpace() ); |
1000 | emit fileSelected(str[0] ); | 928 | emit fileSelected( sel->directory() + "/" + str[0].stripWhiteSpace() ); |
1001 | // emit DocLnk need to do it | ||
1002 | } | 929 | } |
1003 | } else { | ||
1004 | qWarning( "locked" ); | ||
1005 | } | 930 | } |
1006 | }; | 931 | break; |
932 | } | ||
933 | } | ||
1007 | } | 934 | } |
1008 | |||
1009 | void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) | 935 | void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) |
1010 | { | 936 | { |
1011 | if (item == 0 ) | 937 | if( item == 0 ) |
1012 | return; | 938 | return; |
1013 | 939 | ||
1014 | if( button != Qt::RightButton ) | 940 | if( button != Qt::RightButton ) |
1015 | return; | ||
1016 | // qWarning("right button" ); | ||
1017 | slotContextMenu(item); | ||
1018 | } | ||
1019 | |||
1020 | void OFileSelector::slotContextMenu(QListViewItem *item) | ||
1021 | { | ||
1022 | // qWarning("context menu" ); | ||
1023 | if( item ==0 || !m_showPopup ) | ||
1024 | return; | 941 | return; |
1025 | 942 | slotContextMenu( item ); | |
1026 | if( m_custom !=0){ | ||
1027 | m_custom->exec(); | ||
1028 | }else{ | ||
1029 | QPopupMenu menu; | ||
1030 | QAction up; | ||
1031 | up.setText("cd up"); | ||
1032 | up.addTo( &menu ); | ||
1033 | connect(&up, SIGNAL(activated() ), | ||
1034 | this, SLOT(cdUP() ) ); | ||
1035 | |||
1036 | QAction act; | ||
1037 | OFileSelectorItem *sel = (OFileSelectorItem*)item; | ||
1038 | if(sel->isDir() ){ | ||
1039 | act.setText( tr("Change Directory") ); | ||
1040 | act.addTo(&menu ); | ||
1041 | connect(&act, SIGNAL(activated() ), | ||
1042 | this, SLOT(slotChangedDir() ) ); | ||
1043 | }else{ | ||
1044 | act.setText( tr("Open file" ) ); | ||
1045 | act.addTo( &menu ); | ||
1046 | connect(&act, SIGNAL(activated() ), | ||
1047 | this, SLOT(slotOpen() ) ); | ||
1048 | } | ||
1049 | QAction rescan; | ||
1050 | rescan.setText( tr("Rescan") ); | ||
1051 | rescan.addTo( &menu ); | ||
1052 | connect(&rescan, SIGNAL(activated() ), | ||
1053 | this, SLOT(slotRescan() ) ); | ||
1054 | |||
1055 | QAction rename; | ||
1056 | rename.setText( tr("Rename") ); | ||
1057 | rename.addTo( &menu ); | ||
1058 | connect(&rename, SIGNAL(activated() ), | ||
1059 | this, SLOT(slotRename() ) ); | ||
1060 | |||
1061 | menu.insertSeparator(); | ||
1062 | QAction delItem; | ||
1063 | delItem.setText( tr("Delete") ); | ||
1064 | delItem.addTo(&menu ); | ||
1065 | connect(&delItem, SIGNAL(activated() ), | ||
1066 | this, SLOT(slotDelete() ) ); | ||
1067 | |||
1068 | menu.exec(QCursor::pos() ); | ||
1069 | } | ||
1070 | } | 943 | } |
1071 | 944 | void OFileSelector::slotContextMenu( QListViewItem *item) | |
1072 | bool OFileSelector::cd(const QString &str ) | ||
1073 | { | 945 | { |
1074 | // qWarning(" dir %s", str.latin1() ); | ||
1075 | QDir dir( str); | ||
1076 | if(dir.exists() ){ | ||
1077 | m_currentDir = dir.absPath(); | ||
1078 | reparse(); | ||
1079 | if(m_shTool ){ | ||
1080 | int count = m_location->count(); | ||
1081 | insertLocationPath( str ,count ); | ||
1082 | m_location->setCurrentItem( count ); | ||
1083 | } | ||
1084 | return true; | ||
1085 | } | ||
1086 | return false; | ||
1087 | } | ||
1088 | 946 | ||
1089 | void OFileSelector::insertLocationPath(const QString ¤tPath, int count) { | ||
1090 | QStringList pathList; | ||
1091 | bool underDog = FALSE; | ||
1092 | for(int i=0;i<count;i++) { | ||
1093 | pathList << m_location->text(i); | ||
1094 | if( m_location->text(i) == currentPath) | ||
1095 | underDog = TRUE; | ||
1096 | } | ||
1097 | if( !underDog) { | ||
1098 | m_location->clear(); | ||
1099 | if( currentPath.left(2)=="//") | ||
1100 | pathList.append( currentPath.right(currentPath.length()-1) ); | ||
1101 | else | ||
1102 | pathList.append( currentPath ); | ||
1103 | m_location->insertStringList( pathList,-1); | ||
1104 | } | ||
1105 | } | 947 | } |
1106 | |||
1107 | void OFileSelector::slotChangedDir() | 948 | void OFileSelector::slotChangedDir() |
1108 | { | 949 | { |
1109 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); | 950 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); |
1110 | if(sel->isDir() ){ | 951 | if(sel->isDir() ){ |
1111 | QStringList str = QStringList::split("->", sel->text(1) ); | 952 | QStringList str = QStringList::split("->", sel->text(1) ); |
1112 | cd( sel->directory() + "/" + str[0] ); | 953 | cd( sel->directory() + "/" + str[0].stripWhiteSpace() ); |
1113 | |||
1114 | } | 954 | } |
1115 | } | 955 | } |
1116 | |||
1117 | void OFileSelector::slotOpen() | 956 | void OFileSelector::slotOpen() |
1118 | { | 957 | { |
1119 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); | 958 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); |
1120 | if(!sel->isDir() ){ | 959 | if(!sel->isDir() ){ |
1121 | QStringList str = QStringList::split("->", sel->text(1) ); | 960 | QStringList str = QStringList::split("->", sel->text(1) ); |
1122 | slotFileSelected( str[0] ); | 961 | slotFileSelected( sel->directory() +"/" +str[0].stripWhiteSpace() ); |
1123 | } | 962 | } |
1124 | } | 963 | } |
1125 | |||
1126 | void OFileSelector::slotRescan() | 964 | void OFileSelector::slotRescan() |
1127 | { | 965 | { |
1128 | reparse(); | ||
1129 | } | ||
1130 | 966 | ||
967 | } | ||
1131 | void OFileSelector::slotRename() | 968 | void OFileSelector::slotRename() |
1132 | { | 969 | { |
1133 | // rename inline | 970 | reparse(); |
1134 | } | 971 | } |
1135 | |||
1136 | void OFileSelector::slotDelete() | 972 | void OFileSelector::slotDelete() |
1137 | { | 973 | { |
1138 | // qWarning("delete slot" ); | ||
1139 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); | 974 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); |
1140 | QStringList list = QStringList::split("->", sel->text(1) ); | 975 | QStringList list = QStringList::split("->", sel->text(1) ); |
1141 | if( sel->isDir() ){ | 976 | if( sel->isDir() ){ |
1142 | QString str = QString::fromLatin1("rm -rf ") + list[0]; //better safe than sorry | 977 | QString str = QString::fromLatin1("rm -rf ") + sel->directory() +"/" + list[0]; //better safe than sorry |
1143 | switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+list[0], | 978 | switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+list[0], |
1144 | tr("Yes"),tr("No"),0,1,1) ) { | 979 | tr("Yes"),tr("No"),0,1,1) ) { |
1145 | case 0: | 980 | case 0: |
1146 | ::system(str.utf8().data() ); | 981 | ::system(str.utf8().data() ); |
1147 | break; | 982 | break; |
1148 | } | 983 | } |
1149 | } else { | 984 | } else { |
1150 | QFile::remove( list[0] ); | 985 | QFile::remove( list[0] ); |
1151 | } | 986 | } |
1152 | m_View->takeItem( sel ); | 987 | m_View->takeItem( sel ); |
1153 | delete sel; | 988 | delete sel; |
1154 | } | 989 | } |
1155 | |||
1156 | void OFileSelector::cdUP() | 990 | void OFileSelector::cdUP() |
1157 | { | 991 | { |
1158 | QDir dir( m_currentDir ); | 992 | QDir dir( m_currentDir ); |
1159 | dir.cdUp(); | 993 | dir.cdUp(); |
1160 | if(dir.exists() ){ | 994 | if(dir.exists() ){ |
1161 | m_currentDir = dir.absPath(); | 995 | m_currentDir = dir.absPath(); |
1162 | reparse(); | 996 | reparse(); |
1163 | int count = m_location->count(); | 997 | int count = m_location->count(); |
1164 | insertLocationPath( m_currentDir, count); | 998 | slotInsertLocationPath( m_currentDir, count); |
1165 | m_location->setCurrentItem( indexByString( m_location, m_currentDir)); | 999 | m_location->setCurrentItem( indexByString( m_location, m_currentDir)); |
1166 | //this wont work in all instances | 1000 | //this wont work in all instances |
1167 | // FIXME | 1001 | // FIXME |
1168 | } | 1002 | } |
1169 | } | 1003 | } |
1170 | |||
1171 | void OFileSelector::slotHome() | 1004 | void OFileSelector::slotHome() |
1172 | { | 1005 | { |
1173 | cd(QDir::homeDirPath() ); | 1006 | cd(QDir::homeDirPath() ); |
1174 | } | 1007 | } |
1175 | |||
1176 | void OFileSelector::slotDoc() | 1008 | void OFileSelector::slotDoc() |
1177 | { | 1009 | { |
1178 | cd(QDir::homeDirPath() + "/Documents" ); | 1010 | cd(QPEApplication::documentDir() ); |
1179 | } | 1011 | } |
1180 | 1012 | void OFileSelector::slotNavigate( ) | |
1181 | void OFileSelector::slotNavigate() | ||
1182 | { | 1013 | { |
1183 | 1014 | ||
1184 | } | 1015 | } |
1016 | // fill the View with life | ||
1017 | void OFileSelector::reparse() | ||
1018 | { | ||
1019 | if( m_selector == NORMAL ) | ||
1020 | return; | ||
1021 | if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) | ||
1022 | m_View->clear(); | ||
1023 | else // custom view | ||
1024 | ; // currentView()->clear(); | ||
1025 | if( m_shChooser) | ||
1026 | qWarning("reparse %s", m_mimeCheck->currentText().latin1() ); | ||
1027 | |||
1028 | QString currentMimeType; | ||
1029 | // let's update the mimetype | ||
1030 | if( m_autoMime ){ | ||
1031 | m_mimetypes.clear(); | ||
1032 | // ok we can change mimetype so we need to be able to give a selection | ||
1033 | if( m_shChooser ) { | ||
1034 | currentMimeType = m_mimeCheck->currentText(); | ||
1035 | m_mimeCheck->clear(); | ||
1036 | |||
1037 | // let's find possible mimetypes | ||
1038 | QDir dir( m_currentDir ); | ||
1039 | dir.setFilter( QDir::Files | QDir::Readable ); | ||
1040 | dir.setSorting( QDir::Size ); | ||
1041 | const QFileInfoList *list = dir.entryInfoList(); | ||
1042 | QFileInfoListIterator it( *list ); | ||
1043 | QFileInfo *fi; | ||
1044 | while( (fi=it.current() ) ) { | ||
1045 | if( fi->extension() == QString::fromLatin1("desktop") ){ | ||
1046 | ++it; | ||
1047 | continue; | ||
1048 | } | ||
1049 | MimeType type( fi->absFilePath() ); | ||
1050 | if( !m_mimetypes.contains( type.id() ) ){ | ||
1051 | //qWarning("Type %s", type.id().latin1() ); | ||
1052 | m_mimetypes.append( type.id() ); | ||
1053 | } | ||
1185 | 1054 | ||
1186 | void OFileSelector::locationComboActivated(const QString & file ) { | 1055 | ++it; |
1187 | cd(file.left(file.find("<-",0,TRUE))); | 1056 | } |
1188 | reparse(); | 1057 | // add them to the chooser |
1189 | } | 1058 | m_mimeCheck->insertItem( tr("All") ); |
1059 | m_mimeCheck->insertStringList( m_mimetypes ); | ||
1060 | m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); | ||
1061 | currentMimeType = m_mimeCheck->currentText(); | ||
1062 | } | ||
1063 | }else { // no autoMime | ||
1064 | currentMimeType = m_mimetypes.join(";"); | ||
1065 | if( m_shChooser ){ | ||
1066 | m_mimeCheck->clear(); | ||
1067 | m_mimeCheck->insertItem(m_mimetypes.join(",") ); | ||
1068 | } | ||
1069 | } | ||
1070 | // now we got our mimetypes we can add the files | ||
1190 | 1071 | ||
1191 | void OFileSelector::locationComboChanged() { | 1072 | QDir dir( m_currentDir ); |
1192 | cd( m_location->lineEdit()->text()); | 1073 | |
1193 | reparse(); | 1074 | int sort; |
1075 | if ( m_case ) | ||
1076 | sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); | ||
1077 | else | ||
1078 | sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); | ||
1079 | dir.setSorting( sort ); | ||
1080 | |||
1081 | int filter; | ||
1082 | if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){ | ||
1083 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; | ||
1084 | }else | ||
1085 | filter = QDir::Files | QDir::Dirs | QDir::All; | ||
1086 | dir.setFilter( filter ); | ||
1087 | |||
1088 | // now go through all files | ||
1089 | const QFileInfoList *list = dir.entryInfoList(); | ||
1090 | QFileInfoListIterator it( *list ); | ||
1091 | QFileInfo *fi; | ||
1092 | while( (fi=it.current() ) ){ | ||
1093 | //qWarning("True and only" ); | ||
1094 | if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ | ||
1095 | //qWarning(".. or ." ); | ||
1096 | ++it; | ||
1097 | continue; | ||
1098 | } | ||
1099 | if( fi->isSymLink() ){ | ||
1100 | QString file = fi->dirPath( true ) + "/" + fi->readLink(); | ||
1101 | for( int i = 0; i<=4; i++) { // 5 tries to prevent dos | ||
1102 | QFileInfo info( file ); | ||
1103 | if( !info.exists() ){ | ||
1104 | addSymlink( currentMimeType, fi, TRUE ); | ||
1105 | break; | ||
1106 | }else if( info.isDir() ){ | ||
1107 | addDir( currentMimeType, fi, TRUE ); | ||
1108 | break; | ||
1109 | }else if( info.isFile() ){ | ||
1110 | addFile( currentMimeType, fi, TRUE ); | ||
1111 | break; | ||
1112 | }else if( info.isSymLink() ){ | ||
1113 | file = info.dirPath(true ) + "/" + info.readLink() ; | ||
1114 | break; | ||
1115 | }else if( i == 4){ | ||
1116 | addSymlink( currentMimeType, fi ); | ||
1117 | } | ||
1118 | } // off for loop | ||
1119 | }else if( fi->isDir() ){ | ||
1120 | addDir( currentMimeType, fi ); | ||
1121 | }else if( fi->isFile() ){ | ||
1122 | addFile( currentMimeType, fi ); | ||
1123 | } | ||
1124 | //qWarning( "%s", fi->fileName().latin1() ); | ||
1125 | ++it; | ||
1126 | } // of while loop | ||
1127 | m_View->sort(); | ||
1128 | if( m_shTool ){ | ||
1129 | m_location->insertItem( m_currentDir ); | ||
1130 | |||
1131 | } | ||
1132 | // reenable painting and updates | ||
1194 | } | 1133 | } |
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 5c38ac4..47697b9 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h | |||
@@ -1,259 +1,264 @@ | |||
1 | /* | 1 | /* |
2 | This is based on code and idea of | 2 | This is based on code and idea of |
3 | L. J. Potter ljp@llornkcor.com | 3 | L. J. Potter ljp@llornkcor.com |
4 | Thanks a lot | 4 | Thanks a lot |
5 | 5 | ||
6 | 6 | ||
7 | =. This file is part of the OPIE Project | 7 | =. This file is part of the OPIE Project |
8 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> | 8 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> |
9 | .>+-= | 9 | .>+-= |
10 | _;:, .> :=|. This library is free software; you can | 10 | _;:, .> :=|. This library is free software; you can |
11 | .> <`_, > . <= redistribute it and/or modify it under | 11 | .> <`_, > . <= redistribute it and/or modify it under |
12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
13 | .="- .-=="i, .._ License as published by the Free Software | 13 | .="- .-=="i, .._ License as published by the Free Software |
14 | - . .-<_> .<> Foundation; either version 2 of the License, | 14 | - . .-<_> .<> Foundation; either version 2 of the License, |
15 | ._= =} : or (at your option) any later version. | 15 | ._= =} : or (at your option) any later version. |
16 | .%`+i> _;_. | 16 | .%`+i> _;_. |
17 | .i_,=:_. -<s. This library is distributed in the hope that | 17 | .i_,=:_. -<s. This library is distributed in the hope that |
18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
19 | : .. .:, . . . without even the implied warranty of | 19 | : .. .:, . . . without even the implied warranty of |
20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
22 | ..}^=.= = ; Library General Public License for more | 22 | ..}^=.= = ; Library General Public License for more |
23 | ++= -. .` .: details. | 23 | ++= -. .` .: details. |
24 | : = ...= . :.=- | 24 | : = ...= . :.=- |
25 | -. .:....=;==+<; You should have received a copy of the GNU | 25 | -. .:....=;==+<; You should have received a copy of the GNU |
26 | -_. . . )=. = Library General Public License along with | 26 | -_. . . )=. = Library General Public License along with |
27 | -- :-=` this library; see the file COPYING.LIB. | 27 | -- :-=` this library; see the file COPYING.LIB. |
28 | If not, write to the Free Software Foundation, | 28 | If not, write to the Free Software Foundation, |
29 | Inc., 59 Temple Place - Suite 330, | 29 | Inc., 59 Temple Place - Suite 330, |
30 | Boston, MA 02111-1307, USA. | 30 | Boston, MA 02111-1307, USA. |
31 | 31 | ||
32 | */ | 32 | */ |
33 | 33 | ||
34 | #ifndef opiefileselector_h | 34 | #ifndef opiefileselector_h |
35 | #define opiefileselector_h | 35 | #define opiefileselector_h |
36 | 36 | ||
37 | #include <qwidget.h> | 37 | #include <qwidget.h> |
38 | #include <qstring.h> | 38 | #include <qstring.h> |
39 | #include <qpixmap.h> | 39 | #include <qpixmap.h> |
40 | #include <qstringlist.h> | 40 | #include <qstringlist.h> |
41 | #include <qmap.h> | 41 | #include <qmap.h> |
42 | #include <qvaluelist.h> | 42 | #include <qvaluelist.h> |
43 | 43 | ||
44 | #include <qpe/applnk.h> | 44 | #include <qpe/applnk.h> |
45 | #include <qlistview.h> | 45 | #include <qlistview.h> |
46 | /** This is OPIEs FileDialog Widget. You can use it | 46 | /** This is OPIEs FileDialog Widget. You can use it |
47 | * as a dropin replacement of the fileselector and | 47 | * as a dropin replacement of the fileselector and |
48 | * or use any of the new features. | 48 | * or use any of the new features. |
49 | * This is also a complete FileSave and FileLoad widget | 49 | * This is also a complete FileSave and FileLoad widget |
50 | * If you look for a Dialog check OFileDialog | 50 | * If you look for a Dialog check OFileDialog |
51 | * | 51 | * |
52 | */ | 52 | */ |
53 | class DocLnk; | 53 | class DocLnk; |
54 | class QCheckBox; | 54 | class QCheckBox; |
55 | class QComboBox; | 55 | class QComboBox; |
56 | class QPushButton; | 56 | class QPushButton; |
57 | class FileSelector; | 57 | class FileSelector; |
58 | class QGridLayout; | 58 | class QGridLayout; |
59 | class QLineEdit; | 59 | class QLineEdit; |
60 | class QLabel; | 60 | class QLabel; |
61 | class QWidgetStack; | 61 | class QWidgetStack; |
62 | class QHBoxLayout; | 62 | class QHBoxLayout; |
63 | class QVBoxLayout; | 63 | class QVBoxLayout; |
64 | class QPopupMenu; | 64 | class QPopupMenu; |
65 | class QFileInfo; | 65 | class QFileInfo; |
66 | class QHBox; | ||
66 | // | 67 | // |
67 | 68 | ||
68 | 69 | ||
69 | class OFileSelector : public QWidget { | 70 | class OFileSelector : public QWidget { |
70 | Q_OBJECT | 71 | Q_OBJECT |
71 | public: | 72 | public: |
72 | enum Mode {OPEN=1, SAVE=2, FILESELECTOR=4, DIR=8 }; | 73 | enum Mode {OPEN=1, SAVE=2, FILESELECTOR=4, DIR=8 }; |
73 | enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 }; | 74 | enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 }; |
74 | enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; | 75 | enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; |
75 | 76 | ||
76 | OFileSelector(QWidget *wid, int mode, int selector, | 77 | OFileSelector(QWidget *wid, int mode, int selector, |
77 | const QString &dirName, | 78 | const QString &dirName, |
78 | const QString &fileName = QString::null, | 79 | const QString &fileName = QString::null, |
79 | const QStringList &mimetypes = QStringList() ); | 80 | const QStringList &mimetypes = QStringList() ); |
80 | 81 | ||
81 | 82 | ||
82 | OFileSelector(const QString &mimeFilter, QWidget *parent, | 83 | OFileSelector(const QString &mimeFilter, QWidget *parent, |
83 | const char *name, bool newVisible = TRUE, | 84 | const char *name, bool newVisible = TRUE, |
84 | bool closeVisible = FALSE ) { }; | 85 | bool closeVisible = FALSE ); |
85 | 86 | ||
86 | ~OFileSelector() {}; | 87 | ~OFileSelector(); |
87 | 88 | ||
88 | // currently only for the FILESELECTOR Mode | 89 | // currently only for the FILESELECTOR Mode |
89 | void setNewVisible( bool /*b*/ ) { }; | 90 | void setNewVisible( bool /*b*/ ); |
90 | void setCloseVisible(bool /*b*/ ) { }; | 91 | void setCloseVisible(bool /*b*/ ); |
91 | 92 | ||
92 | // end file selector mode | 93 | // end file selector mode |
93 | // deprecated | 94 | // deprecated |
94 | void reread() { reparse(); }; | 95 | void reread(); |
95 | // make sure not to leak please | 96 | // make sure not to leak please |
96 | const DocLnk *selected(); | 97 | const DocLnk *selected(); |
97 | // end deprecated | 98 | // end deprecated |
98 | 99 | ||
99 | bool isToolbarVisible() const { return m_shTool; }; | 100 | bool isToolbarVisible() const { return m_shTool; }; |
100 | bool isPermissionBarVisible() const { return m_shPerm; }; | 101 | bool isPermissionBarVisible() const { return m_shPerm; }; |
101 | bool isLineEditVisible()const { return m_shLne; }; | 102 | bool isLineEditVisible()const { return m_shLne; }; |
102 | bool isChooserVisible( )const { return m_shChooser; }; | 103 | bool isChooserVisible( )const { return m_shChooser; }; |
103 | bool isYesCancelVisible()const { return m_shYesNo; }; | 104 | bool isYesCancelVisible()const { return m_shYesNo; }; |
104 | void setYesCancelVisible( bool show ); | 105 | void setYesCancelVisible( bool show ); |
105 | void setToolbarVisible( bool show ); | 106 | void setToolbarVisible( bool show ); |
106 | void setPermissionBarVisible( bool show ); | 107 | void setPermissionBarVisible( bool show ); |
107 | void setLineEditVisible(bool show) ; | 108 | void setLineEditVisible(bool show) ; |
108 | void setChooserVisible( bool chooser ); | 109 | void setChooserVisible( bool chooser ); |
109 | 110 | ||
110 | QCheckBox* permissionCheckbox(); | 111 | QCheckBox* permissionCheckbox(); |
111 | bool setPermission() const; | 112 | bool setPermission() const; |
112 | void setPermissionChecked( bool check ); | 113 | void setPermissionChecked( bool check ); |
113 | 114 | ||
114 | void setMode( int ); | 115 | void setMode( int ); |
115 | 116 | ||
116 | bool showDirs()const { return m_dir; } | 117 | bool showDirs()const { return m_dir; } |
117 | void setShowDirs(bool ); | 118 | void setShowDirs(bool ); |
118 | 119 | ||
119 | const QListView* listView() { return m_View; }; | 120 | const QListView* listView() { return m_View; }; |
120 | 121 | ||
121 | bool isCaseSensetive()const { return m_case; } | 122 | bool isCaseSensetive()const { return m_case; } |
122 | void setCaseSensetive(bool caSe ); | 123 | void setCaseSensetive(bool caSe ); |
123 | 124 | ||
124 | bool showFiles()const { return m_files; }; | 125 | bool showFiles()const { return m_files; }; |
125 | void setShowFiles(bool ); | 126 | void setShowFiles(bool ); |
126 | bool cd(const QString &path ); | 127 | bool cd(const QString &path ); |
127 | 128 | ||
128 | 129 | ||
129 | int mode()const { return m_mode; }; | 130 | int mode()const { return m_mode; }; |
130 | int selector()const { return m_selector; }; | 131 | int selector()const { return m_selector; }; |
131 | void setSelector( int ); | 132 | void setSelector( int ); |
132 | 133 | ||
133 | bool showPopup()const { return m_showPopup; }; | 134 | bool showPopup()const { return m_showPopup; }; |
134 | void setShowPopup( bool pop ) { m_showPopup = pop; }; | 135 | void setShowPopup( bool pop ) { m_showPopup = pop; }; |
135 | void setPopupMenu( QPopupMenu * ); | 136 | void setPopupMenu( QPopupMenu * ); |
136 | 137 | ||
137 | void updateLay(); | 138 | // void updateLay(); |
138 | 139 | ||
139 | void reparse(); // re reads the dir | 140 | void reparse(); // re reads the dir |
140 | 141 | ||
141 | QString selectedName( )const; | 142 | QString selectedName( )const; |
142 | QStringList selectedNames()const; | 143 | QStringList selectedNames()const; |
143 | 144 | ||
144 | QString selectedPath() const; | 145 | QString selectedPath() const; |
145 | QStringList selectedPaths() const; | 146 | QStringList selectedPaths() const; |
146 | 147 | ||
147 | QString directory()const; | 148 | QString directory()const; |
148 | int fileCount(); | 149 | int fileCount(); |
149 | 150 | ||
150 | /* the user needs to delete it */ | 151 | /* the user needs to delete it */ |
151 | DocLnk selectedDocument()const; | 152 | DocLnk selectedDocument()const; |
152 | /* the user needs to delete it */ | 153 | /* the user needs to delete it */ |
153 | QValueList<DocLnk> selectedDocuments()const; | 154 | QValueList<DocLnk> selectedDocuments()const; |
154 | 155 | ||
155 | signals: | 156 | signals: |
156 | void fileSelected( const DocLnk & ); | 157 | void fileSelected( const DocLnk & ); |
157 | void fileSelected( const QString & ); | 158 | void fileSelected( const QString & ); |
158 | void dirSelected(const QString &dir ); | 159 | void dirSelected(const QString &dir ); |
159 | void closeMe(); | 160 | void closeMe(); |
160 | void ok(); | 161 | void ok(); |
161 | void cancel(); | 162 | void cancel(); |
163 | void contextMenu(); | ||
162 | 164 | ||
163 | protected slots: | 165 | private slots: |
166 | void slotTest() { qWarning("slotTest" ); setLineEditVisible(false ); }; | ||
164 | void slotOk(); | 167 | void slotOk(); |
165 | void slotCancel(); | 168 | void slotCancel(); |
166 | void slotViewCheck(const QString & ); | 169 | void slotViewCheck(const QString & ); |
167 | void slotMimeCheck(const QString & ); | 170 | void slotMimeCheck(const QString & ); |
168 | void locationComboActivated(const QString & ); | 171 | void slotLocationActivated(const QString & ); |
169 | void insertLocationPath(const QString &, int); | 172 | void slotInsertLocationPath(const QString &, int); |
170 | void locationComboChanged(); | 173 | void locationComboChanged(); |
171 | protected: | 174 | |
175 | private: | ||
172 | void init(); | 176 | void init(); |
173 | void updateMimes(); | 177 | void updateMimes(); |
174 | 178 | ||
175 | protected: | 179 | protected: |
176 | 180 | ||
177 | private: | 181 | private: |
178 | int m_mode, m_selector; | 182 | int m_mode, m_selector; |
179 | QComboBox *m_location, *m_mimeCheck, *m_viewCheck; | 183 | QComboBox *m_location, *m_mimeCheck, *m_viewCheck; |
180 | QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; | 184 | QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; |
181 | QPushButton *m_reread, *m_up; | 185 | QPushButton *m_reread, *m_up, *m_new, *m_close; |
182 | QListView *m_View; | 186 | QListView *m_View; |
183 | QCheckBox *m_checkPerm; | 187 | QCheckBox *m_checkPerm; |
184 | QWidget *m_pseudo; | 188 | QWidget *m_pseudo; |
185 | QVBoxLayout *m_pseudoLayout; | 189 | QVBoxLayout *m_pseudoLayout; |
186 | 190 | ||
187 | QString m_currentDir; | 191 | QString m_currentDir; |
188 | QString m_name; | 192 | QString m_name; |
189 | QStringList m_mimetypes, requestedMimeTypesList; | 193 | QStringList m_mimetypes; |
190 | 194 | ||
191 | FileSelector *m_select; | 195 | FileSelector *m_select; |
192 | QWidgetStack *m_stack; | 196 | QWidgetStack *m_stack; |
193 | QVBoxLayout *m_lay; | 197 | QVBoxLayout *m_lay; |
194 | QGridLayout *m_Oselector; | 198 | QGridLayout *m_Oselector; |
195 | 199 | ||
196 | QHBoxLayout *m_boxToolbar; | 200 | QHBox *m_boxToolbar; |
197 | QHBoxLayout *m_boxOk; | 201 | QHBox *m_boxOk; // (no layout anymore) wait |
198 | QHBoxLayout *m_boxName; | 202 | QHBox *m_boxName; // (no Layout anymore) wait |
199 | QHBoxLayout *m_boxView; | 203 | QHBox *m_boxView; |
200 | 204 | ||
201 | QPopupMenu *m_custom; | 205 | QPopupMenu *m_custom; |
202 | 206 | ||
203 | QLineEdit *m_edit; | 207 | QLineEdit *m_edit; |
204 | QLabel *m_fnLabel; | 208 | QLabel *m_fnLabel; |
205 | 209 | ||
206 | bool m_shClose : 1; | 210 | bool m_shClose : 1; |
207 | bool m_shNew : 1; | 211 | bool m_shNew : 1; |
208 | bool m_shTool : 1; | 212 | bool m_shTool : 1; |
209 | bool m_shPerm : 1; | 213 | bool m_shPerm : 1; |
210 | bool m_shLne : 1; | 214 | bool m_shLne : 1; |
211 | bool m_shChooser : 1; | 215 | bool m_shChooser : 1; |
212 | bool m_shYesNo : 1; | 216 | bool m_shYesNo : 1; |
213 | bool m_boCheckPerm : 1; | 217 | bool m_boCheckPerm : 1; |
214 | bool m_autoMime : 1; | 218 | bool m_autoMime : 1; |
215 | bool m_case : 1; | 219 | bool m_case : 1; |
216 | bool m_dir : 1; | 220 | bool m_dir : 1; |
217 | bool m_files : 1; | 221 | bool m_files : 1; |
218 | bool m_showPopup : 1; | 222 | bool m_showPopup : 1; |
219 | 223 | ||
220 | // implementation todo | 224 | void initVars(); |
221 | virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); | 225 | virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); |
222 | virtual void addDir( const QString &mime, QFileInfo *info , bool symlink = FALSE ); | 226 | virtual void addDir( const QString &mime, QFileInfo *info , bool symlink = FALSE ); |
223 | virtual void addSymlink(const QString &, QFileInfo *, bool = FALSE ){}; | 227 | virtual void addSymlink(const QString &, QFileInfo *, bool = FALSE ){}; |
224 | void delItems(); | 228 | void delItems(); |
225 | void initializeName(); | 229 | void initializeName(); |
226 | void initializeYes(); | 230 | void initializeYes(); |
227 | void initializeChooser(); | 231 | void initializeChooser(); |
228 | void initializeListView(); | 232 | void initializeListView(); |
233 | void initializePerm(); | ||
229 | void initPics(); | 234 | void initPics(); |
230 | bool compliesMime(const QString &path, const QString &mime); | 235 | bool compliesMime(const QString &path, const QString &mime); |
231 | 236 | ||
232 | class OFileSelectorPrivate; | 237 | class OFileSelectorPrivate; |
233 | OFileSelectorPrivate *d; | 238 | OFileSelectorPrivate *d; |
234 | static QMap<QString,QPixmap> *m_pixmaps; | 239 | static QMap<QString,QPixmap> *m_pixmaps; |
235 | 240 | ||
236 | private slots: | 241 | private slots: |
237 | void slotFileSelected(const QString & ); // not really meant to be a slot | 242 | void slotFileSelected(const QString & ); // not really meant to be a slot |
238 | void slotFileBridgeSelected( const DocLnk & ); | 243 | void slotFileBridgeSelected( const DocLnk & ); |
239 | virtual void slotSelectionChanged(); | 244 | virtual void slotSelectionChanged(); |
240 | virtual void slotCurrentChanged(QListViewItem* ); | 245 | virtual void slotCurrentChanged(QListViewItem* ); |
241 | virtual void slotClicked( int, QListViewItem *item, const QPoint &, int); | 246 | virtual void slotClicked( int, QListViewItem *item, const QPoint &, int); |
242 | virtual void slotRightButton(int, QListViewItem *, const QPoint &, int ); | 247 | virtual void slotRightButton(int, QListViewItem *, const QPoint &, int ); |
243 | virtual void slotContextMenu( QListViewItem *item); | 248 | virtual void slotContextMenu( QListViewItem *item); |
244 | // listview above | 249 | // listview above |
245 | // popup below | 250 | // popup below |
246 | virtual void slotChangedDir(); | 251 | virtual void slotChangedDir(); |
247 | virtual void slotOpen(); | 252 | virtual void slotOpen(); |
248 | virtual void slotRescan(); | 253 | virtual void slotRescan(); |
249 | virtual void slotRename(); | 254 | virtual void slotRename(); |
250 | virtual void slotDelete(); | 255 | virtual void slotDelete(); |
251 | virtual void cdUP(); | 256 | virtual void cdUP(); |
252 | virtual void slotHome(); | 257 | virtual void slotHome(); |
253 | virtual void slotDoc(); | 258 | virtual void slotDoc(); |
254 | virtual void slotNavigate( ); | 259 | virtual void slotNavigate( ); |
255 | }; | 260 | }; |
256 | 261 | ||
257 | 262 | ||
258 | #endif | 263 | #endif |
259 | 264 | ||