mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-26 06:08:42 -05:00
d8a2c1239c
The change also includes a new MultiSettings feature that allows settings keys common to all configurations. The splash screen disable is the first of those to be used. The MultiSettings class has been made safer to use by ensuring it saves and re-enables the current QSettings group when doing multi settings actions. This allows access to common, across configuration, items while within a normal settings group without breaking the MultiSettings internal implementation. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7073 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
95 lines
2.9 KiB
C++
95 lines
2.9 KiB
C++
#ifndef MULTISETTINGS_HPP__
|
|
#define MULTISETTINGS_HPP__
|
|
|
|
#include <QVariant>
|
|
|
|
#include "pimpl_h.hpp"
|
|
|
|
class QSettings;
|
|
class QMainWindow;
|
|
class QMenu;
|
|
class QString;
|
|
|
|
//
|
|
// MultiSettings - Manage multiple configuration names
|
|
//
|
|
// Responsibilities:
|
|
//
|
|
// MultiSettings allows a Qt application to be run with alternative
|
|
// settings as stored in a QSettings INI style file. As far as the
|
|
// application is concerned it uses the QSettings instance returned
|
|
// by the MultiSettings::settings() method as if it were the one and
|
|
// only QSettings object. The alternative settings are stored as
|
|
// QSettings groups which are children of a root level group called
|
|
// MultiSettings. The current settings are themselves stored at the
|
|
// root so the QSettings group name MultiSettings is reserved. Also
|
|
// at the root level a key called CurrentMultiSettingsConfiguration
|
|
// is reserved to store the current configuration name.
|
|
//
|
|
//
|
|
// Example Usage:
|
|
//
|
|
// #include <QApplication>
|
|
// #include "MultiSettings.hpp"
|
|
// #include "MyMainWindow.hpp"
|
|
//
|
|
// int main (int argc, char * argv[]) {
|
|
// QApplication a {argc, argv};
|
|
// MultiSettings multi_settings;
|
|
// int result;
|
|
// do {
|
|
// MyMainWindow main_window {&multi_settings};
|
|
// main_window.show ();
|
|
// result = a.exec ();
|
|
// } while (!result && !multi_settings.exit ());
|
|
// return result;
|
|
// }
|
|
//
|
|
// In the main window call MultiSettings::create_menu_actions() to
|
|
// populate an existing QMenu widget with the configuration switching
|
|
// and maintenance actions. This would normally be done in the main
|
|
// window class constructor:
|
|
//
|
|
// MyMainWindow::MyMainWindow (MultiSettings * multi_settings) {
|
|
// QSettings * settings {multi_settings->settings ()};
|
|
// // ...
|
|
// multi_settings->create_menu_actions (this, ui->configurations_menu);
|
|
// // ...
|
|
// }
|
|
//
|
|
|
|
class MultiSettings
|
|
{
|
|
public:
|
|
explicit MultiSettings ();
|
|
MultiSettings (MultiSettings const&) = delete;
|
|
MultiSettings& operator = (MultiSettings const&) = delete;
|
|
~MultiSettings ();
|
|
|
|
// Add multiple configurations navigation and maintenance actions to
|
|
// a provided menu. The provided main window object instance will
|
|
// have its close() function called when a "Switch To" configuration
|
|
// action is triggered.
|
|
void create_menu_actions (QMainWindow *, QMenu *);
|
|
|
|
// Access to the QSettings object instance.
|
|
QSettings * settings ();
|
|
|
|
// Access to values in a common section
|
|
QVariant common_value (QString const& key, QVariant const& default_value = QVariant {}) const;
|
|
void set_common_value (QString const& key, QVariant const& value);
|
|
void remove_common_value (QString const& key);
|
|
|
|
// Call this to determine if the application is terminating, if it
|
|
// returns false then the application main window should be
|
|
// recreated, shown and the application exec() function called
|
|
// again.
|
|
bool exit ();
|
|
|
|
private:
|
|
class impl;
|
|
pimpl<impl> m_;
|
|
};
|
|
|
|
#endif
|