changeset 15164:bc801a44bb1f

follow Octave pattern for resource_manager singleton * resource-manager.h, resource-manager.cc: Don't expose pointer to instance. Use static forwarding functions to access instance and perform actions. * files-dockwidget.cc, file-editor-tab.cc, lexer-octave-gui.cc, main-window.cc, octave-gui.cc, settings-dialog.cc, workspace-view.cc: Use resource_manager::METHOD instead of resource_manager::instance()->METHOD.
author John W. Eaton <jwe@octave.org>
date Mon, 13 Aug 2012 12:16:26 -0400
parents dbc43bd95477
children 84d7a1ed5f29
files gui/src/files-dockwidget.cc gui/src/m-editor/file-editor-tab.cc gui/src/m-editor/lexer-octave-gui.cc gui/src/main-window.cc gui/src/octave-gui.cc gui/src/resource-manager.cc gui/src/resource-manager.h gui/src/settings-dialog.cc gui/src/workspace-view.cc
diffstat 9 files changed, 189 insertions(+), 110 deletions(-) [+]
line wrap: on
line diff
--- a/gui/src/files-dockwidget.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/files-dockwidget.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -160,7 +160,10 @@
 void
 files_dock_widget::notice_settings ()
 {
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
   _file_tree_view->setColumnHidden (0, !settings->value ("showFilenames").toBool ());
   _file_tree_view->setColumnHidden (1, !settings->value ("showFileSize").toBool ());
   _file_tree_view->setColumnHidden (2, !settings->value ("showFileType").toBool ());
--- a/gui/src/m-editor/file-editor-tab.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/m-editor/file-editor-tab.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -37,7 +37,10 @@
 file_editor_tab::file_editor_tab(file_editor *fileEditor)
   : QWidget ((QWidget*)fileEditor), octave_event_observer ()
 {
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
   _file_editor = fileEditor;
   _file_name = "";
   _edit_area = new QsciScintilla (this);
@@ -284,7 +287,9 @@
       lexer = new QsciLexerBash ();
     }
 
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
 
   // Editor font (default or from settings)
   lexer->setDefaultFont (QFont (
--- a/gui/src/m-editor/lexer-octave-gui.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/m-editor/lexer-octave-gui.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -134,7 +134,7 @@
 {
     if (set == 1)
       {
-        return resource_manager::instance ()->octave_keywords ();
+        return resource_manager::octave_keywords ();
       }
     return 0;
 }
--- a/gui/src/main-window.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/main-window.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -91,7 +91,7 @@
 {
   QString selectedFile =
       QFileDialog::getSaveFileName (this, tr ("Save Workspace"),
-                                    resource_manager::instance ()->get_home_path ());
+                                    resource_manager::get_home_path ());
   if (!selectedFile.isEmpty ())
     {
       octave_link::instance ()
@@ -105,7 +105,7 @@
 {
   QString selectedFile =
       QFileDialog::getOpenFileName (this, tr ("Load Workspace"),
-                                    resource_manager::instance ()->get_home_path ());
+                                    resource_manager::get_home_path ());
   if (!selectedFile.isEmpty ())
     {
       octave_link::instance ()
@@ -166,7 +166,9 @@
 main_window::notice_settings ()
 {
   // Set terminal font:
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
 
   QFont font = QFont();
   font.setFamily(settings->value("terminal/fontName").toString());
@@ -183,7 +185,7 @@
     _terminal->setCursorType(QTerminalInterface::UnderlineCursor,
                              cursorBlinking);
 
-  resource_manager::instance ()->update_network_settings ();
+  resource_manager::update_network_settings ();
 }
 
 void
@@ -414,7 +416,10 @@
 void
 main_window::read_settings ()
 {
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
   restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ());
   restoreState (settings->value ("MainWindow/windowState").toByteArray ());
   emit settings_changed ();
@@ -423,7 +428,10 @@
 void
 main_window::write_settings ()
 {
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
   settings->setValue ("MainWindow/geometry", saveGeometry ());
   settings->setValue ("MainWindow/windowState", saveState ());
   settings->sync ();
--- a/gui/src/octave-gui.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/octave-gui.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -79,23 +79,26 @@
 
   while (true)
     {
-      if (resource_manager::instance ()->is_first_run ())
+      if (resource_manager::is_first_run ())
         {
           welcome_wizard welcomeWizard;
           welcomeWizard.exec ();
-          resource_manager::instance ()->reload_settings ();
+          resource_manager::reload_settings ();
         }
       else
         {
-          QSettings *settings = resource_manager::instance ()->get_settings ();
+          QSettings *settings = resource_manager::get_settings ();
+
+          // FIXME -- what should happen if settings is 0?
+
           QString language = settings->value ("language").toString ();
 
-          QString translatorFile = resource_manager::instance ()->find_translator_file (language);
+          QString translatorFile = resource_manager::find_translator_file (language);
           QTranslator translator;
           translator.load (translatorFile);
           application.installTranslator (&translator);
 
-          resource_manager::instance ()->update_network_settings ();
+          resource_manager::update_network_settings ();
 
           main_window w;
           w.show ();
--- a/gui/src/resource-manager.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/resource-manager.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -34,51 +34,59 @@
 
 #include "resource-manager.h"
 
-resource_manager *resource_manager::_instance = 0;
+resource_manager *resource_manager::instance = 0;
+
+resource_manager::resource_manager (void)
+  : settings (0), home_path (), first_run (false)
+{
+  do_reload_settings ();
+}
+
+resource_manager::~resource_manager (void)
+{
+  delete settings;
+}
+
+QString
+resource_manager::find_translator_file (QString language)
+{
+  // TODO: Quick hack to be able to test language files.
+  return QString ("../languages/%1.qm").arg (language);
+}
 
 bool
-resource_manager::instance_ok ()
+resource_manager::instance_ok (void)
 {
   bool retval = true;
 
-  if (! _instance)
+  if (! instance)
     {
-      _instance = new resource_manager ();
+      instance = new resource_manager ();
 
-      if (_instance)
+      if (instance)
         singleton_cleanup_list::add (cleanup_instance);
     }
 
-  if (! _instance)
+  if (! instance)
     {
       ::error ("unable to create resource_manager object!");
+
+      retval = false;
     }
 
   return retval;
 }
 
-resource_manager::resource_manager ()
+QSettings *
+resource_manager::do_get_settings (void)
 {
-  _settings = 0;
-  _first_run = false;
-  reload_settings ();
-}
-
-resource_manager::~resource_manager ()
-{
-  delete _settings;
-}
-
-QSettings *
-resource_manager::get_settings ()
-{
-  return _settings;
+  return settings;
 }
 
 QString
-resource_manager::get_home_path ()
+resource_manager::do_get_home_path (void)
 {
-  return _home_path;
+  return home_path;
 }
 
 static std::string
@@ -93,11 +101,11 @@
 }
 
 void
-resource_manager::reload_settings ()
+resource_manager::do_reload_settings (void)
 {
   QDesktopServices desktopServices;
-  _home_path = desktopServices.storageLocation (QDesktopServices::HomeLocation);
-  QString settings_path = _home_path + "/.config/octave/";
+  home_path = desktopServices.storageLocation (QDesktopServices::HomeLocation);
+  QString settings_path = home_path + "/.config/octave/";
   QString settings_file = settings_path + "qt-settings";
 
   if (!QFile::exists (settings_file))
@@ -105,63 +113,55 @@
      QDir("/").mkpath (settings_path);
      QFile::copy (QString::fromStdString (default_qt_settings_file ()),
                   settings_file);
-     _first_run = true;
+     first_run = true;
    }
   else
-     _first_run = false;
+     first_run = false;
+
+  do_set_settings (settings_file);
+}
 
-  set_settings (settings_file);
+void
+resource_manager::do_set_settings (QString file)
+{
+  delete settings;
+  settings = new QSettings (file, QSettings::IniFormat);
+}
+
+bool
+resource_manager::do_is_first_run (void)
+{
+  return first_run;
 }
 
 void
-resource_manager::set_settings (QString file)
-{
-  delete _settings;
-  _settings = new QSettings (file, QSettings::IniFormat);
-}
-
-QString
-resource_manager::find_translator_file (QString language)
-{
-  // TODO: Quick hack to be able to test language files.
-  return QString("../languages/%1.qm").arg(language);
-}
-
-
-bool
-resource_manager::is_first_run ()
-{
-  return _first_run;
-}
-
-void
-resource_manager::update_network_settings ()
+resource_manager::do_update_network_settings (void)
 {
   QNetworkProxy::ProxyType proxyType = QNetworkProxy::NoProxy;
-  if (_settings->value ("useProxyServer").toBool ())
+
+  if (settings->value ("useProxyServer").toBool ())
     {
-      QString proxyTypeString = _settings->value ("proxyType").toString ();
+      QString proxyTypeString = settings->value ("proxyType").toString ();
+
       if (proxyTypeString == "Socks5Proxy")
-        {
-          proxyType = QNetworkProxy::Socks5Proxy;
-        }
+        proxyType = QNetworkProxy::Socks5Proxy;
       else if (proxyTypeString == "HttpProxy")
-        {
-          proxyType = QNetworkProxy::HttpProxy;
-        }
+        proxyType = QNetworkProxy::HttpProxy;
     }
 
   QNetworkProxy proxy;
+
   proxy.setType (proxyType);
-  proxy.setHostName (_settings->value ("proxyHostName").toString ());
-  proxy.setPort (_settings->value ("proxyPort").toInt ());
-  proxy.setUser (_settings->value ("proxyUserName").toString ());
-  proxy.setPassword (_settings->value ("proxyPassword").toString ());
+  proxy.setHostName (settings->value ("proxyHostName").toString ());
+  proxy.setPort (settings->value ("proxyPort").toInt ());
+  proxy.setUser (settings->value ("proxyUserName").toString ());
+  proxy.setPassword (settings->value ("proxyPassword").toString ());
+
   QNetworkProxy::setApplicationProxy (proxy);
 }
 
 const char*
-resource_manager::octave_keywords ()
+resource_manager::octave_keywords (void)
 {
   return
       ".nargin. "
--- a/gui/src/resource-manager.h	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/resource-manager.h	Mon Aug 13 12:16:26 2012 -0400
@@ -18,44 +18,89 @@
 #ifndef RESOURCEMANAGER_H
 #define RESOURCEMANAGER_H
 
+#include <QDesktopServices>
+#include <QIcon>
+#include <QMap>
 #include <QSettings>
-#include <QDesktopServices>
-#include <QMap>
-#include <QIcon>
 
 class resource_manager
 {
+protected:
+
+  resource_manager (void);
+
 public:
 
   ~resource_manager ();
 
-  static resource_manager *
-  instance ()
+  static QSettings *get_settings (void)
+  {
+    return instance_ok () ? instance->do_get_settings () : 0;
+  }
+
+  static QString get_home_path (void)
+  {
+    return instance_ok () ? instance->do_get_home_path () : QString ();
+  }
+
+  static void reload_settings (void)
   {
-    return (instance_ok ()) ? _instance : 0;
+    if (instance_ok ())
+      instance->do_reload_settings ();
+  }
+
+  static void set_settings (QString file)
+  {
+    if (instance_ok ())
+      instance->do_set_settings (file);
+  }
+
+  static QString find_translator_file (QString language);
+
+  static void update_network_settings (void)
+  {
+    if (instance_ok ())
+      instance->do_update_network_settings ();
   }
 
-  QSettings *get_settings ();
-  QString get_home_path ();
-  void reload_settings ();
-  void set_settings (QString file);
-  QString find_translator_file (QString language);
-  void update_network_settings ();
+  static bool is_first_run (void)
+  {
+    return instance_ok () ? instance->do_is_first_run () : true;
+  }
 
-  bool is_first_run ();
-  const char *octave_keywords ();
+  static const char *octave_keywords (void);
 
 private:
-  resource_manager ();
+
+  static resource_manager *instance;
+
+  static void cleanup_instance (void) { delete instance; instance = 0; }
+
+  // No copying!
 
-  static bool instance_ok ();
+  resource_manager (const resource_manager&);
+
+  resource_manager& operator = (const resource_manager&);
+
+  static bool instance_ok (void);
+
+  QSettings *settings;
 
-  static void cleanup_instance () { delete _instance; _instance = 0; }
+  QString home_path;
+
+  bool first_run;
+
+  QSettings *do_get_settings (void);
+
+  QString do_get_home_path (void);
 
-  QSettings *_settings;
-  QString _home_path;
-  static resource_manager *_instance;
-  bool _first_run;
+  void do_reload_settings (void);
+
+  void do_set_settings (QString file);
+
+  void do_update_network_settings (void);
+
+  bool do_is_first_run (void);
 };
 
 #endif // RESOURCEMANAGER_H
--- a/gui/src/settings-dialog.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/settings-dialog.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -25,7 +25,10 @@
 {
   ui->setupUi (this);
 
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
   ui->useCustomFileEditor->setChecked (settings->value ("useCustomFileEditor").toBool ());
   ui->customFileEditor->setText (settings->value ("customFileEditor").toString ());
   ui->editor_showLineNumbers->setChecked (settings->value ("editor/showLineNumbers",true).toBool () );
@@ -77,7 +80,10 @@
 
 settings_dialog::~settings_dialog ()
 {
-  QSettings *settings = resource_manager::instance ()->get_settings ();
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
   settings->setValue ("useCustomFileEditor", ui->useCustomFileEditor->isChecked ());
   settings->setValue ("customFileEditor", ui->customFileEditor->text ());
   settings->setValue ("editor/showLineNumbers", ui->editor_showLineNumbers->isChecked ());
--- a/gui/src/workspace-view.cc	Mon Aug 13 10:32:19 2012 -0400
+++ b/gui/src/workspace-view.cc	Mon Aug 13 12:16:26 2012 -0400
@@ -50,10 +50,15 @@
   widget ()->setLayout (layout);
 
   // Initialize collapse/expand state of the workspace subcategories.
-  _explicit_collapse.local      = resource_manager::instance ()->get_settings ()->value ("workspaceview/local_collapsed", false).toBool ();
-  _explicit_collapse.global     = resource_manager::instance ()->get_settings ()->value ("workspaceview/global_collapsed", false).toBool ();;
-  _explicit_collapse.persistent = resource_manager::instance ()->get_settings ()->value ("workspaceview/persistent_collapsed", false).toBool ();;
-  _explicit_collapse.hidden     = resource_manager::instance ()->get_settings ()->value ("workspaceview/hidden_collapsed", false).toBool ();;
+
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  _explicit_collapse.local      = settings->value ("workspaceview/local_collapsed", false).toBool ();
+  _explicit_collapse.global     = settings->value ("workspaceview/global_collapsed", false).toBool ();;
+  _explicit_collapse.persistent = settings->value ("workspaceview/persistent_collapsed", false).toBool ();;
+  _explicit_collapse.hidden     = settings->value ("workspaceview/hidden_collapsed", false).toBool ();;
 
   // Connect signals and slots.
   connect (this, SIGNAL (visibilityChanged (bool)),
@@ -74,10 +79,14 @@
 
 workspace_view::~workspace_view ()
 {
-  resource_manager::instance ()->get_settings ()->setValue("workspaceview/local_collapsed", _explicit_collapse.local);
-  resource_manager::instance ()->get_settings ()->setValue("workspaceview/global_collapsed", _explicit_collapse.global);
-  resource_manager::instance ()->get_settings ()->setValue("workspaceview/persistent_collapsed", _explicit_collapse.persistent);
-  resource_manager::instance ()->get_settings ()->setValue("workspaceview/hidden_collapsed", _explicit_collapse.hidden);
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  settings->setValue("workspaceview/local_collapsed", _explicit_collapse.local);
+  settings->setValue("workspaceview/global_collapsed", _explicit_collapse.global);
+  settings->setValue("workspaceview/persistent_collapsed", _explicit_collapse.persistent);
+  settings->setValue("workspaceview/hidden_collapsed", _explicit_collapse.hidden);
 }
 
 void