summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2014-05-18 08:38:16 +0300
committerMaxim Monastirsky <momonasmon@gmail.com>2014-05-18 14:50:58 +0300
commite4ce7d286a5039e5a65ba994bd1b168679d4a7c3 (patch)
tree5dc981f557619c068214d7945e4d9d22c77f9070 /svx
parent205801782d51861d9cee6fa342367af92bb1d845 (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.cxx2
-rw-r--r--svx/source/tbxctrls/linectrl.cxx77
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx87
-rw-r--r--svx/source/tbxctrls/tbcontrl.src5
-rw-r--r--svx/source/tbxctrls/tbxcolorupdate.cxx3
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 );
}