diff options
author | Krisztian Pinter <pin.terminator@gmail.com> | 2014-07-25 16:45:13 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2014-09-17 10:19:41 +0200 |
commit | cfdefe488fedbd12f7a3daf578c889ef82e962fc (patch) | |
tree | 49b10153c14dac54448d89e39f585e10e2596585 | |
parent | d1d5c9185f9d5231bdaa332d965b31b946411ac3 (diff) |
Add loading .soc palettes
Change-Id: Ie0d084a70d9b135658840bb7529f2099a702d280
-rw-r--r-- | include/svx/Palette.hxx | 44 | ||||
-rw-r--r-- | include/svx/PaletteManager.hxx | 4 | ||||
-rw-r--r-- | include/svx/SvxColorValueSet.hxx | 2 | ||||
-rw-r--r-- | svx/source/tbxctrls/Palette.cxx | 127 | ||||
-rw-r--r-- | svx/source/tbxctrls/PaletteManager.cxx | 34 | ||||
-rw-r--r-- | svx/source/tbxctrls/SvxColorValueSet.cxx | 14 |
6 files changed, 152 insertions, 73 deletions
diff --git a/include/svx/Palette.hxx b/include/svx/Palette.hxx index d31e9580b792..c659e063e696 100644 --- a/include/svx/Palette.hxx +++ b/include/svx/Palette.hxx @@ -19,16 +19,30 @@ #ifndef INCLUDED_SVX_PALETTE_HXX #define INCLUDED_SVX_PALETTE_HXX +#include <svx/SvxColorValueSet.hxx> +#include <svx/xtable.hxx> #include <rtl/ustring.hxx> #include <tools/color.hxx> #include <tools/stream.hxx> + +typedef std::pair<Color, OString> NamedColor; +typedef std::vector< NamedColor > ColorList; + + class Palette { public: - typedef std::pair<Color, OString> NamedColor; - typedef std::vector< NamedColor > ColorList; -private: + virtual ~Palette(); + + virtual const OUString& GetName() = 0; + virtual void LoadColorSet( SvxColorValueSet& rColorSet ) = 0; + + virtual bool IsValid() = 0; +}; + +class PaletteGPL : public Palette +{ bool mbLoadedPalette; bool mbValidPalette; OUString maFName; @@ -40,12 +54,28 @@ private: void LoadPaletteHeader(); void LoadPalette(); public: - Palette( const OUString &rFPath, const OUString &rFName ); + PaletteGPL( const OUString &rFPath, const OUString &rFName ); + virtual ~PaletteGPL(); + + virtual const OUString& GetName(); + virtual void LoadColorSet( SvxColorValueSet& rColorSet ); + + virtual bool IsValid(); +}; + +class PaletteSOC : public Palette +{ + //TODO add lazy loading + OUString maName; + XColorListRef mpColorList; +public: + PaletteSOC( const OUString &rFPath, const OUString &rFName ); + virtual ~PaletteSOC(); - const OUString& GetName(); - const ColorList& GetPaletteColors(); + virtual const OUString& GetName(); + virtual void LoadColorSet( SvxColorValueSet& rColorSet ); - bool IsValid(); + virtual bool IsValid(); }; #endif // INCLUDED_SVX_PALETTE_HXX diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index 925f67bf27c9..1bd0bd1fd39d 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -20,6 +20,7 @@ #define INCLUDED_SVX_PALETTEMANAGER_HXX #include <svx/SvxColorValueSet.hxx> +#include <svx/Palette.hxx> #include <rtl/ustring.hxx> #include <svx/tbxcolorupdate.hxx> @@ -32,9 +33,10 @@ class PaletteManager svx::ToolboxButtonColorUpdater* mpBtnUpdater; Color mLastColor; - std::vector<Palette> maPalettes; + std::vector<Palette*> maPalettes; public: PaletteManager(); + ~PaletteManager(); void LoadPalettes(); void ReloadColorSet(SvxColorValueSet& rColorSet); std::vector<OUString> GetPaletteList(); diff --git a/include/svx/SvxColorValueSet.hxx b/include/svx/SvxColorValueSet.hxx index 7db9f4c38a6e..a3130ed4a731 100644 --- a/include/svx/SvxColorValueSet.hxx +++ b/include/svx/SvxColorValueSet.hxx @@ -19,7 +19,6 @@ #ifndef INCLUDED_SVX_SVXCOLORVALUESET_HXX #define INCLUDED_SVX_SVXCOLORVALUESET_HXX -#include <svx/Palette.hxx> #include <svtools/valueset.hxx> #include <svx/svxdllapi.h> @@ -41,7 +40,6 @@ public: void addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex = 1); void loadColorVector(const std::vector<Color>& rColorVector, const OUString& rNamePrefix, sal_uInt32 nStartIndex = 1); - void loadPalette(Palette& rPalette); Size layoutAllVisible(sal_uInt32 nEntryCount); Size layoutToGivenHeight(sal_uInt32 nHeight, sal_uInt32 nEntryCount); }; diff --git a/svx/source/tbxctrls/Palette.cxx b/svx/source/tbxctrls/Palette.cxx index f84f2d523e7a..f499b987382d 100644 --- a/svx/source/tbxctrls/Palette.cxx +++ b/svx/source/tbxctrls/Palette.cxx @@ -19,39 +19,16 @@ #include <svx/Palette.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; - } +Palette::~Palette() +{ +} - while(index < rStr.getLength() && - (rStr[index] == ' ' || rStr[index] == '\n' || rStr[index] == '\t')) - ++index; - if(index == rStr.getLength()) - index = -1; +// PaletteGPL ------------------------------------------------------------------ - return rStr.copy(substart, toklen); -} +OString lcl_getToken(const OString& rStr, sal_Int32& index); -Palette::Palette( const OUString &rFPath, const OUString &rFName ) : +PaletteGPL::PaletteGPL( const OUString &rFPath, const OUString &rFName ) : mbLoadedPalette( false ), mbValidPalette( false ), maFName( rFName ), @@ -60,23 +37,36 @@ Palette::Palette( const OUString &rFPath, const OUString &rFName ) : LoadPaletteHeader(); } -const OUString& Palette::GetName() +PaletteGPL::~PaletteGPL() +{ +} + +const OUString& PaletteGPL::GetName() { return maName; } -const Palette::ColorList& Palette::GetPaletteColors() +void PaletteGPL::LoadColorSet( SvxColorValueSet& rColorSet ) { LoadPalette(); - return maColors; + + rColorSet.Clear(); + int nIx = 1; + for(ColorList::const_iterator it = maColors.begin(); + it != maColors.end(); ++it) + { + // TODO make it->second OUString + rColorSet.InsertItem(nIx, it->first, OStringToOUString(it->second, RTL_TEXTENCODING_ASCII_US)); + ++nIx; + } } -bool Palette::IsValid() +bool PaletteGPL::IsValid() { return mbValidPalette; } -bool Palette::ReadPaletteHeader(SvFileStream& rFileStream) +bool PaletteGPL::ReadPaletteHeader(SvFileStream& rFileStream) { OString aLine; OString aName; @@ -98,14 +88,13 @@ bool Palette::ReadPaletteHeader(SvFileStream& rFileStream) return true; } -//TODO make this LoadPaletteHeader and set a bool if palette is incorrect -void Palette::LoadPaletteHeader() +void PaletteGPL::LoadPaletteHeader() { SvFileStream aFile(maFPath, STREAM_READ); mbValidPalette = ReadPaletteHeader( aFile ); } -void Palette::LoadPalette() +void PaletteGPL::LoadPalette() { if( mbLoadedPalette ) return; mbLoadedPalette = true; @@ -145,4 +134,68 @@ void Palette::LoadPalette() } while (aFile.ReadLine(aLine)); } +// 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; + OUString aWhitespaceChars( " \n\t" ); + + while(index < rStr.getLength() && + aWhitespaceChars.indexOf( rStr[index] ) != -1) + ++index; + if(index == rStr.getLength()) + { + index = -1; + return OString(); + } + substart = index; + + //counts length of token + while(index < rStr.getLength() && + aWhitespaceChars.indexOf( rStr[index] ) == -1 ) + { + ++index; + ++toklen; + } + + //counts to position of next token + while(index < rStr.getLength() && + aWhitespaceChars.indexOf( rStr[index] ) != -1 ) + ++index; + if(index == rStr.getLength()) + index = -1; + + return rStr.copy(substart, toklen); +} + +// PaletteSOC ------------------------------------------------------------------ + +PaletteSOC::PaletteSOC( const OUString &rFPath, const OUString &rFName ) +{ + maName = rFName; + mpColorList = XPropertyList::AsColorList(XPropertyList::CreatePropertyListFromURL(XCOLOR_LIST, rFPath)); + mpColorList->Load(); +} + +PaletteSOC::~PaletteSOC() +{ +} + +const OUString& PaletteSOC::GetName() +{ + return maName; +} + +void PaletteSOC::LoadColorSet( SvxColorValueSet& rColorSet ) +{ + rColorSet.Clear(); + rColorSet.addEntriesForXColorList( *mpColorList ); +} + +bool PaletteSOC::IsValid() +{ + return mpColorList.is(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index 95c351dd24e6..95485ced1a03 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -39,6 +39,16 @@ PaletteManager::PaletteManager() : mnNumOfPalettes += maPalettes.size(); } +PaletteManager::~PaletteManager() +{ + for( std::vector<Palette*>::iterator it = maPalettes.begin(); + it != maPalettes.end(); + ++it) + { + delete *it; + } +} + void PaletteManager::LoadPalettes() { OUString aPalPath = SvtPathOptions().GetPalettePath(); @@ -57,12 +67,14 @@ void PaletteManager::LoadPalettes() if(aFileStat.isRegular() || aFileStat.isLink()) { OUString aFName = aFileStat.getFileName(); + Palette* pPalette = 0; if( aFName.endsWithIgnoreAsciiCase(".gpl") ) - { - Palette aPalette( aFileStat.getFileURL(), aFName ); - if( aPalette.IsValid() ) - maPalettes.push_back( aPalette ); - } + pPalette = new PaletteGPL( aFileStat.getFileURL(), aFName ); + else if( aFName.endsWithIgnoreAsciiCase(".soc") ) + pPalette = new PaletteSOC( aFileStat.getFileURL(), aFName ); + + if( pPalette && pPalette->IsValid() ) + maPalettes.push_back( pPalette ); } } } @@ -104,10 +116,8 @@ void PaletteManager::ReloadColorSet(SvxColorValueSet &rColorSet) } else { - Palette& rPal = maPalettes[mnCurrentPalette-1]; - mnColorCount = rPal.GetPaletteColors().size(); - rColorSet.Clear(); - rColorSet.loadPalette(rPal); + maPalettes[mnCurrentPalette-1]->LoadColorSet( rColorSet ); + mnColorCount = rColorSet.GetItemCount(); } } @@ -117,11 +127,11 @@ std::vector<OUString> PaletteManager::GetPaletteList() aPaletteNames.push_back( STR_DEFAULT_PAL ); - for( std::vector<Palette>::iterator it = maPalettes.begin(); + for( std::vector<Palette*>::iterator it = maPalettes.begin(); it != maPalettes.end(); ++it) { - aPaletteNames.push_back( it->GetName() ); + aPaletteNames.push_back( (*it)->GetName() ); } aPaletteNames.push_back( STR_DOC_COLORS ); @@ -151,7 +161,7 @@ OUString PaletteManager::GetPaletteName() else if( mnCurrentPalette == mnNumOfPalettes - 1 ) return OUString( STR_DOC_COLORS ); else - return maPalettes[mnCurrentPalette - 1].GetName(); + return maPalettes[mnCurrentPalette - 1]->GetName(); } const Color& PaletteManager::GetLastColor() diff --git a/svx/source/tbxctrls/SvxColorValueSet.cxx b/svx/source/tbxctrls/SvxColorValueSet.cxx index e33810946d3b..2faeb6fde7cf 100644 --- a/svx/source/tbxctrls/SvxColorValueSet.cxx +++ b/svx/source/tbxctrls/SvxColorValueSet.cxx @@ -106,20 +106,6 @@ void SvxColorValueSet::loadColorVector(const std::vector<Color>& rColorVector, c } } - -void SvxColorValueSet::loadPalette(Palette& rPalette) -{ - const Palette::ColorList &rColors = rPalette.GetPaletteColors(); - Clear(); - int nIx = 1; - for(Palette::ColorList::const_iterator it = rColors.begin(); - it != rColors.end(); ++it) - { - InsertItem(nIx, it->first, OStringToOUString(it->second, RTL_TEXTENCODING_ASCII_US)); - ++nIx; - } -} - Size SvxColorValueSet::layoutAllVisible(sal_uInt32 nEntryCount) { if(!nEntryCount) |