Serialize PassAction into a KconfigGroup

master
Lukas Fürmetz 9 years ago
parent 9a0834c701
commit 1988a098b1
  1. 15
      config.cpp
  2. 24
      config.h
  3. 7
      pass.cpp

@ -150,10 +150,11 @@ void PassConfig::load()
// Load saved actions
this->ui->clearPassActions();
auto configActions = passCfg.group(Config::Group::Actions);
for (int i = 0; i < configActions.keyList().count(); i++) {
QString passStr = configActions.readEntry(QString::number(i));
auto passAction = PassAction::fromString(passStr);
auto actionGroup = passCfg.group(Config::Group::Actions);
auto groups = actionGroup.groupList();
Q_FOREACH (auto name, groups) {
auto group = actionGroup.group(name);
auto passAction = PassAction::fromConfig(group);
this->ui->addPassAction(passAction.name, passAction.icon, passAction.regex, false);
}
@ -181,8 +182,10 @@ void PassConfig::save()
if (showActions) {
int i = 0;
for (PassAction act: this->ui->passActions())
passCfg.group(Config::Group::Actions).writeEntry(QString::number(i++), act.toString());
for (PassAction act: this->ui->passActions()) {
auto group = passCfg.group(Config::Group::Actions).group(QString::number(i++));
act.writeToConfig(group);
}
}
emit changed(false);

@ -30,24 +30,32 @@ struct Config {
struct Group {
constexpr static const char *Actions = "AdditionalActions";
};
struct Entry {
constexpr static const char *Name = "Name";
constexpr static const char *Icon = "Icon";
constexpr static const char *Regex = "Regex";
};
};
struct PassAction {
QString name, icon, regex;
// Using QDataStream doesn't work with KConfig (at least I was not able to get it work)
// So I'm just implementing my own serialization function for this struct
QString toString()
void writeToConfig(KConfigGroup &group)
{
return QString("PassAction {\"%1\", \"%2\", \"%3\"}").arg(name).arg(icon).arg(regex);
group.writeEntry(Config::Entry::Name, name);
group.writeEntry(Config::Entry::Icon, icon);
group.writeEntry(Config::Entry::Regex, regex);
}
static PassAction fromString(const QString &str)
static PassAction fromConfig(const KConfigGroup &group)
{
QRegularExpression re("PassAction {\"(.+?)\", \"(.+?)\", \"(.+?)\"}");
auto match = re.match(str);
return PassAction {match.captured(1), match.captured(2), match.captured(3)};
PassAction action;
action.name = group.readEntry(Config::Entry::Name);
action.icon = group.readEntry(Config::Entry::Icon);
action.regex = group.readEntry(Config::Entry::Regex);
return action;
}
}; Q_DECLARE_METATYPE(PassAction)

@ -63,9 +63,10 @@ void Pass::reloadConfiguration()
auto configActions = cfg.group(Config::Group::Actions);
// Create actions for every additional field
for (int i = 0; i < configActions.keyList().count(); i++) {
QString passStr = configActions.readEntry(QString::number(i));
PassAction passAction = PassAction::fromString(passStr);
auto groups = configActions.groupList();
Q_FOREACH (auto name, groups) {
auto group = configActions.group(name);
auto passAction = PassAction::fromConfig(group);
auto icon = QIcon::fromTheme(passAction.icon, QIcon::fromTheme("object-unlocked"));
QAction *act = addAction(passAction.name, icon , passAction.name);

Loading…
Cancel
Save