Changed 'drawSeparator' boolean value into a combobox, for which 3 choices are available:

- never draw separator
- draw separator when window is active
- always draw separator.

This is usefull for e.g. firefox, when a flat background is used, in which case one might 
want the separator to always be enabled.


svn path=/trunk/KDE/kdebase/workspace/; revision=1182027
This commit is contained in:
Hugo Pereira Da Costa 2010-10-03 02:22:56 +00:00
parent ba5695602d
commit 881a43a191
9 changed files with 321 additions and 225 deletions

View file

@ -42,252 +42,269 @@
//_______________________________________________________________________ //_______________________________________________________________________
extern "C" extern "C"
{ {
KDE_EXPORT QObject* allocate_config( KConfig* conf, QWidget* parent ) KDE_EXPORT QObject* allocate_config( KConfig* conf, QWidget* parent )
{ return ( new Oxygen::Config( conf, parent ) ); } { return ( new Oxygen::Config( conf, parent ) ); }
} }
namespace Oxygen namespace Oxygen
{ {
//_______________________________________________________________________
Config::Config( KConfig*, QWidget* parent ):
QObject( parent )
{
//_______________________________________________________________________ KGlobal::locale()->insertCatalog("kwin_clients");
Config::Config( KConfig*, QWidget* parent ):
QObject( parent )
{
KGlobal::locale()->insertCatalog("kwin_clients"); configuration_ = new KConfig( "oxygenrc" );
KConfigGroup configurationGroup( configuration_, "Windeco");
configuration_ = new KConfig( "oxygenrc" ); userInterface_ = new ConfigurationUi( parent );
KConfigGroup configurationGroup( configuration_, "Windeco");
userInterface_ = new ConfigurationUi( parent ); load( configurationGroup );
connect( userInterface_, SIGNAL(changed()), SLOT( updateChanged() ) );
userInterface_->show();
load( configurationGroup ); }
connect( userInterface_, SIGNAL(changed()), SLOT( updateChanged() ) );
userInterface_->show();
}
//_______________________________________________________________________ //_______________________________________________________________________
Config::~Config() Config::~Config()
{ {
delete userInterface_; delete userInterface_;
delete configuration_; delete configuration_;
} }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::toggleExpertMode( bool value ) void Config::toggleExpertMode( bool value )
{ userInterface_->toggleExpertMode( value ); } { userInterface_->toggleExpertMode( value ); }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::load( const KConfigGroup& ) void Config::load( const KConfigGroup& )
{ {
// load standard configuration // load standard configuration
loadConfiguration( Configuration( KConfigGroup( configuration_, "Windeco") ) ); loadConfiguration( Configuration( KConfigGroup( configuration_, "Windeco") ) );
loadShadowConfiguration( QPalette::Active, ShadowConfiguration( QPalette::Active, KConfigGroup( configuration_, "ActiveShadow") ) ); loadShadowConfiguration( QPalette::Active, ShadowConfiguration( QPalette::Active, KConfigGroup( configuration_, "ActiveShadow") ) );
loadShadowConfiguration( QPalette::Inactive, ShadowConfiguration( QPalette::Inactive, KConfigGroup( configuration_, "InactiveShadow") ) ); loadShadowConfiguration( QPalette::Inactive, ShadowConfiguration( QPalette::Inactive, KConfigGroup( configuration_, "InactiveShadow") ) );
// load exceptions // load exceptions
ExceptionList exceptions; ExceptionList exceptions;
exceptions.read( *configuration_ ); exceptions.read( *configuration_ );
if( exceptions.empty() ) if( exceptions.empty() )
{ exceptions = ExceptionList::defaultList(); } { exceptions = ExceptionList::defaultList(); }
// install in ui // install in ui
userInterface_->ui.exceptions->setExceptions( exceptions ); userInterface_->ui.exceptions->setExceptions( exceptions );
updateChanged(); updateChanged();
} }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::updateChanged( void ) void Config::updateChanged( void )
{ {
Configuration configuration( KConfigGroup( configuration_, "Windeco") ); Configuration configuration( KConfigGroup( configuration_, "Windeco") );
bool modified( false ); bool modified( false );
if( userInterface_->ui.titleAlignment->currentIndex() != userInterface_->ui.titleAlignment->findText( configuration.titleAlignmentName( true ) ) ) modified = true; if( userInterface_->ui.titleAlignment->currentIndex() != userInterface_->ui.titleAlignment->findText( configuration.titleAlignmentName( true ) ) ) modified = true;
else if( userInterface_->ui.buttonSize->currentIndex() != userInterface_->ui.buttonSize->findText( configuration.buttonSizeName( true ) ) ) modified = true; else if( userInterface_->ui.buttonSize->currentIndex() != userInterface_->ui.buttonSize->findText( configuration.buttonSizeName( true ) ) ) modified = true;
else if( userInterface_->ui.blendColor->currentIndex() != userInterface_->ui.blendColor->findText( configuration.blendColorName( true ) ) ) modified = true; else if( userInterface_->ui.blendColor->currentIndex() != userInterface_->ui.blendColor->findText( configuration.blendColorName( true ) ) ) modified = true;
else if( userInterface_->ui.frameBorder->currentIndex() != userInterface_->ui.frameBorder->findText( configuration.frameBorderName( true ) ) ) modified = true; else if( userInterface_->ui.frameBorder->currentIndex() != userInterface_->ui.frameBorder->findText( configuration.frameBorderName( true ) ) ) modified = true;
else if( userInterface_->ui.sizeGripMode->currentIndex() != userInterface_->ui.sizeGripMode->findText( configuration.sizeGripModeName( true ) ) ) modified = true; else if( userInterface_->ui.sizeGripMode->currentIndex() != userInterface_->ui.sizeGripMode->findText( configuration.sizeGripModeName( true ) ) ) modified = true;
else if( userInterface_->ui.shadowMode->currentIndex() != userInterface_->ui.shadowMode->findText( configuration.shadowModeName( true ) ) ) modified = true; else if( userInterface_->ui.shadowMode->currentIndex() != userInterface_->ui.shadowMode->findText( configuration.shadowModeName( true ) ) ) modified = true;
else if( userInterface_->ui.shadowCacheMode->currentIndex() != userInterface_->ui.shadowCacheMode->findText( configuration.shadowCacheModeName( true ) ) ) modified = true; else if( userInterface_->ui.shadowCacheMode->currentIndex() != userInterface_->ui.shadowCacheMode->findText( configuration.shadowCacheModeName( true ) ) ) modified = true;
else if( userInterface_->ui.drawSeparator->isChecked() != configuration.drawSeparator() ) modified = true; else if( userInterface_->ui.separatorMode->currentIndex() != configuration.separatorMode() ) modified = true;
else if( userInterface_->ui.titleOutline->isChecked() != configuration.drawTitleOutline() ) modified = true; else if( userInterface_->ui.titleOutline->isChecked() != configuration.drawTitleOutline() ) modified = true;
else if( userInterface_->shadowConfigurations[0]->isChecked() != configuration.useOxygenShadows() ) modified = true; else if( userInterface_->shadowConfigurations[0]->isChecked() != configuration.useOxygenShadows() ) modified = true;
else if( userInterface_->shadowConfigurations[1]->isChecked() != configuration.useDropShadows() ) modified = true; else if( userInterface_->shadowConfigurations[1]->isChecked() != configuration.useDropShadows() ) modified = true;
else if( userInterface_->ui.tabsEnabled->isChecked() != configuration.tabsEnabled() ) modified = true; else if( userInterface_->ui.tabsEnabled->isChecked() != configuration.tabsEnabled() ) modified = true;
else if( userInterface_->ui.useAnimations->isChecked() != configuration.useAnimations() ) modified = true; else if( userInterface_->ui.useAnimations->isChecked() != configuration.useAnimations() ) modified = true;
else if( userInterface_->ui.animateTitleChange->isChecked() != configuration.animateTitleChange() ) modified = true; else if( userInterface_->ui.animateTitleChange->isChecked() != configuration.animateTitleChange() ) modified = true;
else if( userInterface_->ui.narrowButtonSpacing->isChecked() != configuration.useNarrowButtonSpacing() ) modified = true; else if( userInterface_->ui.narrowButtonSpacing->isChecked() != configuration.useNarrowButtonSpacing() ) modified = true;
// shadow configurations // shadow configurations
else if( shadowConfigurationChanged( ShadowConfiguration( QPalette::Active, KConfigGroup( configuration_, "ActiveShadow") ), *userInterface_->shadowConfigurations[0] ) ) modified = true; else if( shadowConfigurationChanged( ShadowConfiguration( QPalette::Active, KConfigGroup( configuration_, "ActiveShadow") ), *userInterface_->shadowConfigurations[0] ) ) modified = true;
else if( shadowConfigurationChanged( ShadowConfiguration( QPalette::Inactive, KConfigGroup( configuration_, "InactiveShadow") ), *userInterface_->shadowConfigurations[1] ) ) modified = true; else if( shadowConfigurationChanged( ShadowConfiguration( QPalette::Inactive, KConfigGroup( configuration_, "InactiveShadow") ), *userInterface_->shadowConfigurations[1] ) ) modified = true;
// exceptions // exceptions
else if( exceptionListChanged() ) modified = true; else if( exceptionListChanged() ) modified = true;
// emit relevant signals // emit relevant signals
if( modified ) emit changed(); if( modified ) emit changed();
emit changed( modified ); emit changed( modified );
} }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::save( KConfigGroup& ) void Config::save( KConfigGroup& )
{ {
// save standard configuration // save standard configuration
KConfigGroup configurationGroup( configuration_, "Windeco"); KConfigGroup configurationGroup( configuration_, "Windeco");
// when writing text entries, on needs to make sure that strings written // when writing text entries, on needs to make sure that strings written
// to the configuration file are *not* translated using current locale // to the configuration file are *not* translated using current locale
configurationGroup.writeEntry( configurationGroup.writeEntry(
OxygenConfig::TITLE_ALIGNMENT, OxygenConfig::TITLE_ALIGNMENT,
Configuration::titleAlignmentName( Configuration::titleAlignment( userInterface_->ui.titleAlignment->currentText(), true ), false ) ); Configuration::titleAlignmentName( Configuration::titleAlignment( userInterface_->ui.titleAlignment->currentText(), true ), false ) );
configurationGroup.writeEntry( configurationGroup.writeEntry(
OxygenConfig::BUTTON_SIZE, OxygenConfig::BUTTON_SIZE,
Configuration::buttonSizeName( Configuration::buttonSize( userInterface_->ui.buttonSize->currentText(), true ), false ) ); Configuration::buttonSizeName( Configuration::buttonSize( userInterface_->ui.buttonSize->currentText(), true ), false ) );
configurationGroup.writeEntry( configurationGroup.writeEntry(
OxygenConfig::BLEND_COLOR, OxygenConfig::BLEND_COLOR,
Configuration::blendColorName( Configuration::blendColor( userInterface_->ui.blendColor->currentText(), true ), false ) ); Configuration::blendColorName( Configuration::blendColor( userInterface_->ui.blendColor->currentText(), true ), false ) );
configurationGroup.writeEntry( configurationGroup.writeEntry(
OxygenConfig::FRAME_BORDER, OxygenConfig::FRAME_BORDER,
Configuration::frameBorderName( Configuration::frameBorder( userInterface_->ui.frameBorder->currentText(), true ), false ) ); Configuration::frameBorderName( Configuration::frameBorder( userInterface_->ui.frameBorder->currentText(), true ), false ) );
configurationGroup.writeEntry( configurationGroup.writeEntry(
OxygenConfig::SIZE_GRIP_MODE, OxygenConfig::SIZE_GRIP_MODE,
Configuration::sizeGripModeName( Configuration::sizeGripMode( userInterface_->ui.sizeGripMode->currentText(), true ), false ) ); Configuration::sizeGripModeName( Configuration::sizeGripMode( userInterface_->ui.sizeGripMode->currentText(), true ), false ) );
configurationGroup.writeEntry( configurationGroup.writeEntry(
OxygenConfig::SHADOW_CACHE_MODE, OxygenConfig::SHADOW_CACHE_MODE,
Configuration::shadowCacheModeName( Configuration::shadowCacheMode( userInterface_->ui.shadowCacheMode->currentText(), true ), false ) ); Configuration::shadowCacheModeName( Configuration::shadowCacheMode( userInterface_->ui.shadowCacheMode->currentText(), true ), false ) );
configurationGroup.writeEntry( OxygenConfig::DRAW_SEPARATOR, userInterface_->ui.drawSeparator->isChecked() ); switch( userInterface_->ui.separatorMode->currentIndex() )
configurationGroup.writeEntry( OxygenConfig::DRAW_TITLE_OUTLINE, userInterface_->ui.titleOutline->isChecked() ); {
configurationGroup.writeEntry( OxygenConfig::USE_DROP_SHADOWS, userInterface_->shadowConfigurations[1]->isChecked() ); default:
configurationGroup.writeEntry( OxygenConfig::USE_OXYGEN_SHADOWS, userInterface_->shadowConfigurations[0]->isChecked() ); case 0:
configurationGroup.writeEntry( OxygenConfig::TABS_ENABLED, userInterface_->ui.tabsEnabled->isChecked() ); configurationGroup.writeEntry( OxygenConfig::DRAW_SEPARATOR, false );
configurationGroup.writeEntry( OxygenConfig::USE_ANIMATIONS, userInterface_->ui.useAnimations->isChecked() ); break;
configurationGroup.writeEntry( OxygenConfig::ANIMATE_TITLE_CHANGE, userInterface_->ui.animateTitleChange->isChecked() );
configurationGroup.writeEntry( OxygenConfig::NARROW_BUTTON_SPACING, userInterface_->ui.narrowButtonSpacing->isChecked() );
// write exceptions case 1:
userInterface_->ui.exceptions->exceptions().write( *configuration_ ); configurationGroup.writeEntry( OxygenConfig::DRAW_SEPARATOR, true );
configurationGroup.writeEntry( OxygenConfig::SEPARATOR_ACTIVE_ONLY, true );
break;
// write shadow configuration case 2:
configurationGroup.writeEntry( OxygenConfig::SHADOW_MODE, configurationGroup.writeEntry( OxygenConfig::DRAW_SEPARATOR, true );
Configuration::shadowModeName( Configuration::shadowMode( userInterface_->ui.shadowMode->currentText(), true ), false ) ); configurationGroup.writeEntry( OxygenConfig::SEPARATOR_ACTIVE_ONLY, false );
saveShadowConfiguration( QPalette::Active, *userInterface_->shadowConfigurations[0] ); break;
saveShadowConfiguration( QPalette::Inactive, *userInterface_->shadowConfigurations[1] ); }
// sync configuration configurationGroup.writeEntry( OxygenConfig::DRAW_TITLE_OUTLINE, userInterface_->ui.titleOutline->isChecked() );
configuration_->sync(); configurationGroup.writeEntry( OxygenConfig::USE_DROP_SHADOWS, userInterface_->shadowConfigurations[1]->isChecked() );
configurationGroup.writeEntry( OxygenConfig::USE_OXYGEN_SHADOWS, userInterface_->shadowConfigurations[0]->isChecked() );
configurationGroup.writeEntry( OxygenConfig::TABS_ENABLED, userInterface_->ui.tabsEnabled->isChecked() );
configurationGroup.writeEntry( OxygenConfig::USE_ANIMATIONS, userInterface_->ui.useAnimations->isChecked() );
configurationGroup.writeEntry( OxygenConfig::ANIMATE_TITLE_CHANGE, userInterface_->ui.animateTitleChange->isChecked() );
configurationGroup.writeEntry( OxygenConfig::NARROW_BUTTON_SPACING, userInterface_->ui.narrowButtonSpacing->isChecked() );
} // write exceptions
userInterface_->ui.exceptions->exceptions().write( *configuration_ );
// write shadow configuration
configurationGroup.writeEntry( OxygenConfig::SHADOW_MODE,
Configuration::shadowModeName( Configuration::shadowMode( userInterface_->ui.shadowMode->currentText(), true ), false ) );
saveShadowConfiguration( QPalette::Active, *userInterface_->shadowConfigurations[0] );
saveShadowConfiguration( QPalette::Inactive, *userInterface_->shadowConfigurations[1] );
// sync configuration
configuration_->sync();
}
//_______________________________________________________________________ //_______________________________________________________________________
void Config::saveShadowConfiguration( QPalette::ColorGroup colorGroup, const ShadowConfigurationUi& ui ) const void Config::saveShadowConfiguration( QPalette::ColorGroup colorGroup, const ShadowConfigurationUi& ui ) const
{ {
assert( colorGroup == QPalette::Active || colorGroup == QPalette::Inactive ); assert( colorGroup == QPalette::Active || colorGroup == QPalette::Inactive );
// save shadow configuration // save shadow configuration
KConfigGroup configurationGroup( configuration_, ( (colorGroup == QPalette::Active) ? "ActiveShadow":"InactiveShadow" ) ); KConfigGroup configurationGroup( configuration_, ( (colorGroup == QPalette::Active) ? "ActiveShadow":"InactiveShadow" ) );
configurationGroup.writeEntry( OxygenConfig::SHADOW_SIZE, ui.ui.shadowSize->value() ); configurationGroup.writeEntry( OxygenConfig::SHADOW_SIZE, ui.ui.shadowSize->value() );
configurationGroup.writeEntry( OxygenConfig::SHADOW_VOFFSET, 0.1*ui.ui.verticalOffset->value() ); configurationGroup.writeEntry( OxygenConfig::SHADOW_VOFFSET, 0.1*ui.ui.verticalOffset->value() );
configurationGroup.writeEntry( OxygenConfig::SHADOW_INNER_COLOR, ui.ui.innerColor->color() ); configurationGroup.writeEntry( OxygenConfig::SHADOW_INNER_COLOR, ui.ui.innerColor->color() );
configurationGroup.writeEntry( OxygenConfig::SHADOW_OUTER_COLOR, ui.ui.outerColor->color() ); configurationGroup.writeEntry( OxygenConfig::SHADOW_OUTER_COLOR, ui.ui.outerColor->color() );
configurationGroup.writeEntry( OxygenConfig::SHADOW_USE_OUTER_COLOR, ui.ui.useOuterColor->isChecked() ); configurationGroup.writeEntry( OxygenConfig::SHADOW_USE_OUTER_COLOR, ui.ui.useOuterColor->isChecked() );
} }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::defaults() void Config::defaults()
{ {
// install default configuration // install default configuration
loadConfiguration( Configuration() ); loadConfiguration( Configuration() );
// load shadows // load shadows
loadShadowConfiguration( QPalette::Active, ShadowConfiguration( QPalette::Active ) ); loadShadowConfiguration( QPalette::Active, ShadowConfiguration( QPalette::Active ) );
loadShadowConfiguration( QPalette::Inactive, ShadowConfiguration( QPalette::Inactive ) ); loadShadowConfiguration( QPalette::Inactive, ShadowConfiguration( QPalette::Inactive ) );
// install default exceptions // install default exceptions
userInterface_->ui.exceptions->setExceptions( ExceptionList::defaultList() ); userInterface_->ui.exceptions->setExceptions( ExceptionList::defaultList() );
updateChanged(); updateChanged();
} }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::loadConfiguration( const Configuration& configuration ) void Config::loadConfiguration( const Configuration& configuration )
{ {
userInterface_->ui.titleAlignment->setCurrentIndex( userInterface_->ui.titleAlignment->findText( configuration.titleAlignmentName( true ) ) ); userInterface_->ui.titleAlignment->setCurrentIndex( userInterface_->ui.titleAlignment->findText( configuration.titleAlignmentName( true ) ) );
userInterface_->ui.buttonSize->setCurrentIndex( userInterface_->ui.buttonSize->findText( configuration.buttonSizeName( true ) ) ); userInterface_->ui.buttonSize->setCurrentIndex( userInterface_->ui.buttonSize->findText( configuration.buttonSizeName( true ) ) );
userInterface_->ui.blendColor->setCurrentIndex( userInterface_->ui.blendColor->findText( configuration.blendColorName( true ) ) ); userInterface_->ui.blendColor->setCurrentIndex( userInterface_->ui.blendColor->findText( configuration.blendColorName( true ) ) );
userInterface_->ui.frameBorder->setCurrentIndex( userInterface_->ui.frameBorder->findText( configuration.frameBorderName( true ) ) ); userInterface_->ui.frameBorder->setCurrentIndex( userInterface_->ui.frameBorder->findText( configuration.frameBorderName( true ) ) );
userInterface_->ui.sizeGripMode->setCurrentIndex( userInterface_->ui.sizeGripMode->findText( configuration.sizeGripModeName( true ) ) ); userInterface_->ui.sizeGripMode->setCurrentIndex( userInterface_->ui.sizeGripMode->findText( configuration.sizeGripModeName( true ) ) );
userInterface_->ui.drawSeparator->setChecked( configuration.drawSeparator() ); userInterface_->ui.separatorMode->setCurrentIndex( configuration.separatorMode() );
userInterface_->ui.titleOutline->setChecked( configuration.drawTitleOutline() ); userInterface_->ui.titleOutline->setChecked( configuration.drawTitleOutline() );
userInterface_->shadowConfigurations[0]->setChecked( configuration.useOxygenShadows() ); userInterface_->shadowConfigurations[0]->setChecked( configuration.useOxygenShadows() );
userInterface_->shadowConfigurations[1]->setChecked( configuration.useDropShadows() ); userInterface_->shadowConfigurations[1]->setChecked( configuration.useDropShadows() );
userInterface_->ui.tabsEnabled->setChecked( configuration.tabsEnabled() ); userInterface_->ui.tabsEnabled->setChecked( configuration.tabsEnabled() );
userInterface_->ui.useAnimations->setChecked( configuration.useAnimations() ); userInterface_->ui.useAnimations->setChecked( configuration.useAnimations() );
userInterface_->ui.animateTitleChange->setChecked( configuration.animateTitleChange() ); userInterface_->ui.animateTitleChange->setChecked( configuration.animateTitleChange() );
userInterface_->ui.narrowButtonSpacing->setChecked( configuration.useNarrowButtonSpacing() ); userInterface_->ui.narrowButtonSpacing->setChecked( configuration.useNarrowButtonSpacing() );
userInterface_->ui.shadowMode->setCurrentIndex( userInterface_->ui.shadowMode->findText( configuration.shadowModeName( true ) ) ); userInterface_->ui.shadowMode->setCurrentIndex( userInterface_->ui.shadowMode->findText( configuration.shadowModeName( true ) ) );
userInterface_->ui.shadowCacheMode->setCurrentIndex( userInterface_->ui.shadowCacheMode->findText( configuration.shadowCacheModeName( true ) ) ); userInterface_->ui.shadowCacheMode->setCurrentIndex( userInterface_->ui.shadowCacheMode->findText( configuration.shadowCacheModeName( true ) ) );
} }
//_______________________________________________________________________ //_______________________________________________________________________
void Config::loadShadowConfiguration( QPalette::ColorGroup colorGroup, const ShadowConfiguration& configuration ) void Config::loadShadowConfiguration( QPalette::ColorGroup colorGroup, const ShadowConfiguration& configuration )
{ {
assert( colorGroup == QPalette::Active || colorGroup == QPalette::Inactive ); assert( colorGroup == QPalette::Active || colorGroup == QPalette::Inactive );
ShadowConfigurationUi* ui = userInterface_->shadowConfigurations[ (colorGroup == QPalette::Active) ? 0:1 ]; ShadowConfigurationUi* ui = userInterface_->shadowConfigurations[ (colorGroup == QPalette::Active) ? 0:1 ];
ui->ui.shadowSize->setValue( configuration.shadowSize() ); ui->ui.shadowSize->setValue( configuration.shadowSize() );
ui->ui.verticalOffset->setValue( 10*configuration.verticalOffset() ); ui->ui.verticalOffset->setValue( 10*configuration.verticalOffset() );
ui->ui.innerColor->setColor( configuration.innerColor() ); ui->ui.innerColor->setColor( configuration.innerColor() );
ui->ui.outerColor->setColor( configuration.outerColor() ); ui->ui.outerColor->setColor( configuration.outerColor() );
ui->ui.useOuterColor->setChecked( configuration.useOuterColor() ); ui->ui.useOuterColor->setChecked( configuration.useOuterColor() );
} }
//_______________________________________________________________________ //_______________________________________________________________________
bool Config::shadowConfigurationChanged( const ShadowConfiguration& configuration, const ShadowConfigurationUi& ui ) const bool Config::shadowConfigurationChanged( const ShadowConfiguration& configuration, const ShadowConfigurationUi& ui ) const
{ {
bool modified( false ); bool modified( false );
if( ui.ui.shadowSize->value() != configuration.shadowSize() ) modified = true; if( ui.ui.shadowSize->value() != configuration.shadowSize() ) modified = true;
else if( 0.1*ui.ui.verticalOffset->value() != configuration.verticalOffset() ) modified = true; else if( 0.1*ui.ui.verticalOffset->value() != configuration.verticalOffset() ) modified = true;
else if( ui.ui.innerColor->color() != configuration.innerColor() ) modified = true; else if( ui.ui.innerColor->color() != configuration.innerColor() ) modified = true;
else if( ui.ui.useOuterColor->isChecked() != configuration.useOuterColor() ) modified = true; else if( ui.ui.useOuterColor->isChecked() != configuration.useOuterColor() ) modified = true;
else if( ui.ui.useOuterColor->isChecked() && ui.ui.outerColor->color() != configuration.outerColor() ) modified = true; else if( ui.ui.useOuterColor->isChecked() && ui.ui.outerColor->color() != configuration.outerColor() ) modified = true;
return modified; return modified;
} }
//_______________________________________________________________________ //_______________________________________________________________________
bool Config::exceptionListChanged( void ) const bool Config::exceptionListChanged( void ) const
{ {
// get saved list // get saved list
ExceptionList exceptions; ExceptionList exceptions;
exceptions.read( *configuration_ ); exceptions.read( *configuration_ );
if( exceptions.empty() ) if( exceptions.empty() )
{ exceptions = ExceptionList::defaultList(); } { exceptions = ExceptionList::defaultList(); }
// compare to current // compare to current
return exceptions != userInterface_->ui.exceptions->exceptions(); return exceptions != userInterface_->ui.exceptions->exceptions();
} }
} }

