1 | /* |
2 | * Copyright 2008 Ryan P. Bitanga <ryan.bitanga@gmail.com> |
3 | * |
4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU Library General Public License as |
6 | * published by the Free Software Foundation; either version 2, or |
7 | * (at your option) any later version. |
8 | * |
9 | * This program is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details |
13 | * |
14 | * You should have received a copy of the GNU Library General Public |
15 | * License along with this program; if not, write to the |
16 | * Free Software Foundation, Inc., |
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
18 | */ |
19 | |
20 | #include "configdialog.h" |
21 | |
22 | #include <QButtonGroup> |
23 | #include <QDialogButtonBox> |
24 | #include <QGroupBox> |
25 | #include <QDialogButtonBox> |
26 | #include <QPushButton> |
27 | #include <QRadioButton> |
28 | #include <QTabWidget> |
29 | #include <QVBoxLayout> |
30 | #include <QTimer> |
31 | |
32 | #include <KConfigGroup> |
33 | #include <KDebug> |
34 | #include <KGlobal> |
35 | #include <KPluginInfo> |
36 | #include <KPluginSelector> |
37 | #include <KServiceTypeTrader> |
38 | |
39 | #include <Plasma/RunnerManager> |
40 | #include <Plasma/Theme> |
41 | |
42 | #include "interfaces/default/interface.h" |
43 | #include "krunnersettings.h" |
44 | #include "interfaces/quicksand/qs_dialog.h" |
45 | |
46 | KRunnerConfigWidget::KRunnerConfigWidget(Plasma::RunnerManager *manager, QWidget *parent) |
47 | : QWidget(parent), |
48 | m_preview(0), |
49 | m_manager(manager) |
50 | { |
51 | m_tabWidget = new KTabWidget(this); |
52 | m_sel = new KPluginSelector(m_tabWidget); |
53 | m_tabWidget->addTab(m_sel, i18n("Plugins" )); |
54 | |
55 | QWidget *m_generalSettings = new QWidget(m_tabWidget); |
56 | //QVBoxLayout *genLayout = new QVBoxLayout(m_generalSettings); |
57 | |
58 | m_interfaceType = KRunnerSettings::interface(); |
59 | m_uiOptions.setupUi(m_generalSettings); |
60 | |
61 | syncPalette(); |
62 | connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SLOT(syncPalette())); |
63 | |
64 | QButtonGroup *positionButtons = new QButtonGroup(m_generalSettings); |
65 | positionButtons->addButton(m_uiOptions.topEdgeButton); |
66 | positionButtons->addButton(m_uiOptions.freeFloatingButton); |
67 | m_uiOptions.freeFloatingButton->setChecked(KRunnerSettings::freeFloating()); |
68 | |
69 | QButtonGroup *displayButtons = new QButtonGroup(m_generalSettings); |
70 | connect(displayButtons, SIGNAL(buttonClicked(int)), this, SLOT(setInterface(int))); |
71 | displayButtons->addButton(m_uiOptions.commandButton, KRunnerSettings::EnumInterface::CommandOriented); |
72 | displayButtons->addButton(m_uiOptions.taskButton, KRunnerSettings::EnumInterface::TaskOriented); |
73 | |
74 | if (m_interfaceType == KRunnerSettings::EnumInterface::CommandOriented) { |
75 | m_uiOptions.commandButton->setChecked(true); |
76 | } else { |
77 | m_uiOptions.taskButton->setChecked(true); |
78 | } |
79 | |
80 | connect(m_uiOptions.previewButton, SIGNAL(clicked()), this, SLOT(previewInterface())); |
81 | |
82 | m_tabWidget->addTab(m_generalSettings, i18n("User Interface" )); |
83 | |
84 | connect(m_sel, SIGNAL(configCommitted(QByteArray)), this, SLOT(updateRunner(QByteArray))); |
85 | |
86 | QTimer::singleShot(0, this, SLOT(load())); |
87 | |
88 | m_buttons = new QDialogButtonBox(this); |
89 | m_buttons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel); |
90 | connect(m_buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(save(QAbstractButton*))); |
91 | connect(m_buttons, SIGNAL(rejected()), this, SIGNAL(finished())); |
92 | |
93 | QVBoxLayout *topLayout = new QVBoxLayout(this); |
94 | topLayout->addWidget(m_tabWidget); |
95 | topLayout->addWidget(m_buttons); |
96 | } |
97 | |
98 | KRunnerConfigWidget::~KRunnerConfigWidget() |
99 | { |
100 | } |
101 | |
102 | void KRunnerConfigWidget::syncPalette() |
103 | { |
104 | QColor color = Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor); |
105 | QPalette p = palette(); |
106 | p.setColor(QPalette::Normal, QPalette::WindowText, color); |
107 | p.setColor(QPalette::Inactive, QPalette::WindowText, color); |
108 | color.setAlphaF(0.6); |
109 | p.setColor(QPalette::Disabled, QPalette::WindowText, color); |
110 | |
111 | p.setColor(QPalette::Normal, QPalette::Link, Plasma::Theme::defaultTheme()->color(Plasma::Theme::LinkColor)); |
112 | p.setColor(QPalette::Normal, QPalette::LinkVisited, Plasma::Theme::defaultTheme()->color(Plasma::Theme::VisitedLinkColor)); |
113 | setPalette(p); |
114 | } |
115 | |
116 | void KRunnerConfigWidget::previewInterface() |
117 | { |
118 | delete m_preview; |
119 | switch (m_interfaceType) { |
120 | case KRunnerSettings::EnumInterface::CommandOriented: |
121 | m_preview = new Interface(m_manager, this); |
122 | break; |
123 | default: |
124 | m_preview = new QsDialog(m_manager, this); |
125 | break; |
126 | } |
127 | |
128 | m_preview->setFreeFloating(m_uiOptions.freeFloatingButton->isChecked()); |
129 | m_preview->show(); |
130 | } |
131 | |
132 | void KRunnerConfigWidget::setInterface(int type) |
133 | { |
134 | m_interfaceType = type; |
135 | } |
136 | |
137 | void KRunnerConfigWidget::updateRunner(const QByteArray &name) |
138 | { |
139 | Plasma::AbstractRunner *runner = m_manager->runner(QString::fromLatin1( name )); |
140 | //Update runner if runner is loaded |
141 | if (runner) { |
142 | runner->reloadConfiguration(); |
143 | } |
144 | } |
145 | |
146 | void KRunnerConfigWidget::load() |
147 | { |
148 | m_sel->addPlugins(Plasma::RunnerManager::listRunnerInfo(), |
149 | KPluginSelector::ReadConfigFile, |
150 | i18n("Available Plugins" ), QString(), |
151 | KSharedConfig::openConfig(QLatin1String( "krunnerrc" ))); |
152 | } |
153 | |
154 | void KRunnerConfigWidget::save(QAbstractButton *pushed) |
155 | { |
156 | if (m_buttons->buttonRole(pushed) == QDialogButtonBox::ApplyRole || |
157 | m_buttons->buttonRole(pushed) == QDialogButtonBox::AcceptRole) { |
158 | m_sel->save(); |
159 | m_manager->reloadConfiguration(); |
160 | KRunnerSettings::setInterface(m_interfaceType); |
161 | KRunnerSettings::setFreeFloating(m_uiOptions.freeFloatingButton->isChecked()); |
162 | KRunnerSettings::self()->writeConfig(); |
163 | |
164 | if (m_buttons->buttonRole(pushed) == QDialogButtonBox::AcceptRole) { |
165 | emit finished(); |
166 | } |
167 | } |
168 | } |
169 | |
170 | #include "configdialog.moc" |
171 | |
172 | |