Mercurial > octave-nkf
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)));