Own configuration dialog for cylinder and sphere effect, they do not use cube's config any longer. Nevertheless the effects use same global shortcut as cube.

svn path=/trunk/KDE/kdebase/workspace/; revision=848314
This commit is contained in:
Martin Gräßlin 2008-08-17 11:51:27 +00:00
parent 08f115ebe9
commit bde94eae24
14 changed files with 1258 additions and 7 deletions

View file

@ -174,6 +174,8 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
coverswitch_config.ui
cube_config.cpp
cube_config.ui
cylinder_config.cpp
cylinder_config.ui
flipswitch_config.cpp
flipswitch_config.ui
invert_config.cpp
@ -186,6 +188,8 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
sharpen_config.cpp
snow_config.cpp
snow_config.ui
sphere_config.cpp
sphere_config.ui
trackmouse_config.cpp
wobblywindows_config.cpp
wobblywindows_config.ui
@ -193,6 +197,7 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
install( FILES
coverswitch_config.desktop
cube_config.desktop
cylinder_config.desktop
flipswitch_config.desktop
invert_config.desktop
lookingglass_config.desktop
@ -200,6 +205,7 @@ if(KWIN_HAVE_OPENGL_COMPOSITING)
mousemark_config.desktop
sharpen_config.desktop
snow_config.desktop
sphere_config.desktop
trackmouse_config.desktop
wobblywindows_config.desktop
DESTINATION ${SERVICES_INSTALL_DIR}/kwin )

View file

@ -34,6 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef KWIN_HAVE_OPENGL_COMPOSITING
#include "coverswitch_config.h"
#include "cube_config.h"
#include "cylinder_config.h"
#include "flipswitch_config.h"
#include "invert_config.h"
#include "lookingglass_config.h"
@ -41,6 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "magnifier_config.h"
#include "sharpen_config.h"
#include "snow_config.h"
#include "sphere_config.h"
#include "trackmouse_config.h"
#include "wobblywindows_config.h"
#endif
@ -71,6 +73,7 @@ KWIN_EFFECT_CONFIG_FACTORY
#define OPENGL_PLUGINS \
registerPlugin<KWin::CoverSwitchEffectConfig>("coverswitch"); \
registerPlugin<KWin::CubeEffectConfig>("cube"); \
registerPlugin<KWin::CylinderEffectConfig>("cylinder"); \
registerPlugin<KWin::FlipSwitchEffectConfig>("flipswitch"); \
registerPlugin<KWin::InvertEffectConfig>("invert"); \
registerPlugin<KWin::LookingGlassEffectConfig>("lookingglass"); \
@ -78,6 +81,7 @@ KWIN_EFFECT_CONFIG_FACTORY
registerPlugin<KWin::MagnifierEffectConfig>("magnifier"); \
registerPlugin<KWin::SharpenEffectConfig>("sharpen"); \
registerPlugin<KWin::SnowEffectConfig>("snow"); \
registerPlugin<KWin::SphereEffectConfig>("sphere"); \
registerPlugin<KWin::TrackMouseEffectConfig>("trackmouse"); \
registerPlugin<KWin::WobblyWindowsEffectConfig> ("wobblywindows");

View file

@ -76,7 +76,18 @@ CubeEffect::CubeEffect()
, capListCreated( false )
, capList( 0 )
{
KConfigGroup conf = effects->effectConfig( "Cube" );
loadConfig( "Cube" );
KActionCollection* actionCollection = new KActionCollection( this );
KAction* a = static_cast< KAction* >( actionCollection->addAction( "Cube" ));
a->setText( i18n("Desktop Cube" ));
a->setGlobalShortcut( KShortcut( Qt::CTRL + Qt::Key_F11 ));
connect( a, SIGNAL( triggered( bool )), this, SLOT( toggle()));
}
void CubeEffect::loadConfig( QString config )
{
KConfigGroup conf = effects->effectConfig( config );
borderActivate = (ElectricBorder)conf.readEntry( "BorderActivate", (int)ElectricNone );
effects->reserveElectricBorder( borderActivate );
@ -141,12 +152,6 @@ CubeEffect::CubeEffect()
verticalTimeLine.setCurveShape( TimeLine::EaseInOutCurve );
verticalTimeLine.setDuration( rotationDuration );
KActionCollection* actionCollection = new KActionCollection( this );
KAction* a = static_cast< KAction* >( actionCollection->addAction( "Cube" ));
a->setText( i18n("Desktop Cube" ));
a->setGlobalShortcut( KShortcut( Qt::CTRL + Qt::Key_F11 ));
connect( a, SIGNAL( triggered( bool )), this, SLOT( toggle()));
}
CubeEffect::~CubeEffect()

View file

