/*
* Copyright 2009 Dirk Wallenstein
*
* This file is part of Duttulm
*
* Duttulm is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Duttulm is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Duttulm. If not, see <http://www.gnu.org/licenses/>.
*/
#include "DuttConfig.hpp"
void
DuttConfig::
setApplicationDefaults() {
setConfig( ConfigUserHomeSettingsDirectoryName , ".duttulm" ) ;
setConfig( ConfigXmlQuickLoadSaveFileName , "Duttulm.Quicksave.dutt" ) ;
setConfig( ConfigXmlEmergencyBackupFileName , "Duttulm.EmergencyBackup.dutt" ) ;
setConfig( ConfigBackgroundPendingColor , QColor( Qt::red ) ) ;
setConfig( ConfigKeyFlashColor , QColor( Qt::white ) ) ;
setConfig( ConfigKeyPenColor , QColor( Qt::black ) ) ;
setConfig( ConfigKeyPenWidth , 5 ) ;
setConfig( ConfigKeyUnderConstructionColor , QColor( Qt::red ) ) ;
setConfig( ConfigSectionSelectedPen , QPen( Qt::white, 15, Qt::DotLine ) ) ;
QFont font ;
if ( ! font.fromString( "Sans Serif,36,-1,5,50,0,0,0,0,0" ) ) {
error__( QString( "%1 : default font specification is flawed" ) ) ;
}
setConfig( ConfigLabelFont, font ) ;
//#define COLORSCHEME_WANLY
//#define COLORSCHEME_DRAQ
//#define COLORSCHEME_ORANGE
//#define COLORSCHEME_ARMY
#define COLORSCHEME_MEADOW
#ifdef COLORSCHEME_WANLY
setConfig( ConfigBackgroundColor , QColor( "#ffff7f" ) ) ;
setConfig( ConfigKeyColor , QColor( "#00ff00" ) ) ;
#elif defined COLORSCHEME_DRAQ
setConfig( ConfigBackgroundColor , QColor( "#ffaaff" ) ) ;
setConfig( ConfigKeyColor , QColor( "#ff55ff" ) ) ;
#elif defined COLORSCHEME_ARMY
setConfig( ConfigBackgroundColor , QColor( "#555500" ) ) ;
setConfig( ConfigKeyColor , QColor( "#aa5500" ) ) ;
#elif defined COLORSCHEME_MEADOW
setConfig( ConfigBackgroundColor , QColor( "#55ff7f" ) ) ;
setConfig( ConfigKeyColor , QColor( "#ffff45" ) ) ;
#elif defined COLORSCHEME_ORANGE
setConfig( ConfigBackgroundColor , QColor( "#ffff7f" ) ) ;
setConfig( ConfigKeyColor , QColor( "#ff5500" ) ) ;
#else
setConfig( ConfigBackgroundColor , QColor( Qt::green ) ) ;
setConfig( ConfigKeyColor , QColor( Qt::magenta ) ) ;
#endif
}
// --------------------------------------------------------------------------------
DuttConfig * DuttConfig::instance_m = NULL ;
DuttConfig::
DuttConfig() :
QObject( qApp ) ,
configurationContainer_m()
{
setApplicationDefaults() ;
ensureAllDenominatorsHaveAValue() ;
}
DuttConfig::
~DuttConfig() {
instance_m = NULL ;
}
DuttConfig *
DuttConfig::
instance() {
if ( ! instance_m ) {
instance_m = new DuttConfig() ;
}
return instance_m ;
}
void
DuttConfig::
displayMissingDenominators(
const QMetaEnum & denominatorEnum
) const {
warning__( QString( "%1 : The following denominators are not in the "
"configuration container:" )
.arg( __func__ ) ) ;
const int denominatorKeyCount( denominatorEnum.keyCount() ) ;
for ( int i = 0 ; i < denominatorKeyCount ; ++i ) {
const ConfigDenominator_t configContainerKey(
static_cast< ConfigDenominator_t >(
denominatorEnum.value( i ) ) ) ;
if ( ! configurationContainer_m.contains(
configContainerKey ) ) {
warning__( denominatorEnum.key( i ) ) ;
}
}
}
QMetaEnum
DuttConfig::
getDenominatorEnum() const {
const QMetaObject * thisMetaObject( metaObject() ) ;
Q_ASSERT( thisMetaObject ) ;
const char * denominatorEnumName( "ConfigDenominator_t" ) ;
const int enumNotPresentIndex( -1 ) ;
const int indexOfDenominatorEnum(
thisMetaObject->indexOfEnumerator( denominatorEnumName ) ) ;
if ( indexOfDenominatorEnum == enumNotPresentIndex ) {
error__( QString( "%1 : enumerator(%2) not found within "
"class(%3)" )
.arg( __func__ )
.arg( denominatorEnumName )
.arg( thisMetaObject->className() ) ) ;
}
return thisMetaObject->enumerator( indexOfDenominatorEnum ) ;
}
void
DuttConfig::
ensureAllDenominatorsHaveAValue() const {
QMetaEnum denominatorEnum( getDenominatorEnum() ) ;
if ( denominatorEnum.keyCount() != configurationContainer_m.count() ) {
displayMissingDenominators( denominatorEnum ) ;
error__( QString( "%1 : missing denominators in the "
"configuration container (or multiple "
"denominators with the same value)" )
.arg( __func__ ) ) ;
}
}
QVariant
DuttConfig::
getConfig(
const ConfigDenominator_t key
) const {
if ( ! configurationContainer_m.contains( key ) ) {
displayMissingDenominators( getDenominatorEnum() ) ;
error__( QString( "%1 : BUG: missing key in the configuration "
"map." )
.arg( __func__ ) ) ;
}
return configurationContainer_m.value( key ) ;
}
void
DuttConfig::
setConfig(
const ConfigDenominator_t key ,
const QVariant & value
) {
if ( ! value.isValid() ) {
error__( QString( "%1 : Attempt to set an invalid value" )
.arg( __func__ ) ) ;
}
if ( value.isNull() ) {
error__( QString( "%1 : Attempt to set a NULL value - "
"probably a string." )
.arg( __func__ ) ) ;
}
configurationContainer_m[ key ] = value ;
}
QColor
DuttConfig::
getColor(
const ConfigDenominator_t key
) const {
return getConfig( key ).value< QColor >() ;
}
QPen
DuttConfig::
getPen(
const ConfigDenominator_t key
) const {
return getConfig( key ).value< QPen >() ;
}
QFont
DuttConfig::
getFont(
const ConfigDenominator_t key
) const {
return getConfig( key ).value< QFont >() ;
}
int
DuttConfig::
getInt(
const ConfigDenominator_t key
) const {
return getConfig( key ).toInt() ;
}
QString
DuttConfig::
getString(
const ConfigDenominator_t key
) const {
return getConfig( key ).toString() ;
}