util
environmentgrouplist.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "environmentgrouplist.h"
00021
00022 #include <QtCore/QMap>
00023 #include <QtCore/QStringList>
00024 #include <QtCore/QString>
00025
00026 #include <ksharedconfig.h>
00027 #include <kconfiggroup.h>
00028 #include <kdebug.h>
00029
00030 namespace KDevelop
00031 {
00032
00033 class EnvironmentGroupListPrivate
00034 {
00035 public:
00036 QMap<QString, QMap<QString,QString> > m_groups;
00037 QString m_defaultGroup;
00038 };
00039
00040 static const QString defaultEnvGroupKey = "Default Environment Group";
00041 static const QString envGroup = "Environment Settings";
00042 static const QString groupListKey = "Group List";
00043
00044 void decode( KConfigGroup cfg, EnvironmentGroupListPrivate* d )
00045 {
00046 d->m_defaultGroup = cfg.readEntry( defaultEnvGroupKey, QString( "default" ) );
00047 QStringList grouplist = cfg.readEntry( groupListKey, QStringList() << "default" );
00048 foreach( const QString &envgrpname, grouplist )
00049 {
00050 KConfigGroup envgrp( &cfg, envgrpname );
00051 QMap<QString,QString> variables;
00052 foreach( const QString &varname, envgrp.keyList() )
00053 {
00054 variables[varname] = envgrp.readEntry( varname, QString("") );
00055 }
00056 d->m_groups.insert( envgrpname, variables );
00057 }
00058 }
00059
00060 void encode( KConfigGroup cfg, EnvironmentGroupListPrivate* d )
00061 {
00062 cfg.writeEntry( defaultEnvGroupKey, d->m_defaultGroup );
00063 cfg.writeEntry( groupListKey, d->m_groups.keys() );
00064 foreach( const QString &group, cfg.groupList() )
00065 {
00066 if( !d->m_groups.keys().contains( group ) )
00067 {
00068 cfg.deleteGroup( group );
00069 }
00070 }
00071 foreach( const QString &group, d->m_groups.keys() )
00072 {
00073 KConfigGroup envgrp( &cfg, group );
00074 foreach( const QString &var, d->m_groups[group].keys() )
00075 {
00076 envgrp.writeEntry( var, d->m_groups[group][var] );
00077 }
00078 }
00079 cfg.sync();
00080 }
00081
00082 EnvironmentGroupList::EnvironmentGroupList( KSharedConfigPtr config )
00083 : d(new EnvironmentGroupListPrivate)
00084 {
00085 KConfigGroup cfg( config, envGroup );
00086 decode( cfg, d );
00087 }
00088
00089 EnvironmentGroupList::EnvironmentGroupList( KConfig* config )
00090 : d(new EnvironmentGroupListPrivate)
00091 {
00092 KConfigGroup cfg( config, envGroup );
00093 decode( cfg, d );
00094 }
00095
00096
00097 EnvironmentGroupList::~EnvironmentGroupList()
00098 {
00099 delete d;
00100 }
00101
00102 const QMap<QString, QString> EnvironmentGroupList::variables( const QString& group ) const
00103 {
00104 return d->m_groups[group];
00105 }
00106
00107 QMap<QString, QString>& EnvironmentGroupList::variables( const QString& group )
00108 {
00109 return d->m_groups[group];
00110 }
00111
00112
00113 QString EnvironmentGroupList::defaultGroup() const
00114 {
00115 return d->m_defaultGroup;
00116 }
00117
00118 void EnvironmentGroupList::setDefaultGroup( const QString& group )
00119 {
00120 if( d->m_groups.contains( group ) )
00121 {
00122 d->m_defaultGroup = group;
00123 }
00124 }
00125
00126 void EnvironmentGroupList::saveSettings( KConfig* config ) const
00127 {
00128 KConfigGroup cfg(config, envGroup );
00129 encode( cfg, d );
00130 config->sync();
00131 }
00132
00133 void EnvironmentGroupList::loadSettings( KConfig* config )
00134 {
00135 d->m_groups.clear();
00136 KConfigGroup cfg(config, envGroup );
00137 decode( cfg, d );
00138 }
00139
00140 QStringList EnvironmentGroupList::groups() const
00141 {
00142 return d->m_groups.keys();
00143 }
00144
00145 void EnvironmentGroupList::removeGroup( const QString& group )
00146 {
00147 d->m_groups.remove( group );
00148 }
00149
00150 EnvironmentGroupList::EnvironmentGroupList()
00151 : d( new EnvironmentGroupListPrivate)
00152 {
00153 }
00154
00155 QStringList EnvironmentGroupList::createEnvironment( const QString & group, const QStringList & defaultEnvironment ) const
00156 {
00157 QMap<QString, QString> retMap;
00158 foreach( const QString &line, defaultEnvironment )
00159 {
00160 QString varName = line.section( '=', 0, 0 );
00161 QString varValue = line.section( '=', 1 );
00162 retMap.insert( varName, varValue );
00163 }
00164
00165 if( !group.isEmpty() ) {
00166 QMap<QString, QString> userMap = variables(group);
00167
00168 for( QMap<QString, QString>::const_iterator it = userMap.constBegin();
00169 it != userMap.constEnd(); ++it )
00170 {
00171 retMap.insert( it.key(), it.value() );
00172 }
00173 }
00174
00175 QStringList env;
00176 for( QMap<QString, QString>::const_iterator it = retMap.constBegin();
00177 it != retMap.constEnd(); ++it )
00178 {
00179 env << it.key() + '=' + it.value();
00180 }
00181
00182 return env;
00183 }
00184
00185 }