diff libgui/src/main-window.cc @ 16593:e13051d7a472

allow GUI window layout to be restored * main-window.h, main-window.cc (main_window::set_window_layout): New function. (main_window::read_settings): Call set_window_layout for current settings. (main_window::reset_windows): Call set_window_layout for default settings. (main_window::construct_window_menu): Enable reset_windows_action. * resource-manager.h, resource-manager.cc (default_qt_settings_file): Return QString instead of std::string. Change all callers. (resource_manager::default_settings): New member variable. (resource_manager::resource_manager): Initialize default_settings. (resource_manager::~resource_manager): Delete default_settings. (resource_manager::get_default_settings, resource_manager::do_get_default_settings): New functions. (resource_manager::do_is_first_run, resource_manager::do_get_settings, resource_manager::do_get_home_path): Now const.
author John W. Eaton <jwe@octave.org>
date Mon, 29 Apr 2013 17:40:41 -0400
parents fa4a035e0cf4
children 25e418d23a4b
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Mon Apr 29 16:47:23 2013 -0400
+++ b/libgui/src/main-window.cc	Mon Apr 29 17:40:41 2013 -0400
@@ -326,9 +326,11 @@
 }
 
 void
-main_window::reset_windows ()
+main_window::reset_windows (void)
 {
-  // TODO: Implement.
+  QSettings *settings = resource_manager::get_default_settings ();
+
+  set_window_layout (settings);
 }
 
 void
@@ -520,32 +522,15 @@
 main_window::read_settings (void)
 {
   QSettings *settings = resource_manager::get_settings ();
+
   if (!settings)
     {
       qDebug("Error: QSettings pointer from resource manager is NULL.");
       return;
     }
 
-  restoreState (settings->value ("MainWindow/windowState").toByteArray ());
-  settings->beginGroup ("DockWidgets");
-  // restoring the geometry of all dock-widgets
-  foreach (QObject *obj, children ())
-    {
-      QString name = obj->objectName ();
-      if (obj->inherits ("QDockWidget") && ! name.isEmpty ())
-        {
-          QDockWidget *widget = qobject_cast<QDockWidget *> (obj);
-          QVariant val = settings->value (name);
-          widget->restoreGeometry (val.toByteArray ());
-          bool floating = settings->value (name+"Floating", false).toBool ();
-          bool visible = settings->value (name+"Visible", true).toBool ();
-          if (floating)
-            widget->setWindowFlags (Qt::Window); // if floating, make window from widget
-          widget->setVisible (visible);          // make widget visible if desired (setWindowFlags hides widget)
-        }
-    }
-  settings->endGroup();
-  restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ());
+  set_window_layout (settings);
+
   // restore the list of the last directories
   QStringList curr_dirs = settings->value ("MainWindow/current_directory_list").toStringList ();
   for (int i=0; i < curr_dirs.size (); i++)
@@ -556,6 +541,41 @@
 }
 
 void
+main_window::set_window_layout (QSettings *settings)
+{
+  restoreState (settings->value ("MainWindow/windowState").toByteArray ());
+
+  settings->beginGroup ("DockWidgets");
+
+  // Restore the geometry of all dock-widgets
+  foreach (QObject *obj, children ())
+    {
+      QString name = obj->objectName ();
+
+      if (obj->inherits ("QDockWidget") && ! name.isEmpty ())
+        {
+          QDockWidget *widget = qobject_cast<QDockWidget *> (obj);
+          QVariant val = settings->value (name);
+
+          widget->restoreGeometry (val.toByteArray ());
+
+          // If floating, make window from widget.
+          bool floating = settings->value (name+"Floating", false).toBool ();
+          if (floating)
+            widget->setWindowFlags (Qt::Window);
+
+          // make widget visible if desired (setWindowFlags hides widget).
+          bool visible = settings->value (name+"Visible", true).toBool ();
+          widget->setVisible (visible);
+        }
+    }
+
+  settings->endGroup ();
+
+  restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ());
+}
+
+void
 main_window::write_settings (void)
 {
   QSettings *settings = resource_manager::get_settings ();
@@ -1194,9 +1214,7 @@
   window_menu->addSeparator ();
 
   QAction *reset_windows_action
-    = window_menu->addAction (tr ("Reset Windows"));
-
-  reset_windows_action->setEnabled (false); // TODO: Make this work.
+    = window_menu->addAction (tr ("Reset Default Window Layout"));
 
   connect (show_command_window_action, SIGNAL (toggled (bool)),
            command_window, SLOT (setVisible (bool)));