comparison libgui/src/files-dock-widget.cc @ 17970:f6e1be4ad923

Add functionality for showing/hiding hidden files in the file browser (bug #40636). * files-dock-widget.cc (constructor): modify the file model filter based on the stored settings for showing hidden files; (notice_setting): when the settings are changed, update the file model filter and refresh the list.
author John Swensen <jpswensen@gmail.com>
date Tue, 19 Nov 2013 15:47:06 -0500
parents 225c7be94c5f
children 79e7c468d392
comparison
equal deleted inserted replaced
17969:c1e4e25872f7 17970:f6e1be4ad923
1 /* 1 /*
2 2
3 Copyright (C) 2013 John P. Swensen
3 Copyright (C) 2011-2013 Jacob Dawid 4 Copyright (C) 2011-2013 Jacob Dawid
4 5
5 This file is part of Octave. 6 This file is part of Octave.
6 7
7 Octave is free software; you can redistribute it and/or modify it 8 Octave is free software; you can redistribute it and/or modify it
148 connect (_sync_octave_directory_action, SIGNAL (triggered ()), this, 149 connect (_sync_octave_directory_action, SIGNAL (triggered ()), this,
149 SLOT (do_sync_octave_directory ())); 150 SLOT (do_sync_octave_directory ()));
150 connect (_sync_browser_directory_action, SIGNAL (triggered ()), this, 151 connect (_sync_browser_directory_action, SIGNAL (triggered ()), this,
151 SLOT (do_sync_browser_directory ())); 152 SLOT (do_sync_browser_directory ()));
152 153
154 QSettings *settings = resource_manager::get_settings ();
155 // FIXME: what should happen if settings is 0?
156
153 // Create the QFileSystemModel starting in the actual directory 157 // Create the QFileSystemModel starting in the actual directory
154 QDir curr_dir; 158 QDir curr_dir;
155 _file_system_model = new QFileSystemModel (this); 159 _file_system_model = new QFileSystemModel (this);
156 _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries); 160 if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ())
161 {
162 _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries
163 | QDir::Hidden);
164 }
165 else
166 {
167 _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries);
168 }
157 QModelIndex rootPathIndex = _file_system_model->setRootPath ( 169 QModelIndex rootPathIndex = _file_system_model->setRootPath (
158 curr_dir.absolutePath ()); 170 curr_dir.absolutePath ());
159 171
160 // Attach the model to the QTreeView and set the root index 172 // Attach the model to the QTreeView and set the root index
161 _file_tree_view = new FileTreeViewer (container); 173 _file_tree_view = new FileTreeViewer (container);
166 _file_tree_view->setAlternatingRowColors (true); 178 _file_tree_view->setAlternatingRowColors (true);
167 _file_tree_view->setAnimated (true); 179 _file_tree_view->setAnimated (true);
168 _file_tree_view->setToolTip (tr ("Double-click a file to open it")); 180 _file_tree_view->setToolTip (tr ("Double-click a file to open it"));
169 181
170 // get sort column and order as well as cloumn state (order and width) 182 // get sort column and order as well as cloumn state (order and width)
171 QSettings *settings = resource_manager::get_settings (); 183
172 // FIXME: what should happen if settings is 0?
173 _file_tree_view->sortByColumn ( 184 _file_tree_view->sortByColumn (
174 settings->value ("filesdockwidget/sort_files_by_column",0).toInt (), 185 settings->value ("filesdockwidget/sort_files_by_column",0).toInt (),
175 static_cast<Qt::SortOrder> 186 static_cast<Qt::SortOrder>
176 (settings->value ("filesdockwidget/sort_files_by_order", 187 (settings->value ("filesdockwidget/sort_files_by_order",
177 Qt::AscendingOrder).toUInt ()) 188 Qt::AscendingOrder).toUInt ())
356 } 367 }
357 368
358 void files_dock_widget::toggle_headercontextitem_filesize () 369 void files_dock_widget::toggle_headercontextitem_filesize ()
359 { 370 {
360 QSettings *settings = resource_manager::get_settings (); 371 QSettings *settings = resource_manager::get_settings ();
361 settings->setValue ("filesdockwidget/showFileSize", 372 settings->setValue
362 !settings->value ("filesdockwidget/showFileSize",false).toBool ()); 373 ("filesdockwidget/showFileSize",
374 ! settings->value ("filesdockwidget/showFileSize",false).toBool ());
363 settings->sync (); 375 settings->sync ();
364 this->notice_settings (settings); 376 this->notice_settings (settings);
365 } 377 }
366 378
367 void files_dock_widget::toggle_headercontextitem_filetype () 379 void files_dock_widget::toggle_headercontextitem_filetype ()
368 { 380 {
369 QSettings *settings = resource_manager::get_settings (); 381 QSettings *settings = resource_manager::get_settings ();
370 settings->setValue ("filesdockwidget/showFileType", 382 settings->setValue
371 !settings->value ("filesdockwidget/showFileType",false).toBool ()); 383 ("filesdockwidget/showFileType",
384 ! settings->value ("filesdockwidget/showFileType",false).toBool ());
372 settings->sync (); 385 settings->sync ();
373 this->notice_settings (settings); 386 this->notice_settings (settings);
374 } 387 }
375 388
376 void files_dock_widget::toggle_headercontextitem_datemodified () 389 void files_dock_widget::toggle_headercontextitem_datemodified ()
377 { 390 {
378 QSettings *settings = resource_manager::get_settings (); 391 QSettings *settings = resource_manager::get_settings ();
379 settings->setValue ("filesdockwidget/showLastModified", 392 settings->setValue
380 !settings->value ("filesdockwidget/showLastModified",false).toBool ()); 393 ("filesdockwidget/showLastModified",
394 ! settings->value ("filesdockwidget/showLastModified",false).toBool ());
381 settings->sync (); 395 settings->sync ();
382 this->notice_settings (settings); 396 this->notice_settings (settings);
383 } 397 }
384 398
385 void files_dock_widget::toggle_headercontextitem_showhidden () 399 void files_dock_widget::toggle_headercontextitem_showhidden ()
386 { 400 {
387 QSettings *settings = resource_manager::get_settings (); 401 QSettings *settings = resource_manager::get_settings ();
388 settings->setValue ("filesdockwidget/showHiddenFiles", 402 settings->setValue
389 !settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()); 403 ("filesdockwidget/showHiddenFiles",
404 ! settings->value ("filesdockwidget/showHiddenFiles",false).toBool ());
390 settings->sync (); 405 settings->sync ();
391 this->notice_settings (settings); 406 this->notice_settings (settings);
392 } 407 }
393 408
394 void 409 void
399 QSettings *settings = resource_manager::get_settings (); 414 QSettings *settings = resource_manager::get_settings ();
400 415
401 QAction fileSizeAction (tr ("File size"), &menu); 416 QAction fileSizeAction (tr ("File size"), &menu);
402 fileSizeAction.setCheckable (true); 417 fileSizeAction.setCheckable (true);
403 fileSizeAction.setChecked ( 418 fileSizeAction.setChecked (
404 settings->value ("filesdockwidget/showFileSize",false).toBool ()); 419 settings->value ("filesdockwidget/showFileSize",false).toBool ());
405 connect (&fileSizeAction, SIGNAL(triggered ()), 420 connect (&fileSizeAction, SIGNAL(triggered ()),
406 this, SLOT (toggle_headercontextitem_filesize ())); 421 this, SLOT (toggle_headercontextitem_filesize ()));
407 menu.addAction (&fileSizeAction); 422 menu.addAction (&fileSizeAction);
408 423
409 QAction fileTypeAction (tr ("File type"), &menu); 424 QAction fileTypeAction (tr ("File type"), &menu);
410 fileTypeAction.setCheckable (true); 425 fileTypeAction.setCheckable (true);
411 fileTypeAction.setChecked ( 426 fileTypeAction.setChecked (
412 settings->value ("filesdockwidget/showFileType",false).toBool ()); 427 settings->value ("filesdockwidget/showFileType",false).toBool ());
413 connect (&fileTypeAction, SIGNAL(triggered ()), 428 connect (&fileTypeAction, SIGNAL(triggered ()),
414 this, SLOT (toggle_headercontextitem_filetype ())); 429 this, SLOT (toggle_headercontextitem_filetype ()));
415 menu.addAction (&fileTypeAction); 430 menu.addAction (&fileTypeAction);
416 431
417 QAction dateModifiedAction (tr ("Date modified"), &menu); 432 QAction dateModifiedAction (tr ("Date modified"), &menu);
418 dateModifiedAction.setCheckable (true); 433 dateModifiedAction.setCheckable (true);
419 dateModifiedAction.setChecked( 434 dateModifiedAction.setChecked(
420 settings->value ("filesdockwidget/showLastModified",false).toBool ()); 435 settings->value ("filesdockwidget/showLastModified",false).toBool ());
421 connect (&dateModifiedAction, SIGNAL(triggered ()), 436 connect (&dateModifiedAction, SIGNAL(triggered ()),
422 this, SLOT (toggle_headercontextitem_datemodified ())); 437 this, SLOT (toggle_headercontextitem_datemodified ()));
423 menu.addAction (&dateModifiedAction); 438 menu.addAction (&dateModifiedAction);
424 439
425 QAction showHiddenAction (tr ("Show hidden"), &menu); 440 QAction showHiddenAction (tr ("Show hidden"), &menu);
426 showHiddenAction.setCheckable (true); 441 showHiddenAction.setCheckable (true);
427 showHiddenAction.setChecked ( 442 showHiddenAction.setChecked (
428 settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()); 443 settings->value ("filesdockwidget/showHiddenFiles",false).toBool ());
429 connect (&showHiddenAction, SIGNAL (triggered ()), 444 connect (&showHiddenAction, SIGNAL (triggered ()),
430 this, SLOT (toggle_headercontextitem_showhidden ())); 445 this, SLOT (toggle_headercontextitem_showhidden ()));
431 menu.addAction (&showHiddenAction); 446 menu.addAction (&showHiddenAction);
432 447
433 menu.exec (_file_tree_view->mapToGlobal (mpos)); 448 menu.exec (_file_tree_view->mapToGlobal (mpos));
723 _navigation_tool_bar->setIconSize (QSize (icon_size,icon_size)); 738 _navigation_tool_bar->setIconSize (QSize (icon_size,icon_size));
724 739
725 // file names are always shown, other columns can be hidden by settings 740 // file names are always shown, other columns can be hidden by settings
726 _file_tree_view->setColumnHidden (0, false); 741 _file_tree_view->setColumnHidden (0, false);
727 _file_tree_view->setColumnHidden (1, 742 _file_tree_view->setColumnHidden (1,
728 !settings->value ("filesdockwidget/showFileSize",false).toBool ()); 743 ! settings->value ("filesdockwidget/showFileSize",false).toBool ());
729 _file_tree_view->setColumnHidden (2, 744 _file_tree_view->setColumnHidden (2,
730 !settings->value ("filesdockwidget/showFileType",false).toBool ()); 745 ! settings->value ("filesdockwidget/showFileType",false).toBool ());
731 _file_tree_view->setColumnHidden (3, 746 _file_tree_view->setColumnHidden (3,
732 !settings->value ("filesdockwidget/showLastModified",false).toBool ()); 747 ! settings->value ("filesdockwidget/showLastModified",false).toBool ());
733 _file_tree_view->setAlternatingRowColors ( 748 _file_tree_view->setAlternatingRowColors (
734 settings->value ("filesdockwidget/useAlternatingRowColors",true).toBool ()); 749 settings->value ("filesdockwidget/useAlternatingRowColors",true).toBool ());
735 if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()) 750 if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ())
736 { 751 {
737 // TODO: React on option for hidden files. 752 _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries
738 } 753 | QDir::Hidden);
754 }
755 else
756 {
757 _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries);
758 }
759 _file_tree_view->setModel (_file_system_model);
760
739 // enable the buttons to sync octave/browser dir 761 // enable the buttons to sync octave/browser dir
740 // only if this is not done by default 762 // only if this is not done by default
741 _sync_octave_dir 763 _sync_octave_dir
742 = settings->value ("filesdockwidget/sync_octave_directory",false).toBool (); 764 = settings->value ("filesdockwidget/sync_octave_directory",false).toBool ();
743 _sync_octave_directory_action->setEnabled (!_sync_octave_dir); 765 _sync_octave_directory_action->setEnabled (!_sync_octave_dir);