Mercurial > octave-nkf
changeset 16499:facf00ce97d3
gui: configurable synchronization between file browser and octave directory
* default-qt-settings: all settings of the file browser are now located
in its section, new setting sync_octave_directory
* files-dock-widget.cc(constructor): make QToolBar and QAction variables local,
add two buttons for syncing from octave to file browser and vice versa,
change status-tips into tool-tips
* files-dock-widget.cc(set_current_directory):
do not emit signal displayed_directory_changed (would change octave dir)
* files-dock-widget.cc(do_sync_octave_directory): new function for manually
setting the octave dir to the one in the file browser
* files-dock-widget.cc(do_sync_browser_directory): new function for manually
setting the file browser to the octave directory
* files-dock-widget.cc(update_octave_directory): new function called from the
main-window when the octave directory has changed
* files-doc-widget.cc(display_directory): new second parameter (bool, default is
true) determining whether the signal with the new displayed directory should
be emitted if synchronizing is enabled
* files-dock-widget.cc(notice-settings): read new setting, enalbe or disable the
sync buttons and set file browser to octave directory depending on setting
* files-dock-widget.h: removed QToolBar and QAction variibles, new varaibles for
storing the actual octave directory and whether syncing is desired or not, new
functions (do_sync_octave_directory, do_sync_browser_directory,
update_octave_directory), function display_directory with second parameter
(bool, default true)
* libgui/src/icons/ok.png,libgui/src/icons/reload.png: new icons for the toolbar
* main-window.cc(change_directory): call new function update_octave_directory
instead of display_directory
* main-window.cc(construct-window-menu): rename "Current Directory" into
"File Browser"
* libgui/src/module.mk: new files icons/ok.png and icons/reload.png
* settings-dialog.cc(constructor,write_changed_settings): all files-dock-widgets
settings in a section, new setting sync_octave_directory
* settings-dialog.ui: new setting sync_octave_directory
author | Torsten <ttl@justmail.de> |
---|---|
date | Thu, 11 Apr 2013 19:01:55 +0200 |
parents | 605d7f0ee0d8 |
children | 06bdf84aa3d9 |
files | libgui/default-qt-settings libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h libgui/src/icons/ok.png libgui/src/icons/reload.png libgui/src/main-window.cc libgui/src/module.mk libgui/src/resource.qrc libgui/src/settings-dialog.cc libgui/src/settings-dialog.ui |
diffstat | 10 files changed, 124 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/default-qt-settings Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/default-qt-settings Thu Apr 11 19:01:55 2013 +0200 @@ -5,12 +5,6 @@ autoIdentification=false useCustomFileEditor=false customFileEditor=emacs -showFilenames=true -showFileSize=false -showFileType=false -showLastModified=false -showHiddenFiles=false -useAlternatingRowColors=true useProxyServer=false proxyType= proxyHostName=none @@ -67,3 +61,10 @@ sort_files_by_column=0 sort_files_by_order=0 column_state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x4\xe\0\0\0\x3\0\0\0\x3\0\0\0\x64\0\0\0\x2\0\0\0\x64\0\0\0\x1\0\0\0\x64\0\0\0\xd4\0\0\0\x4\x1\x1\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x2\0\0\0\xd4\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\0\0) +showFilenames=true +showFileSize=false +showFileType=false +showLastModified=false +showHiddenFiles=false +sync_octave_directory=true +useAlternatingRowColors=true
--- a/libgui/src/files-dock-widget.cc Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/files-dock-widget.cc Thu Apr 11 19:01:55 2013 +0200 @@ -43,7 +43,7 @@ setObjectName ("FilesDockWidget"); setWindowIcon (QIcon(":/actions/icons/logo.png")); setWindowTitle (tr ("File Browser")); - setStatusTip (tr ("Browse your files.")); + setToolTip (tr ("Browse your files.")); QWidget *container = new QWidget (this); @@ -58,29 +58,46 @@ connect (parent (), SIGNAL (settings_changed (const QSettings *)), this, SLOT (notice_settings (const QSettings *))); - // Create a toolbar - _navigation_tool_bar = new QToolBar ("", container); - _navigation_tool_bar->setAllowedAreas (Qt::TopToolBarArea); - _navigation_tool_bar->setMovable (false); - _navigation_tool_bar->setIconSize (QSize (20, 20)); + QToolBar *navigation_tool_bar = new QToolBar ("", container); + navigation_tool_bar->setAllowedAreas (Qt::TopToolBarArea); + navigation_tool_bar->setMovable (false); + navigation_tool_bar->setIconSize (QSize (20, 20)); - _directory_icon = QIcon(":/actions/icons/up.png"); - _directory_up_action = new QAction (_directory_icon, "", _navigation_tool_bar); - _directory_up_action->setStatusTip (tr ("Move up one directory.")); - - _current_directory = new QComboBox (_navigation_tool_bar); - _current_directory->setStatusTip (tr ("Enter the path or filename.")); + _current_directory = new QComboBox (navigation_tool_bar); + _current_directory->setToolTip (tr ("Enter the path or filename")); _current_directory->setEditable(true); _current_directory->setMaxCount(MaxMRUDirs); _current_directory->setInsertPolicy(QComboBox::NoInsert); + _current_directory->setSizeAdjustPolicy (QComboBox::AdjustToMinimumContentsLengthWithIcon); QSizePolicy sizePol(QSizePolicy::Expanding, QSizePolicy::Preferred); _current_directory->setSizePolicy(sizePol); - _navigation_tool_bar->addAction (_directory_up_action); - _navigation_tool_bar->addWidget (_current_directory); - connect (_directory_up_action, SIGNAL (triggered ()), this, + QAction *directory_up_action = new QAction (QIcon(":/actions/icons/up.png"), + "", navigation_tool_bar); + directory_up_action->setToolTip (tr ("Move up one directory")); + + _sync_browser_directory_action = new QAction (QIcon(":/actions/icons/reload.png"), + "", navigation_tool_bar); + _sync_browser_directory_action->setToolTip (tr ("Goto current octave directory")); + _sync_browser_directory_action->setEnabled ("false"); + + _sync_octave_directory_action = new QAction (QIcon(":/actions/icons/ok.png"), + "", navigation_tool_bar); + _sync_octave_directory_action->setToolTip (tr ("Set octave directroy to current browser directory")); + _sync_octave_directory_action->setEnabled ("false"); + + navigation_tool_bar->addWidget (_current_directory); + navigation_tool_bar->addAction (directory_up_action); + navigation_tool_bar->addAction (_sync_browser_directory_action); + navigation_tool_bar->addAction (_sync_octave_directory_action); + + connect (directory_up_action, SIGNAL (triggered ()), this, SLOT (change_directory_up ())); + connect (_sync_octave_directory_action, SIGNAL (triggered ()), this, + SLOT (do_sync_octave_directory ())); + connect (_sync_browser_directory_action, SIGNAL (triggered ()), this, + SLOT (do_sync_browser_directory ())); // TODO: Add other buttons for creating directories @@ -98,7 +115,7 @@ _file_tree_view->setSortingEnabled (true); _file_tree_view->setAlternatingRowColors (true); _file_tree_view->setAnimated (true); - _file_tree_view->setStatusTip (tr ("Doubleclick a file to open it.")); + _file_tree_view->setToolTip (tr ("Doubleclick a file to open it")); // get sort column and order as well as cloumn state (order and width) QSettings *settings = resource_manager::get_settings (); @@ -121,7 +138,7 @@ // Layout the widgets vertically with the toolbar on top QVBoxLayout *vbox_layout = new QVBoxLayout (); vbox_layout->setSpacing (0); - vbox_layout->addWidget (_navigation_tool_bar); + vbox_layout->addWidget (navigation_tool_bar); vbox_layout->addWidget (_file_tree_view); vbox_layout->setMargin (1); @@ -139,6 +156,9 @@ _current_directory->setCompleter (completer); setFocusProxy (_current_directory); + + _sync_octave_dir = true; // default, overwirtten with notice_settings () + _octave_dir = ""; } files_dock_widget::~files_dock_widget () @@ -165,7 +185,6 @@ { // Retrieve the file info associated with the model index. QFileInfo fileInfo = _file_system_model->fileInfo (index); - set_current_directory (fileInfo.absoluteFilePath ()); } @@ -173,8 +192,6 @@ files_dock_widget::set_current_directory (const QString& dir) { display_directory (dir); - - emit displayed_directory_changed (dir); } void @@ -192,7 +209,28 @@ } void -files_dock_widget::display_directory (const QString& dir) +files_dock_widget::do_sync_octave_directory (void) +{ + QDir dir = QDir (_file_system_model->filePath (_file_tree_view->rootIndex ())); + emit displayed_directory_changed (dir.absolutePath ()); +} + +void +files_dock_widget::do_sync_browser_directory (void) +{ + display_directory (_octave_dir,false); // false: no sync of octave dir +} + +void +files_dock_widget::update_octave_directory (const QString& dir) +{ + _octave_dir = dir; + if (_sync_octave_dir) + display_directory (_octave_dir,false); // false: no sync of octave dir +} + +void +files_dock_widget::display_directory (const QString& dir, bool set_octave_dir) { QFileInfo fileInfo (dir); if (fileInfo.exists ()) @@ -203,6 +241,8 @@ index (fileInfo.absoluteFilePath ())); _file_system_model->setRootPath (fileInfo.absoluteFilePath ()); _file_system_model->sort (0, Qt::AscendingOrder); + if (_sync_octave_dir && set_octave_dir) + emit displayed_directory_changed (fileInfo.absoluteFilePath ()); // see if its in the list, and if it is, remove it and then, put at top of the list int index = _current_directory->findText(fileInfo.absoluteFilePath ()); @@ -228,12 +268,20 @@ // file names are always shown, other columns can be hidden by settings _file_tree_view->setColumnHidden (0, false); - _file_tree_view->setColumnHidden (1, !settings->value ("showFileSize",false).toBool ()); - _file_tree_view->setColumnHidden (2, !settings->value ("showFileType",false).toBool ()); - _file_tree_view->setColumnHidden (3, !settings->value ("showLastModified",false).toBool ()); - _file_tree_view->setAlternatingRowColors (settings->value ("useAlternatingRowColors",true).toBool ()); - if (settings->value ("showHiddenFiles",false).toBool ()) + _file_tree_view->setColumnHidden (1, !settings->value ("filesdockwidget/showFileSize",false).toBool ()); + _file_tree_view->setColumnHidden (2, !settings->value ("filesdockwidget/showFileType",false).toBool ()); + _file_tree_view->setColumnHidden (3, !settings->value ("filesdockwidget/showLastModified",false).toBool ()); + _file_tree_view->setAlternatingRowColors (settings->value ("filesdockwidget/useAlternatingRowColors",true).toBool ()); + if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()) { // TODO: React on option for hidden files. } + // enalbe the buttons to sync octave/browser dir only if this is not done by default + _sync_octave_dir = settings->value ("filesdockwidget/sync_octave_directory",false).toBool (); + _sync_octave_directory_action->setEnabled (!_sync_octave_dir); + _sync_browser_directory_action->setEnabled (!_sync_octave_dir); + + if (_sync_octave_dir) + display_directory (_octave_dir); // sync browser to octave dir + }
--- a/libgui/src/files-dock-widget.h Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/files-dock-widget.h Thu Apr 11 19:01:55 2013 +0200 @@ -61,13 +61,20 @@ /** Slot for handling the up-directory button in the toolbar. */ void change_directory_up (); + /** Slot for handling the sync octave directory button in the toolbar. */ + void do_sync_octave_directory (); + + /** Slot for handling the sync browser directory button in the toolbar. */ + void do_sync_browser_directory (); + /** Sets the current directory being displayed. */ void set_current_directory (const QString& dir); /** Accepts user input a the line edit for the current directory. */ void accept_directory_line_edit (); - void display_directory (const QString& dir); + /** set the internal variable that holds the actual octave variable **/ + void update_octave_directory (const QString& dir); /** Tells the widget to react on changed settings. */ void notice_settings (const QSettings *settings); @@ -84,13 +91,12 @@ // TODO: Add toolbar with buttons for navigating the path, creating dirs, etc - /** Toolbar for file and directory manipulation. */ - QToolBar * _navigation_tool_bar; + /** set a new directory or open a file **/ + void display_directory (const QString& dir, bool set_octave_dir = true); - /** Variables for the up-directory action. */ - QIcon _directory_icon; - QAction * _directory_up_action; - QToolButton * _up_directory_button; + /** Variables for the actions **/ + QAction * _sync_octave_directory_action; + QAction * _sync_browser_directory_action; /** The file system model. */ QFileSystemModel *_file_system_model; @@ -99,6 +105,10 @@ QTreeView * _file_tree_view; QComboBox * _current_directory; + /** Internal variables **/ + bool _sync_octave_dir; // flag if syncing with octave + QString _octave_dir; // the actual octave dir + enum { MaxMRUDirs = 10 }; };
--- a/libgui/src/main-window.cc Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/main-window.cc Thu Apr 11 19:01:55 2013 +0200 @@ -289,7 +289,7 @@ _current_directory_combo_box->insertItem (0, dir); _current_directory_combo_box->setCurrentIndex (0); - file_browser_window->display_directory (dir); + file_browser_window->update_octave_directory (dir); } void @@ -958,7 +958,7 @@ (window_menu, tr ("Show Command History"), true, ctrl_shift + Qt::Key_1); QAction *show_file_browser_action = construct_window_menu_item - (window_menu, tr ("Show Current Directory"), true, ctrl_shift + Qt::Key_2); + (window_menu, tr ("Show File Browser"), true, ctrl_shift + Qt::Key_2); QAction *show_workspace_action = construct_window_menu_item (window_menu, tr ("Show Workspace"), true, ctrl_shift + Qt::Key_3); @@ -978,7 +978,7 @@ (window_menu, tr ("Command History"), false, ctrl + Qt::Key_1); QAction *file_browser_action = construct_window_menu_item - (window_menu, tr ("Current Directory"), false, ctrl + Qt::Key_2); + (window_menu, tr ("File Browser"), false, ctrl + Qt::Key_2); QAction *workspace_action = construct_window_menu_item (window_menu, tr ("Workspace"), false, ctrl + Qt::Key_3);
--- a/libgui/src/module.mk Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/module.mk Thu Apr 11 19:01:55 2013 +0200 @@ -44,9 +44,11 @@ src/icons/letter_logo_TerminalDockWidget.png \ src/icons/letter_logo_WorkspaceView.png \ src/icons/logo.png \ + src/icons/ok.png \ src/icons/question.png \ src/icons/redled.png \ src/icons/redo.png \ + src/icons/reload.png \ src/icons/search.png \ src/icons/star.png \ src/icons/stop.png \
--- a/libgui/src/resource.qrc Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/resource.qrc Thu Apr 11 19:01:55 2013 +0200 @@ -8,7 +8,9 @@ <file>icons/fileopen.png</file> <file>icons/filesave.png</file> <file>icons/fileprint.png</file> + <file>icons/ok.png</file> <file>icons/redo.png</file> + <file>icons/reload.png</file> <file>icons/search.png</file> <file>icons/undo.png</file> <file>icons/up.png</file>
--- a/libgui/src/settings-dialog.cc Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/settings-dialog.cc Thu Apr 11 19:01:55 2013 +0200 @@ -85,11 +85,12 @@ ui->editor_restoreSession->setChecked (settings->value ("editor/restoreSession",true).toBool ()); ui->terminal_fontName->setCurrentFont (QFont (settings->value ("terminal/fontName","Courier New").toString()) ); ui->terminal_fontSize->setValue (settings->value ("terminal/fontSize",10).toInt ()); - ui->showFileSize->setChecked (settings->value ("showFileSize",false).toBool()); - ui->showFileType->setChecked (settings->value ("showFileType",false).toBool()); - ui->showLastModified->setChecked (settings->value ("showLastModified",false).toBool()); - ui->showHiddenFiles->setChecked (settings->value ("showHiddenFiles",false).toBool()); - ui->useAlternatingRowColors->setChecked (settings->value ("useAlternatingRowColors",true).toBool()); + ui->showFileSize->setChecked (settings->value ("filesdockwidget/showFileSize",false).toBool()); + ui->showFileType->setChecked (settings->value ("filesdockwidget/showFileType",false).toBool()); + ui->showLastModified->setChecked (settings->value ("filesdockwidget/showLastModified",false).toBool()); + ui->showHiddenFiles->setChecked (settings->value ("filesdockwidget/showHiddenFiles",false).toBool()); + ui->useAlternatingRowColors->setChecked (settings->value ("filesdockwidget/useAlternatingRowColors",true).toBool()); + ui->sync_octave_directory->setChecked (settings->value ("filesdockwidget/sync_octave_directory",true).toBool()); ui->useProxyServer->setChecked (settings->value ("useProxyServer",false).toBool ()); ui->proxyHostName->setText (settings->value ("proxyHostName").toString ()); ui->terminal_cursorBlinking->setChecked (settings->value ("terminal/cursorBlinking",true).toBool ()); @@ -255,11 +256,12 @@ settings->setValue ("editor/restoreSession", ui->editor_restoreSession->isChecked ()); settings->setValue ("terminal/fontSize", ui->terminal_fontSize->value()); settings->setValue ("terminal/fontName", ui->terminal_fontName->currentFont().family()); - settings->setValue ("showFileSize", ui->showFileSize->isChecked ()); - settings->setValue ("showFileType", ui->showFileType->isChecked ()); - settings->setValue ("showLastModified", ui->showLastModified->isChecked ()); - settings->setValue ("showHiddenFiles", ui->showHiddenFiles->isChecked ()); - settings->setValue ("useAlternatingRowColors", ui->useAlternatingRowColors->isChecked ()); + settings->setValue ("filesdockwidget/showFileSize", ui->showFileSize->isChecked ()); + settings->setValue ("filesdockwidget/showFileType", ui->showFileType->isChecked ()); + settings->setValue ("filesdockwidget/showLastModified", ui->showLastModified->isChecked ()); + settings->setValue ("filesdockwidget/showHiddenFiles", ui->showHiddenFiles->isChecked ()); + settings->setValue ("filesdockwidget/useAlternatingRowColors", ui->useAlternatingRowColors->isChecked ()); + settings->setValue ("filesdockwidget/sync_octave_directory", ui->sync_octave_directory->isChecked ()); settings->setValue ("useProxyServer", ui->useProxyServer->isChecked ()); settings->setValue ("proxyType", ui->proxyType->currentText ()); settings->setValue ("proxyHostName", ui->proxyHostName->text ());
--- a/libgui/src/settings-dialog.ui Sat Apr 06 01:14:53 2013 -0400 +++ b/libgui/src/settings-dialog.ui Thu Apr 11 19:01:55 2013 +0200 @@ -431,6 +431,13 @@ </widget> </item> <item> + <widget class="QCheckBox" name="sync_octave_directory"> + <property name="text"> + <string>Synchronize octave directory with the file browser</string> + </property> + </widget> + </item> + <item> <widget class="QCheckBox" name="useAlternatingRowColors"> <property name="text"> <string>Alternating row colors</string>