[Libreoffice-commits] .: Branch 'distro/suse/suse-3.6' - sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Dec 5 01:59:29 PST 2012


 sc/source/core/data/dpobject.cxx |    2 +-
 sc/source/core/data/dpoutput.cxx |    2 +-
 sc/source/ui/cctrl/dpcontrol.cxx |   31 ++++++++++++++++++++++++++-----
 sc/source/ui/inc/dpcontrol.hxx   |    3 +++
 sc/source/ui/view/gridwin4.cxx   |    2 ++
 5 files changed, 33 insertions(+), 7 deletions(-)

New commits:
commit 3bc88c4fdc2a05f816f29cb42b7d4f609214357c
Author: Noel Power <noel.power at suse.com>
Date:   Wed Dec 5 09:49:08 2012 +0000

    fix for bnc#791731 preserve cell formatting of datapilot area (
    
    also uses the cell formatting to set up the field buttons background & text/font
    attributes
    
    Change-Id: I5f5a46bfc7f0b7aabb8872c25b3c3134e90611ac

diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx
index f4b39ff..ebdbc35 100644
--- a/sc/source/core/data/dpobject.cxx
+++ b/sc/source/core/data/dpobject.cxx
@@ -627,7 +627,7 @@ void ScDPObject::Output( const ScAddress& rPos )
     //  clear old output area
     pDoc->DeleteAreaTab( aOutRange.aStart.Col(), aOutRange.aStart.Row(),
                          aOutRange.aEnd.Col(),   aOutRange.aEnd.Row(),
-                         aOutRange.aStart.Tab(), IDF_ALL );
+                         aOutRange.aStart.Tab(), IDF_CONTENTS | IDF_OBJECTS );
     pDoc->RemoveFlagsTab( aOutRange.aStart.Col(), aOutRange.aStart.Row(),
                           aOutRange.aEnd.Col(),   aOutRange.aEnd.Row(),
                           aOutRange.aStart.Tab(), SC_MF_AUTO );
diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx
index 2b86a69..e625e90 100644
--- a/sc/source/core/data/dpoutput.cxx
+++ b/sc/source/core/data/dpoutput.cxx
@@ -972,7 +972,7 @@ void ScDPOutput::Output()
     //  clear whole (new) output area
     //! when modifying table, clear old area
     //! include IDF_OBJECTS ???
-    pDoc->DeleteAreaTab( aStartPos.Col(), aStartPos.Row(), nTabEndCol, nTabEndRow, nTab, IDF_ALL );
+    pDoc->DeleteAreaTab( aStartPos.Col(), aStartPos.Row(), nTabEndCol, nTabEndRow, nTab, IDF_CONTENTS | IDF_OBJECTS);
 
     if ( bDoFilter )
         lcl_DoFilterButton( pDoc, aStartPos.Col(), aStartPos.Row(), nTab );
diff --git a/sc/source/ui/cctrl/dpcontrol.cxx b/sc/source/ui/cctrl/dpcontrol.cxx
index 5b430f8..1b18ed6 100644
--- a/sc/source/ui/cctrl/dpcontrol.cxx
+++ b/sc/source/ui/cctrl/dpcontrol.cxx
@@ -38,6 +38,8 @@
 #include "document.hxx"
 #include "docpool.hxx"
 #include "patattr.hxx"
+#include <editeng/brshitem.hxx>
+#include <editeng/colritem.hxx>
 
 using rtl::OUString;
 
