summaryrefslogtreecommitdiff
path: root/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx')
-rw-r--r--sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx865
1 files changed, 865 insertions, 0 deletions
diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx b/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx
new file mode 100644
index 000000000000..fe48df6ccf03
--- /dev/null
+++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx
@@ -0,0 +1,865 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sfx2/sidebar/ResourceDefinitions.hrc>
+#include <sfx2/sidebar/Theme.hxx>
+#include <sfx2/sidebar/ControlFactory.hxx>
+#include <CellAppearancePropertyPanel.hxx>
+#include <CellAppearancePropertyPanel.hrc>
+#include "sc.hrc"
+#include "scresid.hxx"
+#include <sfx2/bindings.hxx>
+#include <sfx2/dispatch.hxx>
+#include <vcl/fixed.hxx>
+#include <svx/tbxcolorupdate.hxx>
+#include <svl/eitem.hxx>
+#include <editeng/borderline.hxx>
+#include <editeng/boxitem.hxx>
+#include <editeng/colritem.hxx>
+#include <editeng/lineitem.hxx>
+#include <vcl/svapp.hxx>
+#include <svx/sidebar/ColorControl.hxx>
+#include <boost/bind.hpp>
+#include <svx/sidebar/PopupContainer.hxx>
+#include <CellLineStyleControl.hxx>
+#include <CellLineStylePopup.hxx>
+#include <CellBorderUpdater.hxx>
+#include <CellBorderStyleControl.hxx>
+#include <CellBorderStylePopup.hxx>
+
+using namespace css;
+using namespace cssu;
+
+#define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
+
+//////////////////////////////////////////////////////////////////////////////
+// helpers
+
+namespace
+{
+ Color GetTransparentColor(void)
+ {
+ return COL_TRANSPARENT;
+ }
+} // end of anonymous namespace
+
+//////////////////////////////////////////////////////////////////////////////
+// namespace open
+
+namespace sc { namespace sidebar {
+
+//////////////////////////////////////////////////////////////////////////////
+
+svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateFillColorPopupControl(svx::sidebar::PopupContainer* pParent)
+{
+ const ScResId aResId(VS_NOFILLCOLOR);
+
+ return new svx::sidebar::ColorControl(
+ pParent,
+ mpBindings,
+ ScResId(RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR),
+ ScResId(VS_FILLCOLOR),
+ ::boost::bind(GetTransparentColor),
+ ::boost::bind(&CellAppearancePropertyPanel::SetFillColor, this, _1, _2),
+ pParent,
+ &aResId);
+}
+
+void CellAppearancePropertyPanel::SetFillColor(
+ const String& /*rsColorName*/,
+ const Color aColor)
+{
+ const SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR);
+ mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
+ maBackColor = aColor;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateLineColorPopupControl(svx::sidebar::PopupContainer* pParent)
+{
+ return new svx::sidebar::ColorControl(
+ pParent,
+ mpBindings,
+ ScResId(RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR),
+ ScResId(VS_LINECOLOR),
+ ::boost::bind(GetTransparentColor),
+ ::boost::bind(&CellAppearancePropertyPanel::SetLineColor, this, _1, _2),
+ pParent,
+ 0);
+}
+
+void CellAppearancePropertyPanel::SetLineColor(
+ const String& /*rsColorName*/,
+ const Color aColor)
+{
+ const SvxColorItem aColorItem(aColor, SID_FRAME_LINECOLOR);
+ mpBindings->GetDispatcher()->Execute(SID_FRAME_LINECOLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
+ maLineColor = aColor;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellLineStylePopupControl(svx::sidebar::PopupContainer* pParent)
+{
+ return new CellLineStyleControl(pParent, *this);
+}
+
+void CellAppearancePropertyPanel::EndCellLineStylePopupMode(void)
+{
+ if(mpCellLineStylePopup.get())
+ {
+ mpCellLineStylePopup->Hide();
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer* pParent)
+{
+ return new CellBorderStyleControl(pParent, *this);
+}
+
+void CellAppearancePropertyPanel::EndCellBorderStylePopupMode(void)
+{
+ if(mpCellBorderStylePopup.get())
+ {
+ mpCellBorderStylePopup->Hide();
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+CellAppearancePropertyPanel::CellAppearancePropertyPanel(
+ Window* pParent,
+ const cssu::Reference<css::frame::XFrame>& rxFrame,
+ SfxBindings* pBindings)
+: Control(
+ pParent,
+ ScResId(RID_PROPERTYPANEL_SC_APPEAR)),
+
+ mpFTFillColor(new FixedText(this, ScResId(FT_BK_COLOR))),
+ mpTBFillColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
+ mpTBFillColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBFillColorBackground.get(), ScResId(TB_BK_COLOR))),
+ mpFillColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_BRUSH, TBI_BK_COLOR, mpTBFillColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)),
+
+ mpFTCellBorder(new FixedText(this, ScResId(FT_BORDER))),
+ mpTBCellBorderBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
+ mpTBCellBorder(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBCellBorderBackground.get(), ScResId(TB_APP_BORDER))),
+ mpCellBorderUpdater(new CellBorderUpdater(TBI_BORDER, *mpTBCellBorder)),
+
+ mpTBLineStyleBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
+ mpTBLineStyle(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineStyleBackground.get(), ScResId(TB_BORDER_LINE_STYLE))),
+
+ mpTBLineColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
+ mpTBLineColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineColorBackground.get(), ScResId(TB_BORDER_LINE_COLOR))),
+ mpLineColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_FRAME_LINECOLOR, TBI_LINE_COLOR, mpTBLineColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)),
+
+ mpCBXShowGrid(new CheckBox(this, ScResId(CBX_SHOW_GRID))),
+
+ maBackColorControl(SID_BACKGROUND_COLOR, *pBindings, *this),
+ maLineColorControl(SID_FRAME_LINECOLOR, *pBindings, *this),
+ maLineStyleControl(SID_FRAME_LINESTYLE, *pBindings, *this),
+ maBorderOuterControl(SID_ATTR_BORDER_OUTER, *pBindings, *this),
+ maBorderInnerControl(SID_ATTR_BORDER_INNER, *pBindings, *this),
+ maGridShowControl(SID_SCGRIDSHOW, *pBindings, *this),
+ maBorderTLBRControl(SID_ATTR_BORDER_DIAG_TLBR, *pBindings, *this),
+ maBorderBLTRControl(SID_ATTR_BORDER_DIAG_BLTR, *pBindings, *this),
+
+ maIMGBKColor(ScResId(IMG_BK_COLOR)),
+ maIMGCellBorder(ScResId(IMG_CELL_BORDER)),
+ maIMGLineColor(ScResId(IMG_LINE_COLOR)),
+ maIMGLineStyle1(ScResId(IMG_LINE_STYLE1)),
+ maIMGLineStyle2(ScResId(IMG_LINE_STYLE2)),
+ maIMGLineStyle3(ScResId(IMG_LINE_STYLE3)),
+ maIMGLineStyle4(ScResId(IMG_LINE_STYLE4)),
+ maIMGLineStyle5(ScResId(IMG_LINE_STYLE5)),
+ maIMGLineStyle6(ScResId(IMG_LINE_STYLE6)),
+ maIMGLineStyle7(ScResId(IMG_LINE_STYLE7)),
+ maIMGLineStyle8(ScResId(IMG_LINE_STYLE8)),
+ maIMGLineStyle9(ScResId(IMG_LINE_STYLE9)),
+
+ maBackColor(COL_TRANSPARENT),
+ maLineColor(COL_BLACK),
+ maTLBRColor(COL_BLACK),
+ maBLTRColor(COL_BLACK),
+ mnIn(0),
+ mnOut(0),
+ mnDis(0),
+ mnTLBRIn(0),
+ mnTLBROut(0),
+ mnTLBRDis(0),
+ mnBLTRIn(0),
+ mnBLTROut(0),
+ mnBLTRDis(0),
+ mbBackColorAvailable(true),
+ mbLineColorAvailable(true),
+ mbBorderStyleAvailable(true),
+ mbLeft(false),
+ mbRight(false),
+ mbTop(false),
+ mbBottom(false),
+ mbVer(false),
+ mbHor(false),
+ mbOuterBorder(false),
+ mbInnerBorder(false),
+ mbTLBR(false),
+ mbBLTR(false),
+
+ maFillColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateFillColorPopupControl, this, _1)),
+ maLineColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateLineColorPopupControl, this, _1)),
+ mpCellLineStylePopup(),
+ mpCellBorderStylePopup(),
+
+ mxFrame(rxFrame),
+ maContext(),
+ mpBindings(pBindings)
+{
+ Initialize();
+ FreeResource();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+CellAppearancePropertyPanel::~CellAppearancePropertyPanel()
+{
+ // Destroy the toolboxes, then their background windows.
+ mpTBFillColor.reset();
+ mpTBCellBorder.reset();
+ mpTBLineStyle.reset();
+ mpTBLineColor.reset();
+
+ mpTBFillColorBackground.reset();
+ mpTBCellBorderBackground.reset();
+ mpTBLineStyleBackground.reset();
+ mpTBLineColorBackground.reset();
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void CellAppearancePropertyPanel::Initialize()
+{
+ mpTBFillColor->SetItemImage(TBI_BK_COLOR, maIMGBKColor);
+ mpTBFillColor->SetItemBits( TBI_BK_COLOR, mpTBFillColor->GetItemBits( TBI_BK_COLOR ) | TIB_DROPDOWNONLY );
+ mpTBFillColor->SetQuickHelpText(TBI_BK_COLOR,String(ScResId(STR_QH_BK_COLOR))); //Add
+ Size aTbxSize1( mpTBFillColor->CalcWindowSizePixel() );
+ mpTBFillColor->SetOutputSizePixel( aTbxSize1 );
+ mpTBFillColor->SetBackground(Wallpaper());
+ mpTBFillColor->SetPaintTransparent(true);
+ Link aLink = LINK(this, CellAppearancePropertyPanel, TbxBKColorSelectHdl);
+ mpTBFillColor->SetDropdownClickHdl ( aLink );
+ mpTBFillColor->SetSelectHdl ( aLink );
+
+ mpTBCellBorder->SetItemImage(TBI_BORDER, maIMGCellBorder);
+ mpTBCellBorder->SetItemBits( TBI_BORDER, mpTBCellBorder->GetItemBits( TBI_BORDER ) | TIB_DROPDOWNONLY );
+ mpTBCellBorder->SetQuickHelpText(TBI_BORDER,String(ScResId(STR_QH_BORDER))); //Add
+ Size aTbxSize2( mpTBCellBorder->CalcWindowSizePixel() );
+ mpTBCellBorder->SetOutputSizePixel( aTbxSize2 );
+ mpTBCellBorder->SetBackground(Wallpaper());
+ mpTBCellBorder->SetPaintTransparent(true);
+ aLink = LINK(this, CellAppearancePropertyPanel, TbxCellBorderSelectHdl);
+ mpTBCellBorder->SetDropdownClickHdl ( aLink );
+ mpTBCellBorder->SetSelectHdl ( aLink );
+
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle1);
+ mpTBLineStyle->SetItemBits( TBI_LINE_STYLE, mpTBLineStyle->GetItemBits( TBI_LINE_STYLE ) | TIB_DROPDOWNONLY );
+ mpTBLineStyle->SetQuickHelpText(TBI_LINE_STYLE,String(ScResId(STR_QH_BORDER_LINE_STYLE))); //Add
+ Size aTbxSize3( mpTBLineStyle->CalcWindowSizePixel() );
+ mpTBLineStyle->SetOutputSizePixel( aTbxSize3 );
+ mpTBLineStyle->SetBackground(Wallpaper());
+ mpTBLineStyle->SetPaintTransparent(true);
+ aLink = LINK(this, CellAppearancePropertyPanel, TbxLineStyleSelectHdl);
+ mpTBLineStyle->SetDropdownClickHdl ( aLink );
+ mpTBLineStyle->SetSelectHdl ( aLink );
+ mpTBLineStyle->Disable();
+
+ mpTBLineColor->SetItemImage(TBI_LINE_COLOR, maIMGLineColor);
+ mpTBLineColor->SetItemBits( TBI_LINE_COLOR, mpTBLineColor->GetItemBits( TBI_LINE_COLOR ) | TIB_DROPDOWNONLY );
+ mpTBLineColor->SetQuickHelpText(TBI_LINE_COLOR,String(ScResId(STR_QH_BORDER_LINE_COLOR))); //Add
+ Size aTbxSize4( mpTBLineColor->CalcWindowSizePixel() );
+ mpTBLineColor->SetOutputSizePixel( aTbxSize4 );
+ mpTBLineColor->SetBackground(Wallpaper());
+ mpTBLineColor->SetPaintTransparent(true);
+ aLink = LINK(this, CellAppearancePropertyPanel, TbxLineColorSelectHdl);
+ mpTBLineColor->SetDropdownClickHdl ( aLink );
+ mpTBLineColor->SetSelectHdl ( aLink );
+ mpTBLineColor->Disable();
+
+ aLink = LINK(this, CellAppearancePropertyPanel, CBOXGridShowClkHdl);
+ mpCBXShowGrid->SetClickHdl ( aLink );
+
+ mpTBFillColor->SetAccessibleRelationLabeledBy(mpFTFillColor.get());
+ mpTBLineColor->SetAccessibleRelationLabeledBy(mpTBLineColor.get());
+ mpTBCellBorder->SetAccessibleRelationLabeledBy(mpFTCellBorder.get());
+ mpTBLineStyle->SetAccessibleRelationLabeledBy(mpTBLineStyle.get());
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+IMPL_LINK(CellAppearancePropertyPanel, TbxBKColorSelectHdl, ToolBox*, pToolBox)
+{
+ sal_uInt16 nId = pToolBox->GetCurItemId();
+ if(nId == TBI_BK_COLOR)
+ {
+ maFillColorPopup.Show(*pToolBox);
+ maFillColorPopup.SetCurrentColor(maBackColor, mbBackColorAvailable);
+ }
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+IMPL_LINK(CellAppearancePropertyPanel, TbxLineColorSelectHdl, ToolBox*, pToolBox)
+{
+ sal_uInt16 nId = pToolBox->GetCurItemId();
+ if(nId == TBI_LINE_COLOR)
+ {
+ maLineColorPopup.Show(*pToolBox);
+ maLineColorPopup.SetCurrentColor(maLineColor, mbLineColorAvailable);
+ }
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+IMPL_LINK(CellAppearancePropertyPanel, TbxCellBorderSelectHdl, ToolBox*, pToolBox)
+{
+ sal_uInt16 nId = pToolBox->GetCurItemId();
+
+ if(nId == TBI_BORDER)
+ {
+ // create popup on demand
+ if(!mpCellBorderStylePopup.get())
+ {
+ mpCellBorderStylePopup.reset(
+ new CellBorderStylePopup(
+ this,
+ ::boost::bind(&CellAppearancePropertyPanel::CreateCellBorderStylePopupControl, this, _1)));
+ }
+
+ if(mpCellBorderStylePopup.get())
+ {
+ mpCellBorderStylePopup->Show(*pToolBox);
+ }
+ }
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+IMPL_LINK(CellAppearancePropertyPanel, TbxLineStyleSelectHdl, ToolBox*, pToolBox)
+{
+ sal_uInt16 nId = pToolBox->GetCurItemId();
+ if(nId == TBI_LINE_STYLE)
+ {
+ // create popup on demand
+ if(!mpCellLineStylePopup.get())
+ {
+ mpCellLineStylePopup.reset(
+ new CellLineStylePopup(
+ this,
+ ::boost::bind(&CellAppearancePropertyPanel::CreateCellLineStylePopupControl, this, _1)));
+ }
+
+ if(mpCellLineStylePopup.get())
+ {
+ mpCellLineStylePopup->SetLineStyleSelect(mnOut, mnIn, mnDis);
+ mpCellLineStylePopup->Show(*pToolBox);
+ }
+ }
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+IMPL_LINK(CellAppearancePropertyPanel, CBOXGridShowClkHdl, void*, EMPTYARG)
+{
+ bool bState = mpCBXShowGrid->IsChecked();
+ SfxBoolItem aItem( SID_SCGRIDSHOW , bState);
+ GetBindings()->GetDispatcher()->Execute(SID_SCGRIDSHOW, SFX_CALLMODE_RECORD, &aItem, false, 0L);
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+CellAppearancePropertyPanel* CellAppearancePropertyPanel::Create (
+ Window* pParent,
+ const cssu::Reference<css::frame::XFrame>& rxFrame,
+ SfxBindings* pBindings)
+{
+ if (pParent == NULL)
+ throw lang::IllegalArgumentException(A2S("no parent Window given to CellAppearancePropertyPanel::Create"), NULL, 0);
+ if ( ! rxFrame.is())
+ throw lang::IllegalArgumentException(A2S("no XFrame given to CellAppearancePropertyPanel::Create"), NULL, 1);
+ if (pBindings == NULL)
+ throw lang::IllegalArgumentException(A2S("no SfxBindings given to CellAppearancePropertyPanel::Create"), NULL, 2);
+
+ return new CellAppearancePropertyPanel(
+ pParent,
+ rxFrame,
+ pBindings);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void CellAppearancePropertyPanel::DataChanged(
+ const DataChangedEvent& rEvent)
+{
+ (void)rEvent;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void CellAppearancePropertyPanel::HandleContextChange(
+ const ::sfx2::sidebar::EnumContext aContext)
+{
+ if(maContext == aContext)
+ {
+ // Nothing to do.
+ return;
+ }
+
+ maContext = aContext;
+
+
+
+ // todo
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void CellAppearancePropertyPanel::NotifyItemUpdate(
+ sal_uInt16 nSID,
+ SfxItemState eState,
+ const SfxPoolItem* pState)
+{
+ switch(nSID)
+ {
+ case SID_BACKGROUND_COLOR:
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState);
+
+ if(pSvxColorItem)
+ {
+ maBackColor = ((const SvxColorItem*)pState)->GetValue();
+ mbBackColorAvailable = true;
+ mpFillColorUpdater->Update(maBackColor);
+ break;
+ }
+ }
+
+ mbBackColorAvailable = false;
+ maBackColor.SetColor(COL_TRANSPARENT);
+ mpFillColorUpdater->Update(COL_TRANSPARENT);
+ break;
+ case SID_FRAME_LINECOLOR:
+ if( eState == SFX_ITEM_DONTCARE)
+ {
+ mbLineColorAvailable = true;
+ maLineColor.SetColor( COL_TRANSPARENT );
+ UpdateControlState();
+ break;
+ }
+
+ if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxColorItem) )
+ {
+ const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState);
+
+ if(pSvxColorItem)
+ {
+ maLineColor = ((const SvxColorItem*)pState)->GetValue();
+ if(maLineColor == COL_AUTO)
+ mbLineColorAvailable = false;
+ else
+ {
+ mbLineColorAvailable = true;
+ // mpLineColorUpdater->Update(maLineColor);
+ }
+
+ UpdateControlState();
+ break;
+ }
+ }
+
+ mbLineColorAvailable = false;
+ maLineColor.SetColor(COL_AUTO);
+ // mpLineColorUpdater->Update(maLineColor);
+ UpdateControlState();
+ break;
+ case SID_FRAME_LINESTYLE:
+ if( eState == SFX_ITEM_DONTCARE )
+ {
+ mbBorderStyleAvailable = true;
+ mnIn = 0;
+ mnOut = 0;
+ mnDis = 0;
+ SetStyleIcon();
+ break;
+ }
+
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SvxLineItem* pSvxLineItem = dynamic_cast< const SvxLineItem* >(pState);
+
+ if(pSvxLineItem)
+ {
+ const editeng::SvxBorderLine* mbLineItem = pSvxLineItem->GetLine();
+ mnIn = mbLineItem->GetInWidth();
+ mnOut = mbLineItem->GetOutWidth();
+ mnDis = mbLineItem->GetDistance();
+
+ if(mnIn == 0 && mnOut == 0 && mnDis == 0)
+ mbBorderStyleAvailable = false;
+ else
+ mbBorderStyleAvailable = true;
+
+ SetStyleIcon();
+ break;
+ }
+ }
+
+ mbBorderStyleAvailable = false;
+ SetStyleIcon();
+ break;
+ case SID_ATTR_BORDER_OUTER:
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SvxBoxItem* pBoxItem = dynamic_cast< const SvxBoxItem* >(pState);
+
+ if(pBoxItem)
+ {
+ mbLeft=false, mbRight=false, mbTop=false, mbBottom=false;
+
+ if(pBoxItem->GetLeft())
+ mbLeft = true;
+
+ if(pBoxItem->GetRight())
+ mbRight = true;
+
+ if(pBoxItem->GetTop())
+ mbTop = true;
+
+ if(pBoxItem->GetBottom())
+ mbBottom = true;
+
+ if(!Application::GetSettings().GetLayoutRTL())
+ mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, maIMGCellBorder, mbVer, mbHor);
+ else
+ mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, maIMGCellBorder, mbVer, mbHor);
+
+ if(mbLeft || mbRight || mbTop || mbBottom)
+ mbOuterBorder = true;
+ else
+ mbOuterBorder = false;
+
+ UpdateControlState();
+ }
+ }
+ break;
+ case SID_ATTR_BORDER_INNER:
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SvxBoxInfoItem* pBoxInfoItem = dynamic_cast< const SvxBoxInfoItem* >(pState);
+
+ if(pBoxInfoItem)
+ {
+ bool bLeft(false), bRight(false), bTop(false), bBottom(false);
+
+ mbVer = false, mbHor = false;
+
+ if(!pBoxInfoItem->IsValid( VALID_VERT ) || pBoxInfoItem->GetVert())
+ mbVer = true;
+
+ if(!pBoxInfoItem->IsValid( VALID_HORI ) || pBoxInfoItem->GetHori())
+ mbHor = true;
+
+ if(!pBoxInfoItem->IsValid( VALID_LEFT ) || mbLeft)
+ bLeft = true;
+
+ if(!pBoxInfoItem->IsValid( VALID_RIGHT ) || mbRight)
+ bRight = true;
+
+ if(!pBoxInfoItem->IsValid( VALID_TOP ) || mbTop)
+ bTop = true;
+
+ if(!pBoxInfoItem->IsValid( VALID_BOTTOM ) || mbBottom)
+ bBottom = true;
+
+ if(!Application::GetSettings().GetLayoutRTL())
+ mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bLeft, bRight, maIMGCellBorder, mbVer, mbHor);
+ else
+ mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bRight, bLeft, maIMGCellBorder, mbVer, mbHor);
+
+ if(mbVer || mbHor || bLeft || bRight || bTop || bBottom)
+ mbInnerBorder = true;
+ else
+ mbInnerBorder = false;
+
+ UpdateControlState();
+ }
+ }
+ break;
+ case SID_ATTR_BORDER_DIAG_TLBR:
+ if( eState == SFX_ITEM_DONTCARE )
+ {
+ mbTLBR = true;
+ maTLBRColor.SetColor(COL_TRANSPARENT);
+ mnTLBRIn = mnTLBROut = mnTLBRDis = 0;
+ UpdateControlState();
+ break;
+ }
+
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState);
+
+ if(pItem)
+ {
+ const editeng::SvxBorderLine* aLine = pItem->GetLine();
+
+ if(!aLine)
+ {
+ mbTLBR = false;
+ }
+ else
+ {
+ mbTLBR = true;
+ maTLBRColor = aLine->GetColor();
+ mnTLBRIn = aLine->GetInWidth();
+ mnTLBROut = aLine->GetOutWidth();
+ mnTLBRDis = aLine->GetDistance();
+
+ if(mnTLBRIn == 0 && mnTLBROut == 0 && mnTLBRDis == 0)
+ mbTLBR = false;
+ }
+
+ UpdateControlState();
+ break;
+ }
+ }
+
+ mbTLBR = false;
+ UpdateControlState();
+ break;
+ case SID_ATTR_BORDER_DIAG_BLTR:
+ if( eState == SFX_ITEM_DONTCARE )
+ {
+ mbBLTR = true;
+ maBLTRColor.SetColor( COL_TRANSPARENT );
+ mnBLTRIn = mnBLTROut = mnBLTRDis = 0;
+ UpdateControlState();
+ break;
+ }
+
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState);
+
+ if(pItem)
+ {
+ const editeng::SvxBorderLine* aLine = pItem->GetLine();
+
+ if(!aLine)
+ {
+ mbBLTR = false;
+ }
+ else
+ {
+ mbBLTR = true;
+ maBLTRColor = aLine->GetColor();
+ mnBLTRIn = aLine->GetInWidth();
+ mnBLTROut = aLine->GetOutWidth();
+ mnBLTRDis = aLine->GetDistance();
+
+ if(mnBLTRIn == 0 && mnBLTROut == 0 && mnBLTRDis == 0)
+ mbBLTR = false;
+ }
+
+ UpdateControlState();
+ }
+ break;
+ }
+
+ mbBLTR = false;
+ UpdateControlState();
+ break;
+ case SID_SCGRIDSHOW:
+ if(eState >= SFX_ITEM_DEFAULT)
+ {
+ const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
+
+ if(pItem)
+ {
+ const bool bVal = pItem->GetValue();
+
+ if(bVal)
+ mpCBXShowGrid->Check(true);
+ else
+ mpCBXShowGrid->Check(false);
+ }
+ }
+ break;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+SfxBindings* CellAppearancePropertyPanel::GetBindings()
+{
+ return mpBindings;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void CellAppearancePropertyPanel::SetStyleIcon()
+{
+ //FIXME: update for new line border possibilities
+ if(mnOut == DEF_LINE_WIDTH_0 && mnIn == 0 && mnDis == 0) //1
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle1);
+ else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == 0 && mnDis == 0) //2
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle2);
+ else if(mnOut == DEF_LINE_WIDTH_3 && mnIn == 0 && mnDis == 0) //3
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle3);
+ else if(mnOut == DEF_LINE_WIDTH_4 && mnIn == 0 && mnDis == 0) //4
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle4);
+ else if(mnOut == DEF_LINE_WIDTH_0 && mnIn == DEF_LINE_WIDTH_0 && mnDis == DEF_LINE_WIDTH_1) //5
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle5);
+ else if(mnOut == DEF_LINE_WIDTH_0 && mnIn == DEF_LINE_WIDTH_0 && mnDis == DEF_LINE_WIDTH_2) //6
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle6);
+ else if(mnOut == DEF_LINE_WIDTH_1 && mnIn == DEF_LINE_WIDTH_2 && mnDis == DEF_LINE_WIDTH_1) //7
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle7);
+ else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == DEF_LINE_WIDTH_0 && mnDis == DEF_LINE_WIDTH_2) //8
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle8);
+ else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == DEF_LINE_WIDTH_2 && mnDis == DEF_LINE_WIDTH_2) //9
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle9);
+ else
+ mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle1);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+void CellAppearancePropertyPanel::UpdateControlState()
+{
+ if(mbOuterBorder || mbInnerBorder || mbTLBR || mbBLTR)
+ {
+ mpTBLineColor->Enable();
+ mpTBLineStyle->Enable();
+
+ //set line color state
+ if( mbLineColorAvailable && !mbTLBR && !mbBLTR )
+ mpLineColorUpdater->Update(maLineColor);
+ else if( !mbLineColorAvailable && mbTLBR && !mbBLTR )
+ mpLineColorUpdater->Update(maTLBRColor);
+ else if ( !mbLineColorAvailable && !mbTLBR && mbBLTR )
+ mpLineColorUpdater->Update(maBLTRColor);
+ else if( !mbLineColorAvailable && mbTLBR && mbBLTR)
+ {
+ if( maTLBRColor == maBLTRColor)
+ mpLineColorUpdater->Update(maBLTRColor);
+ else
+ mpLineColorUpdater->Update(COL_TRANSPARENT);
+ }
+ else if( mbLineColorAvailable && mbTLBR && !mbBLTR )
+ {
+ if( maTLBRColor == maLineColor)
+ mpLineColorUpdater->Update(maLineColor);
+ else
+ mpLineColorUpdater->Update(COL_TRANSPARENT);
+ }
+ else if( mbLineColorAvailable && !mbTLBR && mbBLTR )
+ {
+ if( maBLTRColor == maLineColor)
+ mpLineColorUpdater->Update(maLineColor);
+ else
+ mpLineColorUpdater->Update(COL_TRANSPARENT);
+ }
+ else
+ mpLineColorUpdater->Update(COL_TRANSPARENT);
+
+ //set line style state
+ if( mbBorderStyleAvailable && !mbTLBR && !mbBLTR )
+ {
+ }
+ else if( !mbBorderStyleAvailable && mbTLBR && !mbBLTR )
+ {
+ mnIn = mnTLBRIn;
+ mnOut = mnTLBROut;
+ mnDis = mnTLBRDis;
+ }
+ else if ( !mbBorderStyleAvailable && !mbTLBR && mbBLTR )
+ {
+ mnIn = mnBLTRIn;
+ mnOut = mnBLTROut;
+ mnDis = mnBLTRDis;
+ }
+ else if( !mbBorderStyleAvailable && mbTLBR && mbBLTR)
+ {
+ if( mnTLBRIn == mnBLTRIn && mnTLBROut == mnBLTROut && mnTLBRDis == mnBLTRDis)
+ {
+ mnIn = mnTLBRIn;
+ mnOut = mnTLBROut;
+ mnDis = mnTLBRDis;
+ }
+ else
+ {
+ mnIn = 0;
+ mnOut = 0;
+ mnDis = 0;
+ }
+ }
+ else if( mbBorderStyleAvailable && mbTLBR && !mbBLTR )
+ {
+ if( mnTLBRIn != mnIn || mnTLBROut != mnOut || mnTLBRDis != mnDis)
+ {
+ mnIn = 0;
+ mnOut = 0;
+ mnDis = 0;
+ }
+ }
+ else if( mbBorderStyleAvailable && !mbTLBR && mbBLTR )
+ {
+ if( mnBLTRIn != mnIn || mnBLTROut != mnOut || mnBLTRDis != mnDis )
+ {
+ mnIn = 0;
+ mnOut = 0;
+ mnDis = 0;
+ }
+ }
+ else
+ {
+ mnIn = 0;
+ mnOut = 0;
+ mnDis = 0;
+ }
+ SetStyleIcon();
+ }
+ else
+ {
+ mpTBLineColor->Disable();
+ mpTBLineStyle->Disable();
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// namespace close
+
+}} // end of namespace ::sc::sidebar
+
+//////////////////////////////////////////////////////////////////////////////
+// eof