Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Hi,

I have improved my last patch for the Color Charts.

It now renames the Color Charts, asks a question before removing of a color and selects a new color when deleting of when setting to default.

This patch is under the LGPLv3+/MPL-licence.

--
Greetings,
Rob Snelders

On 24-03-11 21:37, Rob Snelders wrote:
Hi

I have created a patch that enables users to add and remove Color Charts.

From c84677e11fc85df12797a8700332961d42ae6b97 Mon Sep 17 00:00:00 2001
From: Rob Snelders <programming@ertai.nl>
Date: Thu, 31 Mar 2011 20:55:53 +0200
Subject: [PATCH] Improvement of adding and removing color charts

---
 cui/source/inc/cuires.hrc       |    2 ++
 cui/source/options/cfgchart.cxx |   11 ++++++++---
 cui/source/options/cfgchart.hxx |    2 +-
 cui/source/options/optchart.cxx |   32 ++++++++++++++++++++++++++------
 cui/source/options/optchart.hxx |    3 ++-
 cui/source/options/optchart.src |   10 ++++++++++
 6 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/cui/source/inc/cuires.hrc b/cui/source/inc/cuires.hrc
index 24d3ce2..226b8f7 100644
--- a/cui/source/inc/cuires.hrc
+++ b/cui/source/inc/cuires.hrc
@@ -157,6 +157,8 @@
 #define RID_SVXPAGE_ACCESSIBILITYCONFIG     (RID_SVX_START + 250)
 #define RID_SVXPAGE_ASIAN_LAYOUT            (RID_SVX_START + 246)
 #define RID_OPTPAGE_CHART_DEFCOLORS         (RID_SVX_START + 299)
+#define RID_OPTQB_COLOR_CHART_DELETE        (RID_SVX_START + 296)
+#define RID_OPTSTR_COLOR_CHART_DELETE      (RID_SVX_START + 289)
 #define RID_SVXPAGE_COLORCONFIG             (RID_SVX_START + 249)
 #define RID_SVXQB_DELETE_COLOR_CONFIG       (RID_SVX_START + 324)
 #define RID_SVXSTR_COLOR_CONFIG_SAVE1       (RID_SVX_START + 853)
diff --git a/cui/source/options/cfgchart.cxx b/cui/source/options/cfgchart.cxx
index 0d406cd..969eae0 100644
--- a/cui/source/options/cfgchart.cxx
+++ b/cui/source/options/cfgchart.cxx
@@ -92,6 +92,11 @@ void SvxChartColorTable::remove( size_t _nIndex )
 {
     if (m_aColorEntries.size() > 0)
         m_aColorEntries.erase( m_aColorEntries.begin() + _nIndex);
+
+    for (size_t i=0 ; i<m_aColorEntries.size(); i++)
+    {
+        m_aColorEntries[ i ].SetName( getDefaultName( i ) );
+    }
 }
 
 void SvxChartColorTable::replace( size_t _nIndex, const XColorEntry & _rEntry )
@@ -123,11 +128,11 @@ void SvxChartColorTable::useDefault()
 
     for( sal_Int32 i=0; i<ROW_COLOR_COUNT; i++ )
     {
-        append( XColorEntry( aColors[ i % sizeof( aColors ) ], getNextDefaultName() ));
+        append( XColorEntry( aColors[ i % sizeof( aColors ) ], getDefaultName( i ) ));
     }
 }
 
-String SvxChartColorTable::getNextDefaultName()
+String SvxChartColorTable::getDefaultName( size_t _nIndex )
 {
     String aName;
 
@@ -147,7 +152,7 @@ String SvxChartColorTable::getNextDefaultName()
     }
 
     aName = sDefaultNamePrefix;
-    aName.Append( String::CreateFromInt32 ( nNextElementNumber ) );
+    aName.Append( String::CreateFromInt32 ( _nIndex + 1 ) );
     aName.Append( sDefaultNamePostfix );
     nNextElementNumber++;
 
diff --git a/cui/source/options/cfgchart.hxx b/cui/source/options/cfgchart.hxx
index 918f81a..b9adf39 100644
--- a/cui/source/options/cfgchart.hxx
+++ b/cui/source/options/cfgchart.hxx
@@ -63,7 +63,7 @@ public:
     void remove( size_t _nIndex );
     void replace( size_t _nIndex, const XColorEntry & _rEntry );
     void useDefault();
-    String getNextDefaultName();
+    String getDefaultName(size_t _nIndex);
 
     // comparison
     bool operator==( const SvxChartColorTable & _rOther ) const;
diff --git a/cui/source/options/optchart.cxx b/cui/source/options/optchart.cxx
index 51d48d4..f5c25dc 100644
--- a/cui/source/options/optchart.cxx
+++ b/cui/source/options/optchart.cxx
@@ -31,6 +31,7 @@
 #include "optchart.hxx"
 #include "optchart.hrc"
 #include <dialmgr.hxx>