View file

@ -102,7 +102,7 @@ namespace Oxygen
connect( ui.shadowMode, SIGNAL( currentIndexChanged(int)), SLOT(shadowModeChanged(int)) ); connect( ui.shadowMode, SIGNAL( currentIndexChanged(int)), SLOT(shadowModeChanged(int)) );
connect( ui.shadowMode, SIGNAL( currentIndexChanged(int)), SIGNAL(changed()) ); connect( ui.shadowMode, SIGNAL( currentIndexChanged(int)), SIGNAL(changed()) );
connect( ui.shadowCacheMode, SIGNAL( currentIndexChanged(int)), SIGNAL(changed()) ); connect( ui.shadowCacheMode, SIGNAL( currentIndexChanged(int)), SIGNAL(changed()) );
connect( ui.titleOutline, SIGNAL(toggled( bool )), ui.drawSeparator, SLOT( setDisabled( bool ) ) ); connect( ui.titleOutline, SIGNAL(toggled( bool )), ui.separatorMode, SLOT( setDisabled( bool ) ) );
connect( shadowConfigurations[0], SIGNAL( changed() ), SIGNAL( changed() ) ); connect( shadowConfigurations[0], SIGNAL( changed() ), SIGNAL( changed() ) );
connect( shadowConfigurations[0], SIGNAL( toggled( bool ) ), SIGNAL( changed() ) ); connect( shadowConfigurations[0], SIGNAL( toggled( bool ) ), SIGNAL( changed() ) );
@ -120,7 +120,7 @@ namespace Oxygen
connect( ui.useAnimations, SIGNAL(clicked()), SIGNAL(changed()) ); connect( ui.useAnimations, SIGNAL(clicked()), SIGNAL(changed()) );
connect( ui.animateTitleChange, SIGNAL(clicked()), SIGNAL(changed()) ); connect( ui.animateTitleChange, SIGNAL(clicked()), SIGNAL(changed()) );
connect( ui.narrowButtonSpacing, SIGNAL(clicked()), SIGNAL(changed()) ); connect( ui.narrowButtonSpacing, SIGNAL(clicked()), SIGNAL(changed()) );
connect( ui.drawSeparator, SIGNAL(clicked()), SIGNAL(changed()) ); connect( ui.separatorMode, SIGNAL(currentIndexChanged(int)), SIGNAL(changed()) );
connect( ui.titleOutline, SIGNAL(clicked()), SIGNAL(changed()) ); connect( ui.titleOutline, SIGNAL(clicked()), SIGNAL(changed()) );
connect( ui.exceptions, SIGNAL(changed()), SIGNAL(changed()) ); connect( ui.exceptions, SIGNAL(changed()), SIGNAL(changed()) );

