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
00041 void decode( KConfigGroup cfg, EnvironmentGroupListPrivate* d )
00042 {
00043 d->m_defaultGroup = cfg.readEntry( "Default EnvironmentGroup", QString( "default" ) );
00044 foreach( QString envgrpname, cfg.groupList() )
00045 {
00046 KConfigGroup envgrp( &cfg, envgrpname );
00047 QMap<QString,QString> variables;
00048 foreach( QString varname, envgrp.keyList() )
00049 {
00050 variables[varname] = envgrp.readEntry( varname, QString("") );
00051 }
00052 d->m_groups.insert( envgrpname, variables );
00053 }
00054
00055
00056 if( !d->m_groups.contains( d->m_defaultGroup ) )
00057 {
00058 d->m_groups.insert( d->m_defaultGroup, QMap<QString,QString>() );
00059 }
00060 }
00061
00062 void encode( KConfigGroup cfg, EnvironmentGroupListPrivate* d )
00063 {
00064 cfg.writeEntry( "Default Environment Group", d->m_defaultGroup );
00065 foreach( QString group, d->m_groups.keys() )
00066 {
00067 KConfigGroup envgrp( &cfg, group );
00068 foreach( QString var, d->m_groups[group].keys() )
00069 {
00070 envgrp.writeEntry( var, d->m_groups[group][var] );
00071 }
00072 }
00073 cfg.sync();
00074 }
00075
00076 EnvironmentGroupList::EnvironmentGroupList( KSharedConfigPtr config )
00077 : d(new EnvironmentGroupListPrivate)
00078 {
00079 KConfigGroup cfg( config, "Environment Settings" );
00080 decode( cfg, d );
00081 }
00082
00083 EnvironmentGroupList::EnvironmentGroupList( KConfig* config )
00084 : d(new EnvironmentGroupListPrivate)
00085 {
00086 KConfigGroup cfg( config, "Environment Settings" );
00087 decode( cfg, d );
00088 }
00089
00090
00091 EnvironmentGroupList::~EnvironmentGroupList()
00092 {
00093 delete d;
00094 }
00095
00096 const QMap<QString, QString> EnvironmentGroupList::variables( const QString& group ) const
00097 {
00098 return d->m_groups[group];
00099 }
00100
00101 QMap<QString, QString>& EnvironmentGroupList::variables( const QString& group )
00102 {
00103 return d->m_groups[group];
00104 }
00105
00106
00107 QString EnvironmentGroupList::defaultGroup() const
00108 {
00109 return d->m_defaultGroup;
00110 }
00111
00112 void EnvironmentGroupList::setDefaultGroup( const QString& group )
00113 {
00114 if( d->m_groups.contains( group ) )
00115 {
00116 d->m_defaultGroup = group;
00117 }
00118 }
00119
00120 void EnvironmentGroupList::saveSettings( KConfig* config ) const
00121 {
00122 KConfigGroup cfg(config, "Environment Settings" );
00123 encode( cfg, d );
00124 }
00125
00126 void EnvironmentGroupList::loadSettings( KConfig* config )
00127 {
00128 d->m_groups.clear();
00129 KConfigGroup cfg(config, "Environment Settings" );
00130 decode( cfg, d );
00131 }
00132
00133 QStringList EnvironmentGroupList::groups() const
00134 {
00135 return d->m_groups.keys();
00136 }
00137
00138 void EnvironmentGroupList::removeGroup( const QString& group )
00139 {
00140 d->m_groups.remove( group );
00141 }
00142
00143 EnvironmentGroupList::EnvironmentGroupList()
00144 : d( new EnvironmentGroupListPrivate)
00145 {
00146 }
00147
00148 QStringList EnvironmentGroupList::createEnvironment(const QString & group, const QStringList & defaults) const
00149 {
00150 QMap<QString, QString> retMap;
00151 foreach( QString line, defaults )
00152 {
00153 QString varName = line.section( '=', 0, 0 );
00154 QString varValue = line.section( '=', 1 );
00155 retMap.insert( varName, varValue );
00156 }
00157
00158 if( !group.isEmpty() ) {
00159 QMap<QString, QString> userMap = variables(group);
00160
00161 for( QMap<QString, QString>::const_iterator it = userMap.begin();
00162 it != userMap.end(); ++it )
00163 {
00164 retMap.insert( it.key(), it.value() );
00165 }
00166 }
00167
00168 QStringList env;
00169 for( QMap<QString, QString>::const_iterator it = retMap.begin();
00170 it != retMap.end(); ++it )
00171 {
00172 env << it.key() + '=' + it.value();
00173 }
00174
00175 return env;
00176 }
00177
00178 }