You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.0 KiB
166 lines
4.0 KiB
15 years ago
|
/*
|
||
|
This file is part of libkdepim.
|
||
|
|
||
|
Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Library General Public
|
||
|
License as published by the Free Software Foundation; either
|
||
|
version 2 of the License, or (at your option) any later version.
|
||
|
|
||
|
This library 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
|
||
|
Library General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public License
|
||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
#ifndef KCONFIGPROPAGATOR_H
|
||
|
#define KCONFIGPROPAGATOR_H
|
||
|
|
||
|
#include <qstring.h>
|
||
|
#include <qvaluelist.h>
|
||
|
#include <qdom.h>
|
||
|
#include <qptrlist.h>
|
||
|
|
||
|
#include <kdepimmacros.h>
|
||
|
|
||
|
class KConfigSkeleton;
|
||
|
class KConfigSkeletonItem;
|
||
|
|
||
|
class KDE_EXPORT KConfigPropagator
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
Create KConfigPropagator object without associated source configuration.
|
||
|
*/
|
||
|
KConfigPropagator();
|
||
|
/**
|
||
|
Create KConfigPropagator object.
|
||
|
|
||
|
@param skeleton KConfigSkeleton object used as source for the propagation
|
||
|
@param kcfgFile file name of kcfg file containing the propagation rules
|
||
|
*/
|
||
|
KConfigPropagator( KConfigSkeleton *skeleton, const QString &kcfgFile );
|
||
|
virtual ~KConfigPropagator() {}
|
||
|
|
||
|
KConfigSkeleton *skeleton() { return mSkeleton; }
|
||
|
|
||
|
/*
|
||
|
Commit changes according to propagation rules.
|
||
|
*/
|
||
|
void commit();
|
||
|
|
||
|
class KDE_EXPORT Condition
|
||
|
{
|
||
|
public:
|
||
|
Condition() : isValid( false ) {}
|
||
|
|
||
|
QString file;
|
||
|
QString group;
|
||
|
QString key;
|
||
|
QString value;
|
||
|
|
||
|
bool isValid;
|
||
|
};
|
||
|
|
||
|
class KDE_EXPORT Rule
|
||
|
{
|
||
|
public:
|
||
|
typedef QValueList<Rule> List;
|
||
|
|
||
|
Rule() : hideValue( false ) {}
|
||
|
|
||
|
QString sourceFile;
|
||
|
QString sourceGroup;
|
||
|
QString sourceEntry;
|
||
|
|
||
|
QString targetFile;
|
||
|
QString targetGroup;
|
||
|
QString targetEntry;
|
||
|
|
||
|
Condition condition;
|
||
|
|
||
|
bool hideValue;
|
||
|
};
|
||
|
|
||
|
class KDE_EXPORT Change
|
||
|
{
|
||
|
public:
|
||
|
typedef QPtrList<Change> List;
|
||
|
|
||
|
Change( const QString &title ) : mTitle( title ) {}
|
||
|
virtual ~Change();
|
||
|
|
||
|
void setTitle( const QString &title ) { mTitle = title; }
|
||
|
QString title() const { return mTitle; }
|
||
|
|
||
|
virtual QString arg1() const { return QString::null; }
|
||
|
virtual QString arg2() const { return QString::null; }
|
||
|
|
||
|
virtual void apply() = 0;
|
||
|
|
||
|
private:
|
||
|
QString mTitle;
|
||
|
};
|
||
|
|
||
|
class KDE_EXPORT ChangeConfig : public Change
|
||
|
{
|
||
|
public:
|
||
|
ChangeConfig();
|
||
|
~ChangeConfig() {}
|
||
|
|
||
|
QString arg1() const;
|
||
|
QString arg2() const;
|
||
|
|
||
|
void apply();
|
||
|
|
||
|
QString file;
|
||
|
QString group;
|
||
|
QString name;
|
||
|
QString label;
|
||
|
QString value;
|
||
|
bool hideValue;
|
||
|
};
|
||
|
|
||
|
void updateChanges();
|
||
|
|
||
|
Change::List changes();
|
||
|
|
||
|
Rule::List rules();
|
||
|
|
||
|
protected:
|
||
|
void init();
|
||
|
|
||
|
/**
|
||
|
Implement this function in a subclass if you want to add changes which
|
||
|
can't be expressed as propagations in the kcfg file.
|
||
|
*/
|
||
|
virtual void addCustomChanges( Change::List & ) {}
|
||
|
|
||
|
KConfigSkeletonItem *findItem( const QString &group, const QString &name );
|
||
|
|
||
|
QString itemValueAsString( KConfigSkeletonItem * );
|
||
|
|
||
|
void readKcfgFile();
|
||
|
|
||
|
Rule parsePropagation( const QDomElement &e );
|
||
|
Condition parseCondition( const QDomElement &e );
|
||
|
|
||
|
void parseConfigEntryPath( const QString &path, QString &file,
|
||
|
QString &group, QString &entry );
|
||
|
|
||
|
private:
|
||
|
KConfigSkeleton *mSkeleton;
|
||
|
QString mKcfgFile;
|
||
|
|
||
|
Rule::List mRules;
|
||
|
Change::List mChanges;
|
||
|
};
|
||
|
|
||
|
#endif
|