@@ -45,6 +47,7 @@ ScDPFieldButton::ScDPFieldButton(OutputDevice* pOutDev, const StyleSettings* pSt
     mpDoc(pDoc),
     mpOutDev(pOutDev),
     mpStyle(pStyle),
+    mpPattern(NULL),
     mbBaseButton(true),
     mbPopupButton(false),
     mbHasHiddenMember(false),
@@ -117,8 +120,15 @@ void ScDPFieldButton::draw()
     {
         // Background
         Rectangle aRect(maPos, maSize);
-        mpOutDev->SetLineColor(mpStyle->GetFaceColor());
-        mpOutDev->SetFillColor(mpStyle->GetFaceColor());
+        Color aBackCol = mpStyle->GetFaceColor();
+        if ( mpPattern )
+        {
+            const SvxBrushItem&  rBrushItem = (const SvxBrushItem&)mpPattern->GetItemSet().Get( ATTR_BACKGROUND );
+            if ( rBrushItem.GetColor() != COL_TRANSPARENT )
+                aBackCol = rBrushItem.GetColor();
+        }
+        mpOutDev->SetFillColor(aBackCol);
+        mpOutDev->SetLineColor(aBackCol);
         mpOutDev->DrawRect(aRect);
 
         // Border lines
@@ -135,16 +145,27 @@ void ScDPFieldButton::draw()
         // Field name.
         // Get the font and size the same way as in scenario selection (lcl_DrawOneFrame in gridwin4.cxx)
         Font aTextFont( mpStyle->GetAppFont() );
+        Color aButTextCol = mpStyle->GetButtonTextColor();
         if ( mpDoc )
         {
-            //  use ScPatternAttr::GetFont only for font size
             Font aAttrFont;
-            static_cast<const ScPatternAttr&>(mpDoc->GetPool()->GetDefaultItem(ATTR_PATTERN)).
+            if ( mpPattern )
+            {
+               mpPattern->GetFont( aAttrFont, SC_AUTOCOL_DISPLAY, mpOutDev, &maZoomY );
+               const SvxColorItem& rColorItem = (const SvxColorItem&)mpPattern->GetItemSet().Get( ATTR_FONT_COLOR );
+               if ( rColorItem.GetValue().GetColor() != COL_TRANSPARENT )
+                   aButTextCol =  rColorItem.GetValue();
+            }
+            else
+            {
+                //  use ScPatternAttr::GetFont only for font size
+                static_cast<const ScPatternAttr&>(mpDoc->GetPool()->GetDefaultItem(ATTR_PATTERN)).
                 GetFont( aAttrFont, SC_AUTOCOL_BLACK, mpOutDev, &maZoomY );
+            }
             aTextFont.SetSize( aAttrFont.GetSize() );
         }
         mpOutDev->SetFont(aTextFont);
-        mpOutDev->SetTextColor(mpStyle->GetButtonTextColor());
+        mpOutDev->SetTextColor( aButTextCol );
 
         Point aTextPos = maPos;
         long nTHeight = mpOutDev->GetTextHeight();
diff --git a/sc/source/ui/inc/dpcontrol.hxx b/sc/source/ui/inc/dpcontrol.hxx
index 42d0cf6..f033ad0 100644
--- a/sc/source/ui/inc/dpcontrol.hxx
+++ b/sc/source/ui/inc/dpcontrol.hxx
@@ -42,6 +42,7 @@ class Size;
 class StyleSettings;
 class Window;
 class ScDocument;
+class ScPatternAttr;
 
 /**
  * This class takes care of physically drawing field button controls inside
@@ -61,6 +62,7 @@ public:
     void setHasHiddenMember(bool b);
     void setPopupPressed(bool b);
     void setPopupLeft(bool b);
+    void setFieldPattern(const ScPatternAttr* pPattern){ mpPattern = pPattern; }
     void draw();
 
     void getPopupBoundingBox(Point& rPos, Size& rSize) const;
@@ -77,6 +79,7 @@ private:
     ScDocument*             mpDoc;
     OutputDevice*           mpOutDev;
     const StyleSettings*    mpStyle;
+    const ScPatternAttr*    mpPattern;
     bool                    mbBaseButton;
     bool                    mbPopupButton;
     bool                    mbHasHiddenMember;
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index ff3e67b..65667fd 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -1247,6 +1247,8 @@ void ScGridWindow::DrawButtons( SCCOL nX1, SCROW /*nY1*/, SCCOL nX2, SCROW /*nY2
                     aCellBtn.setDrawBaseButton(true);
                     aCellBtn.setDrawPopupButton(pInfo->bPopupButton);
                     aCellBtn.setHasHiddenMember(pInfo->bFilterActive);
+
+                    aCellBtn.setFieldPattern( pDoc->GetPattern( nCol, nRow, nTab ) );
                     aCellBtn.draw();
                 }
             }


More information about the Libreoffice-commits mailing list