kwin/clients/nitrogen/nitrogenconfiguration.cpp
Lucas Murray 84a50c617f Fix wording of the Nitrogen configuration settings and change the
default button style to KDE 4.3. Slightly breaks compatibility with
older versions of Nitrogen due to configuration file changes.

svn path=/trunk/KDE/kdebase/workspace/; revision=1014264
2009-08-22 08:43:56 +00:00

296 lines
10 KiB
C++

// $Id: nitrogenconfiguration.cpp,v 1.20 2009/07/05 20:50:42 hpereira Exp $
/******************************************************************************
*
* Copyright (C) 2002 Hugo PEREIRA <mailto: hugo.pereira@free.fr>
*
* This 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 2 of the License, or (at your option) any later
* version.
*
* This software 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
* software; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA 02111-1307 USA
*
*
*******************************************************************************/
/*!
\file nitrogenconfiguration.cpp
\brief encapsulated window decoration configuration
\author Hugo Pereira
\version $Revision: 1.20 $
\date $Date: 2009/07/05 20:50:42 $
*/
#include <QDBusMessage>
#include <QDBusConnection>
#include <QProcess>
#include <kdeversion.h>
#include "nitrogenconfiguration.h"
namespace Nitrogen
{
//__________________________________________________
bool NitrogenConfiguration::useCompiz_;
//__________________________________________________
NitrogenConfiguration::NitrogenConfiguration( void ):
titleAlignment_( Qt::AlignLeft ),
buttonSize_( ButtonDefault ),
buttonType_( ButtonKde43 ),
frameBorder_( BorderDefault ),
blendColor_( RadialBlending ),
showStripes_( false ),
drawSeparator_( false ),
overwriteColors_( true ),
drawSizeGrip_( false ),
useOxygenShadows_( true )
{}
//__________________________________________________
NitrogenConfiguration::NitrogenConfiguration( KConfigGroup group )
{
// used to set default values when entries are not found in kconfig
NitrogenConfiguration defaultConfiguration;
// title alignment
setTitleAlignment( titleAlignment(
group.readEntry( NitrogenConfig::TITLE_ALIGNMENT,
defaultConfiguration.titleAlignmentName() ) ) );
// button size
setButtonSize( buttonSize(
group.readEntry( NitrogenConfig::BUTTON_SIZE,
defaultConfiguration.buttonSizeName() ) ) );
// button type
setButtonType( buttonType(
group.readEntry( NitrogenConfig::BUTTON_TYPE,
defaultConfiguration.buttonTypeName() ) ) );
// frame border
setFrameBorder( frameBorder(
group.readEntry( NitrogenConfig::FRAME_BORDER,
defaultConfiguration.frameBorderName() ) ) );
// blend color
setBlendColor( blendColor(
group.readEntry( NitrogenConfig::BLEND_COLOR,
defaultConfiguration.blendColorName() ) ) );
// show stripes
setShowStripes( group.readEntry(
NitrogenConfig::SHOW_STRIPES,
defaultConfiguration.showStripes() ) );
// draw separator
setDrawSeparator( group.readEntry(
NitrogenConfig::DRAW_SEPARATOR,
defaultConfiguration.drawSeparator() ) );
// overwrite color
setOverwriteColors( group.readEntry(
NitrogenConfig::OVERWRITE_COLORS,
defaultConfiguration.overwriteColors() ) );
// size grip
setDrawSizeGrip( group.readEntry(
NitrogenConfig::DRAW_SIZE_GRIP,
defaultConfiguration.drawSizeGrip() ) );
// oxygen shadows
setUseOxygenShadows( group.readEntry(
NitrogenConfig::USE_OXYGEN_SHADOWS,
defaultConfiguration.useOxygenShadows() ) );
}
//__________________________________________________
bool NitrogenConfiguration::checkUseCompiz( void )
{
#if KDE_IS_VERSION(4,2,92)
// for some reason, org.kde.compiz does not appear
// in dbus list with kde 4.3
QProcess p;
p.start( "ps", QStringList() << "-A" );
p.waitForFinished();
QString output( p.readAll() );
return ( useCompiz_ = ( output.indexOf( QRegExp( "\\b(compiz)\\b" ) ) >= 0 ) );
#else
QDBusMessage message = QDBusMessage::createMethodCall(
"org.freedesktop.compiz",
"/org/freedesktop/compiz",
"org.freedesktop.compiz",
"getPlugins" );
QDBusMessage reply = QDBusConnection::sessionBus().call( message );
return ( useCompiz_ = ( reply.type() == QDBusMessage::ReplyMessage && !reply.arguments().empty() ) );
#endif
}
//__________________________________________________
void NitrogenConfiguration::write( KConfigGroup& group ) const
{
group.writeEntry( NitrogenConfig::TITLE_ALIGNMENT, titleAlignmentName() );
group.writeEntry( NitrogenConfig::BUTTON_SIZE, buttonSizeName() );
group.writeEntry( NitrogenConfig::BUTTON_TYPE, buttonTypeName() );
group.writeEntry( NitrogenConfig::BLEND_COLOR, blendColorName() );
group.writeEntry( NitrogenConfig::FRAME_BORDER, frameBorderName() );
group.writeEntry( NitrogenConfig::SHOW_STRIPES, showStripes() );
group.writeEntry( NitrogenConfig::DRAW_SEPARATOR, drawSeparator() );
group.writeEntry( NitrogenConfig::OVERWRITE_COLORS, overwriteColors() );
group.writeEntry( NitrogenConfig::DRAW_SIZE_GRIP, drawSizeGrip() );
group.writeEntry( NitrogenConfig::USE_OXYGEN_SHADOWS, useOxygenShadows() );
}
//__________________________________________________
QString NitrogenConfiguration::titleAlignmentName( Qt::Alignment value )
{
switch( value )
{
case Qt::AlignLeft: return "Left";
case Qt::AlignHCenter: return "Center";
case Qt::AlignRight: return "Right";
default: return NitrogenConfiguration().titleAlignmentName();
}
return QString();
}
//__________________________________________________
Qt::Alignment NitrogenConfiguration::titleAlignment( QString value )
{
if (value == "Left") return Qt::AlignLeft;
else if (value == "Center") return Qt::AlignHCenter;
else if (value == "Right") return Qt::AlignRight;
else return NitrogenConfiguration().titleAlignment();
}
//__________________________________________________
QString NitrogenConfiguration::buttonSizeName( ButtonSize value )
{
switch( value )
{
case ButtonSmall: return "Small";
case ButtonDefault: return "Default";
case ButtonLarge: return "Large";
case ButtonHuge: return "Huge";
default: return NitrogenConfiguration().buttonSizeName();
}
return QString();
}
//__________________________________________________
NitrogenConfiguration::ButtonSize NitrogenConfiguration::buttonSize( QString value )
{
if( value == "Small" ) return ButtonSmall;
else if( value == "Default" ) return ButtonDefault;
else if( value == "Large" ) return ButtonLarge;
else if( value == "Huge" ) return ButtonHuge;
else return NitrogenConfiguration().buttonSize();
}
//__________________________________________________
QString NitrogenConfiguration::buttonTypeName( ButtonType value )
{
switch( value )
{
case ButtonKde42: return "KDE 4.2";
case ButtonKde43: return "KDE 4.3";
default: return NitrogenConfiguration().buttonTypeName();
}
return QString();
}
//__________________________________________________
NitrogenConfiguration::ButtonType NitrogenConfiguration::buttonType( QString value )
{
if( value == "KDE 4.2" ) return ButtonKde42;
else if( value == "KDE 4.3" ) return ButtonKde43;
else return NitrogenConfiguration().buttonType();
}
//__________________________________________________
QString NitrogenConfiguration::frameBorderName( FrameBorder value )
{
switch( value )
{
case BorderNone: return "No Border";
case BorderTiny: return "Tiny";
case BorderSmall: return "Small";
case BorderDefault: return "Default";
case BorderLarge: return "Large";
default: return NitrogenConfiguration().frameBorderName();
}
return QString();
}
//__________________________________________________
NitrogenConfiguration::FrameBorder NitrogenConfiguration::frameBorder( QString value )
{
if( value == "No Border" ) return BorderNone;
else if( value == "Tiny" ) return BorderTiny;
else if( value == "Small" ) return BorderSmall;
else if( value == "Default" ) return BorderDefault;
else if( value == "Large" ) return BorderLarge;
else return NitrogenConfiguration().frameBorder();
}
//__________________________________________________
QString NitrogenConfiguration::blendColorName( BlendColorType value )
{
switch( value )
{
case NoBlending: return "No Blending";
case RadialBlending: return "Radial Blending";
default: return NitrogenConfiguration().blendColorName();
}
return QString();
}
//__________________________________________________
NitrogenConfiguration::BlendColorType NitrogenConfiguration::blendColor( QString value )
{
if( value == "No Blending" ) return NoBlending;
else if( value == "Radial Blending" ) return RadialBlending;
else if( value == "Window Contents" ) return RadialBlending;
else return NitrogenConfiguration().blendColor();
}
//________________________________________________________
bool NitrogenConfiguration::operator == (const NitrogenConfiguration& other ) const
{
return
titleAlignment() == other.titleAlignment() &&
buttonSize() == other.buttonSize() &&
buttonType() == other.buttonType() &&
frameBorder() == other.frameBorder() &&
blendColor() == other.blendColor() &&
showStripes() == other.showStripes() &&
drawSeparator() == other.drawSeparator() &&
overwriteColors() == other.overwriteColors() &&
drawSizeGrip() == other.drawSizeGrip() &&
useOxygenShadows() == other.useOxygenShadows();
}
};