summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorNoel Power <noel.power@suse.com>2012-12-05 09:49:08 +0000
committerNoel Power <noel.power@suse.com>2012-12-05 09:59:00 +0000
commit3bc88c4fdc2a05f816f29cb42b7d4f609214357c (patch)
tree6fb8b16ca1d3b11f62c9560d30592f6702f0a0c8 /sc
parent4fb4ffcc6e13b2544e0ac5578e1b52030e85a295 (diff)
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
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/data/dpobject.cxx2
-rw-r--r--sc/source/core/data/dpoutput.cxx2
-rw-r--r--sc/source/ui/cctrl/dpcontrol.cxx31
-rw-r--r--sc/source/ui/inc/dpcontrol.hxx3
-rw-r--r--sc/source/ui/view/gridwin4.cxx2
5 files changed, 33 insertions, 7 deletions
diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx
index f4b39ffcf0e4..ebdbc35ce0bb 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 2b86a698c846..e625e90085f8 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 5b430f87ebb1..1b18ed64c90a 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 42d0cf637bd2..f033ad0364a4 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 ff3e67bbc67e..65667fd73adf 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();
}
}