View file

@ -93,7 +93,6 @@ namespace Oxygen
connect( ui.titleOutlineCheckBox, SIGNAL( toggled( bool ) ), ui.titleOutlineComboBox, SLOT( setEnabled( bool ) ) ); connect( ui.titleOutlineCheckBox, SIGNAL( toggled( bool ) ), ui.titleOutlineComboBox, SLOT( setEnabled( bool ) ) );
// separator // separator
ui.separatorComboBox->insertItems(0, QStringList() << i18nc( "draw separator", "Enabled" ) << i18nc( "draw separator", "Disabled" ) );
ui.separatorComboBox->setEnabled( false ); ui.separatorComboBox->setEnabled( false );
checkboxes_.insert( std::make_pair( Exception::DrawSeparator, ui.separatorCheckBox ) ); checkboxes_.insert( std::make_pair( Exception::DrawSeparator, ui.separatorCheckBox ) );
connect( ui.separatorCheckBox, SIGNAL( toggled( bool ) ), ui.separatorComboBox, SLOT( setEnabled( bool ) ) ); connect( ui.separatorCheckBox, SIGNAL( toggled( bool ) ), ui.separatorComboBox, SLOT( setEnabled( bool ) ) );
@ -113,7 +112,7 @@ namespace Oxygen
ui.frameBorderComboBox->setCurrentIndex( ui.frameBorderComboBox->findText( exception.frameBorderName( true ) ) ); ui.frameBorderComboBox->setCurrentIndex( ui.frameBorderComboBox->findText( exception.frameBorderName( true ) ) );
ui.blendColorComboBox->setCurrentIndex( ui.blendColorComboBox->findText( exception.blendColorName( true ) ) ); ui.blendColorComboBox->setCurrentIndex( ui.blendColorComboBox->findText( exception.blendColorName( true ) ) );
ui.sizeGripComboBox->setCurrentIndex( ui.sizeGripComboBox->findText( exception.sizeGripModeName( true ) ) ); ui.sizeGripComboBox->setCurrentIndex( ui.sizeGripComboBox->findText( exception.sizeGripModeName( true ) ) );
ui.separatorComboBox->setCurrentIndex( ui.separatorComboBox->findText( exception.drawSeparator() ? i18nc( "draw separator", "Enabled" ) : i18nc( "draw separator", "Disabled" ) ) ); ui.separatorComboBox->setCurrentIndex( exception.separatorMode() );
ui.titleOutlineComboBox->setCurrentIndex( ui.titleOutlineComboBox->findText( exception.drawTitleOutline() ? i18nc( "outline window title", "Enabled" ) : i18nc( "outline window title", "Disabled" ) ) ); ui.titleOutlineComboBox->setCurrentIndex( ui.titleOutlineComboBox->findText( exception.drawTitleOutline() ? i18nc( "outline window title", "Enabled" ) : i18nc( "outline window title", "Disabled" ) ) );
ui.hideTitleBar->setChecked( exception.hideTitleBar() ); ui.hideTitleBar->setChecked( exception.hideTitleBar() );
@ -134,7 +133,14 @@ namespace Oxygen
exception.setSizeGripMode( Exception::sizeGripMode( ui.sizeGripComboBox->currentText(), true ) ); exception.setSizeGripMode( Exception::sizeGripMode( ui.sizeGripComboBox->currentText(), true ) );
// flags // flags
exception.setDrawSeparator( ui.separatorComboBox->currentText() == i18nc( "draw separator", "Enabled" ) ); switch( ui.separatorComboBox->currentIndex() )
{
default:
case 0: exception.setSeparatorMode( Configuration::SeparatorNever ); break;
case 1: exception.setSeparatorMode( Configuration::SeparatorActive ); break;
case 2: exception.setSeparatorMode( Configuration::SeparatorAlways ); break;
}
exception.setDrawTitleOutline( ui.titleOutlineComboBox->currentText() == i18nc( "outline window title", "Enabled" ) ); exception.setDrawTitleOutline( ui.titleOutlineComboBox->currentText() == i18nc( "outline window title", "Enabled" ) );
exception.setHideTitleBar( ui.hideTitleBar->isChecked() ); exception.setHideTitleBar( ui.hideTitleBar->isChecked() );

