tdeconfigpropagator.h
00001 /* 00002 This file is part of libtdepim. 00003 00004 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public License 00017 along with this library; see the file COPYING.LIB. If not, write to 00018 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00019 Boston, MA 02110-1301, USA. 00020 */ 00021 #ifndef TDECONFIGPROPAGATOR_H 00022 #define TDECONFIGPROPAGATOR_H 00023 00024 #include <tqstring.h> 00025 #include <tqvaluelist.h> 00026 #include <tqdom.h> 00027 #include <tqptrlist.h> 00028 00029 #include <tdepimmacros.h> 00030 00031 class TDEConfigSkeleton; 00032 class TDEConfigSkeletonItem; 00033 00034 class KDE_EXPORT TDEConfigPropagator 00035 { 00036 public: 00037 00041 TDEConfigPropagator(); 00048 TDEConfigPropagator( TDEConfigSkeleton *skeleton, const TQString &kcfgFile ); 00049 virtual ~TDEConfigPropagator() {} 00050 00051 TDEConfigSkeleton *skeleton() { return mSkeleton; } 00052 00053 /* 00054 Commit changes according to propagation rules. 00055 */ 00056 void commit(); 00057 00058 class KDE_EXPORT Condition 00059 { 00060 public: 00061 Condition() : isValid( false ) {} 00062 00063 TQString file; 00064 TQString group; 00065 TQString key; 00066 TQString value; 00067 00068 bool isValid; 00069 }; 00070 00071 class KDE_EXPORT Rule 00072 { 00073 public: 00074 typedef TQValueList<Rule> List; 00075 00076 Rule() : hideValue( false ) {} 00077 00078 TQString sourceFile; 00079 TQString sourceGroup; 00080 TQString sourceEntry; 00081 00082 TQString targetFile; 00083 TQString targetGroup; 00084 TQString targetEntry; 00085 00086 Condition condition; 00087 00088 bool hideValue; 00089 }; 00090 00091 class KDE_EXPORT Change 00092 { 00093 public: 00094 typedef TQPtrList<Change> List; 00095 00096 Change( const TQString &title ) : mTitle( title ) {} 00097 virtual ~Change(); 00098 00099 void setTitle( const TQString &title ) { mTitle = title; } 00100 TQString title() const { return mTitle; } 00101 00102 virtual TQString arg1() const { return TQString(); } 00103 virtual TQString arg2() const { return TQString(); } 00104 00105 virtual void apply() = 0; 00106 00107 private: 00108 TQString mTitle; 00109 }; 00110 00111 class KDE_EXPORT ChangeConfig : public Change 00112 { 00113 public: 00114 ChangeConfig(); 00115 ~ChangeConfig() {} 00116 00117 TQString arg1() const; 00118 TQString arg2() const; 00119 00120 void apply(); 00121 00122 TQString file; 00123 TQString group; 00124 TQString name; 00125 TQString label; 00126 TQString value; 00127 bool hideValue; 00128 }; 00129 00130 void updateChanges(); 00131 00132 Change::List changes(); 00133 00134 Rule::List rules(); 00135 00136 protected: 00137 void init(); 00138 00143 virtual void addCustomChanges( Change::List & ) {} 00144 00145 TDEConfigSkeletonItem *findItem( const TQString &group, const TQString &name ); 00146 00147 TQString itemValueAsString( TDEConfigSkeletonItem * ); 00148 00149 void readKcfgFile(); 00150 00151 Rule parsePropagation( const TQDomElement &e ); 00152 Condition parseCondition( const TQDomElement &e ); 00153 00154 void parseConfigEntryPath( const TQString &path, TQString &file, 00155 TQString &group, TQString &entry ); 00156 00157 private: 00158 TDEConfigSkeleton *mSkeleton; 00159 TQString mKcfgFile; 00160 00161 Rule::List mRules; 00162 Change::List mChanges; 00163 }; 00164 00165 #endif