# HG changeset patch # User thomas_-_s # Date 1212747644 0 # Node ID 5417f9e5f6e53e68ed04448168169ae01e4acbf3 # Parent ce6cd144159dcba7675a59cd83d1811a0ec772b0 Added a new class UiguiIniFileParser which will replace the currently used QSettings for reading the indenter parameters. git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@718 59b1889a-e5ac-428c-b0c7-476e01d41282 diff -r ce6cd144159d -r 5417f9e5f6e5 UniversalIndentGUI.pro --- a/UniversalIndentGUI.pro Fri Jun 06 10:18:15 2008 +0000 +++ b/UniversalIndentGUI.pro Fri Jun 06 10:20:44 2008 +0000 @@ -154,6 +154,7 @@ src/indenthandler.h \ src/mainwindow.h \ src/uiguierrormessage.h \ + src/uiguiIniFileParser.h \ src/uiguisettings.h \ src/uiguisettingsdialog.h \ src/updatecheckdialog.h @@ -170,6 +171,7 @@ src/main.cpp \ src/mainwindow.cpp \ src/uiguierrormessage.cpp \ + src/uiguiIniFileParser.cpp \ src/uiguisettings.cpp \ src/uiguisettingsdialog.cpp \ src/updatecheckdialog.cpp diff -r ce6cd144159d -r 5417f9e5f6e5 src/UniversalIndentGUI.vcproj --- a/src/UniversalIndentGUI.vcproj Fri Jun 06 10:18:15 2008 +0000 +++ b/src/UniversalIndentGUI.vcproj Fri Jun 06 10:20:44 2008 +0000 @@ -244,6 +244,10 @@ > + + @@ -298,6 +302,10 @@ > + + diff -r ce6cd144159d -r 5417f9e5f6e5 src/main.cpp --- a/src/main.cpp Fri Jun 06 10:18:15 2008 +0000 +++ b/src/main.cpp Fri Jun 06 10:20:44 2008 +0000 @@ -20,15 +20,19 @@ #include "mainwindow.h" #include +#include "uiguiIniFileParser.h" /*! - \brief Entry point to UniversalIndentGUI application. Does not evaluate any command line parameters. + /brief Entry point to UniversalIndentGUI application. Does not evaluate any command line parameters. */ int main(int argc, char *argv[]) { QApplication app(argc, argv); QString file2OpenOnStart = ""; + //UiguiIniFileParser iniParser("C:/Dokumente und Einstellungen/ts/Eigene Dateien/Visual Studio 2005/Projects/UiGui/indenters/uigui_astyle.ini"); + //iniParser.childGroups(); + if ( argc > 1 ) { file2OpenOnStart = argv[1]; } diff -r ce6cd144159d -r 5417f9e5f6e5 src/uiguiIniFileParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/uiguiIniFileParser.cpp Fri Jun 06 10:20:44 2008 +0000 @@ -0,0 +1,122 @@ +/*************************************************************************** + * Copyright (C) 2006-2008 by Thomas Schweitzer * + * thomas-schweitzer(at)arcor.de * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2.0 as * + * published by the Free Software Foundation. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program in the file LICENSE.GPL; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "uiguiIniFileParser.h" + +#include + +UiguiIniFileParser::UiguiIniFileParser(void) +{ + sections.clear(); + keyValueMap.clear(); + iniFileName = ""; +} + + +UiguiIniFileParser::UiguiIniFileParser(const QString &iniFileName) +{ + UiguiIniFileParser::UiguiIniFileParser(); + this->iniFileName = iniFileName; + parseIniFile(); +} + + +UiguiIniFileParser::~UiguiIniFileParser(void) +{ +} + + +/*! + \brief Returns the group/section names in the same order as they occurr in the ini file as QStringList. + */ +QStringList UiguiIniFileParser::childGroups() +{ + QStringList sectionsStringList; + + for( unsigned int i = 0; i < sections.size(); i++ ) { + sectionsStringList << sections[i]; + } + + return sectionsStringList; +} + + +/*! + \brief Returns the value of the defined \a keyName as QVariant. + + The \a keyName is assembled by a section name, a slash and the key name itself. + For example if you wish to access the value of the following setting: + [NiceSection]
niceKeyName=2
you would have to call + value("NiceSection/niceKeyName"). + */ +QVariant UiguiIniFileParser::value(const QString &keyName) +{ + return keyValueMap.value(keyName, QVariant("error") ); +} + + +/*! + \brief Parses the ini file and stores the key value pairs in the internal vectors \a keys and \a values. + */ +void UiguiIniFileParser::parseIniFile() +{ + QFile iniFile(iniFileName); + + if ( iniFile.open(QFile::ReadOnly) ) { + // Clear the vectors holding the keys and values. + sections.clear(); + keyValueMap.clear(); + + QTextStream iniFileStream( &iniFile ); + QString line; + QString currentSectionName = ""; + QString keyName = ""; + QString keyValueAsString = ""; + + while ( !iniFileStream.atEnd() ) { + line = iniFileStream.readLine().trimmed(); + + // Test if the read line is a section name and if so remeber it. + if ( line.startsWith("[") && line.endsWith("]") ) { + currentSectionName = line.remove(0, 1); + currentSectionName.chop(1); + + // Store the section name. + sections.push_back( currentSectionName ); + } + // Otherwise test whether the line has a assign char + else if ( line.contains("=") ) { + int indexOfFirstAssign = line.indexOf("="); + keyName = line.left(indexOfFirstAssign); + + if ( !keyName.isEmpty() ) { + keyValueAsString = line.remove(0, indexOfFirstAssign+1); + + // Prepend an eventually section name to the key name. + if ( !currentSectionName.isEmpty() ) { + keyName = currentSectionName + "/" + keyName; + } + + // Store the key and value in the map. + keyValueMap.insert(keyName, keyValueAsString ); + } + } + } + } +} diff -r ce6cd144159d -r 5417f9e5f6e5 src/uiguiIniFileParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/uiguiIniFileParser.h Fri Jun 06 10:20:44 2008 +0000 @@ -0,0 +1,52 @@ +/*************************************************************************** + * Copyright (C) 2006-2008 by Thomas Schweitzer * + * thomas-schweitzer(at)arcor.de * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2.0 as * + * published by the Free Software Foundation. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program in the file LICENSE.GPL; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef UIGUIINIFILEPARSER_H +#define UIGUIINIFILEPARSER_H + +#include +#include +#include +#include +#include +#include + +/*! + \class UiguiIniFileParser + \brief This class can be used to parse and access the contents of well formed ini files, but only readable. + */ + +class UiguiIniFileParser +{ +public: + UiguiIniFileParser(void); + UiguiIniFileParser(const QString &iniFileName); + ~UiguiIniFileParser(void); + QVariant value(const QString &keyName); + QStringList childGroups(); + +private: + void parseIniFile(); + + QString iniFileName; + std::vector sections; + QMap keyValueMap; +}; + +#endif // UIGUIINIFILEPARSER_H