chart2/Library_chartcontroller.mk | 1 chart2/source/controller/main/ChartController.cxx | 2 chart2/source/controller/sidebar/Chart2PanelFactory.cxx | 3 chart2/source/controller/sidebar/ChartLinePanel.cxx | 295 +++++ chart2/source/controller/sidebar/ChartLinePanel.hxx | 104 + chart2/source/model/main/DataPointProperties.cxx | 20 chart2/source/view/axes/VCartesianAxis.cxx | 2 chart2/source/view/axes/VPolarAngleAxis.cxx | 2 chart2/source/view/inc/PropertyMapper.hxx | 3 chart2/source/view/main/PropertyMapper.cxx | 5 include/sfx2/sidebar/EnumContext.hxx | 1 include/svx/drawitem.hxx | 26 include/svx/sidebar/LinePropertyPanelBase.hxx | 175 +++ include/svx/sidebar/LineWidthPopup.hxx | 50 include/svx/xtable.hxx | 52 sfx2/source/sidebar/EnumContext.cxx | 1 svx/Library_svx.mk | 1 svx/source/sidebar/line/LinePropertyPanel.cxx | 841 -------------- svx/source/sidebar/line/LinePropertyPanel.hxx | 80 - svx/source/sidebar/line/LinePropertyPanelBase.cxx | 933 ++++++++++++++++ svx/source/sidebar/line/LineWidthControl.cxx | 12 svx/source/sidebar/line/LineWidthControl.hxx | 7 svx/source/sidebar/line/LineWidthPopup.cxx | 5 svx/source/sidebar/line/LineWidthPopup.hxx | 50 24 files changed, 1656 insertions(+), 1015 deletions(-)
New commits: commit 902255645328efde34ddf62227c8278e8dd61ff0 Author: Markus Mohrhard <[email protected]> Date: Thu Jul 30 00:03:58 2015 +0200 small fix to reduce UnknownPropertyException in chart2 accidently introduced with f1531cdaaebe706d909dc6ddde439ccb5f4ad36d Change-Id: I292097c5f61ecb32a28a90e9f5be48fcfd6bcd7b diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index 66a7b29..6f316e3 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -321,6 +321,8 @@ OUString ChartController::GetContextName() return OUString("ErrorBar"); case OBJECTTYPE_AXIS: return OUString("Axis"); + case OBJECTTYPE_GRID: + return OUString("Grid"); default: break; } diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx index fd48b5c..ba2c452 100644 --- a/chart2/source/view/axes/VCartesianAxis.cxx +++ b/chart2/source/view/axes/VCartesianAxis.cxx @@ -404,7 +404,7 @@ void getAxisLabelProperties( Reference<beans::XPropertySet> xProps(rAxisProp.m_xAxisModel, uno::UNO_QUERY); PropertyMapper::getTextLabelMultiPropertyLists( - xProps, rPropNames, rPropValues, false, nLimitedSpaceForText, bLimitedHeight); + xProps, rPropNames, rPropValues, false, nLimitedSpaceForText, bLimitedHeight, false); LabelPositionHelper::doDynamicFontResize( rPropValues, rPropNames, xProps, rAxisLabelProp.m_aFontReferenceSize); diff --git a/chart2/source/view/axes/VPolarAngleAxis.cxx b/chart2/source/view/axes/VPolarAngleAxis.cxx index adbf8e6..d720868 100644 --- a/chart2/source/view/axes/VPolarAngleAxis.cxx +++ b/chart2/source/view/axes/VPolarAngleAxis.cxx @@ -66,7 +66,7 @@ bool VPolarAngleAxis::createTextShapes_ForAngleAxis( tAnySequence aPropValues; uno::Reference< beans::XPropertySet > xProps( m_aAxisProperties.m_xAxisModel, uno::UNO_QUERY ); - PropertyMapper::getTextLabelMultiPropertyLists( xProps, aPropNames, aPropValues, false ); + PropertyMapper::getTextLabelMultiPropertyLists( xProps, aPropNames, aPropValues, false, -1, false, false ); LabelPositionHelper::doDynamicFontResize( aPropValues, aPropNames, xProps , rAxisLabelProperties.m_aFontReferenceSize ); diff --git a/chart2/source/view/inc/PropertyMapper.hxx b/chart2/source/view/inc/PropertyMapper.hxx index c1c29b7..171e302 100644 --- a/chart2/source/view/inc/PropertyMapper.hxx +++ b/chart2/source/view/inc/PropertyMapper.hxx @@ -123,7 +123,8 @@ public: , tNameSequence& rPropNames, tAnySequence& rPropValues , bool bName=true , sal_Int32 nLimitedSpace=-1 - , bool bLimitedHeight=false ); + , bool bLimitedHeight=false + , bool bSupportsLabelBorder = true); /** adds line-, fill- and character properties and sets some suitable defaults for auto-grow properties diff --git a/chart2/source/view/main/PropertyMapper.cxx b/chart2/source/view/main/PropertyMapper.cxx index c373f38..313c237 100644 --- a/chart2/source/view/main/PropertyMapper.cxx +++ b/chart2/source/view/main/PropertyMapper.cxx @@ -435,11 +435,12 @@ void PropertyMapper::getTextLabelMultiPropertyLists( , tNameSequence& rPropNames, tAnySequence& rPropValues , bool bName , sal_Int32 nLimitedSpace - , bool bLimitedHeight ) + , bool bLimitedHeight + , bool bSupportsLabelBorder) { //fill character properties into the ValueMap tPropertyNameValueMap aValueMap; - tMakePropertyNameMap aNameMap = PropertyMapper::getPropertyNameMapForTextLabelProperties(); + tMakePropertyNameMap aNameMap = bSupportsLabelBorder ? PropertyMapper::getPropertyNameMapForTextLabelProperties() : getPropertyNameMapForCharacterProperties(); PropertyMapper::getValueMap(aValueMap, aNameMap, xSourceProp); diff --git a/include/sfx2/sidebar/EnumContext.hxx b/include/sfx2/sidebar/EnumContext.hxx index 785e6eff..d9dbe80 100644 --- a/include/sfx2/sidebar/EnumContext.hxx +++ b/include/sfx2/sidebar/EnumContext.hxx @@ -78,6 +78,7 @@ public: Context_Form, Context_Frame, Context_Graphic, + Context_Grid, Context_HandoutPage, Context_MasterPage, Context_Media, diff --git a/sfx2/source/sidebar/EnumContext.cxx b/sfx2/source/sidebar/EnumContext.cxx index e84ce1c..d72c5fa 100644 --- a/sfx2/source/sidebar/EnumContext.cxx +++ b/sfx2/source/sidebar/EnumContext.cxx @@ -188,6 +188,7 @@ void EnumContext::ProvideContextContainers() AddContext(Form); AddContext(Frame); AddContext(Graphic); + AddContext(Grid); AddContext(HandoutPage); AddContext(MasterPage); AddContext(Media); commit bead8d010987d53b313e30b65e56d04ee80469ef Author: Markus Mohrhard <[email protected]> Date: Wed Jul 29 23:18:44 2015 +0200 also handle line width correctly Change-Id: Ia564d3c9b821a09586a0bcb32ee3f827e71f43de diff --git a/chart2/source/controller/sidebar/ChartLinePanel.cxx b/chart2/source/controller/sidebar/ChartLinePanel.cxx index a4ad08f..d677e20 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.cxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.cxx @@ -154,6 +154,7 @@ void ChartLinePanel::Initialize() if (xSelectionSupplier.is()) xSelectionSupplier->addSelectionChangeListener(mxSelectionListener.get()); + setMapUnit(SFX_MAPUNIT_100TH_MM); updateData(); } diff --git a/include/svx/sidebar/LinePropertyPanelBase.hxx b/include/svx/sidebar/LinePropertyPanelBase.hxx index 6133061..ef41457 100644 --- a/include/svx/sidebar/LinePropertyPanelBase.hxx +++ b/include/svx/sidebar/LinePropertyPanelBase.hxx @@ -110,6 +110,8 @@ protected: void SelectLineStyle(); void ActivateControls(); + void setMapUnit(SfxMapUnit eMapUnit); + private: //ui controls VclPtr<FixedText> mpFTWidth; diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx index c025c86..616cf5a 100644 --- a/svx/source/sidebar/line/LinePropertyPanel.cxx +++ b/svx/source/sidebar/line/LinePropertyPanel.cxx @@ -100,6 +100,7 @@ void LinePropertyPanel::dispose() void LinePropertyPanel::Initialize() { + setMapUnit(maWidthControl.GetCoreMetric()); } VclPtr<vcl::Window> LinePropertyPanel::Create ( diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.cxx b/svx/source/sidebar/line/LinePropertyPanelBase.cxx index c04fa3f..9656466 100644 --- a/svx/source/sidebar/line/LinePropertyPanelBase.cxx +++ b/svx/source/sidebar/line/LinePropertyPanelBase.cxx @@ -220,8 +220,6 @@ void LinePropertyPanelBase::Initialize() 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 ); @@ -925,6 +923,11 @@ void LinePropertyPanelBase::ActivateControls() mpBoxArrowProps->Enable( bLineStyle ); } +void LinePropertyPanelBase::setMapUnit(SfxMapUnit eMapUnit) +{ + meMapUnit = eMapUnit; +} + }} // end of namespace svx::sidebar /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 3dc00a8de9f9f1b1ad0c60134391638544cdd143 Author: Markus Mohrhard <[email protected]> Date: Wed Jul 29 15:33:57 2015 +0200 handle line dash in chart line panel Change-Id: Ia3d466c269eef62f8fa419d15869f44213a6e001 diff --git a/chart2/source/controller/sidebar/ChartLinePanel.cxx b/chart2/source/controller/sidebar/ChartLinePanel.cxx index b78e0c5..a4ad08f 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.cxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.cxx @@ -16,6 +16,7 @@ #include <svx/xlinjoit.hxx> #include <svx/xlndsit.hxx> #include <svx/xlntrit.hxx> +#include <svx/unomid.hxx> #include <com/sun/star/view/XSelectionSupplier.hpp> @@ -61,6 +62,24 @@ css::uno::Reference<css::beans::XPropertySet> getPropSet( return xPropSet; } +css::uno::Any getLineDash( + css::uno::Reference<css::frame::XModel> xModel, const OUString& rDashName) +{ + css::uno::Reference<css::lang::XMultiServiceFactory> xFact(xModel, css::uno::UNO_QUERY); + css::uno::Reference<css::container::XNameAccess> xNameAccess( + xFact->createInstance("com.sun.star.drawing.DashTable"), + css::uno::UNO_QUERY ); + if(xNameAccess.is()) + { + if (!xNameAccess->hasByName(rDashName)) + return css::uno::Any(); + + return xNameAccess->getByName(rDashName); + } + + return css::uno::Any(); +} + class PreventUpdate { public: @@ -147,6 +166,23 @@ void ChartLinePanel::updateData() if (!xPropSet.is()) return; + sal_uInt16 nLineTransparence = 0; + xPropSet->getPropertyValue("LineTransparence") >>= nLineTransparence; + XLineTransparenceItem aLineTransparenceItem(nLineTransparence); + updateLineTransparence(false, true, &aLineTransparenceItem); + + css::drawing::LineStyle eStyle = css::drawing::LineStyle_SOLID; + xPropSet->getPropertyValue("LineStyle") >>= eStyle; + XLineStyleItem aStyleItem(eStyle); + updateLineStyle(false, true, &aStyleItem); + + css::uno::Any aLineDashName = xPropSet->getPropertyValue("LineDashName"); + OUString aDashName; + aLineDashName >>= aDashName; + css::uno::Any aLineDash = getLineDash(mxModel, aDashName); + XLineDashItem aDashItem; + aDashItem.PutValue(aLineDash, MID_LINEDASH); + updateLineDash(false, true, &aDashItem); } void ChartLinePanel::modelInvalid() @@ -198,7 +234,13 @@ void ChartLinePanel::setLineDash(const XLineDashItem& rItem) if (!xPropSet.is()) return; - xPropSet->setPropertyValue("LineDash", css::uno::makeAny(rItem.GetValue())); + css::uno::Any aAny; + rItem.QueryValue(aAny, MID_LINEDASH); + OUString aDashName = PropertyHelper::addLineDashUniqueNameToTable(aAny, + css::uno::Reference<css::lang::XMultiServiceFactory>(mxModel, css::uno::UNO_QUERY), + ""); + xPropSet->setPropertyValue("LineDash", aAny); + xPropSet->setPropertyValue("LineDashName", css::uno::makeAny(aDashName)); } void ChartLinePanel::setLineEndStyle(const XLineEndItem* /*pItem*/) commit 84254268bf5902d2405815970218e1893a7a673e Author: Markus Mohrhard <[email protected]> Date: Wed Jul 29 15:33:18 2015 +0200 it is insane to not map line and border properties to the same id Change-Id: I6f4eb2509dc731cb281350b2bb0cce94b66a8ad6 diff --git a/chart2/source/model/main/DataPointProperties.cxx b/chart2/source/model/main/DataPointProperties.cxx index ed35733..f09cf47 100644 --- a/chart2/source/model/main/DataPointProperties.cxx +++ b/chart2/source/model/main/DataPointProperties.cxx @@ -177,21 +177,21 @@ void DataPointProperties::AddPropertiesToVector( rOutProperties.push_back( Property( "BorderStyle", - PROP_DATAPOINT_BORDER_STYLE, + LinePropertiesHelper::PROP_LINE_STYLE, cppu::UnoType<drawing::LineStyle>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( "BorderWidth", - PROP_DATAPOINT_BORDER_WIDTH, + LinePropertiesHelper::PROP_LINE_WIDTH, cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); rOutProperties.push_back( Property( "BorderDashName", - PROP_DATAPOINT_BORDER_DASH_NAME, + LinePropertiesHelper::PROP_LINE_DASH_NAME, cppu::UnoType<OUString>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID )); commit e517948e71daf8861aca46f77fe900a538654887 Author: Markus Mohrhard <[email protected]> Date: Wed Jul 29 03:16:13 2015 +0200 set some properties from chart line panel Change-Id: Idbe26d7ea554512391b22299ac6dccaeaa71d584 diff --git a/chart2/source/controller/sidebar/ChartLinePanel.cxx b/chart2/source/controller/sidebar/ChartLinePanel.cxx index 26736d3..b78e0c5 100644 --- a/chart2/source/controller/sidebar/ChartLinePanel.cxx +++ b/chart2/source/controller/sidebar/ChartLinePanel.cxx @@ -12,6 +12,11 @@ #include "PropertyHelper.hxx" #include "ChartController.hxx" +#include <svx/xlnwtit.hxx> +#include <svx/xlinjoit.hxx> +#include <svx/xlndsit.hxx> +#include <svx/xlntrit.hxx> + #include <com/sun/star/view/XSelectionSupplier.hpp> namespace chart { namespace sidebar { @@ -174,12 +179,26 @@ void ChartLinePanel::updateModel( xSelectionSupplier->addSelectionChangeListener(mxSelectionListener.get()); } -void ChartLinePanel::setLineStyle(const XLineStyleItem& /*rItem*/) +void ChartLinePanel::setLineStyle(const XLineStyleItem& rItem) { + css::uno::Reference<css::beans::XPropertySet> xPropSet = + getPropSet(mxModel); + + if (!xPropSet.is()) + return; + + xPropSet->setPropertyValue("LineStyle", css::uno::makeAny(rItem.GetValue())); } -void ChartLinePanel::setLineDash(const XLineDashItem& /*rItem*/) +void ChartLinePanel::setLineDash(const XLineDashItem& rItem) { + css::uno::Reference<css::beans::XPropertySet> xPropSet = + getPropSet(mxModel); + + if (!xPropSet.is()) + return; + + xPropSet->setPropertyValue("LineDash", css::uno::makeAny(rItem.GetValue())); } void ChartLinePanel::setLineEndStyle(const XLineEndItem* /*pItem*/) @@ -190,20 +209,42 @@ void ChartLinePanel::setLineStartStyle(const XLineStartItem* /*pItem*/) { } -void ChartLinePanel::setLineJoint(const XLineJointItem* /*pItem*/) +void ChartLinePanel::setLineJoint(const XLineJointItem* pItem) { + css::uno::Reference<css::beans::XPropertySet> xPropSet = + getPropSet(mxModel); + + if (!xPropSet.is()) + return; + + if (pItem) + xPropSet->setPropertyValue("LineJoint", css::uno::makeAny(pItem->GetValue())); } void ChartLinePanel::setLineCap(const XLineCapItem* /*pItem*/) { } -void ChartLinePanel::setLineTransparency(const XLineTransparenceItem& /*rItem*/) +void ChartLinePanel::setLineTransparency(const XLineTransparenceItem& rItem) { + css::uno::Reference<css::beans::XPropertySet> xPropSet = + getPropSet(mxModel); + + if (!xPropSet.is()) + return; + + xPropSet->setPropertyValue("LineTransparence", css::uno::makeAny(rItem.GetValue())); } -void ChartLinePanel::setLineWidth(const XLineWidthItem& /*rItem*/) +void ChartLinePanel::setLineWidth(const XLineWidthItem& rItem) { + css::uno::Reference<css::beans::XPropertySet> xPropSet = + getPropSet(mxModel); + + if (!xPropSet.is()) + return; + + xPropSet->setPropertyValue("LineWidth", css::uno::makeAny(rItem.GetValue())); } } } commit 9bb03b4961492491d69dafb2db46c2840c19fec3 Author: Markus Mohrhard <[email protected]> Date: Wed Jul 29 03:15:40 2015 +0200 provide also LineTransparence for DataPointProperties Change-Id: I9c3e547831d3d876c228c8b9b566f17a4d95ce5b diff --git a/chart2/source/model/main/DataPointProperties.cxx b/chart2/source/model/main/DataPointProperties.cxx index 064261d..ed35733 100644 --- a/chart2/source/model/main/DataPointProperties.cxx +++ b/chart2/source/model/main/DataPointProperties.cxx @@ -174,24 +174,28 @@ void DataPointProperties::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID // "maybe auto" | beans::PropertyAttribute::MAYBEDEFAULT )); + rOutProperties.push_back( Property( "BorderStyle", PROP_DATAPOINT_BORDER_STYLE, cppu::UnoType<drawing::LineStyle>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); + rOutProperties.push_back( Property( "BorderWidth", PROP_DATAPOINT_BORDER_WIDTH, cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); + rOutProperties.push_back( Property( "BorderDashName", PROP_DATAPOINT_BORDER_DASH_NAME, cppu::UnoType<OUString>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID )); + rOutProperties.push_back( Property( "BorderTransparency", PROP_DATAPOINT_BORDER_TRANSPARENCY, @@ -206,18 +210,21 @@ void DataPointProperties::AddPropertiesToVector( cppu::UnoType<drawing::LineStyle>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); + rOutProperties.push_back( Property( "LineWidth", LinePropertiesHelper::PROP_LINE_WIDTH, cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT )); + rOutProperties.push_back( Property( "LineDash", LinePropertiesHelper::PROP_LINE_DASH, cppu::UnoType<drawing::LineDash>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID )); + rOutProperties.push_back( Property( "LineDashName", LinePropertiesHelper::PROP_LINE_DASH_NAME, @@ -225,6 +232,13 @@ void DataPointProperties::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID )); + rOutProperties.push_back( + Property( "LineTransparence", + PROP_DATAPOINT_BORDER_TRANSPARENCY, + cppu::UnoType<sal_Int16>::get(), + beans::PropertyAttribute::BOUND + | beans::PropertyAttribute::MAYBEVOID )); + // FillProperties // bitmap properties rOutProperties.push_back( commit 57dcf78e6b17777f499fd7e7c2ee8d129bf0f79b Author: Markus Mohrhard <[email protected]> Date: Wed Jul 29 02:46:50 2015 +0200 provide structure for chart line panel Change-Id: I75204a012e4bc59f40a06db814bb9057a1cf8598 diff --git a/chart2/Library_chartcontroller.mk b/chart2/Library_chartcontroller.mk index 2e03a7e..1dbb89a 100644 --- a/chart2/Library_chartcontroller.mk +++ b/chart2/Library_chartcontroller.mk @@ -192,6 +192,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcontroller,\ chart2/source/controller/sidebar/ChartAxisPanel \ chart2/source/controller/sidebar/ChartElementsPanel \ chart2/source/controller/sidebar/ChartErrorBarPanel \ + chart2/source/controller/sidebar/ChartLinePanel \ chart2/source/controller/sidebar/ChartSeriesPanel \ chart2/source/controller/sidebar/ChartSidebarModifyListener \ chart2/source/controller/sidebar/ChartSidebarSelectionListener \ diff --git a/chart2/source/controller/sidebar/Chart2PanelFactory.cxx b/chart2/source/controller/sidebar/Chart2PanelFactory.cxx index d45ad84..97a96db 100644 --- a/chart2/source/controller/sidebar/Chart2PanelFactory.cxx +++ b/chart2/source/controller/sidebar/Chart2PanelFactory.cxx @@ -35,6 +35,7 @@ #include "ChartAxisPanel.hxx" #include "ChartErrorBarPanel.hxx" #include "ChartAreaPanel.hxx" +#include "ChartLinePanel.hxx" using namespace css::uno; using ::rtl::OUString; @@ -99,6 +100,8 @@ Reference<css::ui::XUIElement> SAL_CALL ChartPanelFactory::createUIElement ( pPanel = ChartErrorBarPanel::Create(pParentWindow, xFrame, pController); else if (rsResourceURL.endsWith("/AreaPanel")) pPanel = ChartAreaPanel::Create(pParentWindow, xFrame, pController); + else if (rsResourceURL.endsWith("/LinePanel")) + pPanel = ChartLinePanel::Create(pParentWindow, xFrame, pController); if (pPanel) xElement = sfx2::sidebar::SidebarPanelBase::Create( diff --git a/chart2/source/controller/sidebar/ChartLinePanel.cxx b/chart2/source/controller/sidebar/ChartLinePanel.cxx new file mode 100644 index 0000000..26736d3 --- /dev/null +++ b/chart2/source/controller/sidebar/ChartLinePanel.cxx @@ -0,0 +1,211 @@ +/* -*- 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/. + */ + +#include "ChartLinePanel.hxx" + +#include "PropertyHelper.hxx" +#include "ChartController.hxx" + +#include <com/sun/star/view/XSelectionSupplier.hpp> + +namespace chart { namespace sidebar { + +namespace { + +OUString getCID(css::uno::Reference<css::frame::XModel> xModel) +{ + css::uno::Reference<css::frame::XController> xController(xModel->getCurrentController()); + css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(xController, css::uno::UNO_QUERY); + if (!xSelectionSupplier.is()) + return OUString(); + + css::uno::Any aAny = xSelectionSupplier->getSelection(); + if (!aAny.hasValue()) + return OUString(); + + OUString aCID; + aAny >>= aCID; + + return aCID; +} + +css::uno::Reference<css::beans::XPropertySet> getPropSet( + css::uno::Reference<css::frame::XModel> xModel) +{ + OUString aCID = getCID(xModel); + css::uno::Reference<css::beans::XPropertySet> xPropSet = + ObjectIdentifier::getObjectPropertySet(aCID, xModel); + + ObjectType eType = ObjectIdentifier::getObjectType(aCID); + if (eType == OBJECTTYPE_DIAGRAM) + { + css::uno::Reference<css::chart2::XDiagram> xDiagram( + xPropSet, css::uno::UNO_QUERY); + if (!xDiagram.is()) + return xPropSet; + + xPropSet.set(xDiagram->getWall()); + } + + return xPropSet; +} + +class PreventUpdate +{ +public: + PreventUpdate(bool& bUpdate): + mbUpdate(bUpdate) + { + mbUpdate = false; + } + + ~PreventUpdate() + { + mbUpdate = true; + } + +private: + bool& mbUpdate; +}; + +} + +VclPtr<vcl::Window> ChartLinePanel::Create( + vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame, + ChartController* pController) +{ + if (pParent == NULL) + throw css::lang::IllegalArgumentException("no parent Window given to ChartAxisPanel::Create", NULL, 0); + if (!rxFrame.is()) + throw css::lang::IllegalArgumentException("no XFrame given to ChartAxisPanel::Create", NULL, 1); + + return VclPtr<ChartLinePanel>::Create( + pParent, rxFrame, pController); +} + +ChartLinePanel::ChartLinePanel(vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame, + ChartController* pController): + svx::sidebar::LinePropertyPanelBase(pParent, rxFrame), + mxModel(pController->getModel()), + mxListener(new ChartSidebarModifyListener(this)), + mxSelectionListener(new ChartSidebarSelectionListener(this)), + mbUpdate(true) +{ + std::vector<ObjectType> aAcceptedTypes { OBJECTTYPE_PAGE, OBJECTTYPE_DIAGRAM, OBJECTTYPE_DATA_SERIES, OBJECTTYPE_TITLE, OBJECTTYPE_LEGEND}; + mxSelectionListener->setAcceptedTypes(aAcceptedTypes); + Initialize(); +} + +ChartLinePanel::~ChartLinePanel() +{ + disposeOnce(); +} + +void ChartLinePanel::dispose() +{ + css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); + xBroadcaster->removeModifyListener(mxListener); + + css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); + if (xSelectionSupplier.is()) + xSelectionSupplier->removeSelectionChangeListener(mxSelectionListener.get()); + + LinePropertyPanelBase::dispose(); +} + +void ChartLinePanel::Initialize() +{ + css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); + xBroadcaster->addModifyListener(mxListener); + + css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); + if (xSelectionSupplier.is()) + xSelectionSupplier->addSelectionChangeListener(mxSelectionListener.get()); + + updateData(); +} + +void ChartLinePanel::updateData() +{ + if (!mbUpdate) + return; + + css::uno::Reference<css::beans::XPropertySet> xPropSet = getPropSet(mxModel); + if (!xPropSet.is()) + return; + +} + +void ChartLinePanel::modelInvalid() +{ +} + +void ChartLinePanel::selectionChanged(bool bCorrectType) +{ + if (bCorrectType) + updateData(); +} + +void ChartLinePanel::SelectionInvalid() +{ +} + +void ChartLinePanel::updateModel( + css::uno::Reference<css::frame::XModel> xModel) +{ + css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW); + xBroadcaster->removeModifyListener(mxListener); + + mxModel = xModel; + + css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW); + xBroadcasterNew->addModifyListener(mxListener); + + css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY); + if (xSelectionSupplier.is()) + xSelectionSupplier->addSelectionChangeListener(mxSelectionListener.get()); +} + +void ChartLinePanel::setLineStyle(const XLineStyleItem& /*rItem*/) +{ +} + +void ChartLinePanel::setLineDash(const XLineDashItem& /*rItem*/) +{ +} + +void ChartLinePanel::setLineEndStyle(const XLineEndItem* /*pItem*/) +{ +} + +void ChartLinePanel::setLineStartStyle(const XLineStartItem* /*pItem*/) +{ +} + +void ChartLinePanel::setLineJoint(const XLineJointItem* /*pItem*/) +{ +} + +void ChartLinePanel::setLineCap(const XLineCapItem* /*pItem*/) +{ +} + +void ChartLinePanel::setLineTransparency(const XLineTransparenceItem& /*rItem*/) +{ +} + +void ChartLinePanel::setLineWidth(const XLineWidthItem& /*rItem*/) +{ +} + +} } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/controller/sidebar/ChartLinePanel.hxx b/chart2/source/controller/sidebar/ChartLinePanel.hxx new file mode 100644 index 0000000..a2b2ea5 --- /dev/null +++ b/chart2/source/controller/sidebar/ChartLinePanel.hxx @@ -0,0 +1,104 @@ +/* -*- 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/. + */ + +#ifndef INCLUDED_CHART2_SOURCE_CONTROLLER_SIDEBAR_CHARTLINEPANEL_HXX +#define INCLUDED_CHART2_SOURCE_CONTROLLER_SIDEBAR_CHARTLINEPANEL_HXX + +#include <vcl/ctrl.hxx> +#include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/sidebar/SidebarModelUpdate.hxx> +#include <svx/xgrad.hxx> +#include <svx/itemwin.hxx> +#include <svx/xfillit0.hxx> +#include <svx/xflclit.hxx> +#include <svx/xflgrit.hxx> +#include <svx/xflhtit.hxx> +#include <svx/xbtmpit.hxx> +#include <svx/drawitem.hxx> +#include <svx/sidebar/PanelLayout.hxx> +#include <svl/intitem.hxx> +#include <com/sun/star/ui/XUIElement.hpp> +#include <boost/scoped_ptr.hpp> + +#include <svx/sidebar/LinePropertyPanelBase.hxx> + +#include "ChartSidebarModifyListener.hxx" +#include "ChartSidebarSelectionListener.hxx" + +class XFillFloatTransparenceItem; +class XFillTransparenceItem; +class XFillStyleItem; +class XFillGradientItem; +class XFillColorItem; +class XFillHatchItem; +class XFillBitmapItem; + +namespace chart { + +class ChartController; + +namespace sidebar { + +class ChartLinePanel : public svx::sidebar::LinePropertyPanelBase, + public sfx2::sidebar::SidebarModelUpdate, + public ChartSidebarModifyListenerParent, + public ChartSidebarSelectionListenerParent +{ +public: + static VclPtr<vcl::Window> Create( + vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame, + ChartController* pController); + + // constructor/destuctor + ChartLinePanel( + vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame, + ChartController* pController); + + virtual ~ChartLinePanel(); + + virtual void updateData() SAL_OVERRIDE; + virtual void modelInvalid() SAL_OVERRIDE; + + virtual void selectionChanged(bool bCorrectType) SAL_OVERRIDE; + virtual void SelectionInvalid() SAL_OVERRIDE; + + virtual void dispose() SAL_OVERRIDE; + + virtual void updateModel(css::uno::Reference<css::frame::XModel> xModel) SAL_OVERRIDE; + + 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: + + css::uno::Reference<css::frame::XModel> mxModel; + css::uno::Reference<css::util::XModifyListener> mxListener; + rtl::Reference<ChartSidebarSelectionListener> mxSelectionListener; + + void Initialize(); + + bool mbUpdate; +}; + +} } // end of namespace svx::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.hxx b/include/svx/sidebar/LinePropertyPanelBase.hxx similarity index 98% rename from svx/source/sidebar/line/LinePropertyPanelBase.hxx rename to include/svx/sidebar/LinePropertyPanelBase.hxx index e5dd0d9..6133061 100644 --- a/svx/source/sidebar/line/LinePropertyPanelBase.hxx +++ b/include/svx/sidebar/LinePropertyPanelBase.hxx @@ -30,6 +30,7 @@ #include <svx/sidebar/PanelLayout.hxx> #include <svx/xtable.hxx> #include "LineWidthPopup.hxx" +#include <svx/svxdllapi.h> class XLineStyleItem; @@ -61,7 +62,7 @@ namespace sidebar class PopupContainer; class LineWidthControl; -class LinePropertyPanelBase : public PanelLayout +class SVX_DLLPUBLIC LinePropertyPanelBase : public PanelLayout { public: virtual ~LinePropertyPanelBase(); diff --git a/svx/source/sidebar/line/LineWidthPopup.hxx b/include/svx/sidebar/LineWidthPopup.hxx similarity index 100% rename from svx/source/sidebar/line/LineWidthPopup.hxx rename to include/svx/sidebar/LineWidthPopup.hxx diff --git a/svx/source/sidebar/line/LinePropertyPanel.hxx b/svx/source/sidebar/line/LinePropertyPanel.hxx index 6a94423..45f90f9 100644 --- a/svx/source/sidebar/line/LinePropertyPanel.hxx +++ b/svx/source/sidebar/line/LinePropertyPanel.hxx @@ -29,8 +29,7 @@ #include <memory> #include <svx/sidebar/PanelLayout.hxx> #include <svx/xtable.hxx> -#include "LineWidthPopup.hxx" -#include "LinePropertyPanelBase.hxx" +#include <svx/sidebar/LinePropertyPanelBase.hxx> class XLineStyleItem; diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.cxx b/svx/source/sidebar/line/LinePropertyPanelBase.cxx index 14ad854..c04fa3f 100644 --- a/svx/source/sidebar/line/LinePropertyPanelBase.cxx +++ b/svx/source/sidebar/line/LinePropertyPanelBase.cxx @@ -19,7 +19,7 @@ #include <sfx2/sidebar/ResourceDefinitions.hrc> #include <sfx2/sidebar/Theme.hxx> #include <sfx2/sidebar/ControlFactory.hxx> -#include <LinePropertyPanelBase.hxx> +#include <svx/sidebar/LinePropertyPanelBase.hxx> #include <LinePropertyPanel.hrc> #include <svx/dialogs.hrc> #include <svx/dialmgr.hxx> diff --git a/svx/source/sidebar/line/LineWidthControl.cxx b/svx/source/sidebar/line/LineWidthControl.cxx index 2bee185..4053c49 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 "LinePropertyPanelBase.hxx" +#include <svx/sidebar/LinePropertyPanelBase.hxx> #include <svx/dialogs.hrc> #include <svx/dialmgr.hxx> diff --git a/svx/source/sidebar/line/LineWidthPopup.cxx b/svx/source/sidebar/line/LineWidthPopup.cxx index 968a58d..351d12d 100644 --- a/svx/source/sidebar/line/LineWidthPopup.cxx +++ b/svx/source/sidebar/line/LineWidthPopup.cxx @@ -16,9 +16,10 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include "LineWidthPopup.hxx" +#include <svx/sidebar/LineWidthPopup.hxx> #include "LineWidthControl.hxx" -#include "LinePropertyPanel.hxx" + +#include <svx/sidebar/LinePropertyPanelBase.hxx> #include <unotools/viewoptions.hxx> commit fee180f13d48c1fa97a3ecde4b2067e5b0f13fc2 Author: Markus Mohrhard <[email protected]> Date: Tue Jul 28 18:52:30 2015 +0200 split the line width panel into two pieces The new LinePropertyPanelBase has no reference to SfxBindings anymore. Change-Id: I7d1d1bb351066dca8bfeedc559048f8337e47f67 diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index 339b502..6fcce69 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 59c56da..c025c86 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 cfbcd4a..6a94423 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 0000000..14ad854 --- /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 0000000..e5dd0d9 --- /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: + ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
