2
* Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org>
3
* Copyright (C) 2009 Michael Jansen <kde@michael-jansen.biz>
5
* This library is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Library General Public
7
* License version 2 as published by the Free Software Foundation.
9
* This library 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 GNU
12
* Library General Public License for more details.
14
* You should have received a copy of the GNU Library General Public License
15
* along with this library; see the file COPYING.LIB. If not, write to
16
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17
* Boston, MA 02110-1301, USA.
21
#include "settings_writer.h"
23
#include "action_data/action_data_group.h"
24
#include "action_data/action_data.h"
25
#include "action_data/generic_action_data.h"
26
#include "action_data/menuentry_shortcut_action_data.h"
27
#include "action_data/simple_action_data.h"
29
#include "conditions/conditions_list.h"
32
#include "windows_helper/window_selection_list.h"
35
#include <KDE/KConfig>
36
#include <KDE/KConfigGroup>
41
const int CurrentFileVersion = 2;
44
SettingsWriter::SettingsWriter(
45
const Settings *settings,
52
,_allowMerging(allowMerging)
58
void SettingsWriter::exportTo(
59
const ActionDataBase *element,
71
QStringList groups = config.groupList();
72
Q_FOREACH (const QString &name, config.groupList())
74
config.deleteGroup(name);
77
KConfigGroup mainGroup(&config, "Main");
78
mainGroup.writeEntry("Version", CurrentFileVersion);
79
mainGroup.writeEntry("AllowMerge", _allowMerging);
81
if (!_importId.isEmpty()) mainGroup.writeEntry("ImportId", _importId);
83
// The root group contains nothing but the datacount!
84
KConfigGroup dataGroup(&config, "Data");
85
dataGroup.writeEntry("DataCount", 1);
87
// The group for the element to export
88
KConfigGroup data1Group(&config, "Data_1");
89
_stack.push(&data1Group);
90
element->accept(this);
97
void SettingsWriter::visitActionData(const ActionData *data)
99
visitActionDataBase(data);
101
KConfigGroup *config = _stack.top();
103
// Write triggers if available
104
if (data->triggers())
106
KConfigGroup triggersGroup( config->config(), config->name() + "Triggers" );
107
data->triggers()->cfg_write( triggersGroup );
110
// Write actions if available
113
KConfigGroup actionsGroup( config->config(), config->name() + "Actions" );
114
data->actions()->cfg_write( actionsGroup );
119
void SettingsWriter::visitActionDataBase(const ActionDataBase *base)
121
KConfigGroup *config = _stack.top();
123
config->writeEntry( "Type", "ERROR" ); // derived classes should call with their type
124
config->writeEntry( "Name", base->name());
125
config->writeEntry( "Comment", base->comment());
129
case KHotKeys::Retain:
130
config->writeEntry( "Enabled", base->isEnabled(ActionDataBase::Ignore));
133
case KHotKeys::Enabled:
134
config->writeEntry("Enabled", true);
137
case KHotKeys::Disabled:
138
config->writeEntry("Enabled", false);
143
config->writeEntry("Enabled", false);
146
if (base->conditions())
148
KConfigGroup conditionsConfig( config->config(), config->name() + "Conditions" );
149
base->conditions()->cfg_write( conditionsConfig );
153
kDebug() << "No conditions";
157
void SettingsWriter::visitActionDataGroup(const ActionDataGroup *group)
159
visitActionDataBase(group);
161
KConfigGroup *config = _stack.top();
163
config->writeEntry( "SystemGroup", int(group->system_group()));
164
config->writeEntry( "Type", "ACTION_DATA_GROUP" );
167
Q_FOREACH(ActionDataBase *child, group->children())
170
KConfigGroup childConfig(
172
config->name() + QString("_") + QString::number(cnt));
173
_stack.push(&childConfig);
177
config->writeEntry( "DataCount", cnt );
179
// We only write those two back if we do not export the settings
182
// ImportId only if set
183
if (!group->importId().isEmpty())
184
config->writeEntry("ImportId", group->importId());
185
if (group->allowMerging())
186
config->writeEntry("AllowMerge", group->allowMerging());
192
void SettingsWriter::visitGenericActionData(const Generic_action_data *data)
194
visitActionData(data);
196
KConfigGroup *config = _stack.top();
197
config->writeEntry( "Type", "GENERIC_ACTION_DATA" );
201
void SettingsWriter::visitMenuentryShortcutActionData(const MenuEntryShortcutActionData *data)
203
visitActionData(data);
205
KConfigGroup *config = _stack.top();
206
config->writeEntry( "Type", "MENUENTRY_SHORTCUT_ACTION_DATA" );
210
void SettingsWriter::visitSimpleActionData(const SimpleActionData *data)
212
visitActionData(data);
214
KConfigGroup *config = _stack.top();
215
config->writeEntry( "Type", "SIMPLE_ACTION_DATA" );
219
void SettingsWriter::writeTo(KConfigBase &config)
221
QStringList groups = config.groupList();
222
for( QStringList::ConstIterator it = groups.constBegin();
223
it != groups.constEnd();
225
config.deleteGroup( *it );
227
// Write the global settings
228
KConfigGroup mainGroup(&config, "Main");
229
mainGroup.writeEntry("Version", 2);
230
mainGroup.writeEntry("AlreadyImported", _settings->already_imported);
231
mainGroup.writeEntry("Disabled", _settings->isDaemonDisabled());
234
KConfigGroup dataGroup( &config, "Data" );
235
_stack.push(&dataGroup);
238
if (_settings->actions())
240
Q_FOREACH(ActionDataBase *child, _settings->actions()->children())
243
KConfigGroup childConfig(
245
QString("Data_") + QString::number(cnt));
246
_stack.push(&childConfig);
251
dataGroup.writeEntry( "DataCount", cnt );
254
// CHECKME Count still needed????
255
// int cnt = write_actions( dataGroup, _settings->actions(), true );
256
// mainGroup.writeEntry( "Autostart", cnt != 0 && !_settings->isDaemonDisabled() );
258
// Write the gestures configuration
259
KConfigGroup gesturesConfig( &config, "Gestures" );
260
gesturesConfig.writeEntry( "Disabled", _settings->areGesturesDisabled() );
261
gesturesConfig.writeEntry( "MouseButton", _settings->gestureMouseButton() );
262
gesturesConfig.writeEntry( "Timeout", _settings->gestureTimeOut() );
263
if( _settings->gesturesExclude() != NULL )
265
KConfigGroup gesturesExcludeConfig( &config, "GesturesExclude" );
266
_settings->gesturesExclude()->cfg_write( gesturesExcludeConfig );
269
config.deleteGroup( "GesturesExclude" );
270
KConfigGroup voiceConfig( &config, "Voice" );
271
voiceConfig.writeEntry("Shortcut" , _settings->voice_shortcut.toString() );
275
} // namespace KHotKeys