+#include <vcl/msgbox.hxx>
 #include <svx/svxids.hrc> // for SID_SCH_EDITOPTIONS
 
 // ====================
@@ -194,6 +195,7 @@ IMPL_LINK( SvxDefaultColorOptPage, ResetToDefaults, void *, EMPTYARG )
         aLbChartColors.FillBox( pColorConfig->GetColorTable() );
 
         aLbChartColors.GetFocus();
+        aLbChartColors.SelectEntryPos( 0 );
     }
 
     return 0L;
@@ -208,12 +210,13 @@ IMPL_LINK( SvxDefaultColorOptPage, AddChartColor, void *, EMPTYARG )
     {
         ColorData black = RGB_COLORDATA( 0x00, 0x00, 0x00 );
 
-        pColorConfig->GetColorTable().append (XColorEntry ( black, 
pColorConfig->GetColorTable().getNextDefaultName()));
+        pColorConfig->GetColorTable().append (XColorEntry ( black, 
pColorConfig->GetColorTable().getDefaultName(pColorConfig->GetColorTable().size())));
 
         aLbChartColors.Clear();
         aLbChartColors.FillBox( pColorConfig->GetColorTable() );
 
         aLbChartColors.GetFocus();
+        aLbChartColors.SelectEntryPos( pColorConfig->GetColorTable().size() - 1 );
     }
 
     return 0L;
@@ -222,16 +225,33 @@ IMPL_LINK( SvxDefaultColorOptPage, AddChartColor, void *, EMPTYARG )
 // RemoveChartColor
 // ----------------
 
-IMPL_LINK( SvxDefaultColorOptPage, RemoveChartColor, void *, EMPTYARG )
+IMPL_LINK( SvxDefaultColorOptPage, RemoveChartColor, PushButton*, pButton )
 {
+    size_t nIndex = aLbChartColors.GetSelectEntryPos();
+
+    if (aLbChartColors.GetSelectEntryCount() == 0)
+        return 0L;
+
     if( pColorConfig )
     {
-        pColorConfig->GetColorTable().remove( aLbChartColors.GetSelectEntryPos()  );
+        DBG_ASSERT(pColorConfig.size() > 1, "don't delete the last chart color");
+        QueryBox aQuery(pButton, CUI_RES(RID_OPTQB_COLOR_CHART_DELETE));
+        aQuery.SetText(String(CUI_RES(RID_OPTSTR_COLOR_CHART_DELETE)));
+        if(RET_YES == aQuery.Execute())
+        {
 
-        aLbChartColors.Clear();
-        aLbChartColors.FillBox( pColorConfig->GetColorTable() );
+            pColorConfig->GetColorTable().remove( nIndex  );
 
-        aLbChartColors.GetFocus();
+            aLbChartColors.Clear();
+            aLbChartColors.FillBox( pColorConfig->GetColorTable() );
+
+            aLbChartColors.GetFocus();
+
+            if (nIndex == aLbChartColors.GetEntryCount() && aLbChartColors.GetEntryCount() > 0)
+                aLbChartColors.SelectEntryPos( pColorConfig->GetColorTable().size() - 1 );
+            else if (aLbChartColors.GetEntryCount() > 0)
+                aLbChartColors.SelectEntryPos( nIndex );
+        }
     }
 
     return 0L;
diff --git a/cui/source/options/optchart.hxx b/cui/source/options/optchart.hxx
index 71898e9..1416008 100644
--- a/cui/source/options/optchart.hxx
+++ b/cui/source/options/optchart.hxx
@@ -55,6 +55,7 @@ public:
 
 class SvxDefaultColorOptPage : public SfxTabPage
 {
+
 private:
     FixedLine                           aGbChartColors;
     ChartColorLB                        aLbChartColors;
@@ -70,7 +71,7 @@ private:
 
     DECL_LINK( ResetToDefaults, void * );
     DECL_LINK( AddChartColor, void * );
-    DECL_LINK( RemoveChartColor, void * );
+    DECL_LINK( RemoveChartColor, PushButton * );
     DECL_LINK( ListClickedHdl, ChartColorLB * );
     DECL_LINK( BoxClickedHdl, ValueSet * );
 
diff --git a/cui/source/options/optchart.src b/cui/source/options/optchart.src
index 593fafd..09800aa 100644
--- a/cui/source/options/optchart.src
+++ b/cui/source/options/optchart.src
@@ -97,3 +97,13 @@ String RID_SVXSTR_DIAGRAM_ROW
 
     Text [ en-US ] = "Data Series $(ROW)" ;
 };
+QueryBox RID_OPTQB_COLOR_CHART_DELETE
+{
+    Buttons = WB_YES_NO ;
+    DefButton = WB_DEF_NO ;
+    Message [ en-US ] = "Do you really want to delete the chart color?" ;
+};
+String RID_OPTSTR_COLOR_CHART_DELETE
+{
+   Text [ en-US ] = "Chart Color Deletion" ;
+};
-- 
1.7.0.4


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.