blob: 466f4353f07c3f77f4c7227fc30cf7f612d3b6f6 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include "precompiled_sc.hxx"
#include <sfx2/sidebar/ResourceDefinitions.hrc>
#include <sfx2/sidebar/Theme.hxx>
#include <sfx2/sidebar/ControlFactory.hxx>
#include <sfx2/sidebar/Layouter.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/bolnitem.hxx>
#include <editeng/boxitem.hxx>
#include <editeng/colritem.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;
using ::sfx2::sidebar::Layouter;
#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)),
maIMGBKColorH(ScResId(IMG_BK_COLOR_H)),
maIMGLineStyle1H(ScResId(IMG_LINE_STYLE1_H)),
maIMGLineStyle2H(ScResId(IMG_LINE_STYLE2_H)),
maIMGLineStyle3H(ScResId(IMG_LINE_STYLE3_H)),
maIMGLineStyle4H(ScResId(IMG_LINE_STYLE4_H)),
maIMGLineStyle5H(ScResId(IMG_LINE_STYLE5_H)),
maIMGLineStyle6H(ScResId(IMG_LINE_STYLE6_H)),
maIMGLineStyle7H(ScResId(IMG_LINE_STYLE7_H)),
maIMGLineStyle8H(ScResId(IMG_LINE_STYLE8_H)),
maIMGLineStyle9H(ScResId(IMG_LINE_STYLE9_H)),
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();
Layouter::PrepareForLayouting(*mpFTFillColor);
Layouter::PrepareForLayouting(*mpFTCellBorder);
}
//////////////////////////////////////////////////////////////////////////////
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, GetDisplayBackground().GetColor().IsDark() ? maIMGBKColorH : 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,
const bool bIsEnabled)
{
(void)bIsEnabled;
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 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 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 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()
{
if(mnOut == DEF_LINE_WIDTH_0 && mnIn == 0 && mnDis == 0) //1
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H : maIMGLineStyle1);
else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == 0 && mnDis == 0) //2
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle2H :maIMGLineStyle2);
else if(mnOut == DEF_LINE_WIDTH_3 && mnIn == 0 && mnDis == 0) //3
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle3H :maIMGLineStyle3);
else if(mnOut == DEF_LINE_WIDTH_4 && mnIn == 0 && mnDis == 0) //4
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle4H :maIMGLineStyle4);
else if(mnOut == DEF_DOUBLE_LINE0_OUT && mnIn == DEF_DOUBLE_LINE0_IN && mnDis == DEF_DOUBLE_LINE0_DIST) //5
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle5H :maIMGLineStyle5);
else if(mnOut == DEF_DOUBLE_LINE7_OUT && mnIn == DEF_DOUBLE_LINE7_IN && mnDis == DEF_DOUBLE_LINE7_DIST) //6
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle6H :maIMGLineStyle6);
else if(mnOut == DEF_DOUBLE_LINE4_OUT && mnIn == DEF_DOUBLE_LINE4_IN && mnDis == DEF_DOUBLE_LINE4_DIST) //7
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle7H :maIMGLineStyle7);
else if(mnOut == DEF_DOUBLE_LINE9_OUT && mnIn == DEF_DOUBLE_LINE9_IN && mnDis == DEF_DOUBLE_LINE9_DIST) //8
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle8H :maIMGLineStyle8);
else if(mnOut == DEF_DOUBLE_LINE2_OUT && mnIn == DEF_DOUBLE_LINE2_IN && mnDis == DEF_DOUBLE_LINE2_DIST) //9
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle9H :maIMGLineStyle9);
else
mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H :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();
}
}
void CellAppearancePropertyPanel::Resize (void)
{
const sal_Int32 nRight (GetSizePixel().Width() - Layouter::MapWidth(*this, TB_BORDER));
Layouter::SetRight(*mpFTFillColor, nRight);
Layouter::SetRight(*mpFTCellBorder, nRight);
Layouter::SetRight(*mpCBXShowGrid, nRight);
}
}} // end of namespace ::sc::sidebar
//////////////////////////////////////////////////////////////////////////////
// eof