# HG changeset patch # User John W. Eaton # Date 1344874586 14400 # Node ID bc801a44bb1f10384856be345cefd4846cfa5c48 # Parent dbc43bd954776d68ecbf73fd938cb35aecb405ed 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. diff -r dbc43bd95477 -r bc801a44bb1f gui/src/files-dockwidget.cc --- 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 ()); diff -r dbc43bd95477 -r bc801a44bb1f gui/src/m-editor/file-editor-tab.cc --- 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 ( diff -r dbc43bd95477 -r bc801a44bb1f gui/src/m-editor/lexer-octave-gui.cc --- 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; } diff -r dbc43bd95477 -r bc801a44bb1f gui/src/main-window.cc --- 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 (); diff -r dbc43bd95477 -r bc801a44bb1f gui/src/octave-gui.cc --- 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 (); diff -r dbc43bd95477 -r bc801a44bb1f gui/src/resource-manager.cc --- 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. " diff -r dbc43bd95477 -r bc801a44bb1f gui/src/resource-manager.h --- 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 +#include +#include #include -#include -#include -#include 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 diff -r dbc43bd95477 -r bc801a44bb1f gui/src/settings-dialog.cc --- 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 ()); diff -r dbc43bd95477 -r bc801a44bb1f gui/src/workspace-view.cc --- 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