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 };
 };
 
Binary file libgui/src/icons/ok.png has changed
Binary file libgui/src/icons/reload.png has changed
--- 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>