include/svx/SvxColorValueSet.hxx         |    1 
 svx/source/tbxctrls/SvxColorValueSet.cxx |   13 +++
 svx/source/tbxctrls/colorwindow.hxx      |    3 
 svx/source/tbxctrls/tbcontrl.cxx         |  113 ++++++++++++++++++-------------
 4 files changed, 83 insertions(+), 47 deletions(-)

New commits:
commit 0d0c2fcb2fa2dfd0df8abc63e703d7f12fa6799f
Author: Krisztian Pinter <pin.termina...@gmail.com>
Date:   Thu Jun 19 16:04:00 2014 +0200

    Add ability to switch between default and document colors
    
    Change-Id: Ice8d58028a531b37d2c03fdc3e55eea850c53d44

diff --git a/include/svx/SvxColorValueSet.hxx b/include/svx/SvxColorValueSet.hxx
index 8690a48..7502d93 100644
--- a/include/svx/SvxColorValueSet.hxx
+++ b/include/svx/SvxColorValueSet.hxx
@@ -39,6 +39,7 @@ 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);
     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 4f145fc..1ee94f1 100644
--- a/svx/source/tbxctrls/SvxColorValueSet.cxx
+++ b/svx/source/tbxctrls/SvxColorValueSet.cxx
@@ -88,6 +88,19 @@ void SvxColorValueSet::addEntriesForXColorList(const 
XColorList& rXColorList, sa
     }
 }
 
+void SvxColorValueSet::addEntriesForColorVector(const std::vector<Color>& 
rColorVector, sal_uInt32 nStartIndex)
+{
+    const sal_uInt32 nColorCount(rColorVector.size());
+
+    //for(sal_uInt32 nIndex(0); nIndex < nColorCount; nIndex++, nStartIndex++)
+    for(std::vector<Color>::const_iterator it = rColorVector.begin();
+        it != rColorVector.end(); it++, nStartIndex++)
+    {
+        const Color& rEntry = *it;
+        InsertItem(nStartIndex, rEntry, "");
+    }
+}
+
 Size SvxColorValueSet::layoutAllVisible(sal_uInt32 nEntryCount)
 {
     if(!nEntryCount)
diff --git a/svx/source/tbxctrls/colorwindow.hxx 
b/svx/source/tbxctrls/colorwindow.hxx
index 6bb9f92..c699986 100644
--- a/svx/source/tbxctrls/colorwindow.hxx
+++ b/svx/source/tbxctrls/colorwindow.hxx
@@ -49,6 +49,9 @@ private:
     const sal_uInt16 nNavButtonWidth;
     const sal_uInt16 nNavButtonHeight;
     sal_uInt16& rnCurrentPalette;
+    sal_uInt16 nNumOfPalettes;
+
+    void ReloadColorSet();
 
     DECL_LINK( SelectHdl, void * );
     DECL_LINK( StepLeftClickHdl, void * );
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 1c8763f..f2608bd 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1091,32 +1091,10 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const 
OUString&            rCommand,
     maCommand( rCommand ),
     nNavButtonWidth ( 20 ),
     nNavButtonHeight( 20 ),
-    rnCurrentPalette( rnCurrentPalette_ )
+    rnCurrentPalette( rnCurrentPalette_ ),
+    nNumOfPalettes( 1 )
 
 {
-    SfxObjectShell* pDocSh = SfxObjectShell::Current();
-    const SfxPoolItem* pItem = NULL;
-    XColorListRef pColorList;
-
-    if ( pDocSh )
-    {
-        if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) )
-            pColorList = ( (SvxColorListItem*)pItem )->GetColorList();
-//-------- Add doc colors to palette
-        XColorEntry* pEntry;
-        std::vector<Color> aColors = pDocSh->GetDocColors();
-        for( unsigned int i = 0; i < aColors.size(); ++i )
-        {
-            pEntry = new XColorEntry( aColors[i],
-                "Document Color " + OUString::number(i) );
-            pColorList->Insert( pEntry, pColorList->Count() );
-        }
-//---------
-    }
-
-    if ( !pColorList.is() )
-        pColorList = XColorList::CreateStdColorList();
-
     if ( SID_ATTR_CHAR_COLOR_BACKGROUND == theSlotId || SID_BACKGROUND_COLOR 
== theSlotId )
     {
         aColorSet.SetStyle( aColorSet.GetStyle() | WB_NONEFIELD );
@@ -1148,29 +1126,16 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const 
OUString&            rCommand,
         aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) );
     }
 