View file

@ -178,20 +178,13 @@
</widget> </widget>
</item> </item>
<item row="5" column="0" colspan="3"> <item row="5" column="0" colspan="3">
<widget class="QCheckBox" name="drawSeparator">
<property name="text">
<string>Draw Separator between title bar and active window contents </string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="3">
<widget class="QCheckBox" name="narrowButtonSpacing"> <widget class="QCheckBox" name="narrowButtonSpacing">
<property name="text"> <property name="text">
<string>Use narrow space between decoration buttons</string> <string>Use narrow space between decoration buttons</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="6" column="0">
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -220,6 +213,38 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1">
<widget class="QComboBox" name="separatorMode">
<item>
<property name="text">
<string>Never Draw Separator</string>
</property>
</item>
<item>
<property name="text">
<string>Draw Separator When Window is Active</string>
</property>
</item>
<item>
<property name="text">
<string>Always Draw Separator</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Separator display:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>separatorMode</cstring>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab_3"> <widget class="QWidget" name="tab_3">

View file

@ -93,7 +93,7 @@
<item row="5" column="0"> <item row="5" column="0">
<widget class="QCheckBox" name="separatorCheckBox"> <widget class="QCheckBox" name="separatorCheckBox">
<property name="text"> <property name="text">
<string>Draw separator between title bar and window contents: </string> <string>Separator display:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -134,7 +134,23 @@
<widget class="KComboBox" name="titleOutlineComboBox"/> <widget class="KComboBox" name="titleOutlineComboBox"/>
</item> </item>
<item row="5" column="2"> <item row="5" column="2">
<widget class="KComboBox" name="separatorComboBox"/> <widget class="KComboBox" name="separatorComboBox">
<item>
<property name="text">
<string>Never Draw Separator</string>
</property>
</item>
<item>
<property name="text">
<string>Draw Separator When Window is Active</string>
</property>
</item>
<item>
<property name="text">
<string>Always Draw Separator</string>
</property>
</item>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View file

