summaryrefslogtreecommitdiff
path: root/svx/source/tbxctrls
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2014-11-03 14:48:58 +0200
committerMaxim Monastirsky <momonasmon@gmail.com>2014-11-03 22:37:28 +0200
commit67340db67598b80045412ff653d399782c32f21e (patch)
treeefb01728c58f0dc825b836df6a44634651b7ab90 /svx/source/tbxctrls
parent4d447ebc44e6051fd0a208fcc0581e9d0c81d032 (diff)
Related: fdo#84844 Prepare border color status update
The Sidebar button handles also the color of diagonal lines. Change-Id: I26d75472a8c9ca482274797127994d4546b1b3e8
Diffstat (limited to 'svx/source/tbxctrls')
-rw-r--r--svx/source/tbxctrls/colorwindow.hxx4
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx185
2 files changed, 146 insertions, 43 deletions
diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx
index b7f56813304b..6cfecdfc246f 100644
--- a/svx/source/tbxctrls/colorwindow.hxx
+++ b/svx/source/tbxctrls/colorwindow.hxx
@@ -29,6 +29,8 @@
#include <svx/PaletteManager.hxx>
#include <vcl/lstbox.hxx>
+class BorderColorStatus;
+
class SvxColorWindow_Impl : public SfxPopupWindow
{
using FloatingWindow::StateChanged;
@@ -46,6 +48,7 @@ private:
Link maSelectedLink;
PaletteManager& mrPaletteManager;
+ BorderColorStatus& mrBorderColorStatus;
DECL_LINK( SelectHdl, SvxColorValueSet* );
DECL_LINK( SelectPaletteHdl, void *);
@@ -59,6 +62,7 @@ protected:
public:
SvxColorWindow_Impl( const OUString& rCommand,
PaletteManager& rPaletteManager,
+ BorderColorStatus& rBorderColorStatus,
sal_uInt16 nSlotId,
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
const OUString& rWndTitle,
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index f42b853dff65..5873589b1b93 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1126,6 +1126,7 @@ void SvxFontNameBox_Impl::Select()
SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
PaletteManager& rPaletteManager,
+ BorderColorStatus& rBorderColorStatus,
sal_uInt16 nSlotId,
const Reference< XFrame >& rFrame,
const OUString& rWndTitle,
@@ -1136,7 +1137,8 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
rFrame ),
theSlotId( nSlotId ),
maCommand( rCommand ),
- mrPaletteManager( rPaletteManager )
+ mrPaletteManager( rPaletteManager ),
+ mrBorderColorStatus( rBorderColorStatus )
{
get(mpPaletteListBox, "palette_listbox");
get(mpButtonAutoColor, "auto_color_button");
@@ -1217,6 +1219,11 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
AddStatusListener( ".uno:ColorTableState" );
AddStatusListener( maCommand );
+ if ( maCommand == ".uno:FrameLineColor" )
+ {
+ AddStatusListener( ".uno:BorderTLBR" );
+ AddStatusListener( ".uno:BorderBLTR" );
+ }
}
SvxColorWindow_Impl::~SvxColorWindow_Impl()
@@ -1230,7 +1237,7 @@ void SvxColorWindow_Impl::KeyInput( const KeyEvent& rKEvt )
SfxPopupWindow* SvxColorWindow_Impl::Clone() const
{
- return new SvxColorWindow_Impl( maCommand, mrPaletteManager, theSlotId, GetFrame(), GetText(), GetParent() );
+ return new SvxColorWindow_Impl( maCommand, mrPaletteManager, mrBorderColorStatus, theSlotId, GetFrame(), GetText(), GetParent() );
}
IMPL_LINK(SvxColorWindow_Impl, SelectHdl, SvxColorValueSet*, pColorSet)
@@ -1310,40 +1317,133 @@ bool SvxColorWindow_Impl::Close()
void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
{
- if (( SfxItemState::DISABLED != eState ) && pState )
+ if ( nSID == SID_COLOR_TABLE )
{
- if (( nSID == SID_COLOR_TABLE ) && ( pState->ISA( SvxColorListItem )))
+ if ( SfxItemState::DEFAULT == eState && mrPaletteManager.GetPalette() == 0 )
{
- if ( mrPaletteManager.GetPalette() == 0 )
- {
- mrPaletteManager.ReloadColorSet(*mpColorSet);
- mpColorSet->layoutToGivenHeight(mpColorSet->GetSizePixel().Height(), mrPaletteManager.GetColorCount());
- }
+ mrPaletteManager.ReloadColorSet(*mpColorSet);
+ mpColorSet->layoutToGivenHeight(mpColorSet->GetSizePixel().Height(), mrPaletteManager.GetColorCount());
}
- else if ( SfxItemState::DEFAULT <= eState )
- {
- mpColorSet->SetNoSelection();
+ }
+ else
+ {
+ mpColorSet->SetNoSelection();
+ Color aColor( COL_TRANSPARENT );
- Color aColor;
+ if ( nSID == SID_FRAME_LINECOLOR
+ || nSID == SID_ATTR_BORDER_DIAG_TLBR
+ || nSID == SID_ATTR_BORDER_DIAG_BLTR )
+ {
+ mrBorderColorStatus.StateChanged( nSID, eState, pState );
+ aColor = mrBorderColorStatus.GetColor();
+ }
+ else if ( SfxItemState::DEFAULT <= eState && pState )
+ {
if ( pState->ISA( SvxColorItem ) )
aColor = static_cast<const SvxColorItem*>(pState)->GetValue();
else if ( pState->ISA( XLineColorItem ) )
aColor = static_cast<const XLineColorItem*>(pState)->GetColorValue();
else if ( pState->ISA( XFillColorItem ) )
aColor = static_cast<const XFillColorItem*>(pState)->GetColorValue();
+ }
+
+ if ( aColor == COL_TRANSPARENT )
+ return;
- for ( size_t i = 1; i <= mpColorSet->GetItemCount(); ++i )
+ for ( size_t i = 1; i <= mpColorSet->GetItemCount(); ++i )
+ {
+ if ( aColor == mpColorSet->GetItemColor(i) )
{
- if ( aColor == mpColorSet->GetItemColor(i) )
- {
- mpColorSet->SelectItem(i);
- return;
- }
+ mpColorSet->SelectItem(i);
+ break;
}
}
}
}
+
+BorderColorStatus::BorderColorStatus() :
+ maColor( COL_TRANSPARENT ),
+ maTLBRColor( COL_TRANSPARENT ),
+ maBLTRColor( COL_TRANSPARENT )
+{
+}
+
+BorderColorStatus::~BorderColorStatus()
+{
+}
+
+void BorderColorStatus::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem *pState )
+{
+ if ( SfxItemState::DEFAULT <= eState && pState )
+ {
+ if ( nSID == SID_FRAME_LINECOLOR && pState->ISA( SvxColorItem ) )
+ {
+ maColor = static_cast< const SvxColorItem* >(pState)->GetValue();
+ }
+ else if ( pState->ISA( SvxLineItem ) )
+ {
+ const SvxBorderLine* pLine = static_cast< const SvxLineItem* >(pState)->GetLine();
+ Color aColor ( COL_TRANSPARENT );
+ if ( pLine )
+ aColor = pLine->GetColor();
+
+ if ( nSID == SID_ATTR_BORDER_DIAG_TLBR )
+ maTLBRColor = aColor;
+ else if ( nSID == SID_ATTR_BORDER_DIAG_BLTR )
+ maBLTRColor = aColor;
+ }
+ }
+ else if ( nSID == SID_FRAME_LINECOLOR )
+ maColor = COL_TRANSPARENT;
+ else if ( nSID == SID_ATTR_BORDER_DIAG_TLBR )
+ maTLBRColor = COL_TRANSPARENT;
+ else if ( nSID == SID_ATTR_BORDER_DIAG_BLTR )
+ maBLTRColor = COL_TRANSPARENT;
+}
+
+Color BorderColorStatus::GetColor()
+{
+ bool bHasColor = maColor != COL_TRANSPARENT;
+ bool bHasTLBRColor = maTLBRColor != COL_TRANSPARENT;
+ bool bHasBLTRColor = maBLTRColor != COL_TRANSPARENT;
+
+ if ( !bHasColor && bHasTLBRColor && !bHasBLTRColor )
+ return maTLBRColor;
+ else if ( !bHasColor && !bHasTLBRColor && bHasBLTRColor )
+ return maBLTRColor;
+ else if ( bHasColor && bHasTLBRColor && !bHasBLTRColor )
+ {
+ if ( maColor == maTLBRColor )
+ return maColor;
+ else
+ return maBLTRColor;
+ }
+ else if ( bHasColor && !bHasTLBRColor && bHasBLTRColor )
+ {
+ if ( maColor == maBLTRColor )
+ return maColor;
+ else
+ return maTLBRColor;
+ }
+ else if ( !bHasColor && bHasTLBRColor && bHasBLTRColor )
+ {
+ if ( maTLBRColor == maBLTRColor )
+ return maTLBRColor;
+ else
+ return maColor;
+ }
+ else if ( bHasColor && bHasTLBRColor && bHasBLTRColor )
+ {
+ if ( maColor == maTLBRColor && maColor == maBLTRColor )
+ return maColor;
+ else
+ return COL_TRANSPARENT;
+ }
+ return maColor;
+}
+
+
SvxFrameWindow_Impl::SvxFrameWindow_Impl( sal_uInt16 nId, const Reference< XFrame >& rFrame, vcl::Window* pParentWindow ) :
SfxPopupWindow( nId, rFrame, pParentWindow, WinBits( WB_STDPOPUP | WB_OWNERDRAWDECORATION ) ),
aFrameSet ( this, WinBits( WB_ITEMBORDER | WB_DOUBLEBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT ) ),
@@ -2357,6 +2457,8 @@ SvxColorToolBoxControl::SvxColorToolBoxControl(
case SID_FRAME_LINECOLOR:
addStatusListener( OUString( ".uno:FrameLineColor" ));
+ addStatusListener( OUString( ".uno:BorderTLBR" ));
+ addStatusListener( OUString( ".uno:BorderBLTR" ));
mPaletteManager.SetLastColor( COL_BLUE );
break;
@@ -2399,6 +2501,7 @@ SfxPopupWindow* SvxColorToolBoxControl::CreatePopupWindow()
new SvxColorWindow_Impl(
m_aCommandURL,
mPaletteManager,
+ maBorderColorStatus,
GetSlotId(),
m_xFrame,
SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ),
@@ -2435,7 +2538,8 @@ SfxPopupWindow* SvxColorToolBoxControl::CreatePopupWindow()
FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF|FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE );
pColorWin->StartSelection();
SetPopupWindow( pColorWin );
- pColorWin->SetSelectedHdl( LINK( this, SvxColorToolBoxControl, SelectedHdl ) );
+ if ( !bSidebarType )
+ pColorWin->SetSelectedHdl( LINK( this, SvxColorToolBoxControl, SelectedHdl ) );
return pColorWin;
}
@@ -2449,35 +2553,30 @@ IMPL_LINK(SvxColorToolBoxControl, SelectedHdl, Color*, pColor)
void SvxColorToolBoxControl::StateChanged(
sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
{
- ToolBox& rTbx = GetToolBox();
- sal_uInt16 nId = GetId();
- rTbx.EnableItem( nId, SfxItemState::DISABLED != eState );
- rTbx.SetItemState( nId, ( SfxItemState::DONTCARE == eState ) ? TRISTATE_INDET : TRISTATE_FALSE );
-
if ( nSID == SID_ATTR_CHAR_COLOR_EXT || nSID == SID_ATTR_CHAR_COLOR_BACKGROUND_EXT )
+ SfxToolBoxControl::StateChanged( nSID, eState, pState );
+ else if ( bSidebarType )
{
- if ( pState && SfxItemState::DONTCARE != eState )
+ Color aColor( COL_TRANSPARENT );
+
+ if ( nSID == SID_FRAME_LINECOLOR
+ || nSID == SID_ATTR_BORDER_DIAG_TLBR
+ || nSID == SID_ATTR_BORDER_DIAG_BLTR )
{
- const SfxBoolItem* pBool = static_cast< const SfxBoolItem* >( pState );
- rTbx.CheckItem( nId, pBool && pBool->GetValue() );
+ maBorderColorStatus.StateChanged( nSID, eState, pState );
+ aColor = maBorderColorStatus.GetColor();
+ }
+ else if ( SfxItemState::DEFAULT <= eState && pState )
+ {
+ if ( pState->ISA( SvxColorItem ) )
+ aColor = static_cast< const SvxColorItem* >(pState)->GetValue();
+ else if ( pState->ISA( XLineColorItem ) )
+ aColor = static_cast< const XLineColorItem* >(pState)->GetColorValue();
+ else if ( pState->ISA( XFillColorItem ) )
+ aColor = static_cast< const XFillColorItem* >(pState)->GetColorValue();
}
- }
- else if ( bSidebarType && SfxItemState::DEFAULT <= eState )
- {
- Color aColor;
- if ( pState->ISA( SvxColorItem ) )
- aColor = static_cast< const SvxColorItem* >(pState)->GetValue();
- else if ( pState->ISA( XLineColorItem ) )
- aColor = static_cast< const XLineColorItem* >(pState)->GetColorValue();
- else if ( pState->ISA( XFillColorItem ) )
- aColor = static_cast< const XFillColorItem* >(pState)->GetColorValue();
-
pBtnUpdater->Update( aColor );
}
- else if ( bSidebarType )
- {
- pBtnUpdater->Update( COL_TRANSPARENT );
- }
}
void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/)