~ubuntu-branches/ubuntu/utopic/kde-workspace/utopic-proposed

« back to all changes in this revision

Viewing changes to kwin/kcmkwin/kwindecoration/configdialog.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michał Zając
  • Date: 2011-07-09 08:31:15 UTC
  • Revision ID: james.westby@ubuntu.com-20110709083115-ohyxn6z93mily9fc
Tags: upstream-4.6.90
Import upstream version 4.6.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/********************************************************************
 
2
 KWin - the KDE window manager
 
3
 This file is part of the KDE project.
 
4
 
 
5
Copyright (C) 2009 Martin Gräßlin <kde@martin-graesslin.com>
 
6
 
 
7
This program is free software; you can redistribute it and/or modify
 
8
it under the terms of the GNU General Public License as published by
 
9
the Free Software Foundation; either version 2 of the License, or
 
10
(at your option) any later version.
 
11
 
 
12
This program is distributed in the hope that it will be useful,
 
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
GNU General Public License for more details.
 
16
 
 
17
You should have received a copy of the GNU General Public License
 
18
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
*********************************************************************/
 
20
#include "configdialog.h"
 
21
 
 
22
#include <QDBusConnection>
 
23
#include <QDBusMessage>
 
24
 
 
25
#include <KLibrary>
 
26
#include <KVBox>
 
27
 
 
28
namespace KWin
 
29
{
 
30
 
 
31
static const char* const border_names[ KDecorationDefines::BordersCount ] = {
 
32
    I18N_NOOP2("@item:inlistbox Border size:", "Tiny"),
 
33
    I18N_NOOP2("@item:inlistbox Border size:", "Normal"),
 
34
    I18N_NOOP2("@item:inlistbox Border size:", "Large"),
 
35
    I18N_NOOP2("@item:inlistbox Border size:", "Very Large"),
 
36
    I18N_NOOP2("@item:inlistbox Border size:", "Huge"),
 
37
    I18N_NOOP2("@item:inlistbox Border size:", "Very Huge"),
 
38
    I18N_NOOP2("@item:inlistbox Border size:", "Oversized")
 
39
};
 
40
 
 
41
KWinAuroraeConfigForm::KWinAuroraeConfigForm(QWidget* parent)
 
42
    : QWidget(parent)
 
43
{
 
44
    setupUi(this);
 
45
}
 
46
 
 
47
KWinDecorationConfigForm::KWinDecorationConfigForm(QWidget* parent)
 
48
    : QWidget(parent)
 
49
{
 
50
    setupUi(this);
 
51
}
 
52
 
 
53
KWinDecorationConfigDialog::KWinDecorationConfigDialog(QString deco, const QList<QVariant>& borderSizes,
 
54
        KDecorationDefines::BorderSize size,
 
55
        QWidget* parent, Qt::WFlags flags)
 
56
    : KDialog(parent, flags)
 
57
    , m_borderSizes(borderSizes)
 
58
    , m_kwinConfig(KSharedConfig::openConfig("kwinrc"))
 
59
    , m_pluginObject(0)
 
60
    , m_pluginConfigWidget(0)
 
61
{
 
62
    m_ui = new KWinDecorationConfigForm(this);
 
63
    setWindowTitle(i18n("Decoration Options"));
 
64
    setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Default | KDialog::Reset);
 
65
    enableButton(KDialog::Reset, false);
 
66
    QVBoxLayout* layout = new QVBoxLayout;
 
67
    layout->addWidget(m_ui);
 
68
 
 
69
    KLibrary library(styleToConfigLib(deco));
 
70
    if (library.load()) {
 
71
        KLibrary::void_function_ptr alloc_ptr = library.resolveFunction("allocate_config");
 
72
        if (alloc_ptr != NULL) {
 
73
            allocatePlugin = (QObject * (*)(KConfigGroup & conf, QWidget * parent))alloc_ptr;
 
74
            KConfigGroup config(m_kwinConfig, "Style");
 
75
            m_pluginConfigWidget = new KVBox(this);
 
76
            m_pluginObject = (QObject*)(allocatePlugin(config, m_pluginConfigWidget));
 
77
 
 
78
            // connect required signals and slots together...
 
79
            connect(this, SIGNAL(accepted()), this, SLOT(slotAccepted()));
 
80
            connect(m_pluginObject, SIGNAL(changed()), this, SLOT(slotSelectionChanged()));
 
81
            connect(this, SIGNAL(pluginSave(KConfigGroup&)), m_pluginObject, SLOT(save(KConfigGroup &)));
 
82
            connect(this, SIGNAL(defaultClicked()), m_pluginObject, SLOT(defaults()));
 
83
            connect(this, SIGNAL(defaultClicked()), SLOT(slotDefault()));
 
84
        }
 
85
    }
 
86
 
 
87
    if (m_pluginConfigWidget) {
 
88
        layout->addWidget(m_pluginConfigWidget);
 
89
    }
 
90
 
 
91
    if (borderSizes.count() >= 2) {
 
92
        foreach (const QVariant & borderSize, borderSizes) {
 
93
            KDecorationDefines::BorderSize currentSize =
 
94
                static_cast<KDecorationDefines::BorderSize>(borderSize.toInt());
 
95
            m_ui->bordersCombo->addItem(i18nc("@item:inlistbox Border size:", border_names[currentSize]), borderSizeToIndex(currentSize, borderSizes));
 
96
        }
 
97
        m_ui->bordersCombo->setCurrentIndex(borderSizeToIndex(size, borderSizes));
 
98
    } else {
 
99
        m_ui->bordersCombo->hide();
 
100
        m_ui->borderLabel->hide();
 
101
    }
 
102
 
 
103
    QWidget* main = new QWidget(this);
 
104
    main->setLayout(layout);
 
105
    setMainWidget(main);
 
106
}
 