@ -93,11 +93,20 @@ namespace Oxygen
//! true when separator is to be drawn //! true when separator is to be drawn
bool drawSeparator( void ) const bool drawSeparator( void ) const
{ {
return if( configuration().drawTitleOutline() ) return false;
( glowIsAnimated() || isActive() ) && switch( configuration().separatorMode() )
configuration().drawSeparator() && {
!configuration().hideTitleBar() && case Configuration::SeparatorAlways:
!configuration().drawTitleOutline(); return true;
case Configuration::SeparatorActive:
return ( glowIsAnimated() || isActive() );
default:
case Configuration::SeparatorNever:
return false;
}
} }
//@} //@}

View file

@ -38,7 +38,7 @@ namespace Oxygen
frameBorder_( BorderTiny ), frameBorder_( BorderTiny ),
blendColor_( RadialBlending ), blendColor_( RadialBlending ),
sizeGripMode_( SizeGripWhenNeeded ), sizeGripMode_( SizeGripWhenNeeded ),
drawSeparator_( false ), separatorMode_( SeparatorNever ),
drawTitleOutline_( false ), drawTitleOutline_( false ),
hideTitleBar_( false ), hideTitleBar_( false ),
useDropShadows_( true ), useDropShadows_( true ),
@ -84,10 +84,17 @@ namespace Oxygen
group.readEntry( OxygenConfig::SIZE_GRIP_MODE, group.readEntry( OxygenConfig::SIZE_GRIP_MODE,
defaultConfiguration.sizeGripModeName( false ) ), false ) ); defaultConfiguration.sizeGripModeName( false ) ), false ) );
// draw separator // separator mode
setDrawSeparator( group.readEntry( if( !group.readEntry( OxygenConfig::DRAW_SEPARATOR, defaultConfiguration.separatorMode() == SeparatorNever ) )
OxygenConfig::DRAW_SEPARATOR, {
defaultConfiguration.drawSeparator() ) );
setSeparatorMode( SeparatorNever );
} else if( group.readEntry( OxygenConfig::SEPARATOR_ACTIVE_ONLY, defaultConfiguration.separatorMode() == SeparatorActive ) ) {
setSeparatorMode( SeparatorActive );
} else setSeparatorMode( SeparatorAlways );
// title outline // title outline
setDrawTitleOutline( group.readEntry( setDrawTitleOutline( group.readEntry(
@ -154,7 +161,9 @@ namespace Oxygen
group.writeEntry( OxygenConfig::FRAME_BORDER, frameBorderName( false ) ); group.writeEntry( OxygenConfig::FRAME_BORDER, frameBorderName( false ) );
group.writeEntry( OxygenConfig::SIZE_GRIP_MODE, sizeGripModeName( false ) ); group.writeEntry( OxygenConfig::SIZE_GRIP_MODE, sizeGripModeName( false ) );
group.writeEntry( OxygenConfig::DRAW_SEPARATOR, drawSeparator() ); group.writeEntry( OxygenConfig::DRAW_SEPARATOR, separatorMode() != SeparatorNever );
group.writeEntry( OxygenConfig::SEPARATOR_ACTIVE_ONLY, separatorMode() == SeparatorActive );
group.writeEntry( OxygenConfig::DRAW_TITLE_OUTLINE, drawTitleOutline() ); group.writeEntry( OxygenConfig::DRAW_TITLE_OUTLINE, drawTitleOutline() );
group.writeEntry( OxygenConfig::HIDE_TITLEBAR, hideTitleBar() ); group.writeEntry( OxygenConfig::HIDE_TITLEBAR, hideTitleBar() );
group.writeEntry( OxygenConfig::USE_DROP_SHADOWS, useDropShadows() ); group.writeEntry( OxygenConfig::USE_DROP_SHADOWS, useDropShadows() );
@ -331,7 +340,7 @@ namespace Oxygen
frameBorder() == other.frameBorder() && frameBorder() == other.frameBorder() &&
blendColor() == other.blendColor() && blendColor() == other.blendColor() &&
sizeGripMode() == other.sizeGripMode() && sizeGripMode() == other.sizeGripMode() &&
drawSeparator() == other.drawSeparator() && separatorMode() == other.separatorMode() &&
drawTitleOutline() == other.drawTitleOutline() && drawTitleOutline() == other.drawTitleOutline() &&
hideTitleBar() == other.hideTitleBar() && hideTitleBar() == other.hideTitleBar() &&
useDropShadows() == other.useDropShadows() && useDropShadows() == other.useDropShadows() &&

View file

@ -35,6 +35,7 @@ namespace OxygenConfig
static const QString TITLE_ALIGNMENT = "TitleAlignment"; static const QString TITLE_ALIGNMENT = "TitleAlignment";
static const QString BUTTON_SIZE = "ButtonSize"; static const QString BUTTON_SIZE = "ButtonSize";
static const QString DRAW_SEPARATOR = "DrawSeparator"; static const QString DRAW_SEPARATOR = "DrawSeparator";
static const QString SEPARATOR_ACTIVE_ONLY = "SeparatorActiveOnly";
static const QString DRAW_TITLE_OUTLINE = "DrawTitleOutline"; static const QString DRAW_TITLE_OUTLINE = "DrawTitleOutline";
static const QString FRAME_BORDER = "FrameBorder"; static const QString FRAME_BORDER = "FrameBorder";
static const QString BLEND_COLOR = "BlendColor"; static const QString BLEND_COLOR = "BlendColor";
@ -102,17 +103,30 @@ namespace Oxygen
//! shadow cache mode //! shadow cache mode
enum ShadowCacheMode { enum ShadowCacheMode {
// no shadow cache //! no shadow cache
CacheDisabled, CacheDisabled,
// shadow cache depends //! shadow cache depends on animation duration
// on animation duration
CacheVariable, CacheVariable,
// shadow cache has maximum size //! shadow cache has maximum size
CacheMaximum CacheMaximum
}; };
//! decide when separator is to be drawn
enum SeparatorMode {
//! never
SeparatorNever,
//! active window only
SeparatorActive,
//! always
SeparatorAlways
};
//! default constructor //! default constructor
Configuration( void ); Configuration( void );
@ -275,12 +289,12 @@ namespace Oxygen
//@} //@}
//! separator //! separator
virtual bool drawSeparator( void ) const virtual SeparatorMode separatorMode( void ) const
{ return drawSeparator_; } { return separatorMode_; }
//! separator //! separator
virtual void setDrawSeparator( bool value ) virtual void setSeparatorMode( SeparatorMode value )
{ drawSeparator_ = value; } { separatorMode_ = value; }
//! title outline //! title outline
virtual bool drawTitleOutline( void ) const virtual bool drawTitleOutline( void ) const
@ -364,7 +378,7 @@ namespace Oxygen
SizeGripMode sizeGripMode_; SizeGripMode sizeGripMode_;
//! separator //! separator
bool drawSeparator_; SeparatorMode separatorMode_;
//! active window title outline //! active window title outline
bool drawTitleOutline_; bool drawTitleOutline_;

View file

@ -278,7 +278,7 @@ namespace Oxygen
// propagate all features found in mask to the output configuration // propagate all features found in mask to the output configuration
if( iter->mask() & Exception::FrameBorder ) configuration.setFrameBorder( iter->frameBorder() ); if( iter->mask() & Exception::FrameBorder ) configuration.setFrameBorder( iter->frameBorder() );
if( iter->mask() & Exception::BlendColor ) configuration.setBlendColor( iter->blendColor() ); if( iter->mask() & Exception::BlendColor ) configuration.setBlendColor( iter->blendColor() );
if( iter->mask() & Exception::DrawSeparator ) configuration.setDrawSeparator( iter->drawSeparator() ); if( iter->mask() & Exception::DrawSeparator ) configuration.setSeparatorMode( iter->separatorMode() );
if( iter->mask() & Exception::TitleOutline ) configuration.setDrawTitleOutline( iter->drawTitleOutline() ); if( iter->mask() & Exception::TitleOutline ) configuration.setDrawTitleOutline( iter->drawTitleOutline() );
if( iter->mask() & Exception::SizeGripMode ) configuration.setSizeGripMode( iter->sizeGripMode() ); if( iter->mask() & Exception::SizeGripMode ) configuration.setSizeGripMode( iter->sizeGripMode() );
configuration.setHideTitleBar( iter->hideTitleBar() ); configuration.setHideTitleBar( iter->hideTitleBar() );