summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrisztian Pinter <pin.terminator@gmail.com>2014-07-01 23:56:25 +0200
committerKrisztian Pinter <pin.terminator@gmail.com>2014-07-25 17:14:11 +0200
commit1cff66591f531f2acc40a4400c704f8708d8027d (patch)
tree11ed4fafa21c01271061ea95a59bbd07088484e3
parentba5e1e45dcf15e0b7b1c8373b8ebc5b0d36a0cfc (diff)
Add GIMP palette loading code
Change-Id: Ie0d0787342bc806a1848cb904114f0ca16c9df69
-rw-r--r--include/svx/SvxColorValueSet.hxx13
-rw-r--r--svx/source/tbxctrls/SvxColorValueSet.cxx110
2 files changed, 118 insertions, 5 deletions
diff --git a/include/svx/SvxColorValueSet.hxx b/include/svx/SvxColorValueSet.hxx
index 7502d93f6104..77ad9b294ff6 100644
--- a/include/svx/SvxColorValueSet.hxx
+++ b/include/svx/SvxColorValueSet.hxx
@@ -24,6 +24,16 @@
class XColorList;
+struct Palette
+{
+ typedef std::pair<Color, OString> NamedColor;
+ typedef std::vector< NamedColor > ColorList;
+ Palette(){};
+ Palette(const OUString &rFname);
+ OString maName;
+ ColorList maColors;
+};
+
class SVX_DLLPUBLIC SvxColorValueSet : public ValueSet
{
private:
@@ -39,7 +49,8 @@ public:
sal_uInt32 getColumnCount() const;
void addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex = 1);
- void addEntriesForColorVector(const std::vector<Color>& rColorVector, sal_uInt32 nStartIndex = 1);
+ void loadColorVector(const std::vector<Color>& rColorVector, const OUString& rNamePrefix, sal_uInt32 nStartIndex = 1);
+ void loadPalette(const Palette& rPalette);
Size layoutAllVisible(sal_uInt32 nEntryCount);
Size layoutToGivenHeight(sal_uInt32 nHeight, sal_uInt32 nEntryCount);
};
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;
}
}