diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2014-05-18 08:38:16 +0300 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2014-05-18 14:50:58 +0300 |
commit | e4ce7d286a5039e5a65ba994bd1b168679d4a7c3 (patch) | |
tree | 5dc981f557619c068214d7945e4d9d22c77f9070 /svx | |
parent | 205801782d51861d9cee6fa342367af92bb1d845 (diff) |
fdo#46839 Convert line color picker to split button
Change-Id: I4987cc9ffba675009f2d2ae9f6b12ed4ee02fe13
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/sidebar/line/LinePropertyPanel.cxx | 2 | ||||
-rw-r--r-- | svx/source/tbxctrls/linectrl.cxx | 77 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbcontrl.cxx | 87 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbcontrl.src | 5 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbxcolorupdate.cxx | 3 |
5 files changed, 93 insertions, 81 deletions
diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx index 0f8e8c74b526..072517d42f3a 100644 --- a/svx/source/sidebar/line/LinePropertyPanel.cxx +++ b/svx/source/sidebar/line/LinePropertyPanel.cxx @@ -203,7 +203,7 @@ LinePropertyPanel::LinePropertyPanel( get(mpLBCapStyle, "linecapstyle"); const sal_uInt16 nIdColor = mpTBColor->GetItemId(UNO_SELECTCOLOR); - mpColorUpdater.reset(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_LINE_COLOR, nIdColor, mpTBColor)), + mpColorUpdater.reset(new ::svx::ToolboxButtonColorUpdater(0 /* not defined, default is transparent */, nIdColor, mpTBColor)), Initialize(); } diff --git a/svx/source/tbxctrls/linectrl.cxx b/svx/source/tbxctrls/linectrl.cxx index f86821cfa079..65563c0734dd 100644 --- a/svx/source/tbxctrls/linectrl.cxx +++ b/svx/source/tbxctrls/linectrl.cxx @@ -48,7 +48,6 @@ using namespace ::com::sun::star::lang; SFX_IMPL_TOOLBOX_CONTROL( SvxLineStyleToolBoxControl, XLineStyleItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxLineWidthToolBoxControl, XLineWidthItem ); -SFX_IMPL_TOOLBOX_CONTROL( SvxLineColorToolBoxControl, XLineColorItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxLineEndToolBoxControl, SfxBoolItem ); /************************************************************************* @@ -262,84 +261,8 @@ Window* SvxLineWidthToolBoxControl::CreateItemWindow( Window *pParent ) return( new SvxMetricField( pParent, m_xFrame ) ); } -/************************************************************************* -|* -|* SvxLineColorToolBoxControl -|* -\************************************************************************/ - -SvxLineColorToolBoxControl::SvxLineColorToolBoxControl( - sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : - SfxToolBoxControl( nSlotId, nId, rTbx ) -{ - addStatusListener( OUString( ".uno:ColorTableState" )); -} - - - -SvxLineColorToolBoxControl::~SvxLineColorToolBoxControl() -{ -} - - - -void SvxLineColorToolBoxControl::StateChanged( - - sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) - -{ - SvxColorBox* pBox = (SvxColorBox*)GetToolBox().GetItemWindow( GetId() ); - DBG_ASSERT( pBox, "Window not found" ); - - if ( nSID != SID_COLOR_TABLE ) - { - if ( eState == SFX_ITEM_DISABLED ) - { - pBox->Disable(); - pBox->SetNoSelection(); - } - else - { - pBox->Enable(); - - if ( eState == SFX_ITEM_AVAILABLE ) - { - DBG_ASSERT( pState->ISA(XLineColorItem), "wrong ItemType" ); - pBox->Update( (const XLineColorItem*) pState ); - } - else - pBox->Update( NULL ); - } - } - else - Update( pState ); -} - -void SvxLineColorToolBoxControl::Update( const SfxPoolItem* pState ) -{ - if ( pState && ( pState->ISA( SvxColorListItem ) ) ) - { - SvxColorBox* pBox = (SvxColorBox*)GetToolBox().GetItemWindow( GetId() ); - - DBG_ASSERT( pBox, "Window not found" ); - - // The list of colors (ColorTable) has changed: - ::Color aTmpColor( pBox->GetSelectEntryColor() ); - pBox->Clear(); - pBox->Fill( ( (SvxColorListItem*)pState )->GetColorList() ); - pBox->SelectEntry( aTmpColor ); - } -} - - - -Window* SvxLineColorToolBoxControl::CreateItemWindow( Window *pParent ) -{ - return new SvxColorBox( pParent, m_aCommandURL, m_xFrame ); -} - /************************************************************************* |* |* SvxLineEndWindow diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index 3bab63d04d6b..93c5981d087b 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -87,6 +87,7 @@ #include <svx/tbxcolorupdate.hxx> #include <editeng/eerdll.hxx> #include <editeng/editrids.hrc> +#include <svx/xlnclit.hxx> @@ -115,6 +116,7 @@ using namespace ::com::sun::star::lang; SFX_IMPL_TOOLBOX_CONTROL( SvxStyleToolBoxControl, SfxTemplateItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxFontNameToolBoxControl, SvxFontItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxColorToolBoxControl, SvxColorItem ); +SFX_IMPL_TOOLBOX_CONTROL( SvxLineColorToolBoxControl, XLineColorItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxFrameToolBoxControl, SvxBoxItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxFrameLineStyleToolBoxControl, SvxLineItem ); SFX_IMPL_TOOLBOX_CONTROL( SvxSimpleUndoRedoController, SfxStringItem ); @@ -1119,10 +1121,14 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand, aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_TEXTCOLOR ) ); } } - else + else if ( SID_FRAME_LINECOLOR == theSlotId ) { aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_FRAME_COLOR ) ); } + else + { + aColorSet.SetAccessibleName( SVX_RESSTR( RID_SVXSTR_LINECOLOR ) ); + } if ( pColorList.is() ) { @@ -1228,10 +1234,16 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co aColorSet.Clear(); aColorSet.addEntriesForXColorList(*pColorList); } - else if ((SFX_ITEM_DEFAULT <= eState ) && ( pState->ISA( SvxColorItem ))) + else if ( SFX_ITEM_DEFAULT <= eState ) { aColorSet.SetNoSelection(); - const Color rColor = ((const SvxColorItem*)pState)->GetValue(); + + Color rColor; + if ( pState->ISA( SvxColorItem ) ) + rColor = ((const SvxColorItem*)pState)->GetValue(); + else if ( pState->ISA( XLineColorItem ) ) + rColor = ((const XLineColorItem*)pState)->GetColorValue(); + for ( size_t i = 1; i < aColorSet.GetItemCount(); i++ ) { if ( rColor == aColorSet.GetItemColor(i) ) @@ -2464,6 +2476,75 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) } +// class SvxLineColorToolBoxControl ---------------------------------------- + +SvxLineColorToolBoxControl::SvxLineColorToolBoxControl( + sal_uInt16 nSlotId, + sal_uInt16 nId, + ToolBox& rTbx ) : + + SfxToolBoxControl( nSlotId, nId, rTbx ), + mLastColor( COL_BLACK ) +{ + rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); + addStatusListener( OUString( ".uno:XLineColor" ) ); + pBtnUpdater.reset( new ::svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ) ); +} + +SvxLineColorToolBoxControl::~SvxLineColorToolBoxControl() +{ +} + +SfxPopupWindowType SvxLineColorToolBoxControl::GetPopupWindowType() const +{ + return SFX_POPUPWINDOW_ONTIMEOUT; +} + +SfxPopupWindow* SvxLineColorToolBoxControl::CreatePopupWindow() +{ + SvxColorWindow_Impl* pColorWin = + new SvxColorWindow_Impl( + m_aCommandURL, + GetSlotId(), + m_xFrame, + SVX_RESSTR( RID_SVXSTR_LINECOLOR ), + &GetToolBox() ); + + pColorWin->StartPopupMode( &GetToolBox(), + FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_ALLOWTEAROFF|FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE ); + pColorWin->StartSelection(); + SetPopupWindow( pColorWin ); + pColorWin->SetSelectedHdl( LINK( this, SvxLineColorToolBoxControl, SelectedHdl ) ); + return pColorWin; +} + +IMPL_LINK(SvxLineColorToolBoxControl, SelectedHdl, Color*, pColor) +{ + pBtnUpdater->Update( *pColor ); + mLastColor = *pColor; + return 0; +} + +void SvxLineColorToolBoxControl::StateChanged( + + sal_uInt16 /*nSID*/, SfxItemState eState, const SfxPoolItem* /*pState*/ ) + +{ + ToolBox& rTbx = GetToolBox(); + sal_uInt16 nId = GetId(); + rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState ); + rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? TRISTATE_INDET : TRISTATE_FALSE ); +} + +void SvxLineColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/) +{ + Sequence< PropertyValue > aArgs( 1 ); + aArgs[0].Name = "XLineColor"; + aArgs[0].Value = makeAny( (sal_uInt32)( mLastColor.GetColor() )); + Dispatch( OUString( ".uno:XLineColor" ), aArgs ); +} + + // class SvxFrameToolBoxControl ------------------------------------------ diff --git a/svx/source/tbxctrls/tbcontrl.src b/svx/source/tbxctrls/tbcontrl.src index 94151bf5049a..793eb76445d7 100644 --- a/svx/source/tbxctrls/tbcontrl.src +++ b/svx/source/tbxctrls/tbcontrl.src @@ -71,6 +71,11 @@ String RID_SVXSTR_FRAME_COLOR Text [ en-US ] = "Border Color" ; }; +String RID_SVXSTR_LINECOLOR +{ + Text [ en-US ] = "Line Color" ; +}; + ComboBox RID_SVXTBX_STYLE { HelpId = HID_STYLE_LISTBOX ; diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx index 6f1b86736a49..fc12a36274a7 100644 --- a/svx/source/tbxctrls/tbxcolorupdate.cxx +++ b/svx/source/tbxctrls/tbxcolorupdate.cxx @@ -67,6 +67,9 @@ namespace svx case SID_BACKGROUND_COLOR : Update( COL_YELLOW ); break; + case SID_ATTR_LINE_COLOR: + Update( COL_BLACK ); + break; default : Update( COL_TRANSPARENT ); } |