diff options
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/tbxctrls/SvxColorValueSet.cxx | 110 |
1 files changed, 106 insertions, 4 deletions
diff --git a/svx/source/tbxctrls/SvxColorValueSet.cxx b/svx/source/tbxctrls/SvxColorValueSet.cxx index b2ada21150e3..dc2f2c23d89e 100644 --- a/svx/source/tbxctrls/SvxColorValueSet.cxx +++ b/svx/source/tbxctrls/SvxColorValueSet.cxx @@ -24,6 +24,83 @@ #include <vcl/settings.hxx> +// finds first token in rStr from index, separated by whitespace +// returns position of next token in index +OString lcl_getToken(const OString& rStr, sal_Int32& index) +{ + sal_Int32 substart, toklen = 0; + + while(index < rStr.getLength() && + (rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) + ++index; + if(index == rStr.getLength()) + { + index = -1; + return OString(); + } + substart = index; + + while(index < rStr.getLength() && + !(rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) + { + ++index; + ++toklen; + } + + while(index < rStr.getLength() && + (rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) + ++index; + if(index == rStr.getLength()) + index = -1; + + return rStr.copy(substart, toklen); +} + +Palette::Palette(const OUString &rFname) +{ + // TODO add error handling!!! + SvFileStream aFile(rFname, STREAM_READ); + + OString aPaletteName; + OString aLine; + + aFile.ReadLine(aLine); + if( !aLine.startsWith("GIMP Palette") ) return; + aFile.ReadLine(aLine); + if( aLine.startsWith("Name: ", &aPaletteName) ) + { + aFile.ReadLine(aLine); + if( aLine.startsWith("Columns: ")) + aFile.ReadLine(aLine); // we can ignore this + } + + do { + if (aLine[0] != '#' && aLine[0] != '\n') + { + // TODO check if r,g,b are 0<= x <=255, or just clamp? + sal_Int32 nIndex = 0; + OString token; + + token = lcl_getToken(aLine, nIndex); + if(token == "" || nIndex == -1) continue; + sal_Int32 r = token.toInt32(); + + token = lcl_getToken(aLine, nIndex); + if(token == "" || nIndex == -1) continue; + sal_Int32 g = token.toInt32(); + + token = lcl_getToken(aLine, nIndex); + if(token == "") continue; + sal_Int32 b = token.toInt32(); + + OString name; + if(nIndex != -1) + name = aLine.copy(nIndex); + + maColors.push_back(std::make_pair(Color(r, g, b), name)); + } + } while (aFile.ReadLine(aLine)); +} SvxColorValueSet::SvxColorValueSet(Window* _pParent, WinBits nWinStyle) : ValueSet(_pParent, nWinStyle) @@ -88,12 +165,37 @@ void SvxColorValueSet::addEntriesForXColorList(const XColorList& rXColorList, sa } } -void SvxColorValueSet::addEntriesForColorVector(const std::vector<Color>& rColorVector, sal_uInt32 nStartIndex) +void SvxColorValueSet::loadColorVector(const std::vector<Color>& rColorVector, const OUString& rNamePrefix, sal_uInt32 nStartIndex) +{ + if(rNamePrefix.getLength() != 0) + { + for(std::vector<Color>::const_iterator it = rColorVector.begin(); + it != rColorVector.end(); it++, nStartIndex++) + { + InsertItem(nStartIndex, *it, rNamePrefix + OUString::number(nStartIndex)); + } + } + else + { + for(std::vector<Color>::const_iterator it = rColorVector.begin(); + it != rColorVector.end(); it++, nStartIndex++) + { + InsertItem(nStartIndex, *it, ""); + } + } +} + + +void SvxColorValueSet::loadPalette(const Palette& rPalette) { - for(std::vector<Color>::const_iterator it = rColorVector.begin(); - it != rColorVector.end(); it++, nStartIndex++) + const Palette::ColorList &rColors = rPalette.maColors; + Clear(); + int nIx = 1; + for(Palette::ColorList::const_iterator it = rColors.begin(); + it != rColors.end(); ++it) { - InsertItem(nStartIndex, *it, ""); + InsertItem(nIx, it->first, OStringToOUString(it->second, RTL_TEXTENCODING_ASCII_US)); + ++nIx; } } |