@ -65,6 +65,7 @@ class CubeEffect
virtual void paintScene( int mask, QRegion region, ScreenPaintData& data );
virtual void paintCap( float z, float zTexture );
virtual void paintCapStep( float z, float zTexture, bool texture );
void loadConfig( QString config );
void rotateToDesktop( int desktop );
void setActive( bool active );
bool activated;

View file

@ -38,6 +38,10 @@ CylinderEffect::CylinderEffect()
, mValid( true )
, mShader( 0 )
{
if( wallpaper )
wallpaper->discard();
loadConfig( "Cylinder" );
animateDesktopChange = false;
}
CylinderEffect::~CylinderEffect()

261
effects/cylinder_config.cpp Normal file
View file

@ -0,0 +1,261 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Martin Gräßlin <ubuntu@martin-graesslin.com>
This program 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 program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "cylinder_config.h"
#include <kwineffects.h>
#include <kconfiggroup.h>
#include <kcolorscheme.h>
#include <KActionCollection>
#include <kaction.h>
#include <KFileDialog>
#include <KImageFilePreview>
#include <QGridLayout>
#include <QColor>
#ifndef KDE_USE_FINAL
KWIN_EFFECT_CONFIG_FACTORY
#endif
namespace KWin
{
CylinderEffectConfigForm::CylinderEffectConfigForm(QWidget* parent) : QWidget(parent)
{
setupUi(this);
}
CylinderEffectConfig::CylinderEffectConfig(QWidget* parent, const QVariantList& args) :
KCModule(EffectFactory::componentData(), parent, args)
{
m_ui = new CylinderEffectConfigForm(this);
QGridLayout* layout = new QGridLayout(this);
layout->addWidget(m_ui, 0, 0);
m_ui->screenEdgeCombo->addItem(i18n("Top"));
m_ui->screenEdgeCombo->addItem(i18n("Top-right"));
m_ui->screenEdgeCombo->addItem(i18n("Right"));
m_ui->screenEdgeCombo->addItem(i18n("Bottom-right"));
m_ui->screenEdgeCombo->addItem(i18n("Bottom"));
m_ui->screenEdgeCombo->addItem(i18n("Bottom-left"));
m_ui->screenEdgeCombo->addItem(i18n("Left"));
m_ui->screenEdgeCombo->addItem(i18n("Top-left"));
m_ui->screenEdgeCombo->addItem(i18n("None"));
m_actionCollection = new KActionCollection( this, componentData() );
m_actionCollection->setConfigGroup( "Cube" );
m_actionCollection->setConfigGlobal(true);
KAction* a = (KAction*) m_actionCollection->addAction( "Cube" );
a->setText( i18n("Desktop Cube" ));
a->setProperty("isConfigurationAction", true);
a->setGlobalShortcut( KShortcut( Qt::CTRL + Qt::Key_F11 ));
m_ui->editor->addCollection(m_actionCollection);
m_ui->wallpaperButton->setIcon(KIcon("document-open"));
connect(m_ui->wallpaperButton, SIGNAL(clicked()), this, SLOT(showFileDialog()));
connect(m_ui->screenEdgeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(changed()));
connect(m_ui->rotationDurationSpin, SIGNAL(valueChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeOpacitySpin, SIGNAL(valueChanged(int)), this, SLOT(changed()));
connect(m_ui->displayDesktopNameBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->reflectionBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->backgroundColorButton, SIGNAL(changed(QColor)), this, SLOT(changed()));
connect(m_ui->bigCubeBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeCapsBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeCapsBox, SIGNAL(stateChanged(int)), this, SLOT(capsSelectionChanged()));
connect(m_ui->capsImageBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->capColorButton, SIGNAL(changed(QColor)), this, SLOT(changed()));
connect(m_ui->wallpaperLineEdit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
load();
}
void CylinderEffectConfig::load()
{
KCModule::load();
KConfigGroup conf = EffectsHandler::effectConfig( "Cylinder" );
int duration = conf.readEntry( "RotationDuration", 500 );
float opacity = conf.readEntry( "Opacity", 80 );
bool desktopName = conf.readEntry( "DisplayDesktopName", true );
bool reflection = conf.readEntry( "Reflection", true );
int activateBorder = conf.readEntry( "BorderActivate", (int)ElectricNone );
QColor background = conf.readEntry( "BackgroundColor", QColor( Qt::black ) );
QColor capColor = conf.readEntry( "CapColor", KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
bool texturedCaps = conf.readEntry( "TexturedCaps", true );
bool caps = conf.readEntry( "Caps", true );
bool bigCube = conf.readEntry( "BigCube", false );
m_ui->wallpaperLineEdit->setText( conf.readEntry( "Wallpaper", "" ) );
if( activateBorder == (int)ElectricNone )
activateBorder--;
m_ui->screenEdgeCombo->setCurrentIndex( activateBorder );
m_ui->rotationDurationSpin->setValue( duration );
m_ui->cubeOpacitySlider->setValue( opacity );
m_ui->cubeOpacitySpin->setValue( opacity );
if( desktopName )
{
m_ui->displayDesktopNameBox->setCheckState( Qt::Checked );
}
else
{
m_ui->displayDesktopNameBox->setCheckState( Qt::Unchecked );
}
if( reflection )
{
m_ui->reflectionBox->setCheckState( Qt::Checked );
}
else
{
m_ui->reflectionBox->setCheckState( Qt::Unchecked );
}
if( caps )
{
m_ui->cubeCapsBox->setCheckState( Qt::Checked );
}
else
{
m_ui->cubeCapsBox->setCheckState( Qt::Unchecked );
}
if( texturedCaps )
{
m_ui->capsImageBox->setCheckState( Qt::Checked );
}
else
{
m_ui->capsImageBox->setCheckState( Qt::Unchecked );
}
if( bigCube )
{
m_ui->bigCubeBox->setCheckState( Qt::Checked );
}
else
{
m_ui->bigCubeBox->setCheckState( Qt::Unchecked );
}
m_ui->backgroundColorButton->setColor( background );
m_ui->capColorButton->setColor( capColor );
capsSelectionChanged();
emit changed(false);
}
void CylinderEffectConfig::save()
{
KConfigGroup conf = EffectsHandler::effectConfig( "Cylinder" );
conf.writeEntry( "RotationDuration", m_ui->rotationDurationSpin->value() );
conf.writeEntry( "DisplayDesktopName", m_ui->displayDesktopNameBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "Reflection", m_ui->reflectionBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "Opacity", m_ui->cubeOpacitySpin->value() );
conf.writeEntry( "BackgroundColor", m_ui->backgroundColorButton->color() );
conf.writeEntry( "Caps", m_ui->cubeCapsBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "CapColor", m_ui->capColorButton->color() );
conf.writeEntry( "TexturedCaps", m_ui->capsImageBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "BigCube", m_ui->bigCubeBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "Wallpaper", m_ui->wallpaperLineEdit->text() );
int activateBorder = m_ui->screenEdgeCombo->currentIndex();
if( activateBorder == (int)ELECTRIC_COUNT )
activateBorder = (int)ElectricNone;
conf.writeEntry( "BorderActivate", activateBorder );
m_ui->editor->save();
conf.sync();
emit changed(false);
EffectsHandler::sendReloadMessage( "cube" );
}
void CylinderEffectConfig::defaults()
{
m_ui->rotationDurationSpin->setValue( 500 );
m_ui->displayDesktopNameBox->setCheckState( Qt::Checked );
m_ui->reflectionBox->setCheckState( Qt::Checked );
m_ui->cubeOpacitySpin->setValue( 80 );
m_ui->cubeOpacitySlider->setValue( 80 );
m_ui->screenEdgeCombo->setCurrentIndex( (int)ElectricNone -1 );
m_ui->backgroundColorButton->setColor( QColor( Qt::black ) );
m_ui->cubeCapsBox->setCheckState( Qt::Checked );
m_ui->capColorButton->setColor( KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
m_ui->capsImageBox->setCheckState( Qt::Checked );
m_ui->bigCubeBox->setCheckState( Qt::Unchecked );
m_ui->wallpaperLineEdit->setText( "" );
m_ui->editor->allDefault();
emit changed(true);
}
void CylinderEffectConfig::capsSelectionChanged()
{
if( m_ui->cubeCapsBox->checkState() == Qt::Checked )
{
// activate cap color
m_ui->capColorButton->setEnabled( true );
m_ui->capColorLabel->setEnabled( true );
m_ui->capsImageBox->setEnabled( true );
}
else
{
// deactivate cap color
m_ui->capColorButton->setEnabled( false );
m_ui->capColorLabel->setEnabled( false );
m_ui->capsImageBox->setEnabled( false );
}
}
void CylinderEffectConfig::showFileDialog()
{
m_dialog = new KFileDialog( KUrl(), "*.png *.jpeg *.jpg ", m_ui );
KImageFilePreview *previewWidget = new KImageFilePreview( m_dialog );
m_dialog->setPreviewWidget( previewWidget );
m_dialog->setOperationMode( KFileDialog::Opening );
m_dialog->setCaption( i18n("Select Wallpaper Image File") );
m_dialog->setModal( false );
m_dialog->show();
m_dialog->raise();
m_dialog->activateWindow();
connect(m_dialog, SIGNAL(okClicked()), this, SLOT(wallpaperSelected()));
}
void CylinderEffectConfig::wallpaperSelected()
{
QString wallpaper = m_dialog->selectedFile();
disconnect(m_dialog, SIGNAL(okClicked()), this, SLOT(wallpaperSelected()));
m_dialog->deleteLater();
if (wallpaper.isEmpty()) {
return;
}
m_ui->wallpaperLineEdit->setText( wallpaper );
}
} // namespace
#include "cylinder_config.moc"

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KCModule
X-KDE-Library=kcm_kwin4_effect_builtins
X-KDE-ParentComponents=kwin4_effect_cylinder
X-KDE-PluginKeyword=cylinder
Name=Desktop Cylinder

63
effects/cylinder_config.h Normal file
View file

@ -0,0 +1,63 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Martin Gräßlin <ubuntu@martin-graesslin.com>
This program 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 program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_CYLINDER_CONFIG_H
#define KWIN_CYLINDER_CONFIG_H
#include <kcmodule.h>
#include "ui_cylinder_config.h"
class KFileDialog;
namespace KWin
{
class CylinderEffectConfigForm : public QWidget, public Ui::CylinderEffectConfigForm
{
Q_OBJECT
public:
explicit CylinderEffectConfigForm(QWidget* parent);
};
class CylinderEffectConfig : public KCModule
{
Q_OBJECT
public:
explicit CylinderEffectConfig(QWidget* parent = 0, const QVariantList& args = QVariantList());
public slots:
virtual void save();
virtual void load();
virtual void defaults();
private slots:
void capsSelectionChanged();
void showFileDialog();
void wallpaperSelected();
private:
CylinderEffectConfigForm* m_ui;
KActionCollection* m_actionCollection;
KFileDialog* m_dialog;
};
} // namespace
#endif

291
effects/cylinder_config.ui Normal file
View file

@ -0,0 +1,291 @@
<ui version="4.0" >
<class>KWin::CylinderEffectConfigForm</class>
<widget class="QWidget" name="KWin::CylinderEffectConfigForm" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>490</height>
</rect>
</property>
<layout class="QVBoxLayout" >
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="title" >
<string>Appearance</string>
</property>
<layout class="QGridLayout" >
<item row="2" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>Rotation &amp;duration:</string>
</property>
<property name="buddy" >
<cstring>rotationDurationSpin</cstring>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QSpinBox" name="rotationDurationSpin" >
<property name="suffix" >
<string> msec</string>
</property>
<property name="maximum" >
<number>5000</number>
</property>
<property name="value" >
<number>500</number>
</property>
</widget>
</item>
<item row="4" column="0" >
<widget class="QLabel" name="label_3" >
<property name="text" >
<string>Cube &amp;opacity:</string>
</property>
<property name="buddy" >
<cstring>cubeOpacitySpin</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QComboBox" name="screenEdgeCombo" />
</item>
<item row="5" column="0" >
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<widget class="QSlider" name="cubeOpacitySlider" >
<property name="maximum" >
<number>100</number>
</property>
<property name="singleStep" >
<number>1</number>
</property>
<property name="value" >
<number>100</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition" >
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval" >
<number>10</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" >
<item>
<widget class="QLabel" name="label_4" >
<property name="text" >
<string>Fully transparent</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_5" >
<property name="text" >
<string>Fully opaque</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item row="5" column="1" >
<widget class="QSpinBox" name="cubeOpacitySpin" >
<property name="suffix" >
<string> %</string>
</property>
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>100</number>
</property>
</widget>
</item>
<item row="7" column="0" >
<widget class="QCheckBox" name="displayDesktopNameBox" >
<property name="text" >
<string>Display desktop &amp;name</string>
</property>
</widget>
</item>
<item row="8" column="0" >
<widget class="QCheckBox" name="reflectionBox" >
<property name="text" >
<string>&amp;Reflection</string>
</property>
</widget>
</item>
<item row="10" column="0" >
<widget class="QLabel" name="label_6" >
<property name="text" >
<string>&amp;Background Color:</string>
</property>
<property name="buddy" >
<cstring>backgroundColorButton</cstring>
</property>
</widget>
</item>
<item row="10" column="1" >
<widget class="KColorButton" name="backgroundColorButton" />
</item>
<item row="13" column="0" >
<widget class="QCheckBox" name="cubeCapsBox" >
<property name="text" >
<string>Cube &amp;Caps</string>
</property>
</widget>
</item>
<item row="14" column="0" >
<widget class="QLabel" name="capColorLabel" >
<property name="text" >
<string>C&amp;ap Color:</string>
</property>
<property name="buddy" >
<cstring>capColorButton</cstring>
</property>
</widget>
</item>
<item row="14" column="1" >
<widget class="KColorButton" name="capColorButton" />
</item>
<item row="15" column="0" >
<widget class="QCheckBox" name="capsImageBox" >
<property name="text" >
<string>Display &amp;image on cube caps</string>
</property>
</widget>
</item>
<item row="16" column="0" >
<widget class="QCheckBox" name="bigCubeBox" >
<property name="text" >
<string>S&amp;pan cube on all screens</string>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Screen &amp;edge:</string>
</property>
<property name="buddy" >
<cstring>screenEdgeCombo</cstring>
</property>
</widget>
</item>
<item row="11" column="0" >
<widget class="QLabel" name="label_7" >
<property name="text" >
<string>&amp;Wallpaper:</string>
</property>
<property name="buddy" >
<cstring>wallpaperLineEdit</cstring>
</property>
</widget>
</item>
<item row="12" column="0" colspan="2" >
<layout class="QHBoxLayout" name="horizontalLayout_3" >
<item>
<widget class="QLineEdit" name="wallpaperLineEdit" />
</item>
<item>
<widget class="QPushButton" name="wallpaperButton" >
<property name="text" >
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="KWin::GlobalShortcutsEditor" native="1" name="editor" />
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>KColorButton</class>
<extends>QPushButton</extends>
<header>kcolorbutton.h</header>
</customwidget>
<customwidget>
<class>KWin::GlobalShortcutsEditor</class>
<extends>QWidget</extends>
<header location="global" >kwineffects.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>screenEdgeCombo</tabstop>
<tabstop>rotationDurationSpin</tabstop>
<tabstop>cubeOpacitySpin</tabstop>
<tabstop>cubeOpacitySlider</tabstop>
<tabstop>displayDesktopNameBox</tabstop>
<tabstop>reflectionBox</tabstop>
<tabstop>backgroundColorButton</tabstop>
<tabstop>wallpaperLineEdit</tabstop>
<tabstop>wallpaperButton</tabstop>
<tabstop>cubeCapsBox</tabstop>
<tabstop>capColorButton</tabstop>
<tabstop>capsImageBox</tabstop>
<tabstop>bigCubeBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>cubeOpacitySpin</sender>
<signal>valueChanged(int)</signal>
<receiver>cubeOpacitySlider</receiver>
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
<x>386</x>
<y>175</y>
</hint>
<hint type="destinationlabel" >
<x>235</x>
<y>162</y>
</hint>
</hints>
</connection>
<connection>
<sender>cubeOpacitySlider</sender>
<signal>valueChanged(int)</signal>
<receiver>cubeOpacitySpin</receiver>
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
<x>133</x>
<y>162</y>
</hint>
<hint type="destinationlabel" >
<x>386</x>
<y>175</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -38,6 +38,9 @@ SphereEffect::SphereEffect()
, mValid( true )
, mShader( 0 )
{
if( wallpaper )
wallpaper->discard();
loadConfig( "Sphere" );
reflection = false;
animateDesktopChange = false;
}

249
effects/sphere_config.cpp Normal file
View file

@ -0,0 +1,249 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Martin Gräßlin <ubuntu@martin-graesslin.com>
This program 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 program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "sphere_config.h"
#include <kwineffects.h>
#include <kconfiggroup.h>
#include <kcolorscheme.h>
#include <KActionCollection>
#include <kaction.h>
#include <KFileDialog>
#include <KImageFilePreview>
#include <QGridLayout>
#include <QColor>
#ifndef KDE_USE_FINAL
KWIN_EFFECT_CONFIG_FACTORY
#endif
namespace KWin
{
SphereEffectConfigForm::SphereEffectConfigForm(QWidget* parent) : QWidget(parent)
{
setupUi(this);
}
SphereEffectConfig::SphereEffectConfig(QWidget* parent, const QVariantList& args) :
KCModule(EffectFactory::componentData(), parent, args)
{
m_ui = new SphereEffectConfigForm(this);
QGridLayout* layout = new QGridLayout(this);
layout->addWidget(m_ui, 0, 0);
m_ui->screenEdgeCombo->addItem(i18n("Top"));
m_ui->screenEdgeCombo->addItem(i18n("Top-right"));
m_ui->screenEdgeCombo->addItem(i18n("Right"));
m_ui->screenEdgeCombo->addItem(i18n("Bottom-right"));
m_ui->screenEdgeCombo->addItem(i18n("Bottom"));
m_ui->screenEdgeCombo->addItem(i18n("Bottom-left"));
m_ui->screenEdgeCombo->addItem(i18n("Left"));
m_ui->screenEdgeCombo->addItem(i18n("Top-left"));
m_ui->screenEdgeCombo->addItem(i18n("None"));
m_actionCollection = new KActionCollection( this, componentData() );
m_actionCollection->setConfigGroup( "Cube" );
m_actionCollection->setConfigGlobal(true);
KAction* a = (KAction*) m_actionCollection->addAction( "Cube" );
a->setText( i18n("Desktop Cube" ));
a->setProperty("isConfigurationAction", true);
a->setGlobalShortcut( KShortcut( Qt::CTRL + Qt::Key_F11 ));
m_ui->editor->addCollection(m_actionCollection);
m_ui->wallpaperButton->setIcon(KIcon("document-open"));
connect(m_ui->wallpaperButton, SIGNAL(clicked()), this, SLOT(showFileDialog()));
connect(m_ui->screenEdgeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(changed()));
connect(m_ui->rotationDurationSpin, SIGNAL(valueChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeOpacitySpin, SIGNAL(valueChanged(int)), this, SLOT(changed()));
connect(m_ui->displayDesktopNameBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->backgroundColorButton, SIGNAL(changed(QColor)), this, SLOT(changed()));
connect(m_ui->bigCubeBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeCapsBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->cubeCapsBox, SIGNAL(stateChanged(int)), this, SLOT(capsSelectionChanged()));
connect(m_ui->capsImageBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
connect(m_ui->capColorButton, SIGNAL(changed(QColor)), this, SLOT(changed()));
connect(m_ui->wallpaperLineEdit, SIGNAL(textChanged(QString)), this, SLOT(changed()));
load();
}
void SphereEffectConfig::load()
{
KCModule::load();
KConfigGroup conf = EffectsHandler::effectConfig( "Sphere" );
int duration = conf.readEntry( "RotationDuration", 500 );
float opacity = conf.readEntry( "Opacity", 80 );
bool desktopName = conf.readEntry( "DisplayDesktopName", true );
int activateBorder = conf.readEntry( "BorderActivate", (int)ElectricNone );
QColor background = conf.readEntry( "BackgroundColor", QColor( Qt::black ) );
QColor capColor = conf.readEntry( "CapColor", KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
bool texturedCaps = conf.readEntry( "TexturedCaps", true );
bool caps = conf.readEntry( "Caps", true );
bool bigCube = conf.readEntry( "BigCube", false );
m_ui->wallpaperLineEdit->setText( conf.readEntry( "Wallpaper", "" ) );
if( activateBorder == (int)ElectricNone )
activateBorder--;
m_ui->screenEdgeCombo->setCurrentIndex( activateBorder );
m_ui->rotationDurationSpin->setValue( duration );
m_ui->cubeOpacitySlider->setValue( opacity );
m_ui->cubeOpacitySpin->setValue( opacity );
if( desktopName )
{
m_ui->displayDesktopNameBox->setCheckState( Qt::Checked );
}
else
{
m_ui->displayDesktopNameBox->setCheckState( Qt::Unchecked );
}
if( caps )
{
m_ui->cubeCapsBox->setCheckState( Qt::Checked );
}
else
{
m_ui->cubeCapsBox->setCheckState( Qt::Unchecked );
}
if( texturedCaps )
{
m_ui->capsImageBox->setCheckState( Qt::Checked );
}
else
{
m_ui->capsImageBox->setCheckState( Qt::Unchecked );
}
if( bigCube )
{
m_ui->bigCubeBox->setCheckState( Qt::Checked );
}
else
{
m_ui->bigCubeBox->setCheckState( Qt::Unchecked );
}
m_ui->backgroundColorButton->setColor( background );
m_ui->capColorButton->setColor( capColor );
capsSelectionChanged();
emit changed(false);
}
void SphereEffectConfig::save()
{
KConfigGroup conf = EffectsHandler::effectConfig( "Sphere" );
conf.writeEntry( "RotationDuration", m_ui->rotationDurationSpin->value() );
conf.writeEntry( "DisplayDesktopName", m_ui->displayDesktopNameBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "Opacity", m_ui->cubeOpacitySpin->value() );
conf.writeEntry( "BackgroundColor", m_ui->backgroundColorButton->color() );
conf.writeEntry( "Caps", m_ui->cubeCapsBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "CapColor", m_ui->capColorButton->color() );
conf.writeEntry( "TexturedCaps", m_ui->capsImageBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "BigCube", m_ui->bigCubeBox->checkState() == Qt::Checked ? true : false );
conf.writeEntry( "Wallpaper", m_ui->wallpaperLineEdit->text() );
int activateBorder = m_ui->screenEdgeCombo->currentIndex();
if( activateBorder == (int)ELECTRIC_COUNT )
activateBorder = (int)ElectricNone;
conf.writeEntry( "BorderActivate", activateBorder );
m_ui->editor->save();
conf.sync();
emit changed(false);
EffectsHandler::sendReloadMessage( "cube" );
}
void SphereEffectConfig::defaults()
{
m_ui->rotationDurationSpin->setValue( 500 );
m_ui->displayDesktopNameBox->setCheckState( Qt::Checked );
m_ui->cubeOpacitySpin->setValue( 80 );
m_ui->cubeOpacitySlider->setValue( 80 );
m_ui->screenEdgeCombo->setCurrentIndex( (int)ElectricNone -1 );
m_ui->backgroundColorButton->setColor( QColor( Qt::black ) );
m_ui->cubeCapsBox->setCheckState( Qt::Checked );
m_ui->capColorButton->setColor( KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
m_ui->capsImageBox->setCheckState( Qt::Checked );
m_ui->bigCubeBox->setCheckState( Qt::Unchecked );
m_ui->wallpaperLineEdit->setText( "" );
m_ui->editor->allDefault();
emit changed(true);
}
void SphereEffectConfig::capsSelectionChanged()
{
if( m_ui->cubeCapsBox->checkState() == Qt::Checked )
{
// activate cap color
m_ui->capColorButton->setEnabled( true );
m_ui->capColorLabel->setEnabled( true );
m_ui->capsImageBox->setEnabled( true );
}
else
{
// deactivate cap color
m_ui->capColorButton->setEnabled( false );
m_ui->capColorLabel->setEnabled( false );
m_ui->capsImageBox->setEnabled( false );
}
}
void SphereEffectConfig::showFileDialog()
{
m_dialog = new KFileDialog( KUrl(), "*.png *.jpeg *.jpg ", m_ui );
KImageFilePreview *previewWidget = new KImageFilePreview( m_dialog );
m_dialog->setPreviewWidget( previewWidget );
m_dialog->setOperationMode( KFileDialog::Opening );
m_dialog->setCaption( i18n("Select Wallpaper Image File") );
m_dialog->setModal( false );
m_dialog->show();
m_dialog->raise();
m_dialog->activateWindow();
connect(m_dialog, SIGNAL(okClicked()), this, SLOT(wallpaperSelected()));
}
void SphereEffectConfig::wallpaperSelected()
{
QString wallpaper = m_dialog->selectedFile();
disconnect(m_dialog, SIGNAL(okClicked()), this, SLOT(wallpaperSelected()));
m_dialog->deleteLater();
if (wallpaper.isEmpty()) {
return;
}
m_ui->wallpaperLineEdit->setText( wallpaper );
}
} // namespace
#include "sphere_config.moc"

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KCModule
X-KDE-Library=kcm_kwin4_effect_builtins
X-KDE-ParentComponents=kwin4_effect_sphere
X-KDE-PluginKeyword=sphere
Name=Desktop Sphere

63
effects/sphere_config.h Normal file
View file

@ -0,0 +1,63 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Martin Gräßlin <ubuntu@martin-graesslin.com>
This program 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 program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_SPHERE_CONFIG_H
#define KWIN_SPHERE_CONFIG_H
#include <kcmodule.h>
#include "ui_sphere_config.h"
class KFileDialog;
namespace KWin
{
class SphereEffectConfigForm : public QWidget, public Ui::SphereEffectConfigForm
{
Q_OBJECT
public:
explicit SphereEffectConfigForm(QWidget* parent);
};
class SphereEffectConfig : public KCModule
{
Q_OBJECT
public:
explicit SphereEffectConfig(QWidget* parent = 0, const QVariantList& args = QVariantList());
public slots:
virtual void save();
virtual void load();
virtual void defaults();
private slots:
void capsSelectionChanged();
void showFileDialog();
void wallpaperSelected();
private:
SphereEffectConfigForm* m_ui;
KActionCollection* m_actionCollection;
KFileDialog* m_dialog;
};
} // namespace
#endif

283
effects/sphere_config.ui Normal file
View file

@ -0,0 +1,283 @@
<ui version="4.0" >
<class>KWin::SphereEffectConfigForm</class>
<widget class="QWidget" name="KWin::SphereEffectConfigForm" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>490</height>
</rect>
</property>
<layout class="QVBoxLayout" >
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="title" >
<string>Appearance</string>
</property>
<layout class="QGridLayout" >
<item row="2" column="0" >
<widget class="QLabel" name="label" >
<property name="text" >
<string>Rotation &amp;duration:</string>
</property>
<property name="buddy" >
<cstring>rotationDurationSpin</cstring>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QSpinBox" name="rotationDurationSpin" >
<property name="suffix" >
<string> msec</string>
</property>
<property name="maximum" >
<number>5000</number>
</property>
<property name="value" >
<number>500</number>
</property>
</widget>
</item>
<item row="4" column="0" >
<widget class="QLabel" name="label_3" >
<property name="text" >
<string>Cube &amp;opacity:</string>
</property>
<property name="buddy" >
<cstring>cubeOpacitySpin</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QComboBox" name="screenEdgeCombo" />
</item>
<item row="5" column="0" >
<layout class="QVBoxLayout" name="verticalLayout" >
<item>
<widget class="QSlider" name="cubeOpacitySlider" >
<property name="maximum" >
<number>100</number>
</property>
<property name="singleStep" >
<number>1</number>
</property>
<property name="value" >
<number>100</number>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition" >
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval" >
<number>10</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" >
<item>
<widget class="QLabel" name="label_4" >
<property name="text" >
<string>Fully transparent</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_5" >
<property name="text" >
<string>Fully opaque</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item row="5" column="1" >
<widget class="QSpinBox" name="cubeOpacitySpin" >
<property name="suffix" >
<string> %</string>
</property>
<property name="maximum" >
<number>100</number>
</property>
<property name="value" >
<number>100</number>
</property>
</widget>
</item>
<item row="7" column="0" >
<widget class="QCheckBox" name="displayDesktopNameBox" >
<property name="text" >
<string>Display desktop &amp;name</string>
</property>
</widget>
</item>
<item row="9" column="0" >
<widget class="QLabel" name="label_6" >
<property name="text" >
<string>&amp;Background Color:</string>
</property>
<property name="buddy" >
<cstring>backgroundColorButton</cstring>
</property>
</widget>
</item>
<item row="9" column="1" >
<widget class="KColorButton" name="backgroundColorButton" />
</item>
<item row="12" column="0" >
<widget class="QCheckBox" name="cubeCapsBox" >
<property name="text" >
<string>Cube &amp;Caps</string>
</property>
</widget>
</item>
<item row="13" column="0" >
<widget class="QLabel" name="capColorLabel" >
<property name="text" >
<string>C&amp;ap Color:</string>
</property>
<property name="buddy" >
<cstring>capColorButton</cstring>
</property>
</widget>
</item>
<item row="13" column="1" >
<widget class="KColorButton" name="capColorButton" />
</item>
<item row="14" column="0" >
<widget class="QCheckBox" name="capsImageBox" >
<property name="text" >
<string>Display &amp;image on cube caps</string>
</property>
</widget>
</item>
<item row="15" column="0" >
<widget class="QCheckBox" name="bigCubeBox" >
<property name="text" >
<string>S&amp;pan cube on all screens</string>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="label_2" >
<property name="text" >
<string>Screen &amp;edge:</string>
</property>
<property name="buddy" >
<cstring>screenEdgeCombo</cstring>
</property>
</widget>
</item>
<item row="10" column="0" >
<widget class="QLabel" name="label_7" >
<property name="text" >
<string>&amp;Wallpaper:</string>
</property>
<property name="buddy" >
<cstring>wallpaperLineEdit</cstring>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2" >
<layout class="QHBoxLayout" name="horizontalLayout_3" >
<item>
<widget class="QLineEdit" name="wallpaperLineEdit" />
</item>
<item>
<widget class="QPushButton" name="wallpaperButton" >
<property name="text" >
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="KWin::GlobalShortcutsEditor" native="1" name="editor" />
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>KColorButton</class>
<extends>QPushButton</extends>
<header>kcolorbutton.h</header>
</customwidget>
<customwidget>
<class>KWin::GlobalShortcutsEditor</class>
<extends>QWidget</extends>
<header location="global" >kwineffects.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>screenEdgeCombo</tabstop>
<tabstop>rotationDurationSpin</tabstop>
<tabstop>cubeOpacitySpin</tabstop>
<tabstop>cubeOpacitySlider</tabstop>
<tabstop>displayDesktopNameBox</tabstop>
<tabstop>backgroundColorButton</tabstop>
<tabstop>wallpaperLineEdit</tabstop>
<tabstop>wallpaperButton</tabstop>
<tabstop>cubeCapsBox</tabstop>
<tabstop>capColorButton</tabstop>
<tabstop>capsImageBox</tabstop>
<tabstop>bigCubeBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>cubeOpacitySpin</sender>
<signal>valueChanged(int)</signal>
<receiver>cubeOpacitySlider</receiver>
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
<x>386</x>
<y>175</y>
</hint>
<hint type="destinationlabel" >
<x>235</x>
<y>162</y>
</hint>
</hints>
</connection>
<connection>
<sender>cubeOpacitySlider</sender>
<signal>valueChanged(int)</signal>
<receiver>cubeOpacitySpin</receiver>
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
<x>133</x>
<y>162</y>
</hint>
<hint type="destinationlabel" >
<x>386</x>
<y>175</y>
</hint>
</hints>
</connection>
</connections>
</ui>