diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2015-07-28 18:52:30 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2015-07-30 05:45:21 +0200 |
commit | fee180f13d48c1fa97a3ecde4b2067e5b0f13fc2 (patch) | |
tree | f8af7bd44844becb79a3a0ba2ddd20a80c5da884 /svx | |
parent | ddca8df5308d57142815c1b9975e4ab8d646524f (diff) |
split the line width panel into two pieces
The new LinePropertyPanelBase has no reference to SfxBindings anymore.
Change-Id: I7d1d1bb351066dca8bfeedc559048f8337e47f67
Diffstat (limited to 'svx')
-rw-r--r-- | svx/Library_svx.mk | 1 | ||||
-rw-r--r-- | svx/source/sidebar/line/LinePropertyPanel.cxx | 840 | ||||
-rw-r--r-- | svx/source/sidebar/line/LinePropertyPanel.hxx | 79 | ||||
-rw-r--r-- | svx/source/sidebar/line/LinePropertyPanelBase.cxx | 930 | ||||
-rw-r--r-- | svx/source/sidebar/line/LinePropertyPanelBase.hxx | 172 | ||||
-rw-r--r-- | svx/source/sidebar/line/LineWidthControl.cxx | 12 | ||||
-rw-r--r-- | svx/source/sidebar/line/LineWidthControl.hxx | 7 |
7 files changed, 1165 insertions, 876 deletions
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index 339b5020b988..6fcce6988b33 100644 --- a/svx/Library_svx.mk +++ b/svx/Library_svx.mk @@ -192,6 +192,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ svx/source/sidebar/shadow/ShadowPropertyPanel \ svx/source/sidebar/graphic/GraphicPropertyPanel \ svx/source/sidebar/line/LinePropertyPanel \ + svx/source/sidebar/line/LinePropertyPanelBase \ svx/source/sidebar/line/LineWidthControl \ svx/source/sidebar/line/LineWidthValueSet \ svx/source/sidebar/line/LineWidthPopup \ diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx index 59c56dad759c..c025c86f00d4 100644 --- a/svx/source/sidebar/line/LinePropertyPanel.cxx +++ b/svx/source/sidebar/line/LinePropertyPanel.cxx @@ -55,102 +55,13 @@ using namespace css; using namespace css::uno; using sfx2::sidebar::Theme; -const char UNO_SELECTWIDTH[] = ".uno:SelectWidth"; - -namespace -{ - -void FillLineEndListBox(ListBox& rListBoxStart, ListBox& rListBoxEnd, const XLineEndList& rList) -{ - const sal_uInt32 nCount(rList.Count()); - const OUString sNone(SVX_RESSTR(RID_SVXSTR_NONE)); - - rListBoxStart.SetUpdateMode(false); - rListBoxEnd.SetUpdateMode(false); - - rListBoxStart.Clear(); - rListBoxEnd.Clear(); - - // add 'none' entries - rListBoxStart.InsertEntry(sNone); - rListBoxEnd.InsertEntry(sNone); - - for(sal_uInt32 i(0); i < nCount; i++) - { - XLineEndEntry* pEntry = rList.GetLineEnd(i); - const Bitmap aBitmap = const_cast< XLineEndList& >(rList).GetUiBitmap(i); - - if(!aBitmap.IsEmpty()) - { - Bitmap aCopyStart(aBitmap); - Bitmap aCopyEnd(aBitmap); - - const Size aBmpSize(aCopyStart.GetSizePixel()); - const Rectangle aCropRectStart(Point(), Size(aBmpSize.Width() / 2, aBmpSize.Height())); - const Rectangle aCropRectEnd(Point(aBmpSize.Width() / 2, 0), Size(aBmpSize.Width() / 2, aBmpSize.Height())); - - aCopyStart.Crop(aCropRectStart); - rListBoxStart.InsertEntry( - pEntry->GetName(), - Image(aCopyStart)); - - aCopyEnd.Crop(aCropRectEnd); - rListBoxEnd.InsertEntry( - pEntry->GetName(), - Image(aCopyEnd)); - } - else - { - rListBoxStart.InsertEntry(pEntry->GetName()); - rListBoxEnd.InsertEntry(pEntry->GetName()); - } - } - - rListBoxStart.SetUpdateMode(true); - rListBoxEnd.SetUpdateMode(true); -} - -void FillLineStyleListBox(ListBox& rListBox, const XDashList& rList) -{ - const sal_uInt32 nCount(rList.Count()); - rListBox.SetUpdateMode(false); - - rListBox.Clear(); - - // entry for 'none' - rListBox.InsertEntry(rList.GetStringForUiNoLine()); - - // entry for solid line - rListBox.InsertEntry(rList.GetStringForUiSolidLine(), - Image( rList.GetBitmapForUISolidLine())); - - for(sal_uInt32 i(0); i < nCount; i++) - { - XDashEntry* pEntry = rList.GetDash(i); - const Bitmap aBitmap = const_cast< XDashList& >(rList).GetUiBitmap(i); - - if(!aBitmap.IsEmpty()) - { - rListBox.InsertEntry(pEntry->GetName(), Image(aBitmap)); - } - else - { - rListBox.InsertEntry(pEntry->GetName()); - } - } - - rListBox.SetUpdateMode(true); -} - -} // end of anonymous namespace - namespace svx { namespace sidebar { LinePropertyPanel::LinePropertyPanel( vcl::Window* pParent, const uno::Reference<frame::XFrame>& rxFrame, SfxBindings* pBindings) -: PanelLayout(pParent, "LinePropertyPanel", "svx/ui/sidebarline.ui", rxFrame), +: LinePropertyPanelBase(pParent, rxFrame), maStyleControl(SID_ATTR_LINE_STYLE, *pBindings, *this), maDashControl (SID_ATTR_LINE_DASH, *pBindings, *this), maWidthControl(SID_ATTR_LINE_WIDTH, *pBindings, *this), @@ -161,36 +72,8 @@ LinePropertyPanel::LinePropertyPanel( maTransControl(SID_ATTR_LINE_TRANSPARENCE, *pBindings, *this), maEdgeStyle(SID_ATTR_LINE_JOINT, *pBindings, *this), maCapStyle(SID_ATTR_LINE_CAP, *pBindings, *this), - mpStyleItem(), - mpDashItem(), - mnTrans(0), - meMapUnit(SFX_MAPUNIT_MM), - mnWidthCoreValue(0), - mpStartItem(), - mpEndItem(), - maLineWidthPopup(this, ::boost::bind(&LinePropertyPanel::CreateLineWidthPopupControl, this, _1)), - maIMGNone(SVX_RES(IMG_NONE_ICON)), - mpIMGWidthIcon(), - mxFrame(rxFrame), - mpBindings(pBindings), - mbWidthValuable(true) + mpBindings(pBindings) { - get(mpFTWidth, "widthlabel"); - get(mpTBWidth, "width"); - get(mpFTStyle, "stylelabel"); - get(mpLBStyle, "linestyle"); - get(mpFTTransparency, "translabel"); - get(mpMFTransparent, "linetransparency"); - get(mpFTArrow, "arrowlabel"); - get(mpLBStart, "beginarrowstyle"); - get(mpLBEnd, "endarrowstyle"); - get(mpFTEdgeStyle, "cornerlabel"); - get(mpLBEdgeStyle, "edgestyle"); - get(mpFTCapStyle, "caplabel"); - get(mpLBCapStyle, "linecapstyle"); - get(mpGridLineProps, "lineproperties"); - get(mpBoxArrowProps, "arrowproperties"); - Initialize(); } @@ -201,24 +84,6 @@ LinePropertyPanel::~LinePropertyPanel() void LinePropertyPanel::dispose() { - mpFTWidth.clear(); - mpTBWidth.clear(); - mpFTStyle.clear(); - mpLBStyle.clear(); - mpFTTransparency.clear(); - mpMFTransparent.clear(); - mpFTArrow.clear(); - mpLBStart.clear(); - mpLBEnd.clear(); - mpFTEdgeStyle.clear(); - mpLBEdgeStyle.clear(); - mpFTCapStyle.clear(); - mpLBCapStyle.clear(); - mpGridLineProps.clear(); - mpBoxArrowProps.clear(); - - - maLineWidthPopup.dispose(); maStyleControl.dispose(); maDashControl.dispose(); maWidthControl.dispose(); @@ -230,68 +95,11 @@ void LinePropertyPanel::dispose() maEdgeStyle.dispose(); maCapStyle.dispose(); - PanelLayout::dispose(); + LinePropertyPanelBase::dispose(); } void LinePropertyPanel::Initialize() { - mpIMGWidthIcon.reset(new Image[8]); - mpIMGWidthIcon[0] = Image(SVX_RES(IMG_WIDTH1_ICON)); - mpIMGWidthIcon[1] = Image(SVX_RES(IMG_WIDTH2_ICON)); - mpIMGWidthIcon[2] = Image(SVX_RES(IMG_WIDTH3_ICON)); - mpIMGWidthIcon[3] = Image(SVX_RES(IMG_WIDTH4_ICON)); - mpIMGWidthIcon[4] = Image(SVX_RES(IMG_WIDTH5_ICON)); - mpIMGWidthIcon[5] = Image(SVX_RES(IMG_WIDTH6_ICON)); - mpIMGWidthIcon[6] = Image(SVX_RES(IMG_WIDTH7_ICON)); - mpIMGWidthIcon[7] = Image(SVX_RES(IMG_WIDTH8_ICON)); - - meMapUnit = maWidthControl.GetCoreMetric(); - - FillLineStyleList(); - SelectLineStyle(); - Link<> aLink = LINK( this, LinePropertyPanel, ChangeLineStyleHdl ); - mpLBStyle->SetSelectHdl( aLink ); - mpLBStyle->SetAccessibleName(OUString( "Style")); - mpLBStyle->AdaptDropDownLineCountToMaximum(); - - const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); - mpTBWidth->SetItemImage(nIdWidth, mpIMGWidthIcon[0]); - mpTBWidth->SetItemBits( nIdWidth, mpTBWidth->GetItemBits( nIdWidth ) | ToolBoxItemBits::DROPDOWNONLY ); - Link<ToolBox *, void> aLink2 = LINK(this, LinePropertyPanel, ToolboxWidthSelectHdl); - mpTBWidth->SetDropdownClickHdl ( aLink2 ); - mpTBWidth->SetSelectHdl ( aLink2 ); - - FillLineEndList(); - SelectEndStyle(true); - SelectEndStyle(false); - aLink = LINK( this, LinePropertyPanel, ChangeStartHdl ); - mpLBStart->SetSelectHdl( aLink ); - mpLBStart->SetAccessibleName(OUString("Beginning Style")); //wj acc - mpLBStart->AdaptDropDownLineCountToMaximum(); - aLink = LINK( this, LinePropertyPanel, ChangeEndHdl ); - mpLBEnd->SetSelectHdl( aLink ); - mpLBEnd->SetAccessibleName(OUString("Ending Style")); //wj acc - mpLBEnd->AdaptDropDownLineCountToMaximum(); - - aLink = LINK(this, LinePropertyPanel, ChangeTransparentHdl); - mpMFTransparent->SetModifyHdl(aLink); - mpMFTransparent->SetAccessibleName(OUString("Transparency")); //wj acc - - mpTBWidth->SetAccessibleRelationLabeledBy(mpFTWidth); - mpLBStyle->SetAccessibleRelationLabeledBy(mpFTStyle); - mpMFTransparent->SetAccessibleRelationLabeledBy(mpFTTransparency); - mpLBStart->SetAccessibleRelationLabeledBy(mpFTArrow); - mpLBEnd->SetAccessibleRelationLabeledBy(mpLBEnd); - - aLink = LINK( this, LinePropertyPanel, ChangeEdgeStyleHdl ); - mpLBEdgeStyle->SetSelectHdl( aLink ); - mpLBEdgeStyle->SetAccessibleName(OUString("Corner Style")); - - aLink = LINK( this, LinePropertyPanel, ChangeCapStyleHdl ); - mpLBCapStyle->SetSelectHdl( aLink ); - mpLBCapStyle->SetAccessibleName(OUString("Cap Style")); - - ActivateControls(); } VclPtr<vcl::Window> LinePropertyPanel::Create ( @@ -309,10 +117,6 @@ VclPtr<vcl::Window> LinePropertyPanel::Create ( return VclPtr<LinePropertyPanel>::Create(pParent, rxFrame, pBindings); } -void LinePropertyPanel::DataChanged(const DataChangedEvent& /*rEvent*/) -{ -} - void LinePropertyPanel::NotifyItemUpdate( sal_uInt16 nSID, SfxItemState eState, @@ -320,174 +124,44 @@ void LinePropertyPanel::NotifyItemUpdate( const bool /*bIsEnabled*/) { const bool bDisabled(SfxItemState::DISABLED == eState); + const bool bSetOrDefault = eState >= SfxItemState::DEFAULT; switch(nSID) { case SID_ATTR_LINE_DASH: + { + const XLineDashItem* pItem = dynamic_cast<const XLineDashItem*>(pState); + updateLineDash(bDisabled, bSetOrDefault, pItem); + } + break; case SID_ATTR_LINE_STYLE: { - if(bDisabled) - { - mpFTStyle->Disable(); - mpLBStyle->Disable(); - } - else - { - mpFTStyle->Enable(); - mpLBStyle->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - if(nSID == SID_ATTR_LINE_STYLE) - { - const XLineStyleItem* pItem = dynamic_cast< const XLineStyleItem* >(pState); - - if(pItem) - { - mpStyleItem.reset(pState ? static_cast<XLineStyleItem*>(pItem->Clone()) : 0); - } - } - else // if(nSID == SID_ATTR_LINE_DASH) - { - const XLineDashItem* pItem = dynamic_cast< const XLineDashItem* >(pState); - - if(pItem) - { - mpDashItem.reset(pState ? static_cast<XLineDashItem*>(pItem->Clone()) : 0); - } - } - } - else - { - if(nSID == SID_ATTR_LINE_STYLE) - { - mpStyleItem.reset(0); - } - else - { - mpDashItem.reset(0); - } - } - - SelectLineStyle(); - break; + const XLineStyleItem* pItem = dynamic_cast<const XLineStyleItem*>(pState); + updateLineStyle(bDisabled, bSetOrDefault, pItem); } + break; case SID_ATTR_LINE_TRANSPARENCE: { - if(bDisabled) - { - mpFTTransparency->Disable(); - mpMFTransparent->Disable(); - } - else - { - mpFTTransparency->Enable(); - mpMFTransparent->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - const XLineTransparenceItem* pItem = dynamic_cast< const XLineTransparenceItem* >(pState); - - if(pItem) - { - mnTrans = pItem->GetValue(); - mpMFTransparent->SetValue(mnTrans); - break; - } - } - - mpMFTransparent->SetValue(0);//add - mpMFTransparent->SetText(OUString()); + const XLineTransparenceItem* pItem = dynamic_cast<const XLineTransparenceItem*>(pState); + updateLineTransparence(bDisabled, bSetOrDefault, pItem); break; } case SID_ATTR_LINE_WIDTH: { - if(bDisabled) - { - mpTBWidth->Disable(); - mpFTWidth->Disable(); - } - else - { - mpTBWidth->Enable(); - mpFTWidth->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - const XLineWidthItem* pItem = dynamic_cast< const XLineWidthItem* >(pState); - - if(pItem) - { - mnWidthCoreValue = pItem->GetValue(); - mbWidthValuable = true; - SetWidthIcon(); - break; - } - } - - mbWidthValuable = false; - SetWidthIcon(); + const XLineWidthItem* pItem = dynamic_cast<const XLineWidthItem*>(pState); + updateLineWidth(bDisabled, bSetOrDefault, pItem); break; } case SID_ATTR_LINE_START: { - if(bDisabled) - { - mpFTArrow->Disable(); - mpLBStart->Disable(); - } - else - { - mpFTArrow->Enable(); - mpLBStart->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - const XLineStartItem* pItem = dynamic_cast< const XLineStartItem* >(pState); - - if(pItem) - { - mpStartItem.reset(static_cast<XLineStartItem*>(pItem->Clone())); - SelectEndStyle(true); - break; - } - } - - mpStartItem.reset(0); - SelectEndStyle(true); + const XLineStartItem* pItem = dynamic_cast<const XLineStartItem*>(pState); + updateLineStart(bDisabled, bSetOrDefault, pItem); break; } case SID_ATTR_LINE_END: { - if(bDisabled) - { - mpFTArrow->Disable(); - mpLBEnd->Disable(); - } - else - { - mpFTArrow->Enable(); - mpLBEnd->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - const XLineEndItem* pItem = dynamic_cast< const XLineEndItem* >(pState); - - if(pItem) - { - mpEndItem.reset(static_cast<XLineEndItem*>(pItem->Clone())); - SelectEndStyle(false); - break; - } - } - - mpEndItem.reset(0); - SelectEndStyle(false); + const XLineEndItem* pItem = dynamic_cast<const XLineEndItem*>(pState); + updateLineEnd(bDisabled, bSetOrDefault, pItem); break; } case SID_LINEEND_LIST: @@ -505,492 +179,58 @@ void LinePropertyPanel::NotifyItemUpdate( } case SID_ATTR_LINE_JOINT: { - if(bDisabled) - { - mpLBEdgeStyle->Disable(); - mpFTEdgeStyle->Disable(); - } - else - { - mpLBEdgeStyle->Enable(); - mpFTEdgeStyle->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - const XLineJointItem* pItem = dynamic_cast< const XLineJointItem* >(pState); - - if(pItem) - { - sal_Int32 nEntryPos(0); - - switch(pItem->GetValue()) - { - case drawing::LineJoint_MIDDLE: - case drawing::LineJoint_ROUND: - { - nEntryPos = 1; - break; - } - case drawing::LineJoint_NONE: - { - nEntryPos = 2; - break; - } - case drawing::LineJoint_MITER: - { - nEntryPos = 3; - break; - } - case drawing::LineJoint_BEVEL: - { - nEntryPos = 4; - break; - } - - default: - break; - } - - if(nEntryPos) - { - mpLBEdgeStyle->SelectEntryPos(nEntryPos - 1); - break; - } - } - } - - mpLBEdgeStyle->SetNoSelection(); + const XLineJointItem* pItem = dynamic_cast<const XLineJointItem*>(pState); + updateLineJoint(bDisabled, bSetOrDefault, pItem); break; } case SID_ATTR_LINE_CAP: { - if(bDisabled) - { - mpLBCapStyle->Disable(); - mpFTCapStyle->Disable(); - } - else - { - mpLBCapStyle->Enable(); - mpLBCapStyle->Enable(); - } - - if(eState >= SfxItemState::DEFAULT) - { - const XLineCapItem* pItem = dynamic_cast< const XLineCapItem* >(pState); - - if(pItem) - { - sal_Int32 nEntryPos(0); - - switch(pItem->GetValue()) - { - case drawing::LineCap_BUTT: - { - nEntryPos = 1; - break; - } - case drawing::LineCap_ROUND: - { - nEntryPos = 2; - break; - } - case drawing::LineCap_SQUARE: - { - nEntryPos = 3; - break; - } - - default: - break; - } - - if(nEntryPos) - { - mpLBCapStyle->SelectEntryPos(nEntryPos - 1); - break; - } - } - } - - mpLBCapStyle->SetNoSelection(); + const XLineCapItem* pItem = dynamic_cast<const XLineCapItem*>(pState); + updateLineCap(bDisabled, bSetOrDefault, pItem); break; } } ActivateControls(); } -IMPL_LINK_NOARG(LinePropertyPanel, ChangeLineStyleHdl) +void LinePropertyPanel::setLineStyle(const XLineStyleItem& rItem) { - const sal_Int32 nPos(mpLBStyle->GetSelectEntryPos()); - - if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBStyle->IsValueChangedFromSaved()) - { - if(0 == nPos) - { - // drawing::LineStyle_NONE - const XLineStyleItem aItem(drawing::LineStyle_NONE); - - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItem, 0L); - } - else if(1 == nPos) - { - // drawing::LineStyle_SOLID - const XLineStyleItem aItem(drawing::LineStyle_SOLID); - - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItem, 0L); - } - else if (mxLineStyleList.is() && mxLineStyleList->Count() > (long)(nPos - 2)) - { - // drawing::LineStyle_DASH - const XLineStyleItem aItemA(drawing::LineStyle_DASH); - const XDashEntry* pDashEntry = mxLineStyleList->GetDash(nPos - 2); - OSL_ENSURE(pDashEntry, "OOps, got empty XDash from XDashList (!)"); - const XLineDashItem aItemB( - pDashEntry ? pDashEntry->GetName() : OUString(), - pDashEntry ? pDashEntry->GetDash() : XDash()); - - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItemA, 0L); - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_DASH, SfxCallMode::RECORD, &aItemB, 0L); - } - } - ActivateControls(); - return 0; + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &rItem, 0L); } -IMPL_LINK_NOARG(LinePropertyPanel, ChangeStartHdl) +void LinePropertyPanel::setLineDash(const XLineDashItem& rItem) { - sal_Int32 nPos = mpLBStart->GetSelectEntryPos(); - if( nPos != LISTBOX_ENTRY_NOTFOUND && mpLBStart->IsValueChangedFromSaved() ) - { - std::unique_ptr<XLineStartItem> pItem; - if( nPos == 0 ) - pItem.reset(new XLineStartItem()); - else if( mxLineEndList.is() && mxLineEndList->Count() > (long) ( nPos - 1 ) ) - pItem.reset(new XLineStartItem( mpLBStart->GetSelectEntry(),mxLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() )); - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SfxCallMode::RECORD, pItem.get(), 0L); - } - return 0; -} - -IMPL_LINK_NOARG(LinePropertyPanel, ChangeEndHdl) -{ - sal_Int32 nPos = mpLBEnd->GetSelectEntryPos(); - if( nPos != LISTBOX_ENTRY_NOTFOUND && mpLBEnd->IsValueChangedFromSaved() ) - { - std::unique_ptr<XLineEndItem> pItem; - if( nPos == 0 ) - pItem.reset(new XLineEndItem()); - else if( mxLineEndList.is() && mxLineEndList->Count() > (long) ( nPos - 1 ) ) - pItem.reset(new XLineEndItem( mpLBEnd->GetSelectEntry(), mxLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() )); - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SfxCallMode::RECORD, pItem.get(), 0L); - } - return 0; -} - -IMPL_LINK_NOARG(LinePropertyPanel, ChangeEdgeStyleHdl) -{ - const sal_Int32 nPos(mpLBEdgeStyle->GetSelectEntryPos()); - - if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBEdgeStyle->IsValueChangedFromSaved()) - { - std::unique_ptr<XLineJointItem> pItem; - - switch(nPos) - { - case 0: // rounded - { - pItem.reset(new XLineJointItem(drawing::LineJoint_ROUND)); - break; - } - case 1: // none - { - pItem.reset(new XLineJointItem(drawing::LineJoint_NONE)); - break; - } - case 2: // mitered - { - pItem.reset(new XLineJointItem(drawing::LineJoint_MITER)); - break; - } - case 3: // beveled - { - pItem.reset(new XLineJointItem(drawing::LineJoint_BEVEL)); - break; - } - } - - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_JOINT, SfxCallMode::RECORD, pItem.get(), 0L); - } - return 0; -} - -IMPL_LINK_NOARG(LinePropertyPanel, ChangeCapStyleHdl) -{ - const sal_Int32 nPos(mpLBCapStyle->GetSelectEntryPos()); - - if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBCapStyle->IsValueChangedFromSaved()) - { - std::unique_ptr<XLineCapItem> pItem; - - switch(nPos) - { - case 0: // flat - { - pItem.reset(new XLineCapItem(drawing::LineCap_BUTT)); - break; - } - case 1: // round - { - pItem.reset(new XLineCapItem(drawing::LineCap_ROUND)); - break; - } - case 2: // square - { - pItem.reset(new XLineCapItem(drawing::LineCap_SQUARE)); - break; - } - } - - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_CAP, SfxCallMode::RECORD, pItem.get(), 0L); - } - return 0; -} - -IMPL_LINK_TYPED(LinePropertyPanel, ToolboxWidthSelectHdl,ToolBox*, pToolBox, void) -{ - if (pToolBox->GetItemCommand(pToolBox->GetCurItemId()) == UNO_SELECTWIDTH) - { - maLineWidthPopup.SetWidthSelect(mnWidthCoreValue, mbWidthValuable, meMapUnit); - maLineWidthPopup.Show(*pToolBox); - } -} - -IMPL_LINK_NOARG( LinePropertyPanel, ChangeTransparentHdl ) -{ - sal_uInt16 nVal = (sal_uInt16)mpMFTransparent->GetValue(); - XLineTransparenceItem aItem( nVal ); - - GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &aItem, 0L); - return 0L; -} - -VclPtr<PopupControl> LinePropertyPanel::CreateLineWidthPopupControl (PopupContainer* pParent) -{ - return VclPtrInstance<LineWidthControl>(pParent, *this); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_DASH, SfxCallMode::RECORD, &rItem, 0L); } -void LinePropertyPanel::ActivateControls() +void LinePropertyPanel::setLineEndStyle(const XLineEndItem* pItem) { - const sal_Int32 nPos(mpLBStyle->GetSelectEntryPos()); - bool bLineStyle( nPos != 0 ); - - mpGridLineProps->Enable( bLineStyle ); - mpBoxArrowProps->Enable( bLineStyle ); -} - -void LinePropertyPanel::EndLineWidthPopupMode() -{ - maLineWidthPopup.Hide(); -} - -void LinePropertyPanel::SetWidthIcon(int n) -{ - const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); - if (n == 0) - mpTBWidth->SetItemImage( nIdWidth, maIMGNone); - else - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[n-1]); -} - -void LinePropertyPanel::SetWidthIcon() -{ - if(!mbWidthValuable) - { - const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); - mpTBWidth->SetItemImage(nIdWidth, maIMGNone); - return; - } - - long nVal = LogicToLogic(mnWidthCoreValue * 10,(MapUnit)meMapUnit , MAP_POINT); - const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); - - if(nVal <= 6) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[0]); - else if(nVal > 6 && nVal <= 9) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[1]); - else if(nVal > 9 && nVal <= 12) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[2]); - else if(nVal > 12 && nVal <= 19) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[3]); - else if(nVal > 19 && nVal <= 26) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[4]); - else if(nVal > 26 && nVal <= 37) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[5]); - else if(nVal > 37 && nVal <=52) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[6]); - else if(nVal > 52) - mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[7]); - + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SfxCallMode::RECORD, pItem, 0L); } -void LinePropertyPanel::SetWidth(long nWidth) +void LinePropertyPanel::setLineStartStyle(const XLineStartItem* pItem) { - mnWidthCoreValue = nWidth; - mbWidthValuable = true; + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINEEND_STYLE, SfxCallMode::RECORD, pItem, 0L); } -void LinePropertyPanel::FillLineEndList() +void LinePropertyPanel::setLineJoint(const XLineJointItem* pItem) { - SfxObjectShell* pSh = SfxObjectShell::Current(); - if ( pSh && pSh->GetItem( SID_LINEEND_LIST ) ) - { - mpLBStart->Enable(); - SvxLineEndListItem aItem( *static_cast<const SvxLineEndListItem*>(pSh->GetItem( SID_LINEEND_LIST ) ) ); - mxLineEndList = aItem.GetLineEndList(); - - if (mxLineEndList.is()) - { - FillLineEndListBox(*mpLBStart, *mpLBEnd, *mxLineEndList); - } - - mpLBStart->SelectEntryPos(0); - mpLBEnd->SelectEntryPos(0); - } - else - { - mpLBStart->Disable(); - mpLBEnd->Disable(); - } + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_JOINT, SfxCallMode::RECORD, pItem, 0L); } -void LinePropertyPanel::FillLineStyleList() +void LinePropertyPanel::setLineCap(const XLineCapItem* pItem) { - SfxObjectShell* pSh = SfxObjectShell::Current(); - if ( pSh && pSh->GetItem( SID_DASH_LIST ) ) - { - mpLBStyle->Enable(); - SvxDashListItem aItem( *static_cast<const SvxDashListItem*>(pSh->GetItem( SID_DASH_LIST ) ) ); - mxLineStyleList = aItem.GetDashList(); - - if (mxLineStyleList.is()) - { - FillLineStyleListBox(*mpLBStyle, *mxLineStyleList); - } - - mpLBStyle->SelectEntryPos(0); - } - else - { - mpLBStyle->Disable(); - } + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_CAP, SfxCallMode::RECORD, pItem, 0L); } -void LinePropertyPanel::SelectLineStyle() +void LinePropertyPanel::setLineTransparency(const XLineTransparenceItem& rItem) { - if( !mpStyleItem.get() || !mpDashItem.get() ) - { - mpLBStyle->SetNoSelection(); - mpLBStyle->Disable(); - return; - } - - const drawing::LineStyle eXLS(mpStyleItem ? (drawing::LineStyle)mpStyleItem->GetValue() : drawing::LineStyle_NONE); - bool bSelected(false); - - switch(eXLS) - { - case drawing::LineStyle_NONE: - break; - case drawing::LineStyle_SOLID: - mpLBStyle->SelectEntryPos(1); - bSelected = true; - break; - default: - if(mpDashItem && mxLineStyleList.is()) - { - const XDash& rDash = mpDashItem->GetDashValue(); - for(sal_Int32 a(0);!bSelected && a < mxLineStyleList->Count(); a++) - { - XDashEntry* pEntry = mxLineStyleList->GetDash(a); - const XDash& rEntry = pEntry->GetDash(); - if(rDash == rEntry) - { - mpLBStyle->SelectEntryPos(a + 2); - bSelected = true; - } - } - } - break; - } - - if(!bSelected) - mpLBStyle->SelectEntryPos( 0 ); + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_STYLE, SfxCallMode::RECORD, &rItem, 0L); } -void LinePropertyPanel::SelectEndStyle(bool bStart) +void LinePropertyPanel::setLineWidth(const XLineWidthItem& rItem) { - bool bSelected(false); - - if(bStart) - { - if( !mpStartItem.get() ) - { - mpLBStart->SetNoSelection(); - mpLBStart->Disable(); - return; - } - - if (mpStartItem && mxLineEndList.is()) - { - const basegfx::B2DPolyPolygon& rItemPolygon = mpStartItem->GetLineStartValue(); - for(sal_Int32 a(0);!bSelected && a < mxLineEndList->Count(); a++) - { - XLineEndEntry* pEntry = mxLineEndList->GetLineEnd(a); - const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd(); - if(rItemPolygon == rEntryPolygon) - { - mpLBStart->SelectEntryPos(a + 1); - bSelected = true; - } - } - } - - if(!bSelected) - { - mpLBStart->SelectEntryPos( 0 ); - } - } - else - { - if( !mpEndItem.get() ) - { - mpLBEnd->SetNoSelection(); - mpLBEnd->Disable(); - return; - } - - if (mpEndItem && mxLineEndList.is()) - { - const basegfx::B2DPolyPolygon& rItemPolygon = mpEndItem->GetLineEndValue(); - for(sal_Int32 a(0);!bSelected && a < mxLineEndList->Count(); a++) - { - XLineEndEntry* pEntry = mxLineEndList->GetLineEnd(a); - const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd(); - if(rItemPolygon == rEntryPolygon) - { - mpLBEnd->SelectEntryPos(a + 1); - bSelected = true; - } - } - } - - if(!bSelected) - { - mpLBEnd->SelectEntryPos( 0 ); - } - } + GetBindings()->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SfxCallMode::RECORD, &rItem, 0L); } }} // end of namespace svx::sidebar diff --git a/svx/source/sidebar/line/LinePropertyPanel.hxx b/svx/source/sidebar/line/LinePropertyPanel.hxx index cfbcd4a961b4..6a94423cd4cd 100644 --- a/svx/source/sidebar/line/LinePropertyPanel.hxx +++ b/svx/source/sidebar/line/LinePropertyPanel.hxx @@ -30,6 +30,7 @@ #include <svx/sidebar/PanelLayout.hxx> #include <svx/xtable.hxx> #include "LineWidthPopup.hxx" +#include "LinePropertyPanelBase.hxx" class XLineStyleItem; @@ -57,7 +58,7 @@ namespace sidebar class PopupContainer; class LineWidthControl; -class LinePropertyPanel : public PanelLayout, +class LinePropertyPanel : public LinePropertyPanelBase, public sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface { public: @@ -69,9 +70,6 @@ public: const css::uno::Reference<css::frame::XFrame>& rxFrame, SfxBindings* pBindings); - virtual void DataChanged( - const DataChangedEvent& rEvent) SAL_OVERRIDE; - virtual void NotifyItemUpdate( const sal_uInt16 nSId, const SfxItemState eState, @@ -80,36 +78,25 @@ public: SfxBindings* GetBindings() { return mpBindings;} - void SetWidth(long nWidth); - void SetWidthIcon(int n); - void SetWidthIcon(); - - void EndLineWidthPopupMode(); - // constructor/destuctor LinePropertyPanel( vcl::Window* pParent, const css::uno::Reference<css::frame::XFrame>& rxFrame, SfxBindings* pBindings); -private: - //ui controls - VclPtr<FixedText> mpFTWidth; - VclPtr<ToolBox> mpTBWidth; - VclPtr<FixedText> mpFTStyle; - VclPtr<ListBox> mpLBStyle; - VclPtr<FixedText> mpFTTransparency; - VclPtr<MetricField> mpMFTransparent; - VclPtr<FixedText> mpFTArrow; - VclPtr<ListBox> mpLBStart; - VclPtr<ListBox> mpLBEnd; - VclPtr<FixedText> mpFTEdgeStyle; - VclPtr<ListBox> mpLBEdgeStyle; - VclPtr<FixedText> mpFTCapStyle; - VclPtr<ListBox> mpLBCapStyle; - VclPtr<VclGrid> mpGridLineProps; - VclPtr<VclVBox> mpBoxArrowProps; + virtual void setLineWidth(const XLineWidthItem& rItem) SAL_OVERRIDE; +protected: + + virtual void setLineStyle(const XLineStyleItem& rItem) SAL_OVERRIDE; + virtual void setLineDash(const XLineDashItem& rItem) SAL_OVERRIDE; + virtual void setLineEndStyle(const XLineEndItem* pItem) SAL_OVERRIDE; + virtual void setLineStartStyle(const XLineStartItem* pItem) SAL_OVERRIDE; + virtual void setLineTransparency(const XLineTransparenceItem& rItem) SAL_OVERRIDE; + virtual void setLineJoint(const XLineJointItem* pItem) SAL_OVERRIDE; + virtual void setLineCap(const XLineCapItem* pItem) SAL_OVERRIDE; + +private: //ControllerItem sfx2::sidebar::ControllerItem maStyleControl; sfx2::sidebar::ControllerItem maDashControl; @@ -122,48 +109,10 @@ private: sfx2::sidebar::ControllerItem maEdgeStyle; sfx2::sidebar::ControllerItem maCapStyle; - std::unique_ptr<XLineStyleItem> mpStyleItem; - std::unique_ptr<XLineDashItem> mpDashItem; - - sal_uInt16 mnTrans; - SfxMapUnit meMapUnit; - sal_Int32 mnWidthCoreValue; - XLineEndListRef mxLineEndList; - XDashListRef mxLineStyleList; - std::unique_ptr<XLineStartItem> mpStartItem; - std::unique_ptr<XLineEndItem> mpEndItem; - - //popup windows - LineWidthPopup maLineWidthPopup; - - // images from resource - Image maIMGNone; - - // multi-images - std::unique_ptr<Image[]> mpIMGWidthIcon; - css::uno::Reference<css::frame::XFrame> mxFrame; SfxBindings* mpBindings; - /// bitfield - bool mbWidthValuable : 1; - void Initialize(); - void FillLineEndList(); - void FillLineStyleList(); - void SelectEndStyle(bool bStart); - void SelectLineStyle(); - void ActivateControls(); - - DECL_LINK(ChangeLineStyleHdl, void*); - DECL_LINK_TYPED(ToolboxWidthSelectHdl, ToolBox*, void); - DECL_LINK(ChangeTransparentHdl , void *); - DECL_LINK(ChangeStartHdl, void *); - DECL_LINK(ChangeEndHdl, void *); - DECL_LINK(ChangeEdgeStyleHdl, void *); - DECL_LINK(ChangeCapStyleHdl, void *); - - VclPtr<PopupControl> CreateLineWidthPopupControl (PopupContainer* pParent); }; } } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.cxx b/svx/source/sidebar/line/LinePropertyPanelBase.cxx new file mode 100644 index 000000000000..14ad854b5609 --- /dev/null +++ b/svx/source/sidebar/line/LinePropertyPanelBase.cxx @@ -0,0 +1,930 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 <LinePropertyPanelBase.hxx> +#include <LinePropertyPanel.hrc> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <sfx2/objsh.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <svx/xtable.hxx> +#include <svx/xdash.hxx> +#include <svx/drawitem.hxx> +#include <svx/svxitems.hrc> +#include <svtools/valueset.hxx> +#include <unotools/pathoptions.hxx> +#include <unotools/viewoptions.hxx> +#include <comphelper/processfactory.hxx> +#include <i18nlangtag/mslangid.hxx> +#include <svx/xlineit0.hxx> +#include <svx/xlndsit.hxx> +#include <vcl/svapp.hxx> +#include <svx/xlnwtit.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/toolbox.hxx> +#include <svx/xlntrit.hxx> +#include <svx/xlnstit.hxx> +#include <svx/xlnedit.hxx> +#include <svx/xlncapit.hxx> +#include <svx/xlinjoit.hxx> +#include "svx/sidebar/PopupContainer.hxx" +#include "svx/sidebar/PopupControl.hxx" +#include "LineWidthControl.hxx" +#include <boost/bind.hpp> + +using namespace css; +using namespace css::uno; +using sfx2::sidebar::Theme; + +const char UNO_SELECTWIDTH[] = ".uno:SelectWidth"; + +namespace +{ + +void FillLineEndListBox(ListBox& rListBoxStart, ListBox& rListBoxEnd, const XLineEndList& rList) +{ + const sal_uInt32 nCount(rList.Count()); + const OUString sNone(SVX_RESSTR(RID_SVXSTR_NONE)); + + rListBoxStart.SetUpdateMode(false); + rListBoxEnd.SetUpdateMode(false); + + rListBoxStart.Clear(); + rListBoxEnd.Clear(); + + // add 'none' entries + rListBoxStart.InsertEntry(sNone); + rListBoxEnd.InsertEntry(sNone); + + for(sal_uInt32 i(0); i < nCount; i++) + { + XLineEndEntry* pEntry = rList.GetLineEnd(i); + const Bitmap aBitmap = const_cast< XLineEndList& >(rList).GetUiBitmap(i); + + if(!aBitmap.IsEmpty()) + { + Bitmap aCopyStart(aBitmap); + Bitmap aCopyEnd(aBitmap); + + const Size aBmpSize(aCopyStart.GetSizePixel()); + const Rectangle aCropRectStart(Point(), Size(aBmpSize.Width() / 2, aBmpSize.Height())); + const Rectangle aCropRectEnd(Point(aBmpSize.Width() / 2, 0), Size(aBmpSize.Width() / 2, aBmpSize.Height())); + + aCopyStart.Crop(aCropRectStart); + rListBoxStart.InsertEntry( + pEntry->GetName(), + Image(aCopyStart)); + + aCopyEnd.Crop(aCropRectEnd); + rListBoxEnd.InsertEntry( + pEntry->GetName(), + Image(aCopyEnd)); + } + else + { + rListBoxStart.InsertEntry(pEntry->GetName()); + rListBoxEnd.InsertEntry(pEntry->GetName()); + } + } + + rListBoxStart.SetUpdateMode(true); + rListBoxEnd.SetUpdateMode(true); +} + +void FillLineStyleListBox(ListBox& rListBox, const XDashList& rList) +{ + const sal_uInt32 nCount(rList.Count()); + rListBox.SetUpdateMode(false); + + rListBox.Clear(); + + // entry for 'none' + rListBox.InsertEntry(rList.GetStringForUiNoLine()); + + // entry for solid line + rListBox.InsertEntry(rList.GetStringForUiSolidLine(), + Image( rList.GetBitmapForUISolidLine())); + + for(sal_uInt32 i(0); i < nCount; i++) + { + XDashEntry* pEntry = rList.GetDash(i); + const Bitmap aBitmap = const_cast< XDashList& >(rList).GetUiBitmap(i); + + if(!aBitmap.IsEmpty()) + { + rListBox.InsertEntry(pEntry->GetName(), Image(aBitmap)); + } + else + { + rListBox.InsertEntry(pEntry->GetName()); + } + } + + rListBox.SetUpdateMode(true); +} + +} // end of anonymous namespace + +namespace svx { namespace sidebar { + +LinePropertyPanelBase::LinePropertyPanelBase( + vcl::Window* pParent, + const uno::Reference<frame::XFrame>& rxFrame) +: PanelLayout(pParent, "LinePropertyPanelBase", "svx/ui/sidebarline.ui", rxFrame), + mpStyleItem(), + mpDashItem(), + mnTrans(0), + meMapUnit(SFX_MAPUNIT_MM), + mnWidthCoreValue(0), + mpStartItem(), + mpEndItem(), + maLineWidthPopup(this, ::boost::bind(&LinePropertyPanelBase::CreateLineWidthPopupControl, this, _1)), + maIMGNone(SVX_RES(IMG_NONE_ICON)), + mpIMGWidthIcon(), + mxFrame(rxFrame), + mbWidthValuable(true) +{ + get(mpFTWidth, "widthlabel"); + get(mpTBWidth, "width"); + get(mpFTStyle, "stylelabel"); + get(mpLBStyle, "linestyle"); + get(mpFTTransparency, "translabel"); + get(mpMFTransparent, "linetransparency"); + get(mpFTArrow, "arrowlabel"); + get(mpLBStart, "beginarrowstyle"); + get(mpLBEnd, "endarrowstyle"); + get(mpFTEdgeStyle, "cornerlabel"); + get(mpLBEdgeStyle, "edgestyle"); + get(mpFTCapStyle, "caplabel"); + get(mpLBCapStyle, "linecapstyle"); + get(mpGridLineProps, "lineproperties"); + get(mpBoxArrowProps, "arrowproperties"); + + Initialize(); +} + +LinePropertyPanelBase::~LinePropertyPanelBase() +{ + disposeOnce(); +} + +void LinePropertyPanelBase::dispose() +{ + mpFTWidth.clear(); + mpTBWidth.clear(); + mpFTStyle.clear(); + mpLBStyle.clear(); + mpFTTransparency.clear(); + mpMFTransparent.clear(); + mpFTArrow.clear(); + mpLBStart.clear(); + mpLBEnd.clear(); + mpFTEdgeStyle.clear(); + mpLBEdgeStyle.clear(); + mpFTCapStyle.clear(); + mpLBCapStyle.clear(); + mpGridLineProps.clear(); + mpBoxArrowProps.clear(); + + PanelLayout::dispose(); +} + +void LinePropertyPanelBase::Initialize() +{ + mpIMGWidthIcon.reset(new Image[8]); + mpIMGWidthIcon[0] = Image(SVX_RES(IMG_WIDTH1_ICON)); + mpIMGWidthIcon[1] = Image(SVX_RES(IMG_WIDTH2_ICON)); + mpIMGWidthIcon[2] = Image(SVX_RES(IMG_WIDTH3_ICON)); + mpIMGWidthIcon[3] = Image(SVX_RES(IMG_WIDTH4_ICON)); + mpIMGWidthIcon[4] = Image(SVX_RES(IMG_WIDTH5_ICON)); + mpIMGWidthIcon[5] = Image(SVX_RES(IMG_WIDTH6_ICON)); + mpIMGWidthIcon[6] = Image(SVX_RES(IMG_WIDTH7_ICON)); + mpIMGWidthIcon[7] = Image(SVX_RES(IMG_WIDTH8_ICON)); + + // meMapUnit = maWidthControl.GetCoreMetric(); + + FillLineStyleList(); + SelectLineStyle(); + Link<> aLink = LINK( this, LinePropertyPanelBase, ChangeLineStyleHdl ); + mpLBStyle->SetSelectHdl( aLink ); + mpLBStyle->SetAccessibleName(OUString( "Style")); + mpLBStyle->AdaptDropDownLineCountToMaximum(); + + const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); + mpTBWidth->SetItemImage(nIdWidth, mpIMGWidthIcon[0]); + mpTBWidth->SetItemBits( nIdWidth, mpTBWidth->GetItemBits( nIdWidth ) | ToolBoxItemBits::DROPDOWNONLY ); + Link<ToolBox *, void> aLink2 = LINK(this, LinePropertyPanelBase, ToolboxWidthSelectHdl); + mpTBWidth->SetDropdownClickHdl ( aLink2 ); + mpTBWidth->SetSelectHdl ( aLink2 ); + + FillLineEndList(); + SelectEndStyle(true); + SelectEndStyle(false); + aLink = LINK( this, LinePropertyPanelBase, ChangeStartHdl ); + mpLBStart->SetSelectHdl( aLink ); + mpLBStart->SetAccessibleName(OUString("Beginning Style")); //wj acc + mpLBStart->AdaptDropDownLineCountToMaximum(); + aLink = LINK( this, LinePropertyPanelBase, ChangeEndHdl ); + mpLBEnd->SetSelectHdl( aLink ); + mpLBEnd->SetAccessibleName(OUString("Ending Style")); //wj acc + mpLBEnd->AdaptDropDownLineCountToMaximum(); + + aLink = LINK(this, LinePropertyPanelBase, ChangeTransparentHdl); + mpMFTransparent->SetModifyHdl(aLink); + mpMFTransparent->SetAccessibleName(OUString("Transparency")); //wj acc + + mpTBWidth->SetAccessibleRelationLabeledBy(mpFTWidth); + mpLBStyle->SetAccessibleRelationLabeledBy(mpFTStyle); + mpMFTransparent->SetAccessibleRelationLabeledBy(mpFTTransparency); + mpLBStart->SetAccessibleRelationLabeledBy(mpFTArrow); + mpLBEnd->SetAccessibleRelationLabeledBy(mpLBEnd); + + aLink = LINK( this, LinePropertyPanelBase, ChangeEdgeStyleHdl ); + mpLBEdgeStyle->SetSelectHdl( aLink ); + mpLBEdgeStyle->SetAccessibleName(OUString("Corner Style")); + + aLink = LINK( this, LinePropertyPanelBase, ChangeCapStyleHdl ); + mpLBCapStyle->SetSelectHdl( aLink ); + mpLBCapStyle->SetAccessibleName(OUString("Cap Style")); +} + +void LinePropertyPanelBase::DataChanged(const DataChangedEvent& /*rEvent*/) +{ +} + +void LinePropertyPanelBase::updateLineStyle(bool bDisabled, bool bSetOrDefault, const XLineStyleItem* pItem) +{ + if(bDisabled) + { + mpFTStyle->Disable(); + mpLBStyle->Disable(); + } + else + { + mpFTStyle->Enable(); + mpLBStyle->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + mpStyleItem.reset(static_cast<XLineStyleItem*>(pItem->Clone())); + } + } + else + { + mpStyleItem.reset(0); + } + + SelectLineStyle(); +} + +void LinePropertyPanelBase::updateLineDash(bool bDisabled, bool bSetOrDefault, const XLineDashItem* pItem) +{ + if(bDisabled) + { + mpFTStyle->Disable(); + mpLBStyle->Disable(); + } + else + { + mpFTStyle->Enable(); + mpLBStyle->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + mpDashItem.reset(static_cast<XLineDashItem*>(pItem->Clone())); + } + } + else + { + mpDashItem.reset(); + } + + SelectLineStyle(); +} + +void LinePropertyPanelBase::updateLineTransparence(bool bDisabled, bool bSetOrDefault, + const XLineTransparenceItem* pItem) +{ + if(bDisabled) + { + mpFTTransparency->Disable(); + mpMFTransparent->Disable(); + } + else + { + mpFTTransparency->Enable(); + mpMFTransparent->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + mnTrans = pItem->GetValue(); + mpMFTransparent->SetValue(mnTrans); + return; + } + } + + mpMFTransparent->SetValue(0);//add + mpMFTransparent->SetText(OUString()); +} + +void LinePropertyPanelBase::updateLineWidth(bool bDisabled, bool bSetOrDefault, + const XLineWidthItem* pItem) +{ + if(bDisabled) + { + mpTBWidth->Disable(); + mpFTWidth->Disable(); + } + else + { + mpTBWidth->Enable(); + mpFTWidth->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + mnWidthCoreValue = pItem->GetValue(); + mbWidthValuable = true; + SetWidthIcon(); + return; + } + } + + mbWidthValuable = false; + SetWidthIcon(); +} + +void LinePropertyPanelBase::updateLineStart(bool bDisabled, bool bSetOrDefault, + const XLineStartItem* pItem) +{ + if(bDisabled) + { + mpFTArrow->Disable(); + mpLBStart->Disable(); + } + else + { + mpFTArrow->Enable(); + mpLBStart->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + mpStartItem.reset(static_cast<XLineStartItem*>(pItem->Clone())); + SelectEndStyle(true); + return; + } + } + + mpStartItem.reset(0); + SelectEndStyle(true); +} + +void LinePropertyPanelBase::updateLineEnd(bool bDisabled, bool bSetOrDefault, + const XLineEndItem* pItem) +{ + if(bDisabled) + { + mpFTArrow->Disable(); + mpLBEnd->Disable(); + } + else + { + mpFTArrow->Enable(); + mpLBEnd->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + mpEndItem.reset(static_cast<XLineEndItem*>(pItem->Clone())); + SelectEndStyle(false); + return; + } + } + + mpEndItem.reset(0); + SelectEndStyle(false); +} + +void LinePropertyPanelBase::updateLineJoint(bool bDisabled, bool bSetOrDefault, + const XLineJointItem* pItem) +{ + if(bDisabled) + { + mpLBEdgeStyle->Disable(); + mpFTEdgeStyle->Disable(); + } + else + { + mpLBEdgeStyle->Enable(); + mpFTEdgeStyle->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + sal_Int32 nEntryPos(0); + + switch(pItem->GetValue()) + { + case drawing::LineJoint_MIDDLE: + case drawing::LineJoint_ROUND: + { + nEntryPos = 1; + break; + } + case drawing::LineJoint_NONE: + { + nEntryPos = 2; + break; + } + case drawing::LineJoint_MITER: + { + nEntryPos = 3; + break; + } + case drawing::LineJoint_BEVEL: + { + nEntryPos = 4; + break; + } + + default: + break; + } + + if(nEntryPos) + { + mpLBEdgeStyle->SelectEntryPos(nEntryPos - 1); + return; + } + } + } + + mpLBEdgeStyle->SetNoSelection(); +} + +void LinePropertyPanelBase::updateLineCap(bool bDisabled, bool bSetOrDefault, + const XLineCapItem* pItem) +{ + if(bDisabled) + { + mpLBCapStyle->Disable(); + mpFTCapStyle->Disable(); + } + else + { + mpLBCapStyle->Enable(); + mpLBCapStyle->Enable(); + } + + if(bSetOrDefault) + { + if(pItem) + { + sal_Int32 nEntryPos(0); + + switch(pItem->GetValue()) + { + case drawing::LineCap_BUTT: + { + nEntryPos = 1; + break; + } + case drawing::LineCap_ROUND: + { + nEntryPos = 2; + break; + } + case drawing::LineCap_SQUARE: + { + nEntryPos = 3; + break; + } + + default: + break; + } + + if(nEntryPos) + { + mpLBCapStyle->SelectEntryPos(nEntryPos - 1); + return; + } + } + } + + mpLBCapStyle->SetNoSelection(); +} + +IMPL_LINK_NOARG(LinePropertyPanelBase, ChangeLineStyleHdl) +{ + const sal_Int32 nPos(mpLBStyle->GetSelectEntryPos()); + + if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBStyle->IsValueChangedFromSaved()) + { + if(0 == nPos) + { + // drawing::LineStyle_NONE + const XLineStyleItem aItem(drawing::LineStyle_NONE); + + setLineStyle(aItem); + } + else if(1 == nPos) + { + // drawing::LineStyle_SOLID + const XLineStyleItem aItem(drawing::LineStyle_SOLID); + + setLineStyle(aItem); + } + else if (mxLineStyleList.is() && mxLineStyleList->Count() > (long)(nPos - 2)) + { + // drawing::LineStyle_DASH + const XLineStyleItem aItemA(drawing::LineStyle_DASH); + const XDashEntry* pDashEntry = mxLineStyleList->GetDash(nPos - 2); + OSL_ENSURE(pDashEntry, "OOps, got empty XDash from XDashList (!)"); + const XLineDashItem aItemB( + pDashEntry ? pDashEntry->GetName() : OUString(), + pDashEntry ? pDashEntry->GetDash() : XDash()); + + setLineStyle(aItemA); + setLineDash(aItemB); + } + } + + ActivateControls(); + return 0; +} + +IMPL_LINK_NOARG(LinePropertyPanelBase, ChangeStartHdl) +{ + sal_Int32 nPos = mpLBStart->GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND && mpLBStart->IsValueChangedFromSaved() ) + { + std::unique_ptr<XLineStartItem> pItem; + if( nPos == 0 ) + pItem.reset(new XLineStartItem()); + else if( mxLineEndList.is() && mxLineEndList->Count() > (long) ( nPos - 1 ) ) + pItem.reset(new XLineStartItem( mpLBStart->GetSelectEntry(),mxLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() )); + setLineStartStyle(pItem.get()); + } + return 0; +} + +IMPL_LINK_NOARG(LinePropertyPanelBase, ChangeEndHdl) +{ + sal_Int32 nPos = mpLBEnd->GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND && mpLBEnd->IsValueChangedFromSaved() ) + { + std::unique_ptr<XLineEndItem> pItem; + if( nPos == 0 ) + pItem.reset(new XLineEndItem()); + else if( mxLineEndList.is() && mxLineEndList->Count() > (long) ( nPos - 1 ) ) + pItem.reset(new XLineEndItem( mpLBEnd->GetSelectEntry(), mxLineEndList->GetLineEnd( nPos - 1 )->GetLineEnd() )); + setLineEndStyle(pItem.get()); + } + return 0; +} + +IMPL_LINK_NOARG(LinePropertyPanelBase, ChangeEdgeStyleHdl) +{ + const sal_Int32 nPos(mpLBEdgeStyle->GetSelectEntryPos()); + + if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBEdgeStyle->IsValueChangedFromSaved()) + { + std::unique_ptr<XLineJointItem> pItem; + + switch(nPos) + { + case 0: // rounded + { + pItem.reset(new XLineJointItem(drawing::LineJoint_ROUND)); + break; + } + case 1: // none + { + pItem.reset(new XLineJointItem(drawing::LineJoint_NONE)); + break; + } + case 2: // mitered + { + pItem.reset(new XLineJointItem(drawing::LineJoint_MITER)); + break; + } + case 3: // beveled + { + pItem.reset(new XLineJointItem(drawing::LineJoint_BEVEL)); + break; + } + } + + setLineJoint(pItem.get()); + } + return 0; +} + +IMPL_LINK_NOARG(LinePropertyPanelBase, ChangeCapStyleHdl) +{ + const sal_Int32 nPos(mpLBCapStyle->GetSelectEntryPos()); + + if(LISTBOX_ENTRY_NOTFOUND != nPos && mpLBCapStyle->IsValueChangedFromSaved()) + { + std::unique_ptr<XLineCapItem> pItem; + + switch(nPos) + { + case 0: // flat + { + pItem.reset(new XLineCapItem(drawing::LineCap_BUTT)); + break; + } + case 1: // round + { + pItem.reset(new XLineCapItem(drawing::LineCap_ROUND)); + break; + } + case 2: // square + { + pItem.reset(new XLineCapItem(drawing::LineCap_SQUARE)); + break; + } + } + + setLineCap(pItem.get()); + } + return 0; +} + +IMPL_LINK_TYPED(LinePropertyPanelBase, ToolboxWidthSelectHdl,ToolBox*, pToolBox, void) +{ + if (pToolBox->GetItemCommand(pToolBox->GetCurItemId()) == UNO_SELECTWIDTH) + { + maLineWidthPopup.SetWidthSelect(mnWidthCoreValue, mbWidthValuable, meMapUnit); + maLineWidthPopup.Show(*pToolBox); + } +} + +IMPL_LINK_NOARG( LinePropertyPanelBase, ChangeTransparentHdl ) +{ + sal_uInt16 nVal = (sal_uInt16)mpMFTransparent->GetValue(); + XLineTransparenceItem aItem( nVal ); + + setLineTransparency(aItem); + return 0L; +} + +VclPtr<PopupControl> LinePropertyPanelBase::CreateLineWidthPopupControl (PopupContainer* pParent) +{ + return VclPtrInstance<LineWidthControl>(pParent, *this); +} + +void LinePropertyPanelBase::EndLineWidthPopupMode() +{ + maLineWidthPopup.Hide(); +} + +void LinePropertyPanelBase::SetWidthIcon(int n) +{ + const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); + if (n == 0) + mpTBWidth->SetItemImage( nIdWidth, maIMGNone); + else + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[n-1]); +} + +void LinePropertyPanelBase::SetWidthIcon() +{ + if(!mbWidthValuable) + { + const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); + mpTBWidth->SetItemImage(nIdWidth, maIMGNone); + return; + } + + long nVal = LogicToLogic(mnWidthCoreValue * 10,(MapUnit)meMapUnit , MAP_POINT); + const sal_uInt16 nIdWidth = mpTBWidth->GetItemId(UNO_SELECTWIDTH); + + if(nVal <= 6) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[0]); + else if(nVal > 6 && nVal <= 9) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[1]); + else if(nVal > 9 && nVal <= 12) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[2]); + else if(nVal > 12 && nVal <= 19) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[3]); + else if(nVal > 19 && nVal <= 26) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[4]); + else if(nVal > 26 && nVal <= 37) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[5]); + else if(nVal > 37 && nVal <=52) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[6]); + else if(nVal > 52) + mpTBWidth->SetItemImage( nIdWidth, mpIMGWidthIcon[7]); + +} + +void LinePropertyPanelBase::SetWidth(long nWidth) +{ + mnWidthCoreValue = nWidth; + mbWidthValuable = true; +} + +void LinePropertyPanelBase::FillLineEndList() +{ + SfxObjectShell* pSh = SfxObjectShell::Current(); + if ( pSh && pSh->GetItem( SID_LINEEND_LIST ) ) + { + mpLBStart->Enable(); + SvxLineEndListItem aItem( *static_cast<const SvxLineEndListItem*>(pSh->GetItem( SID_LINEEND_LIST ) ) ); + mxLineEndList = aItem.GetLineEndList(); + + if (mxLineEndList.is()) + { + FillLineEndListBox(*mpLBStart, *mpLBEnd, *mxLineEndList); + } + + mpLBStart->SelectEntryPos(0); + mpLBEnd->SelectEntryPos(0); + } + else + { + mpLBStart->Disable(); + mpLBEnd->Disable(); + } +} + +void LinePropertyPanelBase::FillLineStyleList() +{ + SfxObjectShell* pSh = SfxObjectShell::Current(); + if ( pSh && pSh->GetItem( SID_DASH_LIST ) ) + { + mpLBStyle->Enable(); + SvxDashListItem aItem( *static_cast<const SvxDashListItem*>(pSh->GetItem( SID_DASH_LIST ) ) ); + mxLineStyleList = aItem.GetDashList(); + + if (mxLineStyleList.is()) + { + FillLineStyleListBox(*mpLBStyle, *mxLineStyleList); + } + + mpLBStyle->SelectEntryPos(0); + } + else + { + mpLBStyle->Disable(); + } +} + +void LinePropertyPanelBase::SelectLineStyle() +{ + if( !mpStyleItem.get() || !mpDashItem.get() ) + { + mpLBStyle->SetNoSelection(); + mpLBStyle->Disable(); + return; + } + + const drawing::LineStyle eXLS(mpStyleItem ? (drawing::LineStyle)mpStyleItem->GetValue() : drawing::LineStyle_NONE); + bool bSelected(false); + + switch(eXLS) + { + case drawing::LineStyle_NONE: + break; + case drawing::LineStyle_SOLID: + mpLBStyle->SelectEntryPos(1); + bSelected = true; + break; + default: + if(mpDashItem && mxLineStyleList.is()) + { + const XDash& rDash = mpDashItem->GetDashValue(); + for(sal_Int32 a(0);!bSelected && a < mxLineStyleList->Count(); a++) + { + XDashEntry* pEntry = mxLineStyleList->GetDash(a); + const XDash& rEntry = pEntry->GetDash(); + if(rDash == rEntry) + { + mpLBStyle->SelectEntryPos(a + 2); + bSelected = true; + } + } + } + break; + } + + if(!bSelected) + mpLBStyle->SelectEntryPos( 0 ); +} + +void LinePropertyPanelBase::SelectEndStyle(bool bStart) +{ + bool bSelected(false); + + if(bStart) + { + if( !mpStartItem.get() ) + { + mpLBStart->SetNoSelection(); + mpLBStart->Disable(); + return; + } + + if (mpStartItem && mxLineEndList.is()) + { + const basegfx::B2DPolyPolygon& rItemPolygon = mpStartItem->GetLineStartValue(); + for(sal_Int32 a(0);!bSelected && a < mxLineEndList->Count(); a++) + { + XLineEndEntry* pEntry = mxLineEndList->GetLineEnd(a); + const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd(); + if(rItemPolygon == rEntryPolygon) + { + mpLBStart->SelectEntryPos(a + 1); + bSelected = true; + } + } + } + + if(!bSelected) + { + mpLBStart->SelectEntryPos( 0 ); + } + } + else + { + if( !mpEndItem.get() ) + { + mpLBEnd->SetNoSelection(); + mpLBEnd->Disable(); + return; + } + + if (mpEndItem && mxLineEndList.is()) + { + const basegfx::B2DPolyPolygon& rItemPolygon = mpEndItem->GetLineEndValue(); + for(sal_Int32 a(0);!bSelected && a < mxLineEndList->Count(); a++) + { + XLineEndEntry* pEntry = mxLineEndList->GetLineEnd(a); + const basegfx::B2DPolyPolygon& rEntryPolygon = pEntry->GetLineEnd(); + if(rItemPolygon == rEntryPolygon) + { + mpLBEnd->SelectEntryPos(a + 1); + bSelected = true; + } + } + } + + if(!bSelected) + { + mpLBEnd->SelectEntryPos( 0 ); + } + } +} + +void LinePropertyPanelBase::ActivateControls() +{ + const sal_Int32 nPos(mpLBStyle->GetSelectEntryPos()); + bool bLineStyle( nPos != 0 ); + + mpGridLineProps->Enable( bLineStyle ); + mpBoxArrowProps->Enable( bLineStyle ); +} + +}} // end of namespace svx::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.hxx b/svx/source/sidebar/line/LinePropertyPanelBase.hxx new file mode 100644 index 000000000000..e5dd0d9897e1 --- /dev/null +++ b/svx/source/sidebar/line/LinePropertyPanelBase.hxx @@ -0,0 +1,172 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 . + */ +#ifndef INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEPROPERTYPANELBASE_HXX +#define INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEPROPERTYPANELBASE_HXX + +#include <svx/xdash.hxx> +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <vcl/layout.hxx> +#include <memory> +#include <svx/sidebar/PanelLayout.hxx> +#include <svx/xtable.hxx> +#include "LineWidthPopup.hxx" + + +class XLineStyleItem; +class XLineDashItem; +class XLineStartItem; +class XLineWidthItem; +class XLineEndItem; +class XLineEndList; +class XLineJointItem; +class XLineCapItem; +class XLineTransparenceItem; +class XDashList; +class ListBox; +class ToolBox; +class FloatingWindow; + +namespace +{ + +#define SIDEBAR_LINE_WIDTH_GLOBAL_VALUE "PopupPanel_LineWidth" + +} //end of anonymous namespace + +namespace svx +{ +namespace sidebar +{ + +class PopupContainer; +class LineWidthControl; + +class LinePropertyPanelBase : public PanelLayout +{ +public: + virtual ~LinePropertyPanelBase(); + virtual void dispose() SAL_OVERRIDE; + + virtual void DataChanged( + const DataChangedEvent& rEvent) SAL_OVERRIDE; + + void SetWidth(long nWidth); + void SetWidthIcon(int n); + void SetWidthIcon(); + + void EndLineWidthPopupMode(); + + // constructor/destuctor + LinePropertyPanelBase( + vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame); + + virtual void setLineWidth(const XLineWidthItem& rItem) = 0; + +protected: + + virtual void setLineStyle(const XLineStyleItem& rItem) = 0; + virtual void setLineDash(const XLineDashItem& rItem) = 0; + virtual void setLineEndStyle(const XLineEndItem* pItem) = 0; + virtual void setLineStartStyle(const XLineStartItem* pItem) = 0; + virtual void setLineTransparency(const XLineTransparenceItem& rItem) = 0; + virtual void setLineJoint(const XLineJointItem* pItem) = 0; + virtual void setLineCap(const XLineCapItem* pItem) = 0; + + + void updateLineStyle(bool bDisabled, bool bSetOrDefault, const XLineStyleItem* pItem); + void updateLineDash(bool bDisabled, bool bSetOrDefault, const XLineDashItem* pItem); + void updateLineTransparence(bool bDisabled, bool bSetOrDefault, const XLineTransparenceItem* pItem); + void updateLineWidth(bool bDisabled, bool bSetOrDefault, const XLineWidthItem* pItem); + void updateLineStart(bool bDisabled, bool bSetOrDefault, const XLineStartItem* pItem); + void updateLineEnd(bool bDisabled, bool bSetOrDefault, const XLineEndItem* pItem); + void updateLineJoint(bool bDisabled, bool bSetOrDefault, const XLineJointItem* pItem); + void updateLineCap(bool bDisabled, bool bSetOrDefault, const XLineCapItem* pItem); + + void FillLineEndList(); + void FillLineStyleList(); + void SelectEndStyle(bool bStart); + void SelectLineStyle(); + void ActivateControls(); + +private: + //ui controls + VclPtr<FixedText> mpFTWidth; + VclPtr<ToolBox> mpTBWidth; + VclPtr<FixedText> mpFTStyle; + VclPtr<ListBox> mpLBStyle; + VclPtr<FixedText> mpFTTransparency; + VclPtr<MetricField> mpMFTransparent; + VclPtr<FixedText> mpFTArrow; + VclPtr<ListBox> mpLBStart; + VclPtr<ListBox> mpLBEnd; + VclPtr<FixedText> mpFTEdgeStyle; + VclPtr<ListBox> mpLBEdgeStyle; + VclPtr<FixedText> mpFTCapStyle; + VclPtr<ListBox> mpLBCapStyle; + VclPtr<VclGrid> mpGridLineProps; + VclPtr<VclVBox> mpBoxArrowProps; + + std::unique_ptr<XLineStyleItem> mpStyleItem; + std::unique_ptr<XLineDashItem> mpDashItem; + + sal_uInt16 mnTrans; + SfxMapUnit meMapUnit; + sal_Int32 mnWidthCoreValue; + XLineEndListRef mxLineEndList; + XDashListRef mxLineStyleList; + std::unique_ptr<XLineStartItem> mpStartItem; + std::unique_ptr<XLineEndItem> mpEndItem; + + //popup windows + LineWidthPopup maLineWidthPopup; + + // images from resource + Image maIMGNone; + + // multi-images + std::unique_ptr<Image[]> mpIMGWidthIcon; + + css::uno::Reference<css::frame::XFrame> mxFrame; + + /// bitfield + bool mbWidthValuable : 1; + + void Initialize(); + + DECL_LINK(ChangeLineStyleHdl, void*); + DECL_LINK_TYPED(ToolboxWidthSelectHdl, ToolBox*, void); + DECL_LINK(ChangeTransparentHdl , void *); + DECL_LINK(ChangeStartHdl, void *); + DECL_LINK(ChangeEndHdl, void *); + DECL_LINK(ChangeEdgeStyleHdl, void *); + DECL_LINK(ChangeCapStyleHdl, void *); + + VclPtr<PopupControl> CreateLineWidthPopupControl (PopupContainer* pParent); +}; + +} } // end of namespace svx::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/sidebar/line/LineWidthControl.cxx b/svx/source/sidebar/line/LineWidthControl.cxx index 7d026fdf596d..2bee185dbdaa 100644 --- a/svx/source/sidebar/line/LineWidthControl.cxx +++ b/svx/source/sidebar/line/LineWidthControl.cxx @@ -18,7 +18,7 @@ */ #include "LineWidthControl.hxx" #include "LinePropertyPanel.hrc" -#include "LinePropertyPanel.hxx" +#include "LinePropertyPanelBase.hxx" #include <svx/dialogs.hrc> #include <svx/dialmgr.hxx> @@ -36,10 +36,9 @@ namespace svx { namespace sidebar { LineWidthControl::LineWidthControl ( vcl::Window* pParent, - LinePropertyPanel& rPanel) + LinePropertyPanelBase& rPanel) : svx::sidebar::PopupControl(pParent,SVX_RES(RID_POPUPPANEL_LINEPAGE_WIDTH)), mrLinePropertyPanel(rPanel), - mpBindings(NULL), maVSWidth(VclPtr<LineWidthValueSet>::Create(this, SVX_RES(VS_WIDTH))), maFTCus( VclPtr<FixedText>::Create(this, SVX_RES(FT_CUSTOME))), maFTWidth( VclPtr<FixedText>::Create(this, SVX_RES(FT_LINE_WIDTH))), @@ -57,7 +56,6 @@ LineWidthControl::LineWidthControl ( { Initialize(); FreeResource(); - mpBindings = mrLinePropertyPanel.GetBindings(); } LineWidthControl::~LineWidthControl() @@ -268,7 +266,7 @@ IMPL_LINK(LineWidthControl, VSSelectHdl, void *, pControl) sal_IntPtr nVal = LogicToLogic(reinterpret_cast<sal_IntPtr>(maVSWidth->GetItemData( iPos )), MAP_POINT, (MapUnit)meMapUnit); nVal = maMFWidth->Denormalize(nVal); XLineWidthItem aWidthItem( nVal ); - mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SfxCallMode::RECORD, &aWidthItem, 0L); + mrLinePropertyPanel.setLineWidth(aWidthItem); mrLinePropertyPanel.SetWidthIcon(iPos); mrLinePropertyPanel.SetWidth(nVal); mbCloseByEdit = false; @@ -282,7 +280,7 @@ IMPL_LINK(LineWidthControl, VSSelectHdl, void *, pControl) long nVal = LogicToLogic(mnCustomWidth , MAP_POINT, (MapUnit)meMapUnit); nVal = maMFWidth->Denormalize(nVal); XLineWidthItem aWidthItem( nVal ); - mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SfxCallMode::RECORD, &aWidthItem, 0L); + mrLinePropertyPanel.setLineWidth(aWidthItem); mrLinePropertyPanel.SetWidth(nVal); mbCloseByEdit = false; mnTmpCustomWidth = 0; @@ -319,7 +317,7 @@ IMPL_LINK(LineWidthControl, MFModifyHdl, void *, pControl) long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)meMapUnit ); sal_Int32 nNewWidth = (short)maMFWidth->Denormalize( nVal ); XLineWidthItem aWidthItem(nNewWidth); - mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SfxCallMode::RECORD, &aWidthItem, 0L); + mrLinePropertyPanel.setLineWidth(aWidthItem); mbCloseByEdit = true; mnTmpCustomWidth = nTmp; diff --git a/svx/source/sidebar/line/LineWidthControl.hxx b/svx/source/sidebar/line/LineWidthControl.hxx index 0b14574d995d..4a2874969c83 100644 --- a/svx/source/sidebar/line/LineWidthControl.hxx +++ b/svx/source/sidebar/line/LineWidthControl.hxx @@ -30,12 +30,12 @@ class SfxBindings; namespace svx { namespace sidebar { -class LinePropertyPanel; +class LinePropertyPanelBase; class LineWidthControl : public svx::sidebar::PopupControl { public: - LineWidthControl (vcl::Window* pParent, LinePropertyPanel& rPanel); + LineWidthControl (vcl::Window* pParent, LinePropertyPanelBase& rPanel); virtual ~LineWidthControl(); virtual void dispose() SAL_OVERRIDE; @@ -53,8 +53,7 @@ public: } private: - LinePropertyPanel& mrLinePropertyPanel; - SfxBindings* mpBindings; + LinePropertyPanelBase& mrLinePropertyPanel; VclPtr<LineWidthValueSet> maVSWidth; VclPtr<FixedText> maFTCus; VclPtr<FixedText> maFTWidth; |