/*************************************************************************** * Copyright (C) 2004-2007 by Joachim Eibl * * joachim.eibl at gmx.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * 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; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "common.h" #include #include #include #include #include #include #include ValueMap::ValueMap() { } ValueMap::~ValueMap() { } void ValueMap::save( TQTextStream& ts ) { std::map::iterator i; for( i=m_map.begin(); i!=m_map.end(); ++i) { TQString key = i->first; TQString val = i->second; ts << key << "=" << val << "\n"; } } TQString ValueMap::getAsString() { TQString result; std::map::iterator i; for( i=m_map.begin(); i!=m_map.end(); ++i) { TQString key = i->first; TQString val = i->second; result += key + "=" + val + "\n"; } return result; } void ValueMap::load( TQTextStream& ts ) { while ( !ts.eof() ) { // until end of file... TQString s = ts.readLine(); // line of text excluding '\n' int pos = s.find('='); if( pos > 0 ) // seems not to have a tag { TQString key = s.left(pos); TQString val = s.mid(pos+1); m_map[key] = val; } } } /* void ValueMap::load( const TQString& s ) { int pos=0; while ( pos<(int)s.length() ) { // until end of file... int pos2 = s.find('=', pos); int pos3 = s.find('\n', pos2 ); if (pos3<0) pos3=s.length(); if( pos2 > 0 ) // seems not to have a tag { TQString key = s.mid(pos, pos2-pos); TQString val = s.mid(pos2+1, pos3-pos2-1); m_map[key] = val; } pos = pos3; } } */ // safeStringJoin and safeStringSplit allow to convert a stringlist into a string and back // safely, even if the individual strings in the list contain the separator character. TQString safeStringJoin(const TQStringList& sl, char sepChar, char metaChar ) { // Join the strings in the list, using the separator ',' // If a string contains the separator character, it will be replaced with "\,". // Any occurances of "\" (one backslash) will be replaced with "\\" (2 backslashes) assert(sepChar!=metaChar); TQString sep; sep += sepChar; TQString meta; meta += metaChar; TQString safeString; TQStringList::const_iterator i; for (i=sl.begin(); i!=sl.end(); ++i) { TQString s = *i; s.replace(meta, meta+meta); // "\" -> "\\" s.replace(sep, meta+sep); // "," -> "\," if ( i==sl.begin() ) safeString = s; else safeString += sep + s; } return safeString; } // Split a string that was joined with safeStringJoin TQStringList safeStringSplit(const TQString& s, char sepChar, char metaChar ) { assert(sepChar!=metaChar); TQStringList sl; // Miniparser int i=0; int len=s.length(); TQString b; for(i=0;i0 ) { pos = s.find( sep, pos ); --idx; if (pos<0) break; ++pos; } if ( pos>=0 ) { int pos2 = s.find( sep, pos ); if ( pos2>0 ) return s.mid(pos, pos2-pos); else return s.mid(pos); } return ""; } static int num( TQString& s, int idx ) { return subSection( s, idx, ',').toInt(); } void ValueMap::writeEntry(const TQString& k, const TQFont& v ) { m_map[k] = v.family() + "," + TQString::number(v.pointSize()) + "," + (v.bold() ? "bold" : "normal"); } void ValueMap::writeEntry(const TQString& k, const TQColor& v ) { m_map[k] = numStr(v.red()) + "," + numStr(v.green()) + "," + numStr(v.blue()); } void ValueMap::writeEntry(const TQString& k, const TQSize& v ) { m_map[k] = numStr(v.width()) + "," + numStr(v.height()); } void ValueMap::writeEntry(const TQString& k, const TQPoint& v ) { m_map[k] = numStr(v.x()) + "," + numStr(v.y()); } void ValueMap::writeEntry(const TQString& k, int v ) { m_map[k] = numStr(v); } void ValueMap::writeEntry(const TQString& k, bool v ) { m_map[k] = numStr(v); } void ValueMap::writeEntry(const TQString& k, const TQString& v ) { m_map[k] = v; } void ValueMap::writeEntry(const TQString& k, const char* v ) { m_map[k] = v; } void ValueMap::writeEntry(const TQString& k, const TQStringList& v, char separator ) { m_map[k] = safeStringJoin(v, separator); } TQFont ValueMap::readFontEntry(const TQString& k, TQFont* defaultVal ) { TQFont f = *defaultVal; std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { f.setFamily( subSection( i->second, 0, ',' ) ); f.setPointSize( subSection( i->second, 1, ',' ).toInt() ); f.setBold( subSection( i->second, 2, ',' )=="bold" ); //f.fromString(i->second); } return f; } TQColor ValueMap::readColorEntry(const TQString& k, TQColor* defaultVal ) { TQColor c= *defaultVal; std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { TQString s = i->second; c = TQColor( num(s,0),num(s,1),num(s,2) ); } return c; } TQSize ValueMap::readSizeEntry(const TQString& k, TQSize* defaultVal ) { TQSize size = defaultVal ? *defaultVal : TQSize(600,400); std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { TQString s = i->second; size = TQSize( num(s,0),num(s,1) ); } return size; } TQPoint ValueMap::readPointEntry(const TQString& k, TQPoint* defaultVal) { TQPoint point = defaultVal ? *defaultVal : TQPoint(0,0); std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { TQString s = i->second; point = TQPoint( num(s,0),num(s,1) ); } return point; } bool ValueMap::readBoolEntry(const TQString& k, bool bDefault ) { bool b = bDefault; std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { TQString s = i->second; b = (bool)num(s,0); } return b; } int ValueMap::readNumEntry(const TQString& k, int iDefault ) { int ival = iDefault; std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { TQString s = i->second; ival = num(s,0); } return ival; } TQString ValueMap::readEntry(const TQString& k, const TQString& sDefault ) { TQString sval = sDefault; std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { sval = i->second; } return sval; } TQStringList ValueMap::readListEntry(const TQString& k, const TQStringList& defaultVal, char separator ) { TQStringList strList; std::map::iterator i = m_map.find( k ); if ( i!=m_map.end() ) { strList = safeStringSplit( i->second, separator ); return strList; } else return defaultVal; }