107
 
 
108
KWinDecorationConfigDialog::~KWinDecorationConfigDialog()
 
109
{
 
110
    delete m_pluginObject;
 
111
}
 
112
 
 
113
KDecorationDefines::BorderSize KWinDecorationConfigDialog::borderSize() const
 
114
{
 
115
    if (m_borderSizes.count() >= 2)
 
116
        return (KDecorationDefines::BorderSize)m_borderSizes.at(m_ui->bordersCombo->currentIndex()).toInt();
 
117
    return KDecorationDefines::BorderNormal;
 
118
}
 
119
 
 
120
int KWinDecorationConfigDialog::borderSizeToIndex(KDecorationDefines::BorderSize size, const QList< QVariant >& sizes)
 
121
{
 
122
    int pos = 0;
 
123
    for (QList< QVariant >::ConstIterator it = sizes.constBegin();
 
124
            it != sizes.constEnd();
 
125
            ++it, ++pos)
 
126
        if (size <= (*it).toInt())
 
127
            break;
 
128
    return pos;
 
129
}
 
130
 
 
131
void KWinDecorationConfigDialog::slotAccepted()
 
132
{
 
133
    KConfigGroup config(m_kwinConfig, "Style");
 
134
    emit pluginSave(config);
 
135
    config.sync();
 
136
}
 
137
 
 
138
void KWinDecorationConfigDialog::slotSelectionChanged()
 
139
{
 
140
    enableButton(KDialog::Reset, true);
 
141
}
 
142
 
 
143
QString KWinDecorationConfigDialog::styleToConfigLib(const QString& styleLib) const
 
144
{
 
145
    if (styleLib.startsWith(QLatin1String("kwin3_")))
 
146
        return "kwin_" + styleLib.mid(6) + "_config";
 
147
    else
 
148
        return styleLib + "_config";
 
149
}
 
150
 
 
151
void KWinDecorationConfigDialog::slotDefault()
 
152
{
 
153
    if (m_borderSizes.count() >= 2)
 
154
        m_ui->bordersCombo->setCurrentIndex(borderSizeToIndex(BorderNormal, m_borderSizes));
 
155
}
 
156
 
 
157
} // namespace KWin
 
158
 
 
159
#include "configdialog.moc"