-    if ( pColorList.is() )
-    {
-        const long nColorCount(pColorList->Count());
-        const Size aNewSize(aColorSet.layoutAllVisible(nColorCount));
-        aColorSet.SetOutputSizePixel(aNewSize);
-        static sal_Int32 nAdd = 4;
+    if( SfxObjectShell::Current()->GetDocColors().size() > 0 )
+        nNumOfPalettes++;
 
-        SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + 
nAdd + nNavButtonHeight));
-        aColorSet.Clear();
-        aColorSet.addEntriesForXColorList(*pColorList);
+    aButtonLeft.SetText("<");
+    aButtonLeft.SetClickHdl( LINK( this, SvxColorWindow_Impl, StepLeftClickHdl 
) );
+    aButtonLeft.Show();
 
-        aButtonLeft.SetText("<");
-        aButtonLeft.SetClickHdl( LINK( this, SvxColorWindow_Impl, 
StepLeftClickHdl ) );
-        aButtonLeft.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
-        aButtonLeft.SetPosPixel(Point(0, aNewSize.Height() + nAdd + 1));
-        aButtonLeft.Show();
-
-        aButtonRight.SetText(">");
-        aButtonRight.SetClickHdl( LINK( this, SvxColorWindow_Impl, 
StepRightClickHdl ) );
-        aButtonRight.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
-        aButtonRight.SetPosPixel(Point(aNewSize.Width() + nAdd - 
nNavButtonWidth, aNewSize.Height() + nAdd + 1));
-        aButtonRight.Show();
-    }
+    aButtonRight.SetText(">");
+    aButtonRight.SetClickHdl( LINK( this, SvxColorWindow_Impl, 
StepRightClickHdl ) );
+    aButtonRight.Show();
 
     aColorSet.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) );
     SetHelpId( HID_POPUP_COLOR );
@@ -1180,6 +1145,58 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const 
OUString&            rCommand,
 
     AddStatusListener( OUString( ".uno:ColorTableState" ));
     AddStatusListener( maCommand );
+
+    ReloadColorSet();
+}
+
+void SvxColorWindow_Impl::ReloadColorSet()
+{
+    SfxObjectShell* pDocSh = SfxObjectShell::Current();
+    long nColorCount = 0;
+
+    if( rnCurrentPalette == 0 )
+    {
+        const SfxPoolItem* pItem = NULL;
+        XColorListRef pColorList;
+
+        if ( pDocSh )
+        {
+            if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) )
+                pColorList = ( (SvxColorListItem*)pItem )->GetColorList();
+        }
+
+        if ( !pColorList.is() )
+            pColorList = XColorList::CreateStdColorList();
+
+
+        if ( pColorList.is() )
+        {
+            nColorCount = pColorList->Count();
+            aColorSet.Clear();
+            aColorSet.addEntriesForXColorList(*pColorList);
+        }
+    }
+    else if( rnCurrentPalette == nNumOfPalettes - 1 )
+    {
+        // Add doc colors to palette
+        std::vector<Color> aColors = pDocSh->GetDocColors();
+        nColorCount = aColors.size();
+        aColorSet.Clear();
+        aColorSet.addEntriesForColorVector(aColors);
+    }
+
+    const Size aNewSize(aColorSet.layoutAllVisible(nColorCount));
+    aColorSet.SetOutputSizePixel(aNewSize);
+    static sal_Int32 nAdd = 4;
+
+    //TODO: Move left/right buttons above the colors
+    SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd 
+ nNavButtonHeight));
+
+    aButtonLeft.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
+    aButtonLeft.SetPosPixel(Point(0, aNewSize.Height() + nAdd + 1));
+
+    aButtonRight.SetSizePixel(Size(nNavButtonWidth, nNavButtonHeight));
+    aButtonRight.SetPosPixel(Point(aNewSize.Width() + nAdd - nNavButtonWidth, 
aNewSize.Height() + nAdd + 1));
 }
 
 SvxColorWindow_Impl::~SvxColorWindow_Impl()
@@ -1235,13 +1252,15 @@ IMPL_LINK_NOARG(SvxColorWindow_Impl, SelectHdl)
 
 IMPL_LINK_NOARG(SvxColorWindow_Impl, StepLeftClickHdl)
 {
-    rnCurrentPalette--;
+    rnCurrentPalette = (rnCurrentPalette - 1) % nNumOfPalettes;
+    ReloadColorSet();
     return 0;
 }
 
 IMPL_LINK_NOARG(SvxColorWindow_Impl, StepRightClickHdl)
 {
-    rnCurrentPalette++;
+    rnCurrentPalette = (rnCurrentPalette + 1) % nNumOfPalettes;
+    ReloadColorSet();
     return 0;
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to