2015-12-06 10:18:31 +00:00
# include "state.hpp"
# include <stdexcept>
2015-12-06 11:06:28 +00:00
# include <algorithm>
2015-12-08 16:21:58 +00:00
# include <sstream>
# include "intsetting.hpp"
2015-12-10 09:58:38 +00:00
# include "doublesetting.hpp"
2015-12-10 12:28:48 +00:00
# include "boolsetting.hpp"
2015-12-11 10:15:14 +00:00
# include "coloursetting.hpp"
2015-12-06 10:18:31 +00:00
CSMPrefs : : State * CSMPrefs : : State : : sThis = 0 ;
void CSMPrefs : : State : : load ( )
{
// default settings file
boost : : filesystem : : path local = mConfigurationManager . getLocalPath ( ) / mConfigFile ;
boost : : filesystem : : path global = mConfigurationManager . getGlobalPath ( ) / mConfigFile ;
if ( boost : : filesystem : : exists ( local ) )
mSettings . loadDefault ( local . string ( ) ) ;
else if ( boost : : filesystem : : exists ( global ) )
mSettings . loadDefault ( global . string ( ) ) ;
else
2015-12-15 13:51:25 +00:00
throw std : : runtime_error ( " No default settings file found! Make sure the file \" openmw-cs.cfg \" was properly installed. " ) ;
2015-12-06 10:18:31 +00:00
// user settings file
boost : : filesystem : : path user = mConfigurationManager . getUserConfigPath ( ) / mConfigFile ;
if ( boost : : filesystem : : exists ( user ) )
mSettings . loadUser ( user . string ( ) ) ;
}
void CSMPrefs : : State : : declare ( )
{
2015-12-08 08:56:42 +00:00
declareCategory ( " Windows " ) ;
2015-12-08 16:21:58 +00:00
declareInt ( " default-width " , " Default window width " , 800 ) .
setTooltip ( " Newly opened top-level windows will open with this width. " ) .
setMin ( 80 ) ;
declareInt ( " default-height " , " Default window height " , 600 ) .
setTooltip ( " Newly opened top-level windows will open with this height. " ) .
setMin ( 80 ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " show-statusbar " , " Show Status Bar " , true ) .
setTooltip ( " If a newly open top level window is showing status bars or not. "
" Note that this does not affect existing windows. " ) ;
2015-12-11 10:32:55 +00:00
declareSeparator ( ) ;
declareBool ( " reuse " , " Reuse Subviews " , true ) .
setTooltip ( " When a new subview is requested and a matching subview already "
" exist, do not open a new subview and use the existing one instead. " ) ;
2015-12-08 16:21:58 +00:00
declareInt ( " max-subviews " , " Maximum number of subviews per top-level window " , 256 ) .
setTooltip ( " If the maximum number is reached and a new subview is opened "
" it will be placed into a new top-level window. " ) .
setRange ( 1 , 256 ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " hide-subview " , " Hide single subview " , false ) .
setTooltip ( " When a view contains only a single subview, hide the subview title "
" bar and if this subview is closed also close the view (unless it is the last "
" view for this document) " ) ;
2015-12-08 16:21:58 +00:00
declareInt ( " minimum-width " , " Minimum subview width " , 325 ) .
setTooltip ( " Minimum width of subviews. " ) .
setRange ( 50 , 10000 ) ;
2015-12-11 10:32:55 +00:00
declareSeparator ( ) ;
2015-12-10 16:33:14 +00:00
EnumValue scrollbarOnly ( " Scrollbar Only " , " Simple addition of scrollbars, the view window "
" does not grow automatically. " ) ;
declareEnum ( " mainwindow-scrollbar " , " Horizontal scrollbar mode for main window. " , scrollbarOnly ) .
addValue ( scrollbarOnly ) .
addValue ( " Grow Only " , " The view window grows as subviews are added. No scrollbars. " ) .
addValue ( " Grow then Scroll " , " The view window grows. The scrollbar appears once it cannot grow any further. " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " grow-limit " , " Grow Limit Screen " , false ) .
setTooltip ( " When \" Grow then Scroll \" option is selected, the window size grows to "
" the width of the virtual desktop. \n If this option is selected the the window growth "
" is limited to the current screen. " ) ;
2015-12-06 10:18:31 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " Records " ) ;
2015-12-10 16:33:14 +00:00
EnumValue iconAndText ( " Icon and Text " ) ;
EnumValues recordValues ;
2015-12-15 11:26:08 +00:00
recordValues . add ( iconAndText ) . add ( " Icon Only " ) . add ( " Text Only " ) ;
2015-12-10 16:33:14 +00:00
declareEnum ( " status-format " , " Modification status display format " , iconAndText ) .
addValues ( recordValues ) ;
declareEnum ( " type-format " , " ID type display format " , iconAndText ) .
addValues ( recordValues ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " ID Tables " ) ;
2015-12-10 16:33:14 +00:00
EnumValue inPlaceEdit ( " Edit in Place " , " Edit the clicked cell " ) ;
EnumValue editRecord ( " Edit Record " , " Open a dialogue subview for the clicked record " ) ;
EnumValue view ( " View " , " Open a scene subview for the clicked record (not available everywhere) " ) ;
EnumValue editRecordAndClose ( " Edit Record and Close " ) ;
EnumValues doubleClickValues ;
doubleClickValues . add ( inPlaceEdit ) . add ( editRecord ) . add ( view ) . add ( " Revert " ) .
add ( " Delete " ) . add ( editRecordAndClose ) .
add ( " View and Close " , " Open a scene subview for the clicked record and close the table subview " ) ;
declareEnum ( " double " , " Double Click " , inPlaceEdit ) . addValues ( doubleClickValues ) ;
declareEnum ( " double-s " , " Shift Double Click " , editRecord ) . addValues ( doubleClickValues ) ;
declareEnum ( " double-c " , " Control Double Click " , view ) . addValues ( doubleClickValues ) ;
declareEnum ( " double-sc " , " Shift Control Double Click " , editRecordAndClose ) . addValues ( doubleClickValues ) ;
2015-12-11 10:32:55 +00:00
declareSeparator ( ) ;
2015-12-10 16:33:14 +00:00
EnumValue jumpAndSelect ( " Jump and Select " , " Scroll new record into view and make it the selection " ) ;
declareEnum ( " jump-to-added " , " Action on adding or cloning a record " , jumpAndSelect ) .
addValue ( jumpAndSelect ) .
addValue ( " Jump Only " , " Scroll new record into view " ) .
addValue ( " No Jump " , " No special action " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " extended-config " ,
" Manually specify affected record types for an extended delete/revert " , false ) .
setTooltip ( " Delete and revert commands have an extended form that also affects "
" associated records. \n \n "
" If this option is enabled, types of affected records are selected "
" manually before a command execution. \n Otherwise, all associated "
" records are deleted/reverted immediately. " ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " ID Dialogues " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " toolbar " , " Show toolbar " , true ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " Reports " ) ;
2015-12-10 16:33:14 +00:00
EnumValue actionNone ( " None " ) ;
EnumValue actionEdit ( " Edit " , " Open a table or dialogue suitable for addressing the listed report " ) ;
EnumValue actionRemove ( " Remove " , " Remove the report from the report table " ) ;
EnumValue actionEditAndRemove ( " Edit And Remove " , " Open a table or dialogue suitable for addressing the listed report, then remove the report from the report table " ) ;
EnumValues reportValues ;
reportValues . add ( actionNone ) . add ( actionEdit ) . add ( actionRemove ) . add ( actionEditAndRemove ) ;
declareEnum ( " double " , " Double Click " , actionEdit ) . addValues ( reportValues ) ;
declareEnum ( " double-s " , " Shift Double Click " , actionRemove ) . addValues ( reportValues ) ;
declareEnum ( " double-c " , " Control Double Click " , actionEditAndRemove ) . addValues ( reportValues ) ;
declareEnum ( " double-sc " , " Shift Control Double Click " , actionNone ) . addValues ( reportValues ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " Search & Replace " ) ;
2015-12-08 16:21:58 +00:00
declareInt ( " char-before " , " Characters before search string " , 10 ) .
setTooltip ( " Maximum number of character to display in search result before the searched text " ) ;
declareInt ( " char-after " , " Characters after search string " , 10 ) .
setTooltip ( " Maximum number of character to display in search result after the searched text " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " auto-delete " , " Delete row from result table after a successful replace " , true ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " Scripts " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " show-linenum " , " Show Line Numbers " , true ) .
setTooltip ( " Show line numbers to the left of the script editor window. "
" The current row and column numbers of the text cursor are shown at the bottom. " ) ;
2016-01-28 11:28:31 +00:00
declareBool ( " wrap-lines " , " Wrap Lines " , false ) .
setTooltip ( " Wrap lines longer than width of script editor. " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " mono-font " , " Use monospace font " , true ) ;
2015-12-10 16:33:14 +00:00
EnumValue warningsNormal ( " Normal " , " Report warnings as warning " ) ;
declareEnum ( " warnings " , " Warning Mode " , warningsNormal ) .
addValue ( " Ignore " , " Do not report warning " ) .
addValue ( warningsNormal ) .
2016-01-26 18:41:05 +00:00
addValue ( " Strict " , " Promote warning to an error " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " toolbar " , " Show toolbar " , true ) ;
2015-12-08 16:21:58 +00:00
declareInt ( " compile-delay " , " Delay between updating of source errors " , 100 ) .
setTooltip ( " Delay in milliseconds " ) .
setRange ( 0 , 10000 ) ;
declareInt ( " error-height " , " Initial height of the error panel " , 100 ) .
setRange ( 100 , 10000 ) ;
2015-12-11 10:32:55 +00:00
declareSeparator ( ) ;
2015-12-11 10:15:14 +00:00
declareColour ( " colour-int " , " Highlight Colour: Integer Literals " , QColor ( " darkmagenta " ) ) ;
declareColour ( " colour-float " , " Highlight Colour: Float Literals " , QColor ( " magenta " ) ) ;
declareColour ( " colour-name " , " Highlight Colour: Names " , QColor ( " grey " ) ) ;
declareColour ( " colour-keyword " , " Highlight Colour: Keywords " , QColor ( " red " ) ) ;
declareColour ( " colour-special " , " Highlight Colour: Special Characters " , QColor ( " darkorange " ) ) ;
declareColour ( " colour-comment " , " Highlight Colour: Comments " , QColor ( " green " ) ) ;
declareColour ( " colour-id " , " Highlight Colour: IDs " , QColor ( " blue " ) ) ;
2015-12-14 16:38:33 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " General Input " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " cycle " , " Cyclic next/previous " , false ) .
setTooltip ( " When using next/previous functions at the last/first item of a "
" list go to the first/last item " ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " 3D Scene Input " ) ;
2015-12-10 16:33:14 +00:00
EnumValue left ( " Left Mouse-Button " ) ;
EnumValue cLeft ( " Ctrl-Left Mouse-Button " ) ;
EnumValue right ( " Right Mouse-Button " ) ;
EnumValue cRight ( " Ctrl-Right Mouse-Button " ) ;
EnumValue middle ( " Middle Mouse-Button " ) ;
EnumValue cMiddle ( " Ctrl-Middle Mouse-Button " ) ;
EnumValues inputButtons ;
inputButtons . add ( left ) . add ( cLeft ) . add ( right ) . add ( cRight ) . add ( middle ) . add ( cMiddle ) ;
declareEnum ( " p-navi " , " Primary Camera Navigation Button " , left ) . addValues ( inputButtons ) ;
declareEnum ( " s-navi " , " Secondary Camera Navigation Button " , cLeft ) . addValues ( inputButtons ) ;
2016-03-26 18:35:03 +00:00
declareDouble ( " p-navi-sensitivity " , " Camera Sensitivity " , 1 / 650. ) . setPrecision ( 4 ) . setRange ( - 2.0 , 2.0 ) ;
2016-03-26 18:15:07 +00:00
declareDouble ( " s-navi-sensitivity " , " Secondary Camera Movement Sensitivity " , 50.0 ) . setRange ( - 1000.0 , 1000.0 ) ;
2016-03-26 02:19:44 +00:00
declareDouble ( " navi-wheel-factor " , " Camera Zoom Sensitivity " , 8 ) . setRange ( - 100.0 , 100.0 ) ;
declareDouble ( " navi-free-lin-speed " , " Free Camera Linear Speed " , 1000.0 ) . setRange ( 1.0 , 10000.0 ) ;
declareDouble ( " navi-free-rot-speed " , " Free Camera Rotational Speed " , 3.14 / 2 ) . setRange ( 0.001 , 6.28 ) ;
declareDouble ( " navi-free-speed-mult " , " Free Camera Speed Multiplier (from Modifier) " , 8 ) . setRange ( 0.001 , 1000.0 ) ;
declareDouble ( " navi-orbit-rot-speed " , " Orbital Camera Rotational Speed " , 3.14 / 4 ) . setRange ( 0.001 , 6.28 ) ;
declareDouble ( " navi-orbit-speed-mult " , " Orbital Camera Speed Multiplier (from Modifier) " , 4 ) . setRange ( 0.001 , 1000.0 ) ;
2015-12-10 16:33:14 +00:00
declareEnum ( " p-edit " , " Primary Editing Button " , right ) . addValues ( inputButtons ) ;
declareEnum ( " s-edit " , " Secondary Editing Button " , cRight ) . addValues ( inputButtons ) ;
declareEnum ( " p-select " , " Primary Selection Button " , middle ) . addValues ( inputButtons ) ;
declareEnum ( " s-select " , " Secondary Selection Button " , cMiddle ) . addValues ( inputButtons ) ;
2015-12-11 10:32:55 +00:00
declareSeparator ( ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " context-select " , " Context Sensitive Selection " , false ) ;
2015-12-10 09:58:38 +00:00
declareDouble ( " drag-factor " , " Mouse sensitivity during drag operations " , 1.0 ) .
setRange ( 0.001 , 100.0 ) ;
declareDouble ( " drag-wheel-factor " , " Mouse wheel sensitivity during drag operations " , 1.0 ) .
setRange ( 0.001 , 100.0 ) ;
declareDouble ( " drag-shift-factor " ,
" Shift-acceleration factor during drag operations " , 4.0 ) .
setTooltip ( " Acceleration factor during drag operations while holding down shift " ) .
setRange ( 0.001 , 100.0 ) ;
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ( " Tooltips " ) ;
2015-12-10 12:28:48 +00:00
declareBool ( " scene " , " Show Tooltips in 3D scenes " , true ) ;
declareBool ( " scene-hide-basic " , " Hide basic 3D scenes tooltips " , false ) ;
2015-12-08 16:21:58 +00:00
declareInt ( " scene-delay " , " Tooltip delay in milliseconds " , 500 ) .
setMin ( 1 ) ;
2016-01-11 08:03:02 +00:00
2016-01-14 12:20:01 +00:00
EnumValue createAndInsert ( " Create cell and insert " ) ;
EnumValue showAndInsert ( " Show cell and insert " ) ;
EnumValue dontInsert ( " Discard " ) ;
EnumValue insertAnyway ( " Insert anyway " ) ;
EnumValues insertOutsideCell ;
insertOutsideCell . add ( createAndInsert ) . add ( dontInsert ) . add ( insertAnyway ) ;
EnumValues insertOutsideVisibleCell ;
insertOutsideVisibleCell . add ( showAndInsert ) . add ( dontInsert ) . add ( insertAnyway ) ;
2016-01-11 08:03:02 +00:00
declareCategory ( " Scene Drops " ) ;
declareInt ( " distance " , " Drop Distance " , 50 ) .
setTooltip ( " If an instance drop can not be placed against another object at the "
" insert point, it will be placed by this distance from the insert point instead " ) ;
2016-01-14 12:20:01 +00:00
declareEnum ( " outside-drop " , " Handling drops outside of cells " , createAndInsert ) .
addValues ( insertOutsideCell ) ;
declareEnum ( " outside-visible-drop " , " Handling drops outside of visible cells " , showAndInsert ) .
addValues ( insertOutsideVisibleCell ) ;
2015-12-06 11:06:28 +00:00
}
2015-12-08 08:56:42 +00:00
void CSMPrefs : : State : : declareCategory ( const std : : string & key )
2015-12-06 11:06:28 +00:00
{
std : : map < std : : string , Category > : : iterator iter = mCategories . find ( key ) ;
if ( iter ! = mCategories . end ( ) )
{
mCurrentCategory = iter ;
}
else
{
mCurrentCategory =
2015-12-08 08:56:42 +00:00
mCategories . insert ( std : : make_pair ( key , Category ( this , key ) ) ) . first ;
2015-12-06 11:06:28 +00:00
}
2015-12-06 10:18:31 +00:00
}
2015-12-08 16:21:58 +00:00
CSMPrefs : : IntSetting & CSMPrefs : : State : : declareInt ( const std : : string & key ,
const std : : string & label , int default_ )
{
if ( mCurrentCategory = = mCategories . end ( ) )
throw std : : logic_error ( " no category for setting " ) ;
std : : ostringstream stream ;
stream < < default_ ;
setDefault ( key , stream . str ( ) ) ;
default_ = mSettings . getInt ( key , mCurrentCategory - > second . getKey ( ) ) ;
CSMPrefs : : IntSetting * setting =
2015-12-15 11:19:48 +00:00
new CSMPrefs : : IntSetting ( & mCurrentCategory - > second , & mSettings , & mMutex , key , label ,
default_ ) ;
2015-12-08 16:21:58 +00:00
mCurrentCategory - > second . addSetting ( setting ) ;
return * setting ;
}
2015-12-10 09:58:38 +00:00
CSMPrefs : : DoubleSetting & CSMPrefs : : State : : declareDouble ( const std : : string & key ,
const std : : string & label , double default_ )
{
if ( mCurrentCategory = = mCategories . end ( ) )
throw std : : logic_error ( " no category for setting " ) ;
std : : ostringstream stream ;
stream < < default_ ;
setDefault ( key , stream . str ( ) ) ;
default_ = mSettings . getFloat ( key , mCurrentCategory - > second . getKey ( ) ) ;
CSMPrefs : : DoubleSetting * setting =
2015-12-15 11:19:48 +00:00
new CSMPrefs : : DoubleSetting ( & mCurrentCategory - > second , & mSettings , & mMutex ,
key , label , default_ ) ;
2015-12-10 09:58:38 +00:00
mCurrentCategory - > second . addSetting ( setting ) ;
return * setting ;
}
2015-12-10 12:28:48 +00:00
CSMPrefs : : BoolSetting & CSMPrefs : : State : : declareBool ( const std : : string & key ,
const std : : string & label , bool default_ )
{
if ( mCurrentCategory = = mCategories . end ( ) )
throw std : : logic_error ( " no category for setting " ) ;
setDefault ( key , default_ ? " true " : " false " ) ;
default_ = mSettings . getBool ( key , mCurrentCategory - > second . getKey ( ) ) ;
CSMPrefs : : BoolSetting * setting =
2015-12-15 11:19:48 +00:00
new CSMPrefs : : BoolSetting ( & mCurrentCategory - > second , & mSettings , & mMutex , key , label ,
default_ ) ;
2015-12-10 12:28:48 +00:00
mCurrentCategory - > second . addSetting ( setting ) ;
return * setting ;
}
2015-12-10 16:33:14 +00:00
CSMPrefs : : EnumSetting & CSMPrefs : : State : : declareEnum ( const std : : string & key ,
const std : : string & label , EnumValue default_ )
{
if ( mCurrentCategory = = mCategories . end ( ) )
throw std : : logic_error ( " no category for setting " ) ;
setDefault ( key , default_ . mValue ) ;
default_ . mValue = mSettings . getString ( key , mCurrentCategory - > second . getKey ( ) ) ;
CSMPrefs : : EnumSetting * setting =
2015-12-15 11:19:48 +00:00
new CSMPrefs : : EnumSetting ( & mCurrentCategory - > second , & mSettings , & mMutex , key , label ,
default_ ) ;
2015-12-10 16:33:14 +00:00
mCurrentCategory - > second . addSetting ( setting ) ;
return * setting ;
}
2015-12-11 10:15:14 +00:00
CSMPrefs : : ColourSetting & CSMPrefs : : State : : declareColour ( const std : : string & key ,
const std : : string & label , QColor default_ )
{
if ( mCurrentCategory = = mCategories . end ( ) )
throw std : : logic_error ( " no category for setting " ) ;
setDefault ( key , default_ . name ( ) . toUtf8 ( ) . data ( ) ) ;
default_ . setNamedColor ( QString : : fromUtf8 ( mSettings . getString ( key , mCurrentCategory - > second . getKey ( ) ) . c_str ( ) ) ) ;
CSMPrefs : : ColourSetting * setting =
2015-12-15 11:19:48 +00:00
new CSMPrefs : : ColourSetting ( & mCurrentCategory - > second , & mSettings , & mMutex , key , label ,
default_ ) ;
2015-12-11 10:15:14 +00:00
mCurrentCategory - > second . addSetting ( setting ) ;
return * setting ;
}
2015-12-11 10:32:55 +00:00
void CSMPrefs : : State : : declareSeparator ( )
{
if ( mCurrentCategory = = mCategories . end ( ) )
throw std : : logic_error ( " no category for setting " ) ;
CSMPrefs : : Setting * setting =
2015-12-15 11:19:48 +00:00
new CSMPrefs : : Setting ( & mCurrentCategory - > second , & mSettings , & mMutex , " " , " " ) ;
2015-12-11 10:32:55 +00:00
mCurrentCategory - > second . addSetting ( setting ) ;
}
2015-12-08 16:21:58 +00:00
void CSMPrefs : : State : : setDefault ( const std : : string & key , const std : : string & default_ )
{
Settings : : CategorySetting fullKey ( mCurrentCategory - > second . getKey ( ) , key ) ;
Settings : : CategorySettingValueMap : : iterator iter =
mSettings . mDefaultSettings . find ( fullKey ) ;
if ( iter = = mSettings . mDefaultSettings . end ( ) )
mSettings . mDefaultSettings . insert ( std : : make_pair ( fullKey , default_ ) ) ;
}
2015-12-06 10:18:31 +00:00
CSMPrefs : : State : : State ( const Files : : ConfigurationManager & configurationManager )
2015-12-15 13:51:25 +00:00
: mConfigFile ( " openmw-cs.cfg " ) , mConfigurationManager ( configurationManager ) ,
2015-12-06 11:06:28 +00:00
mCurrentCategory ( mCategories . end ( ) )
2015-12-06 10:18:31 +00:00
{
if ( sThis )
throw std : : logic_error ( " An instance of CSMPRefs::State already exists " ) ;
load ( ) ;
declare ( ) ;
sThis = this ;
}
CSMPrefs : : State : : ~ State ( )
{
sThis = 0 ;
}
void CSMPrefs : : State : : save ( )
{
boost : : filesystem : : path user = mConfigurationManager . getUserConfigPath ( ) / mConfigFile ;
mSettings . saveUser ( user . string ( ) ) ;
}
2015-12-08 08:56:42 +00:00
CSMPrefs : : State : : Iterator CSMPrefs : : State : : begin ( )
2015-12-06 11:06:28 +00:00
{
2015-12-08 08:56:42 +00:00
return mCategories . begin ( ) ;
}
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
CSMPrefs : : State : : Iterator CSMPrefs : : State : : end ( )
{
return mCategories . end ( ) ;
2015-12-06 11:06:28 +00:00
}
2015-12-11 10:50:06 +00:00
CSMPrefs : : Category & CSMPrefs : : State : : operator [ ] ( const std : : string & key )
2015-12-08 11:04:45 +00:00
{
Iterator iter = mCategories . find ( key ) ;
if ( iter = = mCategories . end ( ) )
throw std : : logic_error ( " Invalid user settings category: " + key ) ;
return iter - > second ;
}
2015-12-08 16:21:58 +00:00
void CSMPrefs : : State : : update ( const Setting & setting )
{
2015-12-11 11:06:20 +00:00
emit ( settingChanged ( & setting ) ) ;
2015-12-08 16:21:58 +00:00
}
2015-12-06 10:18:31 +00:00
CSMPrefs : : State & CSMPrefs : : State : : get ( )
{
if ( ! sThis )
throw std : : logic_error ( " No instance of CSMPrefs::State " ) ;
return * sThis ;
}
CSMPrefs : : State & CSMPrefs : : get ( )
{
return State : : get ( ) ;
}