-rw-r--r-- | libopie/ofileselector.cc | 1529 | ||||
-rw-r--r-- | libopie/ofileselector.h | 39 |
2 files changed, 756 insertions, 812 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 9cf3f36..d780da9 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc | |||
@@ -1,53 +1,25 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> | ||
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 | 1 | ||
27 | */ | ||
28 | 2 | ||
29 | #include <qnamespace.h> | 3 | #include <qcheckbox.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> |
@@ -58,14 +30,13 @@ | |||
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; |
@@ -125,609 +96,455 @@ namespace { | |||
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(); |
107 | m_mode = mode; | ||
133 | m_selector = selector; | 108 | m_selector = selector; |
134 | m_currentDir = dirName; | 109 | 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; | ||
143 | m_shTool = true; | ||
144 | m_shPerm = true; | ||
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; |
127 | m_shPerm = false; | ||
128 | m_shYesNo = false; | ||
129 | init(); | ||
200 | 130 | ||
201 | QPixmap pm2 = Resource::loadPixmap( "lockedfolder" ); | ||
202 | QPainter pen(&pm2 ); | ||
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 | 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 ); | ||
249 | m_lay->addWidget(m_stack ); | ||
250 | m_stack->raiseWidget(NORMAL ); | ||
251 | connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), | 149 | connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), |
252 | this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); | 150 | this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); |
253 | m_pseudoLayout = 0l; | 151 | //connect to close me and other signals as well |
254 | 152 | m_stack->addWidget( m_select, NORMAL ); | |
255 | } else { | 153 | } else { |
256 | initializeListView(); | 154 | m_new->show(); |
257 | } | 155 | } |
258 | if(m_shLne ){ | ||
259 | initializeName(); | ||
260 | } | 156 | } |
261 | if(m_shPerm ){ | 157 | void OFileSelector::setCloseVisible( bool visible ) |
262 | m_checkPerm = new QCheckBox(tr("Set Permission"), this, "Permission" ); | 158 | { |
263 | m_checkPerm->setChecked( false ); | 159 | m_shClose = visible; |
264 | m_lay->addWidget(m_checkPerm ); | 160 | if( m_selector == NORMAL ){ |
161 | setNewVisible( m_shNew ); // yeah baby | ||
162 | }else{ | ||
163 | m_close->show(); | ||
164 | } | ||
165 | } | ||
166 | void OFileSelector::reread() | ||
167 | { | ||
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 | //; | ||
174 | } | ||
265 | } | 175 | } |
266 | if( m_shChooser ) | ||
267 | initializeChooser(); | ||
268 | if(m_shYesNo ) | ||
269 | initializeYes(); | ||
270 | |||
271 | // m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, requestedMimeTypesList.first()) ); | ||
272 | // reparse(); | ||
273 | 176 | ||
177 | const DocLnk *OFileSelector::selected() | ||
178 | { | ||
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; | ||
329 | m_edit = 0; | ||
330 | m_fnLabel = 0; | ||
331 | //delete m_boxName; will be deleted | ||
332 | } | 230 | } |
333 | updateLay(); | 231 | } |
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( ) |
351 | { | 247 | { |
248 | if( m_selector == NORMAL ) | ||
249 | return 0l; | ||
250 | else | ||
352 | return m_checkPerm; | 251 | return m_checkPerm; |
353 | } | 252 | } |
253 | bool OFileSelector::setPermission()const | ||
254 | { | ||
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 ); | ||
261 | } | ||
354 | 262 | ||
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 | } | ||
355 | void OFileSelector::setCaseSensetive( bool caSe ) | 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 | ||
314 | //void OFileSelector::updateL | ||
315 | |||
387 | QString OFileSelector::selectedName( )const | 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(); |
322 | delete lnk; | ||
393 | }else if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { | 323 | }else if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { |
394 | QListViewItem *item = m_View->currentItem(); | 324 | QListViewItem *item = m_View->currentItem(); |
395 | if(item != 0 ){ | 325 | if( item != 0 ) |
396 | string = m_currentDir + "/" + item->text( 1 ); | 326 | name = m_currentDir + "/" + item->text( 1 ); |
397 | } | 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 | ; | ||
412 | } | 353 | } |
413 | void OFileSelector::updateLay() | 354 | return path; |
414 | { | ||
415 | /* if( m_shTool ) | ||
416 | // | ||
417 | else | ||
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 | } | 355 | } |
454 | 356 | QStringList OFileSelector::selectedPaths() 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 | { | 357 | { |
459 | if( mime == "All" ) | 358 | QStringList list; |
460 | return true; | 359 | list << selectedPath(); |
461 | MimeType type( path ); | 360 | return list; |
462 | if( type.id() == mime ) | ||
463 | return true; | ||
464 | return false; | ||
465 | } | 361 | } |
466 | 362 | QString OFileSelector::directory()const | |
467 | void OFileSelector::reparse() | ||
468 | { | 363 | { |
469 | qDebug("reparse"); | 364 | if( m_selector == NORMAL ) |
470 | if(m_View== 0 || m_selector == NORMAL) | 365 | return QPEApplication::documentDir(); |
471 | return; | ||
472 | m_View->clear(); | ||
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 | 366 | ||
493 | ++it; | 367 | return QDir(m_currentDir).absPath(); |
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 | } | 368 | } |
503 | 369 | ||
504 | QDir dir( m_currentDir ); | 370 | int OFileSelector::fileCount() |
505 | //dir.setFilter(-1 ); | 371 | { |
506 | int sort = QDir::Name | QDir::DirsFirst | QDir::Reversed; | 372 | int count; |
507 | if( m_case ) | 373 | switch( m_selector ){ |
508 | sort = QDir::IgnoreCase; | 374 | case NORMAL: |
509 | dir.setSorting( sort ); | 375 | count = m_select->fileCount(); |
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; | ||
544 | }else if( info.isDir() ){ | ||
545 | // qWarning("isDir" ); | ||
546 | addDir(currMime, fi, TRUE ); | ||
547 | break; | 376 | break; |
548 | }else if( info.isFile() ){ | 377 | //case CUSTOM: |
549 | // qWarning("isFile" ); | 378 | case EXTENDED: |
550 | addFile(currMime, fi, TRUE ); | 379 | case EXTENDED_ALL: |
380 | default: | ||
381 | count = m_View->childCount(); | ||
551 | break; | 382 | 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 | } | 383 | } |
384 | return count; | ||
559 | } | 385 | } |
560 | }else if( fi->isDir() ){ | 386 | DocLnk OFileSelector::selectedDocument() const |
561 | addDir(currMime, fi ); | 387 | { |
562 | }else if( fi->isFile() ) { // file ? | 388 | DocLnk lnk; |
563 | addFile(currMime, fi ); | 389 | switch( m_selector ){ |
390 | case NORMAL:{ | ||
391 | const DocLnk *lnk2 = m_select->selected(); | ||
392 | lnk = DocLnk(*lnk2 ); // copy | ||
393 | delete lnk2; | ||
394 | break; | ||
564 | } | 395 | } |
565 | ++it; | 396 | case EXTENDED: |
397 | case EXTENDED_ALL: | ||
398 | default: | ||
399 | lnk = DocLnk( selectedName() ); // new DocLnk | ||
400 | break; | ||
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() | 411 | |
578 | { | 412 | // slots internal |
579 | return 0; | ||
580 | } | ||
581 | 413 | ||
582 | void OFileSelector::slotOk( ) | 414 | void OFileSelector::slotOk( ) |
583 | { | 415 | { |
584 | emit ok(); | 416 | emit ok(); |
585 | } | 417 | } |
586 | |||
587 | void OFileSelector::slotCancel( ) | 418 | 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 & ) ), |
431 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | ||
432 | //connect to close me and other signals as well | ||
601 | 433 | ||
602 | m_lay->addLayout(m_boxName); | 434 | m_stack->addWidget( m_select, NORMAL ); |
603 | } | 435 | } |
604 | 436 | m_stack->raiseWidget( NORMAL ); | |
605 | void OFileSelector::initializeYes() | 437 | m_selector = NORMAL; |
606 | { | 438 | }else if( sel == tr("Files") ){ |
607 | m_ok = new QPushButton("&Save", this, "save" ); | 439 | m_selector = EXTENDED; |
608 | m_cancel = new QPushButton("C&ancel", this, "cancel" ); | 440 | initializeListView(); |
609 | m_boxOk = new QHBoxLayout(this ); | 441 | reparse(); |
610 | m_boxOk->addWidget( m_ok, Qt::AlignHCenter ); | 442 | m_stack->raiseWidget( EXTENDED ); |
611 | m_boxOk->insertSpacing(1, 8 ); | 443 | }else if( sel == tr("All Files") ){ |
612 | m_boxOk->addWidget( m_cancel, Qt::AlignHCenter); | 444 | m_selector = EXTENDED_ALL; |
613 | m_lay->addLayout(m_boxOk ); | 445 | initializeListView(); |
614 | connect(m_ok, SIGNAL(clicked() ), | 446 | reparse(); |
615 | this, SLOT(slotOk() ) ); | 447 | m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter |
616 | connect(m_cancel, SIGNAL(clicked() ), | ||
617 | this, SLOT(slotCancel() ) ); | ||
618 | |||
619 | } | 448 | } |
620 | 449 | } | |
621 | void OFileSelector::initializeChooser() | 450 | void OFileSelector::slotMimeCheck(const QString &mime) |
622 | { | 451 | { |
623 | m_boxView = new QHBoxLayout(this ); | 452 | if( m_selector == NORMAL ){ |
624 | 453 | if( m_autoMime ){ | |
625 | m_mimeCheck = new QComboBox(this, "mime check"); | 454 | delete m_select; |
626 | m_viewCheck = new QComboBox(this, "view check"); | 455 | m_select = new FileSelector( mime == tr("All") ? QString::null : mime, |
627 | m_boxView->addWidget(m_viewCheck, 0 ); | 456 | m_stack, "fileselector", |
628 | m_boxView->insertSpacing(2, 8 ); | 457 | FALSE, FALSE); |
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 | 458 | ||
637 | if(!m_autoMime ) | 459 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
638 | m_mimeCheck->insertItem(m_mimetypes.join("," ) ); | 460 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); |
639 | else{ // check | 461 | //connect to close me and other signals as well |
462 | m_stack->addWidget( m_select, NORMAL ); | ||
463 | m_stack->raiseWidget( NORMAL ); | ||
640 | updateMimes(); | 464 | updateMimes(); |
465 | m_mimeCheck->clear(); | ||
641 | m_mimeCheck->insertStringList( m_mimetypes ); | 466 | m_mimeCheck->insertStringList( m_mimetypes ); |
467 | m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); | ||
642 | } | 468 | } |
643 | 469 | }else{ // others | |
644 | connect( m_viewCheck, SIGNAL(activated(const QString &) ), | 470 | qWarning("Mime %s", mime.latin1() ); |
645 | this, SLOT(slotViewCheck(const QString & ) ) ); | 471 | if(m_shChooser ){ |
646 | 472 | qWarning("Current Text %s", m_mimeCheck->currentText().latin1() ); | |
647 | connect( m_mimeCheck, SIGNAL(activated(const QString &) ), | 473 | //m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); |
648 | this, SLOT(slotMimeCheck(const QString & ) ) ); | 474 | } |
475 | reparse(); | ||
649 | } | 476 | } |
650 | 477 | ||
651 | void OFileSelector::slotMimeCheck(const QString &view ){ | 478 | } |
652 | if(m_selector == NORMAL ){ | 479 | void OFileSelector::slotLocationActivated(const QString &file) |
653 | delete m_select; | 480 | { |
654 | m_select = new FileSelector(view == "All" ? QString::null : view | 481 | cd(file.left(file.find("<-",0,TRUE))); |
655 | , m_stack, "fileselector", FALSE, FALSE ); | ||
656 | m_stack->addWidget( m_select, NORMAL ); | ||
657 | m_stack->raiseWidget( NORMAL ); | ||
658 | }else{ | ||
659 | reparse(); | 482 | reparse(); |
660 | } | 483 | } |
484 | void OFileSelector::slotInsertLocationPath(const QString ¤tPath, int count) | ||
485 | { | ||
486 | QStringList pathList; | ||
487 | bool underDog = FALSE; | ||
488 | for(int i=0;i<count;i++) { | ||
489 | pathList << m_location->text(i); | ||
490 | if( m_location->text(i) == currentPath) | ||
491 | underDog = TRUE; | ||
492 | } | ||
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); | ||
661 | } | 500 | } |
662 | |||
663 | void OFileSelector::slotViewCheck(const QString &view ){ | ||
664 | qWarning("changed: show %s", view.latin1() ); | ||
665 | // if the current view is the one | ||
666 | QString currMime = m_mimeCheck->currentText(); | ||
667 | if( view == QString::fromLatin1("Documents") ){ | ||
668 | // get the mimetype now | ||
669 | // check if we're the current widget and return | ||
670 | if( m_View != 0) { // delete 0 shouldn't crash but it did :( | ||
671 | delete m_View; | ||
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 | } | 501 | } |
681 | m_View = 0; | 502 | void OFileSelector::locationComboChanged() |
682 | m_boxToolbar = 0; | 503 | { |
683 | m_homeButton = 0; | 504 | cd( m_location->lineEdit()->text()); |
684 | m_docButton = 0; | 505 | reparse(); |
685 | m_location = 0; | 506 | } |
686 | m_up = 0; | 507 | void OFileSelector::init() |
687 | m_pseudo = 0; | 508 | { |
688 | m_pseudoLayout = 0; | 509 | m_lay = new QVBoxLayout( this ); |
510 | m_lay->setSpacing(0 ); | ||
511 | |||
512 | m_stack = new QWidgetStack( this ); | ||
513 | if( m_selector == NORMAL ){ | ||
514 | m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), | ||
515 | m_stack, "fileselector", | ||
516 | FALSE, FALSE); | ||
517 | |||
518 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | ||
519 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | ||
520 | //connect to close me and other signals as well | ||
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 ); |
@@ -736,68 +553,238 @@ void OFileSelector::updateMimes() // lets check which mode is active | |||
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 | ||
741 | ; | ||
742 | } | ||
743 | } | 557 | } |
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; |
595 | m_stack = 0; | ||
596 | m_lay = 0; | ||
597 | m_Oselector = 0; | ||
598 | m_boxToolbar = 0; | ||
599 | m_boxOk = 0; | ||
600 | m_boxName = 0; | ||
601 | m_boxView = 0; | ||
602 | m_custom = 0; | ||
603 | m_edit = 0; | ||
604 | m_fnLabel = 0; | ||
605 | m_new = 0; | ||
606 | m_close = 0; | ||
607 | } | ||
608 | void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) | ||
609 | { | ||
610 | if(!m_files) | ||
611 | return; | ||
612 | // if( !compliesMime(info->absFilePath(), mime ) ) | ||
613 | // return; | ||
614 | MimeType type( info->absFilePath() ); | ||
615 | if( mime != tr("All") && type.id() != mime ) | ||
616 | return; | ||
617 | QPixmap pix = type.pixmap(); | ||
618 | QString dir; | ||
619 | QString name; | ||
620 | bool locked; | ||
621 | if( pix.isNull() ) | ||
622 | pix = Resource::loadPixmap( "UnknownDocument-14"); | ||
623 | dir = info->dirPath( true ); | ||
624 | if( symlink ) | ||
625 | name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink(); | ||
626 | else { | ||
627 | name = info->fileName(); | ||
628 | if( ( m_mode == OPEN && !info->isReadable() )|| | ||
629 | ( m_mode == SAVE && !info->isWritable() ) ){ | ||
630 | |||
631 | locked = true; pix = Resource::loadPixmap("locked"); | ||
632 | } | ||
633 | } | ||
634 | new OFileSelectorItem( m_View, pix, name, | ||
635 | info->lastModified().toString(), | ||
636 | QString::number( info->size() ), | ||
637 | dir, locked ); | ||
638 | } | ||
639 | void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) | ||
640 | { | ||
641 | if(!m_dir) | ||
642 | return; | ||
643 | if( m_selector == EXTENDED_ALL || m_selector == EXTENDED ){ | ||
644 | bool locked = false; | ||
645 | QString name; | ||
646 | QPixmap pix; | ||
647 | if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ | ||
648 | locked = true; | ||
649 | if( symlink ) | ||
650 | pix = (*m_pixmaps)["symlinkedlocked"]; | ||
651 | else | ||
652 | pix = Resource::loadPixmap("lockedfolder"); | ||
653 | }else { // readable | ||
654 | pix = symlink ? (*m_pixmaps)["dirsymlink"] : Resource::loadPixmap("folder") ; | ||
655 | } | ||
656 | name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; | ||
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 | { | ||
667 | |||
668 | } | ||
669 | void OFileSelector::initializeName() | ||
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 ); | ||
732 | } | ||
733 | connect( m_viewCheck, SIGNAL( activated(const QString & ) ), | ||
734 | this, SLOT( slotViewCheck(const QString & ) ) ); | ||
735 | connect( m_mimeCheck, SIGNAL( activated(const QString & ) ), | ||
736 | this, SLOT( slotMimeCheck( const QString & ) ) ); | ||
737 | } | ||
738 | } | ||
739 | void OFileSelector::initializeListView() | ||
740 | { | ||
741 | if( m_pseudo == 0 ){ | ||
770 | m_pseudo = new QWidget(m_stack, "Pseudo Widget"); | 742 | m_pseudo = new QWidget(m_stack, "Pseudo Widget"); |
771 | m_pseudoLayout = new QVBoxLayout(m_pseudo ); | 743 | m_pseudoLayout = new QVBoxLayout(m_pseudo ); |
772 | if(m_shTool ){ | 744 | // toolbar |
773 | m_boxToolbar = new QHBoxLayout( ); | 745 | m_boxToolbar = new QHBox( m_pseudo ); |
774 | m_boxToolbar->setAutoAdd( true ); | 746 | m_boxToolbar->setSpacing(0 ); // next to each other please |
775 | m_location = new QComboBox(m_pseudo ); | ||
776 | m_location ->setEditable(TRUE); | ||
777 | connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( locationComboActivated(const QString & ) ) ); | ||
778 | connect( m_location->lineEdit(),SIGNAL(returnPressed()), this,SLOT( locationComboChanged())); | ||
779 | 747 | ||
780 | m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton"); | 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"); | ||
781 | m_up->setFixedSize( QSize( 20, 20 ) ); | 761 | m_up->setFixedSize( QSize( 20, 20 ) ); |
782 | connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); | 762 | connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); |
783 | m_up->setFlat(TRUE); | 763 | m_up->setFlat(TRUE); |
784 | 764 | ||
785 | m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo); | 765 | // Home Button |
766 | m_homeButton = new QPushButton(Resource::loadIconSet("home") , | ||
767 | "", m_boxToolbar); | ||
786 | m_homeButton->setFixedSize( QSize( 20, 20 ) ); | 768 | m_homeButton->setFixedSize( QSize( 20, 20 ) ); |
787 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); | 769 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); |
788 | m_homeButton->setFlat(TRUE); | 770 | m_homeButton->setFlat(TRUE); |
789 | 771 | // Documents Button | |
790 | m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", m_pseudo,"docsButton"); | 772 | m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", |
773 | m_boxToolbar,"docsButton"); | ||
791 | m_docButton->setFixedSize( QSize( 20, 20 ) ); | 774 | m_docButton->setFixedSize( QSize( 20, 20 ) ); |
792 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); | 775 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); |
793 | m_docButton->setFlat(TRUE); | 776 | m_docButton->setFlat(TRUE); |
794 | 777 | ||
795 | m_boxToolbar->addWidget(m_location ); | 778 | // Close button |
796 | m_boxToolbar->addWidget(m_up ); | 779 | m_close = new QPushButton( Resource::loadIconSet( "close"), "", |
797 | m_boxToolbar->addWidget(m_homeButton ); | 780 | m_boxToolbar ); |
798 | m_boxToolbar->addWidget(m_docButton ); | 781 | connect( m_close, SIGNAL(clicked() ), this, SIGNAL(closeMe() ) ); |
799 | m_pseudoLayout->addLayout(m_boxToolbar ); | 782 | m_close->setFixedSize( 20, 20 ); |
800 | qDebug("lets fill the combobox"); | 783 | |
784 | m_boxToolbar->setFixedHeight( 20 ); | ||
785 | m_pseudoLayout->addWidget(m_boxToolbar ); | ||
786 | |||
787 | // let;s fill the Location ComboBox | ||
801 | StorageInfo storage; | 788 | StorageInfo storage; |
802 | const QList<FileSystem> &fs = storage.fileSystems(); | 789 | const QList<FileSystem> &fs = storage.fileSystems(); |
803 | QListIterator<FileSystem> it ( fs ); | 790 | QListIterator<FileSystem> it ( fs ); |
@@ -809,17 +796,24 @@ void OFileSelector::initializeListView() | |||
809 | int count = m_location->count(); | 796 | int count = m_location->count(); |
810 | m_location->insertItem(m_currentDir ); | 797 | m_location->insertItem(m_currentDir ); |
811 | m_location->setCurrentItem( count ); | 798 | m_location->setCurrentItem( count ); |
812 | }; | 799 | // due to the New and Close button we can not simply hide m_boxToolBar to not show it |
813 | 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" ); | 814 | m_View = new QListView(m_pseudo, "Extended view" ); |
815 | m_stack->addWidget( m_pseudo, EXTENDED ); | 815 | QPEApplication::setStylusOperation( m_View->viewport(), |
816 | m_stack->raiseWidget( EXTENDED ); | 816 | QPEApplication::RightOnHold); |
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(" "); | 817 | m_View->addColumn(" "); |
824 | m_View->addColumn(tr("Name"),135 ); | 818 | m_View->addColumn(tr("Name"),135 ); |
825 | m_View->addColumn(tr("Size"),-1 ); | 819 | m_View->addColumn(tr("Size"),-1 ); |
@@ -829,155 +823,87 @@ void OFileSelector::initializeListView() | |||
829 | header->hide(); | 823 | header->hide(); |
830 | m_View->setSorting(1 ); | 824 | m_View->setSorting(1 ); |
831 | m_View->setAllColumnsShowFocus( TRUE); | 825 | 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 | 826 | ||
843 | /* If a item is locked depends on the mode | 827 | connect(m_View, SIGNAL(selectionChanged() ), |
844 | if we're in OPEN !isReadable is locked | 828 | this, SLOT(slotSelectionChanged() ) ); |
845 | if we're in SAVE !isWriteable is locked | ||
846 | 829 | ||
830 | connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), | ||
831 | this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); | ||
847 | 832 | ||
848 | */ | 833 | connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), |
849 | 834 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); | |
850 | 835 | ||
851 | void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){ | 836 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), |
852 | // qWarning("Add Files" ); | 837 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); |
853 | if( !m_files ){ | ||
854 | // qWarning("not mfiles" ); | ||
855 | return; | ||
856 | } | ||
857 | 838 | ||
858 | MimeType type( info->filePath() ); | 839 | m_pseudoLayout->addWidget( m_View, 288 ); |
859 | QString name; | 840 | m_stack->addWidget( m_pseudo, EXTENDED ); |
860 | QString dir; | ||
861 | bool locked= false; | ||
862 | if(mime == "All" ){ | ||
863 | ; | ||
864 | }else if( type.id() != mime ) { | ||
865 | return; | ||
866 | } | ||
867 | QPixmap pix = type.pixmap(); | ||
868 | if(pix.isNull() ) | ||
869 | pix = Resource::loadPixmap( "UnknownDocument-14" ); | ||
870 | dir = info->dirPath( true ); | ||
871 | if( symlink ) { // check if the readLink is readable | ||
872 | // do it right later | ||
873 | name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink(); | ||
874 | }else{ // keep track of the icons | ||
875 | name = info->fileName(); | ||
876 | if( m_mode == OPEN ){ | ||
877 | if( !info->isReadable() ){ | ||
878 | locked = true; | ||
879 | pix = Resource::loadPixmap("locked" ); | ||
880 | } | ||
881 | }else if( m_mode == SAVE ){ | ||
882 | if( !info->isWritable() ){ | ||
883 | locked = true; | ||
884 | pix = Resource::loadPixmap("locked" ); | ||
885 | } | ||
886 | } | ||
887 | } | 841 | } |
888 | new OFileSelectorItem( m_View, pix, name, | ||
889 | info->lastModified().toString(), | ||
890 | QString::number( info->size() ), | ||
891 | dir, locked ); | ||
892 | } | 842 | } |
893 | 843 | void OFileSelector::initializePerm() | |
894 | void OFileSelector::addDir(const QString &/*mime*/, QFileInfo *info, bool symlink ) | ||
895 | { | ||
896 | if(!m_dir ) | ||
897 | return; | ||
898 | //if( showDirs ) | ||
899 | { | 844 | { |
900 | bool locked=false; | 845 | if( m_checkPerm == 0 ){ |
901 | QString name; | 846 | m_checkPerm = new QCheckBox(tr("Ser Permission"), this, "perm"); |
902 | QPixmap pix; | 847 | m_checkPerm->setChecked( false ); |
903 | if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ | 848 | m_lay->addWidget( m_checkPerm ); |
904 | locked = true; | ||
905 | if( symlink ){ | ||
906 | pix = (*m_pixmaps)["symlinkedlocked"]; | ||
907 | }else{ | ||
908 | pix = Resource::loadPixmap("lockedfolder" ); | ||
909 | } | ||
910 | }else{ | ||
911 | if( symlink ){ | ||
912 | pix = (*m_pixmaps)["dirsymlink" ]; | ||
913 | }else{ | ||
914 | pix = Resource::loadPixmap("folder" ); | ||
915 | } | ||
916 | } | ||
917 | if( symlink){ | ||
918 | name = info->fileName()+ "->"+ info->dirPath(true) +"/" +info->readLink(); | ||
919 | |||
920 | }else{ | ||
921 | //if(info->isReadable() ) | ||
922 | name = info->fileName(); | ||
923 | } | ||
924 | |||
925 | new OFileSelectorItem(m_View, pix, | ||
926 | name, info->lastModified().toString(), | ||
927 | QString::number(info->size() ),info->dirPath(true), locked, true ); | ||
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 | ||
945 | } | 884 | } |
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 | ||
893 | } | ||
959 | void OFileSelector::slotCurrentChanged(QListViewItem *item ) | 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 | |||
965 | if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ | 898 | if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ |
966 | OFileSelectorItem *sel = (OFileSelectorItem*)item; | 899 | OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;) |
967 | if(!sel->isDir() ){ | 900 | if(!sel->isDir() ){ |
968 | // qWarning("is not dir" ); | 901 | if( m_shLne ) |
969 | if(m_shLne ){ | ||
970 | m_edit->setText(sel->text(1) ); | 902 | m_edit->setText(sel->text(1) ); |
971 | // qWarning("setTexy" ); | ||
972 | } | 903 | } |
973 | } | 904 | } |
974 | }else { | ||
975 | qWarning("mode not extended" ); | ||
976 | } | ||
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; |
@@ -985,27 +911,27 @@ void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint & | |||
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() ); |
924 | // if MODE Dir m_shLne set the Text | ||
996 | } else { | 925 | } else { |
997 | // qWarning("file" ); | ||
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 | 929 | } |
930 | } | ||
931 | break; | ||
1002 | } | 932 | } |
1003 | } else { | ||
1004 | qWarning( "locked" ); | ||
1005 | } | 933 | } |
1006 | }; | ||
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 ) |
@@ -1013,133 +939,42 @@ void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoin | |||
1013 | 939 | ||
1014 | if( button != Qt::RightButton ) | 940 | if( button != Qt::RightButton ) |
1015 | return; | 941 | return; |
1016 | // qWarning("right button" ); | ||
1017 | slotContextMenu(item); | 942 | slotContextMenu(item); |
1018 | } | 943 | } |
1019 | |||
1020 | void OFileSelector::slotContextMenu(QListViewItem *item) | 944 | void OFileSelector::slotContextMenu(QListViewItem *item) |
1021 | { | 945 | { |
1022 | // qWarning("context menu" ); | ||
1023 | if( item ==0 || !m_showPopup ) | ||
1024 | return; | ||
1025 | |||
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 | } | ||
1071 | 946 | ||
1072 | bool OFileSelector::cd(const QString &str ) | ||
1073 | { | ||
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 | } | 947 | } |
1086 | return false; | ||
1087 | } | ||
1088 | |||
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 | } | ||
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: |
@@ -1152,7 +987,6 @@ void OFileSelector::slotDelete() | |||
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 ); |
@@ -1161,34 +995,139 @@ void OFileSelector::cdUP() | |||
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 | |||
1181 | void OFileSelector::slotNavigate() | 1012 | 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() ); | ||
1185 | 1027 | ||
1186 | void OFileSelector::locationComboActivated(const QString & file ) { | 1028 | QString currentMimeType; |
1187 | cd(file.left(file.find("<-",0,TRUE))); | 1029 | // let's update the mimetype |
1188 | reparse(); | 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() ); | ||
1189 | } | 1053 | } |
1190 | 1054 | ||
1191 | void OFileSelector::locationComboChanged() { | 1055 | ++it; |
1192 | cd( m_location->lineEdit()->text()); | 1056 | } |
1193 | reparse(); | 1057 | // add them to the chooser |
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 | ||
1071 | |||
1072 | QDir dir( m_currentDir ); | ||
1073 | |||
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 | |||
@@ -63,6 +63,7 @@ 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 | ||
@@ -81,17 +82,17 @@ class OFileSelector : public QWidget { | |||
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 |
@@ -134,7 +135,7 @@ class OFileSelector : public QWidget { | |||
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 | ||
@@ -159,16 +160,19 @@ class OFileSelector : public QWidget { | |||
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 | ||
@@ -178,7 +182,7 @@ class OFileSelector : public QWidget { | |||
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; |
@@ -186,17 +190,17 @@ class OFileSelector : public QWidget { | |||
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 | ||
@@ -217,7 +221,7 @@ class OFileSelector : public QWidget { | |||
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 ){}; |
@@ -226,6 +230,7 @@ class OFileSelector : public QWidget { | |||
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 | ||