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.
tdepim/libkdepim/kconfigpropagator.h

166 lines
4.0 KiB

/*
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 <tqstring.h>
#include <tqvaluelist.h>
#include <tqdom.h>
#include <tqptrlist.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 TQString &kcfgFile );
virtual ~KConfigPropagator() {}
KConfigSkeleton *skeleton() { return mSkeleton; }
/*
Commit changes according to propagation rules.
*/
void commit();
class KDE_EXPORT Condition
{
public:
Condition() : isValid( false ) {}
TQString file;
TQString group;
TQString key;
TQString value;
bool isValid;
};
class KDE_EXPORT Rule
{
public:
typedef TQValueList<Rule> List;
Rule() : hideValue( false ) {}
TQString sourceFile;
TQString sourceGroup;
TQString sourceEntry;
TQString targetFile;
TQString targetGroup;
TQString targetEntry;
Condition condition;
bool hideValue;
};
class KDE_EXPORT Change
{
public:
typedef TQPtrList<Change> List;
Change( const TQString &title ) : mTitle( title ) {}
virtual ~Change();
void setTitle( const TQString &title ) { mTitle = title; }
TQString title() const { return mTitle; }
virtual TQString arg1() const { return TQString::null; }
virtual TQString arg2() const { return TQString::null; }
virtual void apply() = 0;
private:
TQString mTitle;
};
class KDE_EXPORT ChangeConfig : public Change
{
public:
ChangeConfig();
~ChangeConfig() {}
TQString arg1() const;
TQString arg2() const;
void apply();
TQString file;
TQString group;
TQString name;
TQString label;
TQString 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 TQString &group, const TQString &name );
TQString itemValueAsString( KConfigSkeletonItem * );
void readKcfgFile();
Rule parsePropagation( const TQDomElement &e );
Condition parseCondition( const TQDomElement &e );
void parseConfigEntryPath( const TQString &path, TQString &file,
TQString &group, TQString &entry );
private:
KConfigSkeleton *mSkeleton;
TQString mKcfgFile;
Rule::List mRules;
Change::List mChanges;
};
#endif