diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-01-02 14:45:32 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-01-06 16:44:21 +0100 |
commit | 40fe5b93bc0838e04b46bfc7942d1ee6a2482ce0 (patch) | |
tree | 151814d0863c9912d18722732beb13b1e22e0ff1 | |
parent | tdf#129549: hide .uno:BulletsAndNumberingDialog from customization UI (diff) | |
download | core-40fe5b93bc0838e04b46bfc7942d1ee6a2482ce0.tar.gz core-40fe5b93bc0838e04b46bfc7942d1ee6a2482ce0.zip |
weld AreaPropertyPanel
Change-Id: I5f4c4b43067b99cd57f8ea941002481ef5977e09
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86144
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
46 files changed, 1200 insertions, 832 deletions
diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.cxx b/chart2/source/controller/sidebar/ChartAreaPanel.cxx index 61e72318043c..1260b36fe397 100644 --- a/chart2/source/controller/sidebar/ChartAreaPanel.cxx +++ b/chart2/source/controller/sidebar/ChartAreaPanel.cxx @@ -17,6 +17,7 @@ #include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/chart2/XDiagram.hpp> +#include <sfx2/weldutils.hxx> #include <svx/xfltrit.hxx> #include <svx/xflftrit.hxx> #include <svx/xbtmpit.hxx> @@ -29,9 +30,9 @@ namespace chart { namespace sidebar { namespace { -SvxColorToolBoxControl* getColorToolBoxControl(sfx2::sidebar::SidebarToolBox* pToolBoxColor) +SvxColorToolBoxControl* getColorToolBoxControl(ToolbarUnoDispatcher& rColorDispatch) { - css::uno::Reference<css::frame::XToolbarController> xController = pToolBoxColor->GetFirstController(); + css::uno::Reference<css::frame::XToolbarController> xController = rColorDispatch.GetControllerForCommand(".uno:FillColor"); SvxColorToolBoxControl* pToolBoxColorControl = dynamic_cast<SvxColorToolBoxControl*>(xController.get()); return pToolBoxColorControl; } @@ -261,7 +262,7 @@ ChartAreaPanel::ChartAreaPanel(vcl::Window* pParent, mxSelectionListener(new ChartSidebarSelectionListener(this)), mbUpdate(true), mbModelValid(true), - maFillColorWrapper(mxModel, getColorToolBoxControl(mpToolBoxColor.get()), "FillColor") + maFillColorWrapper(mxModel, getColorToolBoxControl(*mxColorDispatch), "FillColor") { std::vector<ObjectType> aAcceptedTypes { OBJECTTYPE_PAGE, OBJECTTYPE_DIAGRAM, OBJECTTYPE_DATA_SERIES, OBJECTTYPE_DATA_POINT, @@ -296,7 +297,7 @@ void ChartAreaPanel::Initialize() if (xSelectionSupplier.is()) xSelectionSupplier->addSelectionChangeListener(mxSelectionListener.get()); - SvxColorToolBoxControl* pToolBoxColor = getColorToolBoxControl(mpToolBoxColor.get()); + SvxColorToolBoxControl* pToolBoxColor = getColorToolBoxControl(*mxColorDispatch); pToolBoxColor->setColorSelectFunction(maFillColorWrapper); updateData(); diff --git a/framework/inc/uielement/complextoolbarcontroller.hxx b/framework/inc/uielement/complextoolbarcontroller.hxx index fad83e62a233..5c5bf8499eeb 100644 --- a/framework/inc/uielement/complextoolbarcontroller.hxx +++ b/framework/inc/uielement/complextoolbarcontroller.hxx @@ -88,7 +88,7 @@ class ComplexToolbarController : public svt::ToolboxController void notifyFocusLost(); void notifyTextChanged( const OUString& aText ); - VclPtr<ToolBox> m_pToolbar; + VclPtr<ToolBox> m_xToolbar; sal_uInt16 m_nID; bool m_bMadeInvisible; mutable css::util::URL m_aURL; diff --git a/framework/inc/uielement/generictoolbarcontroller.hxx b/framework/inc/uielement/generictoolbarcontroller.hxx index b1d7c5b70b99..4eee88c1fcf1 100644 --- a/framework/inc/uielement/generictoolbarcontroller.hxx +++ b/framework/inc/uielement/generictoolbarcontroller.hxx @@ -62,7 +62,7 @@ class GenericToolbarController final : public svt::ToolboxController }; private: - VclPtr<ToolBox> m_pToolbar; + VclPtr<ToolBox> m_xToolbar; sal_uInt16 m_nID; bool m_bEnumCommand : 1, m_bMadeInvisible : 1; diff --git a/framework/source/uielement/FixedImageToolbarController.cxx b/framework/source/uielement/FixedImageToolbarController.cxx index e3a37e9c4c4d..19e05f081d0d 100644 --- a/framework/source/uielement/FixedImageToolbarController.cxx +++ b/framework/source/uielement/FixedImageToolbarController.cxx @@ -42,8 +42,8 @@ FixedImageToolbarController::FixedImageToolbarController( : ComplexToolbarController(rxContext, rFrame, pToolbar, nID, aCommand) , m_eSymbolSize(SvtMiscOptions().GetCurrentSymbolsSize()) { - m_pFixedImageControl = VclPtr<FixedImage>::Create(m_pToolbar, 0); - m_pToolbar->SetItemWindow(m_nID, m_pFixedImageControl); + m_pFixedImageControl = VclPtr<FixedImage>::Create(m_xToolbar, 0); + m_xToolbar->SetItemWindow(m_nID, m_pFixedImageControl); bool bBigImages(SvtMiscOptions().AreCurrentSymbolsLarge()); @@ -59,7 +59,7 @@ void SAL_CALL FixedImageToolbarController::dispose() SolarMutexGuard aSolarMutexGuard; SvtMiscOptions().RemoveListenerLink( LINK(this, FixedImageToolbarController, MiscOptionsChanged)); - m_pToolbar->SetItemWindow(m_nID, nullptr); + m_xToolbar->SetItemWindow(m_nID, nullptr); m_pFixedImageControl.disposeAndClear(); ComplexToolbarController::dispose(); } diff --git a/framework/source/uielement/FixedTextToolbarController.cxx b/framework/source/uielement/FixedTextToolbarController.cxx index 97a980987300..26208cc68bb1 100644 --- a/framework/source/uielement/FixedTextToolbarController.cxx +++ b/framework/source/uielement/FixedTextToolbarController.cxx @@ -38,16 +38,16 @@ FixedTextToolbarController::FixedTextToolbarController( ToolBox* pToolbar, sal_uInt16 nID, const OUString& aCommand) : ComplexToolbarController(rxContext, rFrame, pToolbar, nID, aCommand) { - m_pFixedTextControl = VclPtr<FixedText>::Create(m_pToolbar, WB_NOMULTILINE | WB_VCENTER + m_pFixedTextControl = VclPtr<FixedText>::Create(m_xToolbar, WB_NOMULTILINE | WB_VCENTER | WB_LEFT | WB_NOPOINTERFOCUS); - m_pToolbar->SetItemWindow(m_nID, m_pFixedTextControl); - m_pToolbar->SetItemBits(m_nID, ToolBoxItemBits::AUTOSIZE | m_pToolbar->GetItemBits(m_nID)); + m_xToolbar->SetItemWindow(m_nID, m_pFixedTextControl); + m_xToolbar->SetItemBits(m_nID, ToolBoxItemBits::AUTOSIZE | m_xToolbar->GetItemBits(m_nID)); } void SAL_CALL FixedTextToolbarController::dispose() { SolarMutexGuard aSolarMutexGuard; - m_pToolbar->SetItemWindow(m_nID, nullptr); + m_xToolbar->SetItemWindow(m_nID, nullptr); m_pFixedTextControl.disposeAndClear(); ComplexToolbarController::dispose(); } diff --git a/framework/source/uielement/comboboxtoolbarcontroller.cxx b/framework/source/uielement/comboboxtoolbarcontroller.cxx index 699fd676cb35..fedb1b75d9a7 100644 --- a/framework/source/uielement/comboboxtoolbarcontroller.cxx +++ b/framework/source/uielement/comboboxtoolbarcontroller.cxx @@ -124,7 +124,7 @@ ComboboxToolbarController::ComboboxToolbarController( ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand ) , m_pComboBox( nullptr ) { - m_pComboBox = VclPtr<ComboBoxControl>::Create( m_pToolbar, WB_DROPDOWN, this ); + m_pComboBox = VclPtr<ComboBoxControl>::Create( m_xToolbar, WB_DROPDOWN, this ); if ( nWidth == 0 ) nWidth = 100; @@ -133,7 +133,7 @@ ComboboxToolbarController::ComboboxToolbarController( ::Size aPixelSize = m_pComboBox->LogicToPixel(aLogicalSize, MapMode(MapUnit::MapAppFont)); m_pComboBox->SetSizePixel( ::Size( nWidth, aPixelSize.Height() )); - m_pToolbar->SetItemWindow( m_nID, m_pComboBox ); + m_xToolbar->SetItemWindow( m_nID, m_pComboBox ); } ComboboxToolbarController::~ComboboxToolbarController() @@ -144,7 +144,7 @@ void SAL_CALL ComboboxToolbarController::dispose() { SolarMutexGuard aSolarMutexGuard; - m_pToolbar->SetItemWindow( m_nID, nullptr ); + m_xToolbar->SetItemWindow( m_nID, nullptr ); m_pComboBox.disposeAndClear(); ComplexToolbarController::dispose(); diff --git a/framework/source/uielement/complextoolbarcontroller.cxx b/framework/source/uielement/complextoolbarcontroller.cxx index 51ede7a9a9b4..eb4a59f38a0a 100644 --- a/framework/source/uielement/complextoolbarcontroller.cxx +++ b/framework/source/uielement/complextoolbarcontroller.cxx @@ -53,7 +53,7 @@ ComplexToolbarController::ComplexToolbarController( sal_uInt16 nID, const OUString& aCommand ) : svt::ToolboxController( rxContext, rFrame, aCommand ) - , m_pToolbar( pToolbar ) + , m_xToolbar( pToolbar ) , m_nID( nID ) , m_bMadeInvisible( false ) { @@ -68,11 +68,11 @@ void SAL_CALL ComplexToolbarController::dispose() { SolarMutexGuard aSolarMutexGuard; - m_pToolbar->SetItemWindow( m_nID, nullptr ); + m_xToolbar->SetItemWindow( m_nID, nullptr ); svt::ToolboxController::dispose(); m_xURLTransformer.clear(); - m_pToolbar.clear(); + m_xToolbar.clear(); m_nID = 0; } @@ -128,11 +128,11 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event ) if ( m_bDisposed ) return; - if ( m_pToolbar ) + if ( m_xToolbar ) { - m_pToolbar->EnableItem( m_nID, Event.IsEnabled ); + m_xToolbar->EnableItem( m_nID, Event.IsEnabled ); - ToolBoxItemBits nItemBits = m_pToolbar->GetItemBits( m_nID ); + ToolBoxItemBits nItemBits = m_xToolbar->GetItemBits( m_nID ); nItemBits &= ~ToolBoxItemBits::CHECKABLE; TriState eTri = TRISTATE_FALSE; @@ -146,8 +146,8 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event ) { // Boolean, treat it as checked/unchecked if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); - m_pToolbar->CheckItem( m_nID, bValue ); + m_xToolbar->ShowItem( m_nID ); + m_xToolbar->CheckItem( m_nID, bValue ); if ( bValue ) eTri = TRISTATE_TRUE; nItemBits |= ToolBoxItemBits::CHECKABLE; @@ -155,22 +155,22 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event ) else if ( Event.State >>= aStrValue ) { OUString aText( MnemonicGenerator::EraseAllMnemonicChars( aStrValue ) ); - m_pToolbar->SetItemText( m_nID, aText ); - m_pToolbar->SetQuickHelpText( m_nID, aText ); + m_xToolbar->SetItemText( m_nID, aText ); + m_xToolbar->SetQuickHelpText( m_nID, aText ); if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); } else if ( Event.State >>= aItemState ) { eTri = TRISTATE_INDET; nItemBits |= ToolBoxItemBits::CHECKABLE; if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); } else if ( Event.State >>= aItemVisibility ) { - m_pToolbar->ShowItem( m_nID, aItemVisibility.bVisible ); + m_xToolbar->ShowItem( m_nID, aItemVisibility.bVisible ); m_bMadeInvisible = !aItemVisibility.bVisible; } else if ( Event.State >>= aControlCommand ) @@ -183,7 +183,7 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event ) { OUString aHelpText; aControlCommand.Arguments[i].Value >>= aHelpText; - m_pToolbar->SetQuickHelpText(m_nID, aHelpText); + m_xToolbar->SetQuickHelpText(m_nID, aHelpText); break; } } @@ -193,14 +193,14 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event ) executeControlCommand( aControlCommand ); } if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); } else if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); - m_pToolbar->SetItemState( m_nID, eTri ); - m_pToolbar->SetItemBits( m_nID, nItemBits ); + m_xToolbar->SetItemState( m_nID, eTri ); + m_xToolbar->SetItemBits( m_nID, nItemBits ); } } diff --git a/framework/source/uielement/dropdownboxtoolbarcontroller.cxx b/framework/source/uielement/dropdownboxtoolbarcontroller.cxx index ef73758a6040..6eacd138660d 100644 --- a/framework/source/uielement/dropdownboxtoolbarcontroller.cxx +++ b/framework/source/uielement/dropdownboxtoolbarcontroller.cxx @@ -116,7 +116,7 @@ DropdownToolbarController::DropdownToolbarController( ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand ) , m_pListBoxControl( nullptr ) { - m_pListBoxControl = VclPtr<ListBoxControl>::Create( m_pToolbar, WB_DROPDOWN|WB_AUTOHSCROLL|WB_BORDER, this ); + m_pListBoxControl = VclPtr<ListBoxControl>::Create( m_xToolbar, WB_DROPDOWN|WB_AUTOHSCROLL|WB_BORDER, this ); if ( nWidth == 0 ) nWidth = 100; @@ -125,7 +125,7 @@ DropdownToolbarController::DropdownToolbarController( ::Size aPixelSize = m_pListBoxControl->LogicToPixel(aLogicalSize, MapMode(MapUnit::MapAppFont)); m_pListBoxControl->SetSizePixel( ::Size( nWidth, aPixelSize.Height() )); - m_pToolbar->SetItemWindow( m_nID, m_pListBoxControl ); + m_xToolbar->SetItemWindow( m_nID, m_pListBoxControl ); m_pListBoxControl->SetDropDownLineCount( 5 ); } @@ -137,7 +137,7 @@ void SAL_CALL DropdownToolbarController::dispose() { SolarMutexGuard aSolarMutexGuard; - m_pToolbar->SetItemWindow( m_nID, nullptr ); + m_xToolbar->SetItemWindow( m_nID, nullptr ); m_pListBoxControl.disposeAndClear(); ComplexToolbarController::dispose(); diff --git a/framework/source/uielement/edittoolbarcontroller.cxx b/framework/source/uielement/edittoolbarcontroller.cxx index 0ec00b73a3e4..2e6164181072 100644 --- a/framework/source/uielement/edittoolbarcontroller.cxx +++ b/framework/source/uielement/edittoolbarcontroller.cxx @@ -116,7 +116,7 @@ EditToolbarController::EditToolbarController( ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand ) , m_pEditControl( nullptr ) { - m_pEditControl = VclPtr<EditControl>::Create( m_pToolbar, WB_BORDER, this ); + m_pEditControl = VclPtr<EditControl>::Create( m_xToolbar, WB_BORDER, this ); if ( nWidth == 0 ) nWidth = 100; @@ -124,7 +124,7 @@ EditToolbarController::EditToolbarController( sal_Int32 nHeight = getFontSizePixel( m_pEditControl ) + 6 + 1; m_pEditControl->SetSizePixel( ::Size( nWidth, nHeight )); - m_pToolbar->SetItemWindow( m_nID, m_pEditControl ); + m_xToolbar->SetItemWindow( m_nID, m_pEditControl ); } EditToolbarController::~EditToolbarController() @@ -135,7 +135,7 @@ void SAL_CALL EditToolbarController::dispose() { SolarMutexGuard aSolarMutexGuard; - m_pToolbar->SetItemWindow( m_nID, nullptr ); + m_xToolbar->SetItemWindow( m_nID, nullptr ); m_pEditControl.disposeAndClear(); ComplexToolbarController::dispose(); diff --git a/framework/source/uielement/generictoolbarcontroller.cxx b/framework/source/uielement/generictoolbarcontroller.cxx index 746f4e18f5ca..770f5860fbef 100644 --- a/framework/source/uielement/generictoolbarcontroller.cxx +++ b/framework/source/uielement/generictoolbarcontroller.cxx @@ -92,7 +92,7 @@ GenericToolbarController::GenericToolbarController( const Reference< XComponentC sal_uInt16 nID, const OUString& aCommand ) : svt::ToolboxController( rxContext, rFrame, aCommand ) - , m_pToolbar( pToolbar ) + , m_xToolbar( pToolbar ) , m_nID( nID ) , m_bEnumCommand( isEnumCommand( aCommand )) , m_bMadeInvisible( false ) @@ -112,7 +112,7 @@ void SAL_CALL GenericToolbarController::dispose() svt::ToolboxController::dispose(); - m_pToolbar.clear(); + m_xToolbar.clear(); m_nID = 0; } @@ -167,11 +167,11 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event ) if ( m_bDisposed ) return; - if ( m_pToolbar ) + if ( m_xToolbar ) { - m_pToolbar->EnableItem( m_nID, Event.IsEnabled ); + m_xToolbar->EnableItem( m_nID, Event.IsEnabled ); - ToolBoxItemBits nItemBits = m_pToolbar->GetItemBits( m_nID ); + ToolBoxItemBits nItemBits = m_xToolbar->GetItemBits( m_nID ); nItemBits &= ~ToolBoxItemBits::CHECKABLE; TriState eTri = TRISTATE_FALSE; @@ -185,8 +185,8 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event ) { // Boolean, treat it as checked/unchecked if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); - m_pToolbar->CheckItem( m_nID, bValue ); + m_xToolbar->ShowItem( m_nID ); + m_xToolbar->CheckItem( m_nID, bValue ); if ( bValue ) eTri = TRISTATE_TRUE; nItemBits |= ToolBoxItemBits::CHECKABLE; @@ -197,7 +197,7 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event ) { bValue = aStrValue == m_aEnumCommand; - m_pToolbar->CheckItem( m_nID, bValue ); + m_xToolbar->CheckItem( m_nID, bValue ); if ( bValue ) eTri = TRISTATE_TRUE; nItemBits |= ToolBoxItemBits::CHECKABLE; @@ -217,24 +217,24 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event ) { aStrValue = FwkResId(STR_SAVECOPYDOC) + aStrValue.copy( 4 ); } - m_pToolbar->SetItemText( m_nID, aStrValue ); + m_xToolbar->SetItemText( m_nID, aStrValue ); // tdf#124267 strip mnemonic from tooltip - m_pToolbar->SetQuickHelpText(m_nID, aStrValue.replaceFirst("~", "")); + m_xToolbar->SetQuickHelpText(m_nID, aStrValue.replaceFirst("~", "")); } if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); } else if (( Event.State >>= aItemState ) && !m_bEnumCommand ) { eTri = TRISTATE_INDET; nItemBits |= ToolBoxItemBits::CHECKABLE; if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); } else if ( Event.State >>= aItemVisibility ) { - m_pToolbar->ShowItem( m_nID, aItemVisibility.bVisible ); + m_xToolbar->ShowItem( m_nID, aItemVisibility.bVisible ); m_bMadeInvisible = !aItemVisibility.bVisible; } else if ( Event.State >>= aControlCommand ) @@ -247,19 +247,19 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event ) { OUString aHelpText; aControlCommand.Arguments[i].Value >>= aHelpText; - m_pToolbar->SetQuickHelpText(m_nID, aHelpText); + m_xToolbar->SetQuickHelpText(m_nID, aHelpText); break; } } } if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); } else if ( m_bMadeInvisible ) - m_pToolbar->ShowItem( m_nID ); + m_xToolbar->ShowItem( m_nID ); - m_pToolbar->SetItemState( m_nID, eTri ); - m_pToolbar->SetItemBits( m_nID, nItemBits ); + m_xToolbar->SetItemState( m_nID, eTri ); + m_xToolbar->SetItemBits( m_nID, nItemBits ); } } diff --git a/framework/source/uielement/imagebuttontoolbarcontroller.cxx b/framework/source/uielement/imagebuttontoolbarcontroller.cxx index 18b23dd41628..9ad5cc47885e 100644 --- a/framework/source/uielement/imagebuttontoolbarcontroller.cxx +++ b/framework/source/uielement/imagebuttontoolbarcontroller.cxx @@ -66,7 +66,7 @@ ImageButtonToolbarController::ImageButtonToolbarController( Image aImage = AddonsOptions().GetImageFromURL( aCommand, bBigImages, true ); // Height will be controlled by scaling according to button height - m_pToolbar->SetItemImage( m_nID, aImage ); + m_xToolbar->SetItemImage( m_nID, aImage ); } ImageButtonToolbarController::~ImageButtonToolbarController() @@ -100,7 +100,7 @@ void ImageButtonToolbarController::executeControlCommand( const css::frame::Cont aURL, aImage )) { - m_pToolbar->SetItemImage( m_nID, aImage ); + m_xToolbar->SetItemImage( m_nID, aImage ); // send notification uno::Sequence< beans::NamedValue > aInfo { { "URL", css::uno::makeAny(aURL) } }; diff --git a/framework/source/uielement/spinfieldtoolbarcontroller.cxx b/framework/source/uielement/spinfieldtoolbarcontroller.cxx index ae51cc6063ea..0f329d9681ec 100644 --- a/framework/source/uielement/spinfieldtoolbarcontroller.cxx +++ b/framework/source/uielement/spinfieldtoolbarcontroller.cxx @@ -160,7 +160,7 @@ SpinfieldToolbarController::SpinfieldToolbarController( , m_nStep( 0.0 ) , m_pSpinfieldControl( nullptr ) { - m_pSpinfieldControl = VclPtr<SpinfieldControl>::Create( m_pToolbar, WB_SPIN|WB_BORDER, this ); + m_pSpinfieldControl = VclPtr<SpinfieldControl>::Create( m_xToolbar, WB_SPIN|WB_BORDER, this ); if ( nWidth == 0 ) nWidth = 100; @@ -168,7 +168,7 @@ SpinfieldToolbarController::SpinfieldToolbarController( sal_Int32 nHeight = getFontSizePixel( m_pSpinfieldControl ) + 5 + 1; m_pSpinfieldControl->SetSizePixel( ::Size( nWidth, nHeight )); - m_pToolbar->SetItemWindow( m_nID, m_pSpinfieldControl ); + m_xToolbar->SetItemWindow( m_nID, m_pSpinfieldControl ); } SpinfieldToolbarController::~SpinfieldToolbarController() @@ -179,7 +179,7 @@ void SAL_CALL SpinfieldToolbarController::dispose() { SolarMutexGuard aSolarMutexGuard; - m_pToolbar->SetItemWindow( m_nID, nullptr ); + m_xToolbar->SetItemWindow( m_nID, nullptr ); m_pSpinfieldControl.disposeAndClear(); ComplexToolbarController::dispose(); diff --git a/framework/source/uielement/togglebuttontoolbarcontroller.cxx b/framework/source/uielement/togglebuttontoolbarcontroller.cxx index 8cd8a94b51f0..ca2d4312c443 100644 --- a/framework/source/uielement/togglebuttontoolbarcontroller.cxx +++ b/framework/source/uielement/togglebuttontoolbarcontroller.cxx @@ -45,9 +45,9 @@ ToggleButtonToolbarController::ToggleButtonToolbarController( ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand ) { if ( eStyle == Style::DropDownButton ) - m_pToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWNONLY | m_pToolbar->GetItemBits( m_nID ) ); + m_xToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWNONLY | m_xToolbar->GetItemBits( m_nID ) ); else // Style::ToggleDropDownButton - m_pToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWN | m_pToolbar->GetItemBits( m_nID ) ); + m_xToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWN | m_xToolbar->GetItemBits( m_nID ) ); } ToggleButtonToolbarController::~ToggleButtonToolbarController() @@ -94,10 +94,10 @@ uno::Reference< awt::XWindow > SAL_CALL ToggleButtonToolbarController::createPop aPopup->SetTipHelpText( sal_uInt16( i+1 ), m_aDropdownMenuList[i].mTipHelpText ); } - m_pToolbar->SetItemDown( m_nID, true ); + m_xToolbar->SetItemDown( m_nID, true ); aPopup->SetSelectHdl( LINK( this, ToggleButtonToolbarController, MenuSelectHdl )); - aPopup->Execute( m_pToolbar, m_pToolbar->GetItemRect( m_nID )); - m_pToolbar->SetItemDown( m_nID, false ); + aPopup->Execute( m_xToolbar, m_xToolbar->GetItemRect( m_nID )); + m_xToolbar->SetItemDown( m_nID, false ); return xWindow; } diff --git a/include/sfx2/weldutils.hxx b/include/sfx2/weldutils.hxx index ccca8b393042..e87295c23abc 100644 --- a/include/sfx2/weldutils.hxx +++ b/include/sfx2/weldutils.hxx @@ -38,13 +38,14 @@ private: ControllerContainer; ControllerContainer maControllers; - css::uno::Reference<css::frame::XToolbarController> - GetControllerForCommand(const OUString& rCommand) const; - public: // fill in the label and icons for actions and dispatch the action on item click ToolbarUnoDispatcher(weld::Toolbar& rToolbar, const css::uno::Reference<css::frame::XFrame>& rFrame); + + css::uno::Reference<css::frame::XToolbarController> + GetControllerForCommand(const OUString& rCommand) const; + void dispose(); ~ToolbarUnoDispatcher(); }; diff --git a/include/svtools/popupwindowcontroller.hxx b/include/svtools/popupwindowcontroller.hxx index 41de1cbee9c7..1666c8ad1513 100644 --- a/include/svtools/popupwindowcontroller.hxx +++ b/include/svtools/popupwindowcontroller.hxx @@ -32,6 +32,11 @@ namespace vcl { class Window; } +namespace svtools +{ + class ToolbarPopupBase; +} + namespace svt { class PopupWindowControllerImpl; @@ -45,6 +50,8 @@ public: const OUString& aCommandURL ); virtual ~PopupWindowController() override; + void EndPopupMode(); + virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) = 0; // XServiceInfo @@ -61,6 +68,9 @@ public: // XToolbarController virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createPopupWindow() override; +protected: + std::unique_ptr<svtools::ToolbarPopupBase> mxPopover; + private: std::unique_ptr<PopupWindowControllerImpl, o3tl::default_delete<PopupWindowControllerImpl>> mxImpl; }; diff --git a/include/svtools/toolboxcontroller.hxx b/include/svtools/toolboxcontroller.hxx index 5d86aeb35930..0ec7228fe5a8 100644 --- a/include/svtools/toolboxcontroller.hxx +++ b/include/svtools/toolboxcontroller.hxx @@ -45,6 +45,11 @@ namespace com :: sun :: star :: util { class XURLTransformer; } class ToolBox; +namespace weld +{ + class Toolbar; +} + namespace svt { @@ -165,8 +170,9 @@ class SVT_DLLPUBLIC ToolboxController : // TODO remove const css::uno::Reference< css::awt::XWindow >& getParent() const { return m_xParentWindow;} - bool m_bInitialized : 1, - m_bDisposed : 1; + bool m_bInitialized, + m_bDisposed, + m_bSidebar; sal_uInt16 m_nToolBoxId; css::uno::Reference< css::frame::XFrame > m_xFrame; css::uno::Reference< css::uno::XComponentContext > m_xContext; @@ -177,6 +183,7 @@ class SVT_DLLPUBLIC ToolboxController : css::uno::Reference< css::awt::XWindow > m_xParentWindow; css::uno::Reference< css::util::XURLTransformer > m_xUrlTransformer; OUString m_sModuleName; + weld::Toolbar* m_pToolbar; }; } diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx index 81621e436b0b..d468f0199588 100644 --- a/include/svx/PaletteManager.hxx +++ b/include/svx/PaletteManager.hxx @@ -29,7 +29,7 @@ class SvxColorValueSet; namespace com::sun::star::uno { class XComponentContext; } -namespace svx { class ToolboxButtonColorUpdater; } +namespace svx { class ToolboxButtonColorUpdaterBase; } namespace weld { class Window; } class SVX_DLLPUBLIC PaletteManager @@ -40,7 +40,7 @@ class SVX_DLLPUBLIC PaletteManager sal_uInt16 mnCurrentPalette; long mnColorCount; - svx::ToolboxButtonColorUpdater* mpBtnUpdater; + svx::ToolboxButtonColorUpdaterBase* mpBtnUpdater; XColorListRef pColorList; std::deque<NamedColor> maRecentColors; @@ -69,7 +69,7 @@ public: long GetRecentColorCount() const; void AddRecentColor(const Color& rRecentColor, const OUString& rColorName, bool bFront = true); - void SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater); + void SetBtnUpdater(svx::ToolboxButtonColorUpdaterBase* pBtnUpdater); void PopupColorPicker(weld::Window* pParent, const OUString& aCommand, const Color& rInitialColor); void SetColorSelectFunction(const std::function<void(const OUString&, const NamedColor&)>& aColorSelectFunction); diff --git a/include/svx/colorwindow.hxx b/include/svx/colorwindow.hxx index acc18149e2ca..257d1e6801f7 100644 --- a/include/svx/colorwindow.hxx +++ b/include/svx/colorwindow.hxx @@ -132,6 +132,7 @@ private: std::unique_ptr<weld::Builder> m_xBuilder; const sal_uInt16 theSlotId; + OUString maCommand; weld::Window* const mpParentWindow; MenuOrToolMenuButton maMenuButton; std::shared_ptr<PaletteManager> mxPaletteManager; @@ -150,6 +151,7 @@ private: std::unique_ptr<weld::CustomWeld> mxRecentColorSetWin; weld::Button* mpDefaultButton; + Link<const NamedColor&, void> maSelectedLink; DECL_LINK(SelectHdl, SvtValueSet*, void); DECL_LINK(SelectPaletteHdl, weld::ComboBox&, void); DECL_LINK(AutoColorClickHdl, weld::Button&, void); @@ -160,13 +162,14 @@ private: NamedColor GetAutoColor() const; public: - ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager, + ColorWindow(const OUString& rCommand, + std::shared_ptr<PaletteManager> const & rPaletteManager, ColorStatus& rColorStatus, sal_uInt16 nSlotId, const css::uno::Reference< css::frame::XFrame >& rFrame, weld::Window* pParentWindow, const MenuOrToolMenuButton &rMenuButton, ColorSelectFunction const& rColorSelectFunction); - weld::Container* GetWidget() { return mxTopLevel.get(); } + weld::Container* getTopLevel() { return mxTopLevel.get(); } virtual ~ColorWindow() override; void ShowNoneButton(); void SetNoSelection(); @@ -179,6 +182,7 @@ public: virtual void statusChanged( const css::frame::FeatureStateEvent& rEvent ) override; + void SetSelectedHdl( const Link<const NamedColor&, void>& rLink ) { maSelectedLink = rLink; } }; #endif diff --git a/include/svx/itemwin.hxx b/include/svx/itemwin.hxx index 4f4c3ec140a0..889a513586fe 100644 --- a/include/svx/itemwin.hxx +++ b/include/svx/itemwin.hxx @@ -113,6 +113,7 @@ public: void Fill( const XPatternListRef &pList ); static void Fill(weld::ComboBox&, const XHatchListRef &pList); + static void Fill(weld::ComboBox&, const XGradientListRef &pList); static void Fill(weld::ComboBox&, const XBitmapListRef &pList); static void Fill(weld::ComboBox&, const XPatternListRef &pList); diff --git a/include/svx/sidebar/AreaPropertyPanelBase.hxx b/include/svx/sidebar/AreaPropertyPanelBase.hxx index abe5a603514c..bc72b8b7c4aa 100644 --- a/include/svx/sidebar/AreaPropertyPanelBase.hxx +++ b/include/svx/sidebar/AreaPropertyPanelBase.hxx @@ -32,15 +32,11 @@ #include <svx/xflhtit.hxx> #include <svx/xbtmpit.hxx> #include <svx/sidebar/PanelLayout.hxx> -#include <vcl/lstbox.hxx> -#include <vcl/field.hxx> -#include <vcl/slider.hxx> -#include <vcl/fixed.hxx> -#include <vcl/vclptr.hxx> #include <svl/intitem.hxx> #include <svx/svxdllapi.h> #include <sfx2/sidebar/Panel.hxx> +class ToolbarUnoDispatcher; class XFillFloatTransparenceItem; class XFillTransparenceItem; class XFillStyleItem; @@ -117,20 +113,22 @@ protected: XGradient maGradientRect; //ui controls - VclPtr<FixedText> mpColorTextFT; - VclPtr<SvxFillTypeBox> mpLbFillType; - VclPtr<SvxFillAttrBox> mpLbFillAttr; - VclPtr<SvxColorListBox> mpLbFillGradFrom; - VclPtr<SvxColorListBox> mpLbFillGradTo; - VclPtr<sfx2::sidebar::SidebarToolBox> mpToolBoxColor; // for new color picker - VclPtr<FixedText> mpTrspTextFT; - VclPtr<ListBox> mpLBTransType; - VclPtr<MetricField> mpMTRTransparent; - VclPtr<Slider> mpSldTransparent; - VclPtr<ToolBox> mpBTNGradient; - VclPtr<MetricField> mpMTRAngle; - VclPtr<ListBox> mpGradientStyle; - VclPtr<PushButton> mpBmpImport; + std::unique_ptr<weld::Label> mxColorTextFT; + std::unique_ptr<weld::ComboBox> mxLbFillType; + std::unique_ptr<weld::ComboBox> mxLbFillAttr; + std::unique_ptr<ColorListBox> mxLbFillGradFrom; + std::unique_ptr<ColorListBox> mxLbFillGradTo; + std::unique_ptr<weld::Toolbar> mxToolBoxColor; // for new color picker + std::unique_ptr<ToolbarUnoDispatcher> mxColorDispatch; + std::unique_ptr<weld::Label> mxTrspTextFT; + std::unique_ptr<weld::ComboBox> mxLBTransType; + std::unique_ptr<weld::MetricSpinButton> mxMTRTransparent; + std::unique_ptr<weld::Scale> mxSldTransparent; + std::unique_ptr<weld::Toolbar> mxBTNGradient; + std::unique_ptr<weld::MetricSpinButton> mxMTRAngle; + std::unique_ptr<weld::ComboBox> mxGradientStyle; + std::unique_ptr<weld::Button> mxBmpImport; + std::unique_ptr<AreaTransparencyGradientPopup> mxTrGrPopup; std::unique_ptr< XFillStyleItem > mpStyleItem; std::unique_ptr< XFillColorItem > mpColorItem; @@ -138,30 +136,27 @@ protected: std::unique_ptr< XFillHatchItem > mpHatchItem; std::unique_ptr< XFillBitmapItem > mpBitmapItem; - Image maImgAxial; - Image maImgElli; - Image maImgQuad; - Image maImgRadial; - Image maImgSquare; - Image maImgLinear; + OUString maImgAxial; + OUString maImgElli; + OUString maImgQuad; + OUString maImgRadial; + OUString maImgSquare; + OUString maImgLinear; - VclPtr<AreaTransparencyGradientPopup> mxTrGrPopup; VclPtr<sfx2::sidebar::Panel> mpPanel; std::unique_ptr< XFillFloatTransparenceItem > mpFloatTransparenceItem; std::unique_ptr< SfxUInt16Item > mpTransparanceItem; - DECL_LINK(SelectFillTypeHdl, ListBox&, void ); - DECL_LINK(SelectFillAttrHdl, ListBox&, void ); - DECL_LINK(SelectFillColorHdl, SvxColorListBox&, void); - DECL_LINK(ChangeGradientAngle, Edit&, void); - DECL_LINK(ChangeTrgrTypeHdl_Impl, ListBox&, void); - DECL_LINK(ModifyTransparentHdl_Impl, Edit&, void); - DECL_LINK(ModifyTransSliderHdl, Slider*, void); - DECL_LINK(ClickImportBitmapHdl, Button*, void); - - // for transparency gradient - DECL_LINK( ClickTrGrHdl_Impl, ToolBox*, void ); + DECL_LINK(SelectFillTypeHdl, weld::ComboBox&, void ); + DECL_LINK(SelectFillAttrHdl, weld::ComboBox&, void ); + DECL_LINK(SelectFillColorHdl, ColorListBox&, void); + DECL_LINK(ChangeGradientAngle, weld::MetricSpinButton&, void); + DECL_LINK(ChangeTrgrTypeHdl_Impl, weld::ComboBox&, void); + DECL_LINK(ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void); + DECL_LINK(ModifyTransSliderHdl, weld::Scale&, void); + DECL_LINK(ClickImportBitmapHdl, weld::Button&, void); + DECL_LINK(ToolbarHdl_Impl, const OString&, void); void Initialize(); void Update(); diff --git a/include/svx/sidebar/AreaTransparencyGradientPopup.hxx b/include/svx/sidebar/AreaTransparencyGradientPopup.hxx index cbdc5e9a114e..67abcbf6a5cc 100644 --- a/include/svx/sidebar/AreaTransparencyGradientPopup.hxx +++ b/include/svx/sidebar/AreaTransparencyGradientPopup.hxx @@ -19,12 +19,8 @@ #ifndef INCLUDED_SVX_SOURCE_SIDEBAR_AREA_AREATRANSPARENCYGRADIENTPOPUP_HXX #define INCLUDED_SVX_SOURCE_SIDEBAR_AREA_AREATRANSPARENCYGRADIENTPOPUP_HXX -#include <vcl/edit.hxx> -#include <vcl/field.hxx> -#include <vcl/floatwin.hxx> -#include <vcl/toolbox.hxx> +#include <vcl/weld.hxx> -class VclContainer; class XFillFloatTransparenceItem; namespace svx { namespace sidebar { @@ -32,31 +28,35 @@ namespace svx { namespace sidebar { class AreaTransparencyGradientControl; class AreaPropertyPanelBase; -class AreaTransparencyGradientPopup final : public FloatingWindow +class AreaTransparencyGradientPopup final { private: AreaPropertyPanelBase& mrAreaPropertyPanel; - VclPtr<VclContainer> maCenterGrid; - VclPtr<VclContainer> maAngleGrid; - VclPtr<MetricField> maMtrTrgrCenterX; - VclPtr<MetricField> maMtrTrgrCenterY; - VclPtr<MetricField> maMtrTrgrAngle; - VclPtr<ToolBox> maBtnLeft45; - VclPtr<ToolBox> maBtnRight45; - VclPtr<MetricField> maMtrTrgrStartValue; - VclPtr<MetricField> maMtrTrgrEndValue; - VclPtr<MetricField> maMtrTrgrBorder; + std::unique_ptr<weld::Builder> mxBuilder; + std::unique_ptr<weld::Widget> mxTopLevel; + std::unique_ptr<weld::Widget> mxCenterGrid; + std::unique_ptr<weld::Widget> mxAngleGrid; + std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrCenterX; + std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrCenterY; + std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrAngle; + std::unique_ptr<weld::Toolbar> mxBtnLeft45; + std::unique_ptr<weld::Toolbar> mxBtnRight45; + std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrStartValue; + std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrEndValue; + std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrBorder; void InitStatus(XFillFloatTransparenceItem const * pGradientItem); void ExecuteValueModify(sal_uInt8 nStartCol, sal_uInt8 nEndCol); - DECL_LINK(ModifiedTrgrHdl_Impl, Edit&, void); - DECL_LINK(Left_Click45_Impl, ToolBox*, void); - DECL_LINK(Right_Click45_Impl, ToolBox*, void); + DECL_LINK(ModifiedTrgrHdl_Impl, weld::MetricSpinButton&, void); + DECL_LINK(Left_Click45_Impl, const OString&, void); + DECL_LINK(Right_Click45_Impl, const OString&, void); public: - AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel); - virtual ~AreaTransparencyGradientPopup() override; - void Rearrange (XFillFloatTransparenceItem const * pItem); - virtual void dispose() override; + AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel, weld::Widget* pParent); + ~AreaTransparencyGradientPopup(); + + weld::Widget* getTopLevel() const { return mxTopLevel.get(); } + + void Rearrange(XFillFloatTransparenceItem const * pItem); }; } } // end of namespace svx::sidebar diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx index 315fd9e1c57e..226160e422c0 100644 --- a/include/svx/tbcontrl.hxx +++ b/include/svx/tbcontrl.hxx @@ -150,7 +150,7 @@ class PaletteManager; namespace svx { - class ToolboxButtonColorUpdater; + class ToolboxButtonColorUpdaterBase; } class SVX_DLLPUBLIC SvxStyleToolBoxControl final : public SfxToolBoxControl @@ -204,13 +204,15 @@ typedef std::function<void(const OUString&, const NamedColor&)> ColorSelectFunct class SVX_DLLPUBLIC SvxColorToolBoxControl final : public cppu::ImplInheritanceHelper< svt::PopupWindowController, css::frame::XSubToolbarController > { - std::unique_ptr<svx::ToolboxButtonColorUpdater> m_xBtnUpdater; + std::unique_ptr<svx::ToolboxButtonColorUpdaterBase> m_xBtnUpdater; std::shared_ptr<PaletteManager> m_xPaletteManager; ColorStatus m_aColorStatus; bool m_bSplitButton; sal_uInt16 m_nSlotId; ColorSelectFunction m_aColorSelectFunction; DECL_LINK(SelectedHdl, const NamedColor&, void); + DECL_LINK(ToolbarHdl_Impl, const OString&, void); + public: explicit SvxColorToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext ); virtual ~SvxColorToolBoxControl() override; @@ -265,8 +267,6 @@ private: LanguageType m_eLanguage; sal_uInt32 m_nFormatKey; - weld::Toolbar* m_pToolbar; - std::unique_ptr<svtools::ToolbarPopupBase> m_xPopover; public: static void GetCurrencySymbols( std::vector<OUString>& rList, bool bFlag, std::vector<sal_uInt16>& rCurrencyList ); @@ -277,14 +277,9 @@ public: // XToolbarController virtual void SAL_CALL execute( sal_Int16 nSelectModifier ) override; - // XComponent - virtual void SAL_CALL dispose() override; - using svt::ToolboxController::createPopupWindow; virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) override; - void EndPopupMode(); - // XServiceInfo virtual OUString SAL_CALL getImplementationName() override; virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override; diff --git a/include/svx/tbxcolorupdate.hxx b/include/svx/tbxcolorupdate.hxx index e37f7f1f0e4d..460635c0ac52 100644 --- a/include/svx/tbxcolorupdate.hxx +++ b/include/svx/tbxcolorupdate.hxx @@ -24,13 +24,18 @@ #include <tools/gen.hxx> #include <tools/color.hxx> +#include <vcl/vclenum.hxx> #include <vcl/vclptr.hxx> - #include <svx/Palette.hxx> +#include <com/sun/star/frame/XFrame.hpp> class ToolBox; class VirtualDevice; +namespace weld +{ + class Toolbar; +} namespace svx { @@ -42,12 +47,14 @@ namespace svx formerly known as SvxTbxButtonColorUpdater_Impl, residing in svx/source/tbxctrls/colorwindow.hxx. */ - class ToolboxButtonColorUpdater + class ToolboxButtonColorUpdaterBase { public: - ToolboxButtonColorUpdater( sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* ptrTbx, bool bWideButton, - const OUString& rCommandLabel ); - ~ToolboxButtonColorUpdater(); + ToolboxButtonColorUpdaterBase(bool bWideButton, const OUString& rCommandLabel, + const OUString& rCommandURL, + const css::uno::Reference<css::frame::XFrame>& rFrame); + + virtual ~ToolboxButtonColorUpdaterBase(); void Update( const NamedColor& rNamedColor ); void Update( const Color& rColor, bool bForceUpdate = false ); @@ -55,22 +62,67 @@ namespace svx OUString GetCurrentColorName(); private: - ToolboxButtonColorUpdater(ToolboxButtonColorUpdater const &) = delete; - ToolboxButtonColorUpdater& operator =(ToolboxButtonColorUpdater const &) = delete; + ToolboxButtonColorUpdaterBase(ToolboxButtonColorUpdaterBase const &) = delete; + ToolboxButtonColorUpdaterBase& operator =(ToolboxButtonColorUpdaterBase const &) = delete; - bool const mbWideButton; - sal_uInt16 const mnBtnId; - VclPtr<ToolBox> mpTbx; + protected: + bool const mbWideButton; + bool mbWasHiContrastMode; Color maCurColor; tools::Rectangle maUpdRect; Size maBmpSize; - bool mbWasHiContrastMode; OUString maCommandLabel; + OUString maCommandURL; + css::uno::Reference<css::frame::XFrame> mxFrame; + + void Init(sal_uInt16 nSlotId); + + virtual void SetQuickHelpText(const OUString& rText) = 0; + virtual OUString GetQuickHelpText() const = 0; + virtual void SetImage(VirtualDevice* pVirDev) = 0; + virtual VclPtr<VirtualDevice> CreateVirtualDevice() const = 0; + virtual vcl::ImageType GetImageSize() const = 0; + virtual Size GetItemSize() const = 0; }; + class VclToolboxButtonColorUpdater : public ToolboxButtonColorUpdaterBase + { + public: + VclToolboxButtonColorUpdater(sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* ptrTbx, bool bWideButton, + const OUString& rCommandLabel, const OUString& rCommandURL, + const css::uno::Reference<css::frame::XFrame>& rFrame); -} + private: + sal_uInt16 const mnBtnId; + VclPtr<ToolBox> mpTbx; + + virtual void SetQuickHelpText(const OUString& rText) override; + virtual OUString GetQuickHelpText() const override; + virtual void SetImage(VirtualDevice* pVirDev) override; + virtual VclPtr<VirtualDevice> CreateVirtualDevice() const override; + virtual vcl::ImageType GetImageSize() const override; + virtual Size GetItemSize() const override; + }; + + class ToolboxButtonColorUpdater : public ToolboxButtonColorUpdaterBase + { + public: + ToolboxButtonColorUpdater(sal_uInt16 nSlotId, const OString& rTbxBtnId, weld::Toolbar* ptrTbx, bool bWideButton, + const OUString& rCommandLabel, const css::uno::Reference<css::frame::XFrame>& rFrame); + + private: + OString msBtnId; + weld::Toolbar* mpTbx; + + virtual void SetQuickHelpText(const OUString& rText) override; + virtual OUString GetQuickHelpText() const override; + virtual void SetImage(VirtualDevice* pVirDev) override; + virtual VclPtr<VirtualDevice> CreateVirtualDevice() const override; + virtual vcl::ImageType GetImageSize() const override; + virtual Size GetItemSize() const override; + }; +} #endif // INCLUDED_SVX_TBXCOLORUPDATE_HXX diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 8c20ef58cda4..c8ccf4291338 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1973,6 +1973,12 @@ public: virtual void set_item_label(const OString& rIdent, const OUString& rLabel) = 0; virtual OUString get_item_label(const OString& rIdent) const = 0; virtual void set_item_tooltip_text(const OString& rIdent, const OUString& rTip) = 0; + virtual OUString get_item_tooltip_text(const OString& rIdent) const = 0; + virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) = 0; + virtual void set_item_image(const OString& rIdent, + const css::uno::Reference<css::graphic::XGraphic>& rIcon) + = 0; + virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) = 0; virtual void insert_separator(int pos, const OUString& rId) = 0; void append_separator(const OUString& rId) { insert_separator(-1, rId); } @@ -1981,7 +1987,8 @@ public: virtual OString get_item_ident(int nIndex) const = 0; virtual void set_item_ident(int nIndex, const OString& rIdent) = 0; virtual void set_item_label(int nIndex, const OUString& rLabel) = 0; - virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) + virtual void set_item_image(int nIndex, + const css::uno::Reference<css::graphic::XGraphic>& rIcon) = 0; virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) = 0; diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx index f76fe4935d69..b2add1cb3709 100644 --- a/reportdesign/source/ui/dlg/Condition.cxx +++ b/reportdesign/source/ui/dlg/Condition.cxx @@ -166,6 +166,7 @@ Condition::~Condition() void Condition::SetBackgroundDropdownClick() { m_xBackColorFloat.reset(new ColorWindow( + OUString() /*m_aCommandURL*/, m_xPaletteManager, m_aColorStatus, SID_BACKGROUND_COLOR, @@ -174,12 +175,13 @@ void Condition::SetBackgroundDropdownClick() MenuOrToolMenuButton(m_xActions.get(), "background"), m_aBackColorWrapper)); - m_xActions->set_item_popover("background", m_xBackColorFloat->GetWidget()); + m_xActions->set_item_popover("background", m_xBackColorFloat->getTopLevel()); } void Condition::SetForegroundDropdownClick() { m_xForeColorFloat.reset(new ColorWindow( + OUString() /*m_aCommandURL*/, m_xPaletteManager, m_aColorStatus, SID_ATTR_CHAR_COLOR2, @@ -188,7 +190,7 @@ void Condition::SetForegroundDropdownClick() MenuOrToolMenuButton(m_xActions.get(), "foreground"), m_aForeColorWrapper)); - m_xActions->set_item_popover("foreground", m_xForeColorFloat->GetWidget()); + m_xActions->set_item_popover("foreground", m_xForeColorFloat->getTopLevel()); } diff --git a/reportdesign/source/ui/dlg/Condition.hxx b/reportdesign/source/ui/dlg/Condition.hxx index 4f263f815ba6..641c1a2bf5dc 100644 --- a/reportdesign/source/ui/dlg/Condition.hxx +++ b/reportdesign/source/ui/dlg/Condition.hxx @@ -32,8 +32,6 @@ #include <memory> -namespace svx { class ToolboxButtonColorUpdater; } - namespace rptui { class OColorPopup; diff --git a/sc/inc/pch/precompiled_sc.hxx b/sc/inc/pch/precompiled_sc.hxx index 424eaa02758a..fabc4b884701 100644 --- a/sc/inc/pch/precompiled_sc.hxx +++ b/sc/inc/pch/precompiled_sc.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-12-03 09:20:23 using: + Generated on 2020-01-02 15:21:26 using: ./bin/update_pch sc sc --cutoff=12 --exclude:system --include:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -472,6 +472,7 @@ #include <formula/token.hxx> #include <formula/vectortoken.hxx> #include <formulacell.hxx> +#include <funcdesc.hxx> #include <global.hxx> #include <globalnames.hxx> #include <hints.hxx> diff --git a/sc/inc/pch/precompiled_scfilt.hxx b/sc/inc/pch/precompiled_scfilt.hxx index d13e9f4a854a..e64703567778 100644 --- a/sc/inc/pch/precompiled_scfilt.hxx +++ b/sc/inc/pch/precompiled_scfilt.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-10-17 16:10:56 using: + Generated on 2020-01-02 15:19:32 using: ./bin/update_pch sc scfilt --cutoff=4 --exclude:system --exclude:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -40,12 +40,12 @@ #include <string.h> #include <string_view> #include <type_traits> +#include <typeinfo> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> -#include <o3tl/optional.hxx> -#include <boost/property_tree/ptree.hpp> +#include <boost/property_tree/ptree_fwd.hpp> #endif // PCH_LEVEL >= 1 #if PCH_LEVEL >= 2 #include <osl/diagnose.h> @@ -102,7 +102,9 @@ #include <com/sun/star/awt/Point.hpp> #include <com/sun/star/awt/Size.hpp> #include <com/sun/star/beans/PropertyState.hpp> +#include <com/sun/star/beans/XMultiPropertySet.hpp> #include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/XPropertyState.hpp> #include <com/sun/star/chart/XChartDocument.hpp> #include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/container/XIndexContainer.hpp> @@ -116,6 +118,7 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/sheet/DataPilotFieldGroupBy.hpp> #include <com/sun/star/sheet/DataPilotFieldReferenceItemType.hpp> #include <com/sun/star/sheet/FormulaLanguage.hpp> @@ -134,11 +137,13 @@ #include <com/sun/star/xml/sax/XFastContextHandler.hpp> #include <comphelper/comphelperdllapi.h> #include <comphelper/processfactory.hxx> +#include <comphelper/servicehelper.hxx> #include <comphelper/string.hxx> #include <cppu/unotype.hxx> #include <cppuhelper/implbase.hxx> #include <cppuhelper/implbase_ex.hxx> #include <cppuhelper/weak.hxx> +#include <cppuhelper/weakref.hxx> #include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <editeng/borderline.hxx> #include <editeng/boxitem.hxx> @@ -161,6 +166,7 @@ #include <filter/msfilter/msfilterdllapi.h> #include <i18nlangtag/lang.h> #include <o3tl/cow_wrapper.hxx> +#include <o3tl/optional.hxx> #include <o3tl/strong_int.hxx> #include <o3tl/typed_flags_set.hxx> #include <o3tl/underlyingenumvalue.hxx> @@ -204,13 +210,16 @@ #include <svl/typedwhich.hxx> #include <svl/zforlist.hxx> #include <svtools/svtdllapi.h> +#include <svx/DiagramDataInterface.hxx> #include <svx/itextprovider.hxx> #include <svx/msdffdef.hxx> #include <svx/sdtaditm.hxx> #include <svx/sdtaitm.hxx> #include <svx/sdtakitm.hxx> +#include <svx/shapeproperty.hxx> #include <svx/svddef.hxx> #include <svx/svdoattr.hxx> +#include <svx/svdobj.hxx> #include <svx/svdoole2.hxx> #include <svx/svdorect.hxx> #include <svx/svdotext.hxx> @@ -224,6 +233,7 @@ #include <tools/color.hxx> #include <tools/date.hxx> #include <tools/datetime.hxx> +#include <tools/diagnose_ex.h> #include <tools/gen.hxx> #include <tools/link.hxx> #include <tools/mapunit.hxx> @@ -232,6 +242,7 @@ #include <tools/time.hxx> #include <tools/toolsdllapi.h> #include <tools/urlobj.hxx> +#include <tools/weakbase.h> #include <typelib/typedescription.h> #include <uno/data.h> #include <unotools/charclass.hxx> diff --git a/sc/inc/pch/precompiled_scui.hxx b/sc/inc/pch/precompiled_scui.hxx index 61dee39e0410..e01d112a6cc4 100644 --- a/sc/inc/pch/precompiled_scui.hxx +++ b/sc/inc/pch/precompiled_scui.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-10-15 16:58:12 using: + Generated on 2020-01-02 15:21:50 using: ./bin/update_pch sc scui --cutoff=1 --exclude:system --exclude:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -34,14 +34,7 @@ #include <rtl/ustrbuf.hxx> #include <sal/config.h> #include <sal/types.h> -#include <vcl/button.hxx> -#include <vcl/combobox.hxx> -#include <vcl/edit.hxx> #include <vcl/event.hxx> -#include <vcl/field.hxx> -#include <vcl/fixed.hxx> -#include <vcl/lstbox.hxx> -#include <vcl/ptrstyle.hxx> #include <vcl/settings.hxx> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> @@ -92,6 +85,7 @@ #include <svtools/ctrlbox.hxx> #include <svtools/ehdl.hxx> #include <svtools/inettbc.hxx> +#include <svtools/miscopt.hxx> #include <svtools/restartdialog.hxx> #include <svtools/sfxecode.hxx> #include <svtools/unitconv.hxx> diff --git a/sd/inc/pch/precompiled_sd.hxx b/sd/inc/pch/precompiled_sd.hxx index b2c4f9364bc1..b3c53e6d3828 100644 --- a/sd/inc/pch/precompiled_sd.hxx +++ b/sd/inc/pch/precompiled_sd.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-12-01 19:53:21 using: + Generated on 2020-01-02 15:15:28 using: ./bin/update_pch sd sd --cutoff=4 --exclude:system --exclude:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -41,6 +41,7 @@ #include <vector> #include <boost/property_tree/json_parser.hpp> #include <boost/property_tree/ptree.hpp> +#include <boost/property_tree/ptree_fwd.hpp> #endif // PCH_LEVEL >= 1 #if PCH_LEVEL >= 2 #include <osl/diagnose.h> diff --git a/sd/inc/pch/precompiled_sdui.hxx b/sd/inc/pch/precompiled_sdui.hxx index bfecafbda3c7..7b2124a09afa 100644 --- a/sd/inc/pch/precompiled_sdui.hxx +++ b/sd/inc/pch/precompiled_sdui.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-12-03 09:20:46 using: + Generated on 2020-01-02 15:15:40 using: ./bin/update_pch sd sdui --cutoff=4 --exclude:system --include:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -119,7 +119,6 @@ #include <vcl/image.hxx> #include <vcl/keycod.hxx> #include <vcl/keycodes.hxx> -#include <vcl/lstbox.hxx> #include <vcl/mapmod.hxx> #include <vcl/menu.hxx> #include <vcl/metaactiontypes.hxx> diff --git a/sfx2/source/sidebar/ControllerFactory.cxx b/sfx2/source/sidebar/ControllerFactory.cxx index 61ed92452c54..49b67cbf6e07 100644 --- a/sfx2/source/sidebar/ControllerFactory.cxx +++ b/sfx2/source/sidebar/ControllerFactory.cxx @@ -231,6 +231,10 @@ Reference<frame::XToolbarController> ControllerFactory::CreateToolBarController( aPropValue.Value <<= rxToolbar; aPropertyVector.push_back( makeAny( aPropValue )); + aPropValue.Name = "IsSidebar"; + aPropValue.Value <<= true; + aPropertyVector.push_back( makeAny( aPropValue )); + if (nWidth > 0) { aPropValue.Name = "Width"; diff --git a/sfx2/source/toolbox/weldutils.cxx b/sfx2/source/toolbox/weldutils.cxx index 3f2d0970cc6e..52cf254d7b9a 100644 --- a/sfx2/source/toolbox/weldutils.cxx +++ b/sfx2/source/toolbox/weldutils.cxx @@ -57,6 +57,8 @@ ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar, : m_xFrame(rFrame) , m_pToolbar(&rToolbar) { + rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl)); + OUString aModuleName(vcl::CommandInfoProvider::GetModuleIdentifier(rFrame)); vcl::ImageType eSize = rToolbar.get_icon_size(); @@ -75,12 +77,10 @@ ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar, vcl::CommandInfoProvider::GetTooltipForCommand(sCommand, aProperties, rFrame)); rToolbar.set_item_tooltip_text(i, aTooltip); auto xImage(vcl::CommandInfoProvider::GetXGraphicForCommand(sCommand, rFrame, eSize)); - rToolbar.set_item_icon(i, xImage); + rToolbar.set_item_image(i, xImage); CreateController(sCommand); } - - rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl)); } void ToolbarUnoDispatcher::CreateController(const OUString& rCommand) diff --git a/solenv/sanitizers/ui/svx.suppr b/solenv/sanitizers/ui/svx.suppr index b2d33d3c19b6..d089305f2326 100644 --- a/solenv/sanitizers/ui/svx.suppr +++ b/solenv/sanitizers/ui/svx.suppr @@ -60,9 +60,6 @@ svx/uiconfig/ui/redlinefilterpage.ui://GtkLabel[@id='and'] orphan-label svx/uiconfig/ui/safemodedialog.ui://GtkLabel[@id='label1'] orphan-label svx/uiconfig/ui/safemodedialog.ui://GtkLabel[@id='label3'] orphan-label svx/uiconfig/ui/safemodedialog.ui://GtkLabel[@id='label4'] orphan-label -svx/uiconfig/ui/sidebararea.ui://GtkLabel[@id='filllabel'] orphan-label -svx/uiconfig/ui/sidebararea.ui://svxlo-SvxFillAttrBox[@id='fillattr'] missing-label-for -svx/uiconfig/ui/sidebararea.ui://svxlo-SvxFillTypeBox[@id='fillstyle'] missing-label-for svx/uiconfig/ui/sidebararea.ui://GtkLabel[@id='transparencylabel'] orphan-label svx/uiconfig/ui/sidebarshadow.ui://GtkLabel[@id='transparency_label'] orphan-label svx/uiconfig/ui/sidebarshadow.ui://GtkSpinButton[@id='FIELD_TRANSPARENCY'] no-labelled-by diff --git a/svtools/source/uno/popupwindowcontroller.cxx b/svtools/source/uno/popupwindowcontroller.cxx index 0ffb2f5871cd..cc283adbdf42 100644 --- a/svtools/source/uno/popupwindowcontroller.cxx +++ b/svtools/source/uno/popupwindowcontroller.cxx @@ -24,7 +24,9 @@ #include <vcl/toolbox.hxx> #include <vcl/weldutils.hxx> +#include <svtools/framestatuslistener.hxx> #include <svtools/popupwindowcontroller.hxx> +#include <svtools/toolbarmenu.hxx> using namespace ::com::sun::star; using namespace css::uno; @@ -174,6 +176,7 @@ sal_Bool SAL_CALL PopupWindowController::supportsService( const OUString& Servic // XComponent void SAL_CALL PopupWindowController::dispose() { + mxPopover.reset(); mxImpl.reset(); svt::ToolboxController::dispose(); } @@ -233,6 +236,11 @@ Reference< awt::XWindow > SAL_CALL PopupWindowController::createPopupWindow() return Reference< awt::XWindow >(); } +void PopupWindowController::EndPopupMode() +{ + m_pToolbar->set_menu_item_active(m_aCommandURL.toUtf8(), false); +} + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svtools/source/uno/toolboxcontroller.cxx b/svtools/source/uno/toolboxcontroller.cxx index 8bd9d94f2366..3ff118f31bb5 100644 --- a/svtools/source/uno/toolboxcontroller.cxx +++ b/svtools/source/uno/toolboxcontroller.cxx @@ -29,6 +29,7 @@ #include <vcl/svapp.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <vcl/toolbox.hxx> +#include <vcl/weldutils.hxx> #include <comphelper/processfactory.hxx> const int TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIBLE = 1; @@ -54,11 +55,13 @@ ToolboxController::ToolboxController( , m_bSupportVisible( false ) , m_bInitialized( false ) , m_bDisposed( false ) + , m_bSidebar( false ) , m_nToolBoxId( SAL_MAX_UINT16 ) , m_xFrame( xFrame ) , m_xContext( rxContext ) , m_aCommandURL( aCommandURL ) , m_aListenerContainer( m_aMutex ) + , m_pToolbar(nullptr) { OSL_ASSERT( m_xContext.is() ); registerProperty( TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIBLE, @@ -80,8 +83,10 @@ ToolboxController::ToolboxController() : , m_bSupportVisible(false) , m_bInitialized( false ) , m_bDisposed( false ) + , m_bSidebar( false ) , m_nToolBoxId( SAL_MAX_UINT16 ) , m_aListenerContainer( m_aMutex ) + , m_pToolbar(nullptr) { registerProperty( TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIBLE, TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIBLE, @@ -191,6 +196,8 @@ void SAL_CALL ToolboxController::initialize( const Sequence< Any >& aArguments ) aPropValue.Value >>= m_sModuleName; else if ( aPropValue.Name == "Identifier" ) aPropValue.Value >>= m_nToolBoxId; + else if ( aPropValue.Name == "IsSidebar" ) + aPropValue.Value >>= m_bSidebar; } } @@ -205,6 +212,12 @@ void SAL_CALL ToolboxController::initialize( const Sequence< Any >& aArguments ) if ( !m_aCommandURL.isEmpty() ) m_aListenerMap.emplace( m_aCommandURL, Reference< XDispatch >() ); + + if (weld::TransportAsXWindow* pTunnel = dynamic_cast<weld::TransportAsXWindow*>(getParent().get())) + { + m_pToolbar = dynamic_cast<weld::Toolbar*>(pTunnel->getWidget()); + assert(m_pToolbar && "must be a toolbar"); + } } void SAL_CALL ToolboxController::update() diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx index 0b050bb708a4..e53bd5db11c2 100644 --- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx +++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx @@ -35,13 +35,14 @@ #include <svtools/toolbarmenu.hxx> #include <svx/tbcontrl.hxx> #include <sfx2/opengrf.hxx> +#include <sfx2/weldutils.hxx> #include <tools/urlobj.hxx> #include <bitmaps.hlst> using namespace css; using namespace css::uno; -const char UNO_SIDEBARGRADIENT[] = ".uno:sidebargradient"; +const char SIDEBARGRADIENT[] = "sidebargradient"; namespace svx { namespace sidebar { @@ -69,7 +70,7 @@ const sal_Int32 AreaPropertyPanelBase::DEFAULT_BORDER = 0; AreaPropertyPanelBase::AreaPropertyPanelBase( vcl::Window* pParent, const css::uno::Reference<css::frame::XFrame>& rxFrame) - : PanelLayout(pParent, "AreaPropertyPanel", "svx/ui/sidebararea.ui", rxFrame), + : PanelLayout(pParent, "AreaPropertyPanel", "svx/ui/sidebararea.ui", rxFrame, true), meLastXFS(static_cast<sal_uInt16>(-1)), mnLastPosHatch(0), mnLastPosBitmap(0), @@ -81,37 +82,36 @@ AreaPropertyPanelBase::AreaPropertyPanelBase( maGradientElliptical(), maGradientSquare(), maGradientRect(), + mxColorTextFT(m_xBuilder->weld_label("filllabel")), + mxLbFillType(m_xBuilder->weld_combo_box("fillstyle")), + mxLbFillAttr(m_xBuilder->weld_combo_box("fillattr")), + mxLbFillGradFrom(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad1"), GetFrameWeld())), + mxLbFillGradTo(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad2"), GetFrameWeld())), + mxToolBoxColor(m_xBuilder->weld_toolbar("selectcolor")), + mxColorDispatch(new ToolbarUnoDispatcher(*mxToolBoxColor, rxFrame)), + mxTrspTextFT(m_xBuilder->weld_label("transparencylabel")), + mxLBTransType(m_xBuilder->weld_combo_box("transtype")), + mxMTRTransparent(m_xBuilder->weld_metric_spin_button("settransparency", FieldUnit::PERCENT)), + mxSldTransparent(m_xBuilder->weld_scale("transparencyslider")), + mxBTNGradient(m_xBuilder->weld_toolbar("selectgradient")), + mxMTRAngle(m_xBuilder->weld_metric_spin_button("gradangle", FieldUnit::DEGREE)), + mxGradientStyle(m_xBuilder->weld_combo_box("gradientstyle")), + mxBmpImport(m_xBuilder->weld_button("bmpimport")), mpStyleItem(), mpColorItem(), mpFillGradientItem(), mpHatchItem(), mpBitmapItem(), - maImgAxial(StockImage::Yes, BMP_AXIAL), - maImgElli(StockImage::Yes, BMP_ELLI), - maImgQuad(StockImage::Yes, BMP_QUAD), - maImgRadial(StockImage::Yes, BMP_RADIAL), - maImgSquare(StockImage::Yes, BMP_SQUARE), - maImgLinear(StockImage::Yes, BMP_LINEAR), + maImgAxial(BMP_AXIAL), + maImgElli(BMP_ELLI), + maImgQuad(BMP_QUAD), + maImgRadial(BMP_RADIAL), + maImgSquare(BMP_SQUARE), + maImgLinear(BMP_LINEAR), mpFloatTransparenceItem(), mpTransparanceItem() { - get(mpColorTextFT, "filllabel"); - get(mpLbFillType, "fillstyle"); - get(mpLbFillAttr, "fillattr"); - get(mpTrspTextFT, "transparencylabel"); - get(mpToolBoxColor, "selectcolor"); - get(mpLBTransType, "transtype"); - get(mpMTRTransparent, "settransparency"); - get(mpSldTransparent, "transparencyslider"); - get(mpBTNGradient, "selectgradient"); - get(mpMTRAngle, "gradangle"); - get(mpLbFillGradFrom, "fillgrad1"); - get(mpLbFillGradTo, "fillgrad2"); - get(mpGradientStyle, "gradientstyle"); - get(mpBmpImport, "bmpimport"); mpPanel = dynamic_cast<sfx2::sidebar::Panel*>(pParent); - - Initialize(); } AreaPropertyPanelBase::~AreaPropertyPanelBase() @@ -121,21 +121,22 @@ AreaPropertyPanelBase::~AreaPropertyPanelBase() void AreaPropertyPanelBase::dispose() { - mxTrGrPopup.disposeAndClear(); - mpColorTextFT.clear(); - mpLbFillType.clear(); - mpLbFillAttr.clear(); - mpToolBoxColor.clear(); - mpTrspTextFT.clear(); - mpLBTransType.clear(); - mpMTRTransparent.clear(); - mpSldTransparent.clear(); - mpBTNGradient.clear(); - mpMTRAngle.clear(); - mpLbFillGradFrom.clear(); - mpLbFillGradTo.clear(); - mpGradientStyle.clear(); - mpBmpImport.clear(); + mxTrGrPopup.reset(); + mxColorTextFT.reset(); + mxLbFillType.reset(); + mxLbFillAttr.reset(); + mxColorDispatch.reset(); + mxToolBoxColor.reset(); + mxTrspTextFT.reset(); + mxLBTransType.reset(); + mxMTRTransparent.reset(); + mxSldTransparent.reset(); + mxBTNGradient.reset(); + mxMTRAngle.reset(); + mxLbFillGradFrom.reset(); + mxLbFillGradTo.reset(); + mxGradientStyle.reset(); + mxBmpImport.reset(); mpPanel.clear(); PanelLayout::dispose(); @@ -143,6 +144,8 @@ void AreaPropertyPanelBase::dispose() void AreaPropertyPanelBase::Initialize() { + FillTypeLB::Fill(*mxLbFillType); + maGradientLinear.SetXOffset(DEFAULT_CENTERX); maGradientLinear.SetYOffset(DEFAULT_CENTERY); maGradientLinear.SetAngle(DEFAULT_ANGLE); @@ -167,39 +170,44 @@ void AreaPropertyPanelBase::Initialize() maGradientRect.SetGradientStyle(css::awt::GradientStyle_RECT); - mpLbFillType->SetSelectHdl( LINK( this, AreaPropertyPanelBase, SelectFillTypeHdl ) ); + mxLbFillType->connect_changed( LINK( this, AreaPropertyPanelBase, SelectFillTypeHdl ) ); - Link<ListBox&,void> aLink = LINK( this, AreaPropertyPanelBase, SelectFillAttrHdl ); - Link<SvxColorListBox&,void> aLink3 = LINK( this, AreaPropertyPanelBase, SelectFillColorHdl ); - mpLbFillAttr->SetSelectHdl( aLink ); - mpGradientStyle->SetSelectHdl( aLink ); - mpLbFillGradFrom->SetSelectHdl( aLink3 ); - mpLbFillGradTo->SetSelectHdl( aLink3 ); - mpMTRAngle->SetModifyHdl(LINK(this,AreaPropertyPanelBase, ChangeGradientAngle)); + Link<weld::ComboBox&,void> aLink = LINK( this, AreaPropertyPanelBase, SelectFillAttrHdl ); + mxLbFillAttr->connect_changed( aLink ); + mxGradientStyle->connect_changed( aLink ); + Link<ColorListBox&,void> aLink3 = LINK( this, AreaPropertyPanelBase, SelectFillColorHdl ); + mxLbFillGradFrom->SetSelectHdl( aLink3 ); + mxLbFillGradTo->SetSelectHdl( aLink3 ); + mxMTRAngle->connect_value_changed(LINK(this,AreaPropertyPanelBase, ChangeGradientAngle)); - mpLBTransType->SetSelectHdl(LINK(this, AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl)); + mxLBTransType->connect_changed(LINK(this, AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl)); SetTransparency( 50 ); - mpMTRTransparent->SetModifyHdl(LINK(this, AreaPropertyPanelBase, ModifyTransparentHdl_Impl)); - mpSldTransparent->SetSlideHdl(LINK(this, AreaPropertyPanelBase, ModifyTransSliderHdl)); - - const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT); - mpBTNGradient->SetItemBits( nIdGradient, mpBTNGradient->GetItemBits( nIdGradient ) | ToolBoxItemBits::DROPDOWNONLY ); - Link<ToolBox *, void> aLink2 = LINK( this, AreaPropertyPanelBase, ClickTrGrHdl_Impl ); - mpBTNGradient->SetDropdownClickHdl( aLink2 ); - mpBTNGradient->SetSelectHdl( aLink2 ); - mpBTNGradient->SetItemImage(nIdGradient,maImgLinear); - mpBTNGradient->Hide(); - mpBmpImport->SetClickHdl( LINK(this, AreaPropertyPanelBase, ClickImportBitmapHdl)); + mxMTRTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransparentHdl_Impl)); + mxSldTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransSliderHdl)); + + mxTrGrPopup = std::make_unique<AreaTransparencyGradientPopup>(*this, mxBTNGradient.get()); + + mxBTNGradient->set_item_popover(SIDEBARGRADIENT, mxTrGrPopup->getTopLevel()); + mxBTNGradient->connect_clicked(LINK(this, AreaPropertyPanelBase, ToolbarHdl_Impl)); + + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgLinear); + mxBTNGradient->hide(); + mxBmpImport->connect_clicked( LINK(this, AreaPropertyPanelBase, ClickImportBitmapHdl)); +} + +IMPL_LINK_NOARG(AreaPropertyPanelBase, ToolbarHdl_Impl, const OString&, void) +{ + mxBTNGradient->set_menu_item_active(SIDEBARGRADIENT, !mxBTNGradient->get_menu_item_active(SIDEBARGRADIENT)); } void AreaPropertyPanelBase::SetTransparency(sal_uInt16 nVal) { - mpSldTransparent->SetThumbPos(nVal); - mpMTRTransparent->SetValue(nVal); + mxSldTransparent->set_value(nVal); + mxMTRTransparent->set_value(nVal, FieldUnit::PERCENT); } -IMPL_LINK_NOARG(AreaPropertyPanelBase, ClickImportBitmapHdl, Button*, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, ClickImportBitmapHdl, weld::Button&, void) { SvxOpenGraphicDialog aDlg("Import", GetFrameWeld()); aDlg.EnableLink(false); @@ -232,18 +240,18 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, ClickImportBitmapHdl, Button*, void) pList->Insert(std::make_unique<XBitmapEntry>(aGraphic, aName)); pList->Save(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Fill(pList); - mpLbFillAttr->SelectEntry(aName); - SelectFillAttrHdl(*mpLbFillAttr); + mxLbFillAttr->clear(); + SvxFillAttrBox::Fill(*mxLbFillAttr, pList); + mxLbFillAttr->set_active_text(aName); + SelectFillAttrHdl(*mxLbFillAttr); } } } -IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, weld::ComboBox&, void) { - sal_Int32 nPos = static_cast<eFillStyle>(mpLbFillType->GetSelectedEntryPos()); - mpLbFillAttr->Clear(); + sal_Int32 nPos = static_cast<eFillStyle>(mxLbFillType->get_active()); + mxLbFillAttr->clear(); SfxObjectShell* pSh = SfxObjectShell::Current(); if(!pSh) return; @@ -257,15 +265,14 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) default: case NONE: { - mpLbFillAttr->Show(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpGradientStyle->Hide(); - mpMTRAngle->Hide(); - mpToolBoxColor->Hide(); - mpBmpImport->Hide(); - mpLbFillType->Selected(); - mpLbFillAttr->Disable(); + mxLbFillAttr->show(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxGradientStyle->hide(); + mxMTRAngle->hide(); + mxToolBoxColor->hide(); + mxBmpImport->hide(); + mxLbFillAttr->set_sensitive(false); // #i122676# need to call a single SID_ATTR_FILL_STYLE change setFillStyle(XFillStyleItem(drawing::FillStyle_NONE)); @@ -273,13 +280,13 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) } case SOLID: { - mpLbFillAttr->Hide(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpGradientStyle->Hide(); - mpMTRAngle->Hide(); - mpBmpImport->Hide(); - mpToolBoxColor->Show(); + mxLbFillAttr->hide(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxGradientStyle->hide(); + mxMTRAngle->hide(); + mxBmpImport->hide(); + mxToolBoxColor->show(); const OUString aTmpStr; const Color aColor = mpColorItem ? mpColorItem->GetColorValue() : COL_AUTO; const XFillColorItem aXFillColorItem( aTmpStr, aColor ); @@ -291,20 +298,20 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) } case GRADIENT: { - mpLbFillAttr->Hide(); - mpLbFillGradFrom->Show(); - mpLbFillGradTo->Show(); - mpGradientStyle->Show(); - mpMTRAngle->Show(); - mpToolBoxColor->Hide(); - mpBmpImport->Hide(); - - mpLbFillAttr->Enable(); - mpLbFillGradTo->Enable(); - mpLbFillGradFrom->Enable(); - mpGradientStyle->Enable(); - mpMTRAngle->Enable(); - mpLbFillAttr->Clear(); + mxLbFillAttr->hide(); + mxLbFillGradFrom->show(); + mxLbFillGradTo->show(); + mxGradientStyle->show(); + mxMTRAngle->show(); + mxToolBoxColor->hide(); + mxBmpImport->hide(); + + mxLbFillAttr->set_sensitive(true); + mxLbFillGradTo->set_sensitive(true); + mxLbFillGradFrom->set_sensitive(true); + mxGradientStyle->set_sensitive(true); + mxMTRAngle->set_sensitive(true); + mxLbFillAttr->clear(); const SvxGradientListItem * pItem = pSh->GetItem(SID_GRADIENT_LIST); @@ -317,36 +324,34 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) // #i122676# change FillStyle and Gradient in one call XFillStyleItem aXFillStyleItem(drawing::FillStyle_GRADIENT); setFillStyleAndGradient(&aXFillStyleItem, aXFillGradientItem); - mpLbFillGradFrom->SelectEntry(aGradient.GetStartColor()); - mpLbFillGradTo->SelectEntry(aGradient.GetEndColor()); + mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor()); + mxLbFillGradTo->SelectEntry(aGradient.GetEndColor()); - mpMTRAngle->SetValue(aGradient.GetAngle() / 10); + mxMTRAngle->set_value(aGradient.GetAngle() / 10, FieldUnit::DEGREE); css::awt::GradientStyle eXGS = aGradient.GetGradientStyle(); - mpGradientStyle->SelectEntryPos(sal::static_int_cast< sal_Int32 >( eXGS )); + mxGradientStyle->set_active(sal::static_int_cast< sal_Int32 >( eXGS )); } break; } case HATCH: { - mpLbFillAttr->Show(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpMTRAngle->Hide(); - mpGradientStyle->Hide(); - mpToolBoxColor->Hide(); - mpBmpImport->Hide(); + mxLbFillAttr->show(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxMTRAngle->hide(); + mxGradientStyle->hide(); + mxToolBoxColor->hide(); + mxBmpImport->hide(); const SvxHatchListItem* pItem( pSh->GetItem(SID_HATCH_LIST) ); if(pItem) { const XHatchListRef& pXHatchList(pItem->GetHatchList()); - mpLbFillAttr->Enable(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Fill(pXHatchList); + mxLbFillAttr->set_sensitive(true); + mxLbFillAttr->clear(); + SvxFillAttrBox::Fill(*mxLbFillAttr, pXHatchList); - mpLbFillAttr->AdaptDropDownLineCountToMaximum(); - - if(LISTBOX_ENTRY_NOTFOUND != mnLastPosHatch) + if (mnLastPosHatch != -1) { if(mnLastPosHatch < pXHatchList->Count()) { @@ -357,81 +362,78 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) // #i122676# change FillStyle and Hatch in one call XFillStyleItem aXFillStyleItem(drawing::FillStyle_HATCH); setFillStyleAndHatch(&aXFillStyleItem, aXFillHatchItem); - mpLbFillAttr->SelectEntryPos(mnLastPosHatch); + mxLbFillAttr->set_active(mnLastPosHatch); } } } else { - mpLbFillAttr->Disable(); + mxLbFillAttr->set_sensitive(false); } break; } case BITMAP: case PATTERN: { - mpLbFillAttr->Show(); - mpLbFillAttr->Enable(); - mpLbFillAttr->Clear(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpMTRAngle->Hide(); - mpGradientStyle->Hide(); - mpToolBoxColor->Hide(); + mxLbFillAttr->show(); + mxLbFillAttr->set_sensitive(true); + mxLbFillAttr->clear(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxMTRAngle->hide(); + mxGradientStyle->hide(); + mxToolBoxColor->hide(); OUString aName; GraphicObject aBitmap; if(nPos == static_cast< sal_Int32 >(BITMAP)) { - mpBmpImport->Show(); + mxBmpImport->show(); const SvxBitmapListItem* pItem = pSh->GetItem(SID_BITMAP_LIST); if(pItem) { const XBitmapListRef& pXBitmapList(pItem->GetBitmapList()); - mpLbFillAttr->Fill(pXBitmapList); - - mpLbFillAttr->AdaptDropDownLineCountToMaximum(); + SvxFillAttrBox::Fill(*mxLbFillAttr, pXBitmapList); - if(LISTBOX_ENTRY_NOTFOUND != mnLastPosBitmap) + if (mnLastPosBitmap != -1) { if(mnLastPosBitmap < pXBitmapList->Count()) { const XBitmapEntry* pXBitmapEntry = pXBitmapList->GetBitmap(mnLastPosBitmap); aBitmap = pXBitmapEntry->GetGraphicObject(); aName = pXBitmapEntry->GetName(); - mpLbFillAttr->SelectEntryPos(mnLastPosBitmap); + mxLbFillAttr->set_active(mnLastPosBitmap); } } } else { - mpLbFillAttr->Hide(); + mxLbFillAttr->hide(); } } else if(nPos == static_cast< sal_Int32 >(PATTERN)) { - mpBmpImport->Hide(); + mxBmpImport->hide(); const SvxPatternListItem* pItem = pSh->GetItem(SID_PATTERN_LIST); if(pItem) { const XPatternListRef& pXPatternList(pItem->GetPatternList()); - mpLbFillAttr->Fill(pXPatternList); + SvxFillAttrBox::Fill(*mxLbFillAttr, pXPatternList); - mpLbFillAttr->AdaptDropDownLineCountToMaximum(); - if(LISTBOX_ENTRY_NOTFOUND != mnLastPosPattern) + if (mnLastPosPattern != -1) { if(mnLastPosPattern < pXPatternList->Count()) { const XBitmapEntry* pXPatternEntry = pXPatternList->GetBitmap(mnLastPosPattern); aBitmap = pXPatternEntry->GetGraphicObject(); aName = pXPatternEntry->GetName(); - mpLbFillAttr->SelectEntryPos(mnLastPosPattern); + mxLbFillAttr->set_active(mnLastPosPattern); } } } else { - mpLbFillAttr->Hide(); + mxLbFillAttr->hide(); } } const XFillBitmapItem aXFillBitmapItem( aName, aBitmap ); @@ -443,25 +445,21 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void) meLastXFS = static_cast<sal_uInt16>(nPos); - if(eFillStyle::NONE != static_cast<eFillStyle>(nPos)) - { - mpLbFillType->Selected(); - } if(mpPanel) mpPanel->TriggerDeckLayouting(); } -IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillColorHdl, SvxColorListBox&, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillColorHdl, ColorListBox&, void) { SelectFillAttrHdl_Impl(); } -IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillAttrHdl, ListBox&, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillAttrHdl, weld::ComboBox&, void) { SelectFillAttrHdl_Impl(); } -IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeGradientAngle, Edit&, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeGradientAngle, weld::MetricSpinButton&, void) { SelectFillAttrHdl_Impl(); } @@ -473,7 +471,7 @@ void AreaPropertyPanelBase::DataChanged( void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() { - sal_Int32 nPosFillStyle = static_cast<eFillStyle>(mpLbFillType->GetSelectedEntryPos()); + sal_Int32 nPosFillStyle = static_cast<eFillStyle>(mxLbFillType->get_active()); SfxObjectShell* pSh = SfxObjectShell::Current(); // #i122676# dependent from bFillStyleChange, do execute a single or two @@ -507,12 +505,12 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() if(pSh && pSh->GetItem(SID_COLOR_TABLE)) { XGradient aGradient; - aGradient.SetAngle(mpMTRAngle->GetValue() * 10); - aGradient.SetGradientStyle(static_cast<css::awt::GradientStyle>(mpGradientStyle->GetSelectedEntryPos())); - aGradient.SetStartColor(mpLbFillGradFrom->GetSelectEntryColor()); - aGradient.SetEndColor(mpLbFillGradTo->GetSelectEntryColor()); + aGradient.SetAngle(mxMTRAngle->get_value(FieldUnit::DEGREE) * 10); + aGradient.SetGradientStyle(static_cast<css::awt::GradientStyle>(mxGradientStyle->get_active())); + aGradient.SetStartColor(mxLbFillGradFrom->GetSelectEntryColor()); + aGradient.SetEndColor(mxLbFillGradTo->GetSelectEntryColor()); - const XFillGradientItem aXFillGradientItem(mpLbFillAttr->GetSelectedEntry(), aGradient); + const XFillGradientItem aXFillGradientItem(mxLbFillAttr->get_active_text(), aGradient); // #i122676# Change FillStyle and Gradinet in one call XFillStyleItem aXFillStyleItem(drawing::FillStyle_GRADIENT); @@ -522,21 +520,21 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() } case eFillStyle::HATCH: { - sal_Int32 nPos = mpLbFillAttr->GetSelectedEntryPos(); + sal_Int32 nPos = mxLbFillAttr->get_active(); - if(LISTBOX_ENTRY_NOTFOUND == nPos) + if (nPos == -1) { nPos = mnLastPosHatch; } - if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_HATCH_LIST)) + if (nPos != -1 && pSh && pSh->GetItem(SID_HATCH_LIST)) { const SvxHatchListItem * pItem = pSh->GetItem(SID_HATCH_LIST); if(nPos < pItem->GetHatchList()->Count()) { const XHatch aHatch = pItem->GetHatchList()->GetHatch(nPos)->GetHatch(); - const XFillHatchItem aXFillHatchItem( mpLbFillAttr->GetSelectedEntry(), aHatch); + const XFillHatchItem aXFillHatchItem( mxLbFillAttr->get_active_text(), aHatch); // #i122676# Change FillStyle and Hatch in one call XFillStyleItem aXFillStyleItem(drawing::FillStyle_HATCH); @@ -544,7 +542,7 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() } } - if(LISTBOX_ENTRY_NOTFOUND != nPos) + if (nPos != -1) { mnLastPosHatch = nPos; } @@ -552,21 +550,21 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() } case eFillStyle::BITMAP: { - sal_Int32 nPos = mpLbFillAttr->GetSelectedEntryPos(); + sal_Int32 nPos = mxLbFillAttr->get_active(); - if(LISTBOX_ENTRY_NOTFOUND == nPos) + if (nPos == -1) { nPos = mnLastPosBitmap; } - if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_BITMAP_LIST)) + if (nPos != -1 && pSh && pSh->GetItem(SID_BITMAP_LIST)) { const SvxBitmapListItem * pItem = pSh->GetItem(SID_BITMAP_LIST); if(nPos < pItem->GetBitmapList()->Count()) { const XBitmapEntry* pXBitmapEntry = pItem->GetBitmapList()->GetBitmap(nPos); - const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectedEntry(), pXBitmapEntry->GetGraphicObject()); + const XFillBitmapItem aXFillBitmapItem(mxLbFillAttr->get_active_text(), pXBitmapEntry->GetGraphicObject()); // #i122676# Change FillStyle and Bitmap in one call XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP); @@ -574,7 +572,7 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() } } - if(LISTBOX_ENTRY_NOTFOUND != nPos) + if (nPos != -1) { mnLastPosBitmap = nPos; } @@ -582,21 +580,21 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() } case eFillStyle::PATTERN: { - sal_Int32 nPos = mpLbFillAttr->GetSelectedEntryPos(); + sal_Int32 nPos = mxLbFillAttr->get_active(); - if(LISTBOX_ENTRY_NOTFOUND == nPos) + if (nPos == -1) { nPos = mnLastPosPattern; } - if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_PATTERN_LIST)) + if (nPos != -1 && pSh && pSh->GetItem(SID_PATTERN_LIST)) { const SvxPatternListItem * pItem = pSh->GetItem(SID_PATTERN_LIST); if(nPos < pItem->GetPatternList()->Count()) { const XBitmapEntry* pXPatternEntry = pItem->GetPatternList()->GetBitmap(nPos); - const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectedEntry(), pXPatternEntry->GetGraphicObject()); + const XFillBitmapItem aXFillBitmapItem(mxLbFillAttr->get_active_text(), pXPatternEntry->GetGraphicObject()); // #i122676# Change FillStyle and Bitmap in one call XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP); @@ -604,7 +602,7 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl() } } - if(LISTBOX_ENTRY_NOTFOUND != nPos) + if (nPos != -1) { mnLastPosPattern = nPos; } @@ -631,20 +629,20 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies() } else if(nValue <= 100) { - mpLBTransType->Enable(); - mpTrspTextFT->Enable(); - mpLBTransType->SelectEntryPos(1); - mpBTNGradient->Hide(); - mpMTRTransparent->Show(); - mpSldTransparent->Show(); - mpMTRTransparent->Enable(); - mpSldTransparent->Enable(); + mxLBTransType->set_sensitive(true); + mxTrspTextFT->set_sensitive(true); + mxLBTransType->set_active(1); + mxBTNGradient->hide(); + mxMTRTransparent->show(); + mxSldTransparent->show(); + mxMTRTransparent->set_sensitive(true); + mxSldTransparent->set_sensitive(true); SetTransparency(nValue); } if (!bZeroValue && mxTrGrPopup) { - mxTrGrPopup->EndPopupMode(); + mxBTNGradient->set_menu_item_active(SIDEBARGRADIENT, false); } } @@ -654,14 +652,14 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies() { const XGradient& rGradient = mpFloatTransparenceItem->GetGradientValue(); sal_Int32 nEntryPos(0); - Image* pImage = nullptr; + OUString* pImage = nullptr; - mpLBTransType->Enable(); - mpTrspTextFT->Enable(); - mpMTRTransparent->Hide(); - mpSldTransparent->Hide(); - mpBTNGradient->Enable(); - mpBTNGradient->Show(); + mxLBTransType->set_sensitive(true); + mxTrspTextFT->set_sensitive(true); + mxMTRTransparent->hide(); + mxSldTransparent->hide(); + mxBTNGradient->set_sensitive(true); + mxBTNGradient->show(); switch(rGradient.GetGradientStyle()) { @@ -703,10 +701,9 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies() break; } } - - const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT); - mpLBTransType->SelectEntryPos(nEntryPos); - mpBTNGradient->SetItemImage(nIdGradient, *pImage); + mxLBTransType->set_active(nEntryPos); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, *pImage); + mxTrGrPopup->Rearrange(mpFloatTransparenceItem.get()); bZeroValue = false; } else @@ -717,29 +714,29 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies() if(bZeroValue) { - mpLBTransType->Enable(); - mpTrspTextFT->Enable(); - mpLBTransType->SelectEntryPos(0); - mpBTNGradient->Hide(); - mpMTRTransparent->Enable(); - mpSldTransparent->Enable(); - mpMTRTransparent->Show(); - mpSldTransparent->Show(); + mxLBTransType->set_sensitive(true); + mxTrspTextFT->set_sensitive(true); + mxLBTransType->set_active(0); + mxBTNGradient->hide(); + mxMTRTransparent->set_sensitive(true); + mxSldTransparent->set_sensitive(true); + mxMTRTransparent->show(); + mxSldTransparent->show(); SetTransparency(0); } } else { // no transparency at all - mpLBTransType->SetNoSelection(); - mpLBTransType->Disable(); - mpTrspTextFT->Disable(); - mpMTRTransparent->Disable(); - mpSldTransparent->Disable(); - mpMTRTransparent->Show(); - mpSldTransparent->Show(); - mpBTNGradient->Disable(); - mpBTNGradient->Hide(); + mxLBTransType->set_active(-1); + mxLBTransType->set_sensitive(false); + mxTrspTextFT->set_sensitive(false); + mxMTRTransparent->set_sensitive(false); + mxSldTransparent->set_sensitive(false); + mxMTRTransparent->show(); + mxSldTransparent->show(); + mxBTNGradient->set_sensitive(false); + mxBTNGradient->hide(); } } @@ -804,13 +801,13 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, { if(bDisabled) { - mpLbFillType->Disable(); - mpColorTextFT->Disable(); - mpLbFillType->SetNoSelection(); - mpLbFillAttr->Show(); - mpLbFillAttr->Disable(); - mpLbFillAttr->SetNoSelection(); - mpToolBoxColor->Hide(); + mxLbFillType->set_sensitive(false); + mxColorTextFT->set_sensitive(false); + mxLbFillType->set_active(-1); + mxLbFillAttr->show(); + mxLbFillAttr->set_sensitive(false); + mxLbFillAttr->set_active(-1); + mxToolBoxColor->hide(); meLastXFS = static_cast<sal_uInt16>(-1); mpStyleItem.reset(); } @@ -818,8 +815,8 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, { const XFillStyleItem* pItem = static_cast<const XFillStyleItem*>(pState); mpStyleItem.reset(pItem->Clone()); - mpLbFillType->Enable(); - mpColorTextFT->Enable(); + mxLbFillType->set_sensitive(true); + mxColorTextFT->set_sensitive(true); drawing::FillStyle eXFS = mpStyleItem->GetValue(); eFillStyle nPos = NONE; switch(eXFS) @@ -827,8 +824,8 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, default: case drawing::FillStyle_NONE: { - mpLbFillAttr->SetNoSelection(); - mpLbFillAttr->Disable(); + mxLbFillAttr->set_active(-1); + mxLbFillAttr->set_sensitive(false); nPos = NONE; break; } @@ -855,17 +852,17 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, break; } } - meLastXFS = static_cast< sal_uInt16 >(mpLbFillType->GetSelectedEntryPos()); - mpLbFillType->SelectEntryPos(static_cast< sal_Int32 >(nPos)); + meLastXFS = static_cast< sal_uInt16 >(mxLbFillType->get_active()); + mxLbFillType->set_active(static_cast< sal_Int32 >(nPos)); Update(); return; } - mpLbFillType->SetNoSelection(); - mpLbFillAttr->Show(); - mpLbFillAttr->Disable(); - mpLbFillAttr->SetNoSelection(); - mpToolBoxColor->Hide(); + mxLbFillType->set_active(-1); + mxLbFillAttr->show(); + mxLbFillAttr->set_sensitive(false); + mxLbFillAttr->set_active(-1); + mxToolBoxColor->hide(); meLastXFS = static_cast<sal_uInt16>(-1); mpStyleItem.reset(); if(mpPanel) @@ -882,31 +879,31 @@ void AreaPropertyPanelBase::updateFillGradient(bool bDisabled, bool bDefaultOrSe if(mpStyleItem && drawing::FillStyle_GRADIENT == mpStyleItem->GetValue()) { - mpLbFillAttr->Hide(); - mpLbFillGradFrom->Show(); - mpLbFillGradTo->Show(); - mpMTRAngle->Show(); - mpGradientStyle->Show(); - mpToolBoxColor->Hide(); + mxLbFillAttr->hide(); + mxLbFillGradFrom->show(); + mxLbFillGradTo->show(); + mxMTRAngle->show(); + mxGradientStyle->show(); + mxToolBoxColor->hide(); if (bDefaultOrSet) { - mpLbFillType->SelectEntryPos(GRADIENT); + mxLbFillType->set_active(GRADIENT); Update(); } else if(bDisabled) { - mpLbFillGradFrom->SetNoSelection(); - mpLbFillGradTo->SetNoSelection(); - mpLbFillGradFrom->Disable(); - mpLbFillGradTo->Disable(); - mpMTRAngle->Disable(); - mpGradientStyle->Disable(); + mxLbFillGradFrom->SetNoSelection(); + mxLbFillGradTo->SetNoSelection(); + mxLbFillGradFrom->set_sensitive(false); + mxLbFillGradTo->set_sensitive(false); + mxMTRAngle->set_sensitive(false); + mxGradientStyle->set_sensitive(false); } else { - mpLbFillGradFrom->SetNoSelection(); - mpLbFillGradTo->SetNoSelection(); + mxLbFillGradFrom->SetNoSelection(); + mxLbFillGradTo->SetNoSelection(); } } if(mpPanel) @@ -923,23 +920,23 @@ void AreaPropertyPanelBase::updateFillHatch(bool bDisabled, bool bDefaultOrSet, if(mpStyleItem && drawing::FillStyle_HATCH == mpStyleItem->GetValue()) { - mpLbFillAttr->Show(); - mpToolBoxColor->Hide(); + mxLbFillAttr->show(); + mxToolBoxColor->hide(); if (bDefaultOrSet) { - mpLbFillAttr->Enable(); - mpLbFillType->SelectEntryPos(HATCH); + mxLbFillAttr->set_sensitive(true); + mxLbFillType->set_active(HATCH); Update(); } else if(bDisabled) { - mpLbFillAttr->Disable(); - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_sensitive(false); + mxLbFillAttr->set_active(-1); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } if(mpPanel) @@ -956,9 +953,9 @@ void AreaPropertyPanelBase::updateFillColor(bool bDefaultOrSet, const SfxPoolIte if(mpStyleItem && drawing::FillStyle_SOLID == mpStyleItem->GetValue()) { - mpLbFillAttr->Hide(); - mpToolBoxColor->Show(); - mpLbFillType->SelectEntryPos(SOLID); + mxLbFillAttr->hide(); + mxToolBoxColor->show(); + mxLbFillType->set_active(SOLID); Update(); } if(mpPanel) @@ -975,25 +972,25 @@ void AreaPropertyPanelBase::updateFillBitmap(bool bDisabled, bool bDefaultOrSet, if(mpStyleItem && drawing::FillStyle_BITMAP == mpStyleItem->GetValue()) { - mpLbFillAttr->Show(); - mpToolBoxColor->Hide(); + mxLbFillAttr->show(); + mxToolBoxColor->hide(); if (bDefaultOrSet) { if(mpBitmapItem->isPattern()) - mpLbFillType->SelectEntryPos(PATTERN); + mxLbFillType->set_active(PATTERN); else - mpLbFillType->SelectEntryPos(BITMAP); + mxLbFillType->set_active(BITMAP); Update(); } else if(bDisabled) { - mpLbFillAttr->Hide(); - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->hide(); + mxLbFillAttr->set_active(-1); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } if(mpPanel) @@ -1043,14 +1040,14 @@ void AreaPropertyPanelBase::NotifyItemUpdate( const OUString aString( mpFillGradientItem->GetName() ); const SfxObjectShell* pSh = SfxObjectShell::Current(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Enable(); - mpLbFillAttr->Fill(pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList()); - mpLbFillAttr->SelectEntry(aString); + mxLbFillAttr->clear(); + mxLbFillAttr->set_sensitive(true); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList()); + mxLbFillAttr->set_active_text(aString); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } } @@ -1067,14 +1064,14 @@ void AreaPropertyPanelBase::NotifyItemUpdate( const OUString aString( mpHatchItem->GetName() ); const SfxObjectShell* pSh = SfxObjectShell::Current(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Enable(); - mpLbFillAttr->Fill(pSh->GetItem(SID_HATCH_LIST)->GetHatchList()); - mpLbFillAttr->SelectEntry(aString); + mxLbFillAttr->clear(); + mxLbFillAttr->set_sensitive(true); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_HATCH_LIST)->GetHatchList()); + mxLbFillAttr->set_active_text(aString); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } } @@ -1091,21 +1088,21 @@ void AreaPropertyPanelBase::NotifyItemUpdate( { const OUString aString( mpBitmapItem->GetName() ); const SfxObjectShell* pSh = SfxObjectShell::Current(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Show(); + mxLbFillAttr->clear(); + mxLbFillAttr->show(); if(nSID == SID_BITMAP_LIST) { - mpLbFillAttr->Fill(pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList()); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList()); } else if(nSID == SID_PATTERN_LIST) { - mpLbFillAttr->Fill(pSh->GetItem(SID_PATTERN_LIST)->GetPatternList()); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_PATTERN_LIST)->GetPatternList()); } - mpLbFillAttr->SelectEntry(aString); + mxLbFillAttr->set_active_text(aString); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } } @@ -1116,147 +1113,147 @@ void AreaPropertyPanelBase::NotifyItemUpdate( void AreaPropertyPanelBase::Update() { - const eFillStyle eXFS = static_cast<eFillStyle>(mpLbFillType->GetSelectedEntryPos()); + const eFillStyle eXFS = static_cast<eFillStyle>(mxLbFillType->get_active()); SfxObjectShell* pSh = SfxObjectShell::Current(); switch( eXFS ) { case eFillStyle::NONE: { - mpLbFillAttr->Show(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpMTRAngle->Hide(); - mpGradientStyle->Hide(); - mpToolBoxColor->Hide(); - mpBmpImport->Hide(); + mxLbFillAttr->show(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxMTRAngle->hide(); + mxGradientStyle->hide(); + mxToolBoxColor->hide(); + mxBmpImport->hide(); break; } case eFillStyle::SOLID: { if(mpColorItem) { - mpLbFillAttr->Hide(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpMTRAngle->Hide(); - mpGradientStyle->Hide(); - mpToolBoxColor->Show(); - mpBmpImport->Hide(); + mxLbFillAttr->hide(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxMTRAngle->hide(); + mxGradientStyle->hide(); + mxToolBoxColor->show(); + mxBmpImport->hide(); } break; } case eFillStyle::GRADIENT: { - mpLbFillAttr->Hide(); - mpLbFillGradFrom->Show(); - mpLbFillGradTo->Show(); - mpMTRAngle->Enable(); - mpMTRAngle->Show(); - mpGradientStyle->Show(); - mpToolBoxColor->Hide(); - mpBmpImport->Hide(); + mxLbFillAttr->hide(); + mxLbFillGradFrom->show(); + mxLbFillGradTo->show(); + mxMTRAngle->set_sensitive(true); + mxMTRAngle->show(); + mxGradientStyle->show(); + mxToolBoxColor->hide(); + mxBmpImport->hide(); if(pSh && pSh->GetItem(SID_GRADIENT_LIST)) { - mpLbFillAttr->Enable(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Fill(pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList()); - mpLbFillGradTo->SetNoSelection(); - mpLbFillGradFrom->SetNoSelection(); + mxLbFillAttr->set_sensitive(true); + mxLbFillAttr->clear(); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList()); + mxLbFillGradTo->SetNoSelection(); + mxLbFillGradFrom->SetNoSelection(); if (mpFillGradientItem) { const OUString aString(mpFillGradientItem->GetName()); - mpLbFillAttr->SelectEntry(aString); + mxLbFillAttr->set_active_text(aString); const XGradient aGradient = mpFillGradientItem->GetGradientValue(); - mpLbFillGradFrom->SelectEntry(aGradient.GetStartColor()); - mpLbFillGradTo->SelectEntry(aGradient.GetEndColor()); - mpGradientStyle->SelectEntryPos(sal::static_int_cast< sal_Int32 >( aGradient.GetGradientStyle() )); - if(mpGradientStyle->GetSelectedEntryPos() == sal_Int32(GradientStyle::Radial)) - mpMTRAngle->Disable(); + mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor()); + mxLbFillGradTo->SelectEntry(aGradient.GetEndColor()); + mxGradientStyle->set_active(sal::static_int_cast< sal_Int32 >( aGradient.GetGradientStyle() )); + if(mxGradientStyle->get_active() == sal_Int32(GradientStyle::Radial)) + mxMTRAngle->set_sensitive(false); else - mpMTRAngle->SetValue( aGradient.GetAngle() /10 ); + mxMTRAngle->set_value(aGradient.GetAngle() / 10, FieldUnit::DEGREE); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } break; } case eFillStyle::HATCH: { - mpLbFillAttr->Show(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpMTRAngle->Hide(); - mpGradientStyle->Hide(); - mpToolBoxColor->Hide(); - mpBmpImport->Hide(); - mpBmpImport->Hide(); + mxLbFillAttr->show(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxMTRAngle->hide(); + mxGradientStyle->hide(); + mxToolBoxColor->hide(); + mxBmpImport->hide(); + mxBmpImport->hide(); if(pSh && pSh->GetItem(SID_HATCH_LIST)) { - mpLbFillAttr->Enable(); - mpLbFillAttr->Clear(); - mpLbFillAttr->Fill(pSh->GetItem(SID_HATCH_LIST)->GetHatchList()); + mxLbFillAttr->set_sensitive(true); + mxLbFillAttr->clear(); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_HATCH_LIST)->GetHatchList()); if(mpHatchItem) { const OUString aString(mpHatchItem->GetName()); - mpLbFillAttr->SelectEntry( aString ); + mxLbFillAttr->set_active_text( aString ); } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } } else { - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); } break; } case eFillStyle::BITMAP: case eFillStyle::PATTERN: { - mpLbFillAttr->Show(); - mpLbFillAttr->Enable(); - mpLbFillAttr->Clear(); - mpToolBoxColor->Hide(); - mpLbFillGradFrom->Hide(); - mpLbFillGradTo->Hide(); - mpMTRAngle->Hide(); - mpGradientStyle->Hide(); + mxLbFillAttr->show(); + mxLbFillAttr->set_sensitive(true); + mxLbFillAttr->clear(); + mxToolBoxColor->hide(); + mxLbFillGradFrom->hide(); + mxLbFillGradTo->hide(); + mxMTRAngle->hide(); + mxGradientStyle->hide(); if(mpBitmapItem) { if(pSh && pSh->GetItem(SID_BITMAP_LIST) && eXFS == BITMAP) { - mpBmpImport->Show(); - mpLbFillType->SelectEntryPos(sal_uInt32(BITMAP)); - mpLbFillAttr->Fill(pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList()); + mxBmpImport->show(); + mxLbFillType->set_active(sal_uInt32(BITMAP)); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList()); const OUString aString(mpBitmapItem->GetName()); - mpLbFillAttr->SelectEntry(aString); + mxLbFillAttr->set_active_text(aString); } else if(pSh && pSh->GetItem(SID_PATTERN_LIST) && eXFS == PATTERN) { - mpBmpImport->Hide(); - mpLbFillType->SelectEntryPos(sal_uInt32(PATTERN)); - mpLbFillAttr->Fill(pSh->GetItem(SID_PATTERN_LIST)->GetPatternList()); + mxBmpImport->hide(); + mxLbFillType->set_active(sal_uInt32(PATTERN)); + SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_PATTERN_LIST)->GetPatternList()); const OUString aString(mpBitmapItem->GetName()); - mpLbFillAttr->SelectEntry(aString); + mxLbFillAttr->set_active_text(aString); } } else - mpLbFillAttr->SetNoSelection(); + mxLbFillAttr->set_active(-1); break; } default: @@ -1267,80 +1264,69 @@ void AreaPropertyPanelBase::Update() mpPanel->TriggerDeckLayouting(); } -IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransSliderHdl, Slider*, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransSliderHdl, weld::Scale&, void) { - const sal_uInt16 nVal = mpSldTransparent->GetThumbPos(); + const sal_uInt16 nVal = mxSldTransparent->get_value(); SetTransparency(nVal); const XFillTransparenceItem aLinearItem(nVal); setFillTransparence(aLinearItem); } -IMPL_LINK( AreaPropertyPanelBase, ClickTrGrHdl_Impl, ToolBox*, pToolBox, void ) -{ - if (!mxTrGrPopup) - mxTrGrPopup = VclPtr<AreaTransparencyGradientPopup>::Create(*this); - if (mpFloatTransparenceItem) - mxTrGrPopup->Rearrange(mpFloatTransparenceItem.get()); - OSL_ASSERT( pToolBox->GetItemCommand(pToolBox->GetCurItemId()) == UNO_SIDEBARGRADIENT); - mxTrGrPopup->StartPopupMode(pToolBox, FloatWinPopupFlags::GrabFocus); -} - -IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl, ListBox&, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl, weld::ComboBox&, void) { - sal_Int32 nSelectType = mpLBTransType->GetSelectedEntryPos(); + sal_Int32 nSelectType = mxLBTransType->get_active(); bool bGradient = false; sal_uInt16 nTrans = 0; if(!nSelectType) { - mpBTNGradient->Hide(); - mpMTRTransparent->Show(); - mpSldTransparent->Show(); - mpMTRTransparent->Enable(); - mpSldTransparent->Enable(); + mxBTNGradient->hide(); + mxMTRTransparent->show(); + mxSldTransparent->show(); + mxMTRTransparent->set_sensitive(true); + mxSldTransparent->set_sensitive(true); SetTransparency(0); } else if(1 == nSelectType) { - mpBTNGradient->Hide(); - mpMTRTransparent->Show(); - mpSldTransparent->Show(); + mxBTNGradient->hide(); + mxMTRTransparent->show(); + mxSldTransparent->show(); nTrans = mnLastTransSolid; - mpMTRTransparent->SetValue(nTrans); - mpLBTransType->SelectEntryPos(1); - mpMTRTransparent->Enable(); - mpSldTransparent->Enable(); + mxMTRTransparent->set_value(nTrans, FieldUnit::PERCENT); + mxLBTransType->set_active(1); + mxMTRTransparent->set_sensitive(true); + mxSldTransparent->set_sensitive(true); } else { - mpBTNGradient->Show(); + mxBTNGradient->show(); - const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT); switch (nSelectType) { case 2: - mpBTNGradient->SetItemImage(nIdGradient, maImgLinear); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgLinear); break; case 3: - mpBTNGradient->SetItemImage(nIdGradient, maImgAxial); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgAxial); break; case 4: - mpBTNGradient->SetItemImage(nIdGradient, maImgRadial); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgRadial); break; case 5: - mpBTNGradient->SetItemImage(nIdGradient, maImgElli ); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgElli); break; case 6: - mpBTNGradient->SetItemImage(nIdGradient, maImgQuad ); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgQuad); break; case 7: - mpBTNGradient->SetItemImage(nIdGradient, maImgSquare); + mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgSquare); break; } - mpMTRTransparent->Hide(); - mpSldTransparent->Hide(); - mpBTNGradient->Enable(); + mxMTRTransparent->hide(); + mxSldTransparent->hide(); + mxBTNGradient->set_sensitive(true); bGradient = true; } @@ -1382,16 +1368,16 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl, ListBox&, void) setFillFloatTransparence(aGradientItem); } -IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransparentHdl_Impl, Edit&, void) +IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void) { - const sal_uInt16 nTrans = static_cast<sal_uInt16>(mpMTRTransparent->GetValue()); + const sal_uInt16 nTrans = static_cast<sal_uInt16>(mxMTRTransparent->get_value(FieldUnit::PERCENT)); mnLastTransSolid = nTrans; SetTransparency(nTrans); - const sal_Int32 nSelectType = mpLBTransType->GetSelectedEntryPos(); + const sal_Int32 nSelectType = mxLBTransType->get_active(); if(nTrans && !nSelectType) { - mpLBTransType->SelectEntryPos(1); + mxLBTransType->set_active(1); } const XFillTransparenceItem aLinearItem(nTrans); @@ -1447,7 +1433,7 @@ void AreaPropertyPanelBase::SetGradient (const XGradient& rGradient) sal_Int32 AreaPropertyPanelBase::GetSelectedTransparencyTypeIndex() const { - return mpLBTransType->GetSelectedEntryPos(); + return mxLBTransType->get_active(); } } } // end of namespace svx::sidebar diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx index e3c0ae31c9f4..7bb81287e104 100644 --- a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx +++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx @@ -18,7 +18,6 @@ */ #include <sfx2/app.hxx> -#include <vcl/layout.hxx> #include <svx/sidebar/AreaTransparencyGradientPopup.hxx> #include <svx/sidebar/AreaPropertyPanelBase.hxx> #include <svx/xflftrit.hxx> @@ -26,35 +25,34 @@ namespace svx { namespace sidebar { -AreaTransparencyGradientPopup::AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel) - : FloatingWindow(SfxGetpApp()->GetTopWindow(), "FloatingAreaStyle", "svx/ui/floatingareastyle.ui") - , mrAreaPropertyPanel(rPanel) +AreaTransparencyGradientPopup::AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel, weld::Widget* pParent) + : mrAreaPropertyPanel(rPanel) + , mxBuilder(Application::CreateBuilder(pParent, "svx/ui/floatingareastyle.ui")) + , mxTopLevel(mxBuilder->weld_widget("FloatingAreaStyle")) + , mxCenterGrid(mxBuilder->weld_widget("centergrid")) + , mxAngleGrid(mxBuilder->weld_widget("anglegrid")) + , mxMtrTrgrCenterX(mxBuilder->weld_metric_spin_button("centerx", FieldUnit::PERCENT)) + , mxMtrTrgrCenterY(mxBuilder->weld_metric_spin_button("centery", FieldUnit::PERCENT)) + , mxMtrTrgrAngle(mxBuilder->weld_metric_spin_button("angle", FieldUnit::DEGREE)) + , mxBtnLeft45(mxBuilder->weld_toolbar("lefttoolbox")) + , mxBtnRight45(mxBuilder->weld_toolbar("righttoolbox")) + , mxMtrTrgrStartValue(mxBuilder->weld_metric_spin_button("start", FieldUnit::PERCENT)) + , mxMtrTrgrEndValue(mxBuilder->weld_metric_spin_button("end", FieldUnit::PERCENT)) + , mxMtrTrgrBorder(mxBuilder->weld_metric_spin_button("border", FieldUnit::PERCENT)) { - get(maCenterGrid, "centergrid"); - get(maAngleGrid, "anglegrid"); - get(maMtrTrgrCenterX, "centerx"); - get(maMtrTrgrCenterY, "centery"); - get(maMtrTrgrAngle, "angle"); - get(maBtnLeft45, "lefttoolbox"); - get(maBtnRight45, "righttoolbox"); - get(maMtrTrgrStartValue, "start"); - get(maMtrTrgrEndValue, "end"); - get(maMtrTrgrBorder, "border"); - - Link<Edit&,void> aLink = LINK(this, AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl); - maMtrTrgrCenterX->SetModifyHdl(aLink); - maMtrTrgrCenterY->SetModifyHdl(aLink); - maMtrTrgrAngle->SetModifyHdl(aLink); - maMtrTrgrBorder->SetModifyHdl(aLink); - maMtrTrgrStartValue->SetModifyHdl(aLink); - maMtrTrgrEndValue->SetModifyHdl(aLink); - maBtnLeft45->SetSelectHdl(LINK(this, AreaTransparencyGradientPopup, Left_Click45_Impl)); - maBtnRight45->SetSelectHdl(LINK(this, AreaTransparencyGradientPopup, Right_Click45_Impl)); + Link<weld::MetricSpinButton&,void> aLink = LINK(this, AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl); + mxMtrTrgrCenterX->connect_value_changed(aLink); + mxMtrTrgrCenterY->connect_value_changed(aLink); + mxMtrTrgrAngle->connect_value_changed(aLink); + mxMtrTrgrBorder->connect_value_changed(aLink); + mxMtrTrgrStartValue->connect_value_changed(aLink); + mxMtrTrgrEndValue->connect_value_changed(aLink); + mxBtnLeft45->connect_clicked(LINK(this, AreaTransparencyGradientPopup, Left_Click45_Impl)); + mxBtnRight45->connect_clicked(LINK(this, AreaTransparencyGradientPopup, Right_Click45_Impl)); } AreaTransparencyGradientPopup::~AreaTransparencyGradientPopup() { - disposeOnce(); } void AreaTransparencyGradientPopup::InitStatus(XFillFloatTransparenceItem const * pGradientItem) @@ -78,12 +76,12 @@ void AreaTransparencyGradientPopup::InitStatus(XFillFloatTransparenceItem const { aGradient = rGradient; } - maMtrTrgrCenterX->SetValue(aGradient.GetXOffset()); - maMtrTrgrCenterY->SetValue(aGradient.GetYOffset()); - maMtrTrgrAngle->SetValue(aGradient.GetAngle() / 10); - maMtrTrgrStartValue->SetValue(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetStartColor().GetRed()) + 1) * 100) / 255)); - maMtrTrgrEndValue->SetValue(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetEndColor().GetRed()) + 1) * 100) / 255)); - maMtrTrgrBorder->SetValue(aGradient.GetBorder()); + mxMtrTrgrCenterX->set_value(aGradient.GetXOffset(), FieldUnit::PERCENT); + mxMtrTrgrCenterY->set_value(aGradient.GetYOffset(), FieldUnit::PERCENT); + mxMtrTrgrAngle->set_value(aGradient.GetAngle() / 10, FieldUnit::DEGREE); + mxMtrTrgrStartValue->set_value(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetStartColor().GetRed()) + 1) * 100) / 255), FieldUnit::PERCENT); + mxMtrTrgrEndValue->set_value(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetEndColor().GetRed()) + 1) * 100) / 255), FieldUnit::PERCENT); + mxMtrTrgrBorder->set_value(aGradient.GetBorder(), FieldUnit::PERCENT); } void AreaTransparencyGradientPopup::Rearrange(XFillFloatTransparenceItem const * pGradientItem) @@ -96,18 +94,18 @@ void AreaTransparencyGradientPopup::Rearrange(XFillFloatTransparenceItem const * { case css::awt::GradientStyle_LINEAR: case css::awt::GradientStyle_AXIAL: - maCenterGrid->Hide(); - maAngleGrid->Show(); + mxCenterGrid->hide(); + mxAngleGrid->show(); break; case css::awt::GradientStyle_RADIAL: - maCenterGrid->Show(); - maAngleGrid->Hide(); + mxCenterGrid->show(); + mxAngleGrid->hide(); break; case css::awt::GradientStyle_ELLIPTICAL: case css::awt::GradientStyle_SQUARE: case css::awt::GradientStyle_RECT: - maCenterGrid->Show(); - maAngleGrid->Show(); + mxCenterGrid->show(); + mxAngleGrid->show(); break; default: break; @@ -117,21 +115,21 @@ void AreaTransparencyGradientPopup::Rearrange(XFillFloatTransparenceItem const * void AreaTransparencyGradientPopup::ExecuteValueModify(sal_uInt8 nStartCol, sal_uInt8 nEndCol) { //Added - sal_Int16 aMtrValue = static_cast<sal_Int16>(maMtrTrgrAngle->GetValue()); + sal_Int16 aMtrValue = static_cast<sal_Int16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE)); while(aMtrValue<0) aMtrValue += 360; sal_uInt16 nVal = aMtrValue/360; nVal = aMtrValue - nVal*360; - maMtrTrgrAngle->SetValue(nVal); + mxMtrTrgrAngle->set_value(nVal, FieldUnit::DEGREE); //End of new code XGradient aTmpGradient( Color(nStartCol, nStartCol, nStartCol), Color(nEndCol, nEndCol, nEndCol), static_cast<css::awt::GradientStyle>(mrAreaPropertyPanel.GetSelectedTransparencyTypeIndex()-2), - static_cast<sal_uInt16>(maMtrTrgrAngle->GetValue()) * 10, - static_cast<sal_uInt16>(maMtrTrgrCenterX->GetValue()), - static_cast<sal_uInt16>(maMtrTrgrCenterY->GetValue()), - static_cast<sal_uInt16>(maMtrTrgrBorder->GetValue()), + static_cast<sal_uInt16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE)) * 10, + static_cast<sal_uInt16>(mxMtrTrgrCenterX->get_value(FieldUnit::PERCENT)), + static_cast<sal_uInt16>(mxMtrTrgrCenterY->get_value(FieldUnit::PERCENT)), + static_cast<sal_uInt16>(mxMtrTrgrBorder->get_value(FieldUnit::PERCENT)), 100, 100); mrAreaPropertyPanel.SetGradient(aTmpGradient); @@ -141,52 +139,37 @@ void AreaTransparencyGradientPopup::ExecuteValueModify(sal_uInt8 nStartCol, sal_ mrAreaPropertyPanel.setFillFloatTransparence(aGradientItem); } -IMPL_LINK_NOARG(AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl, Edit&, void) +IMPL_LINK_NOARG(AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl, weld::MetricSpinButton&, void) { - sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrStartValue->GetValue()) * 255) / 100); - sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrEndValue->GetValue()) * 255) / 100); + sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT)) * 255) / 100); + sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT)) * 255) / 100); ExecuteValueModify( nStartCol, nEndCol ); } -IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Left_Click45_Impl, ToolBox *, void) +IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Left_Click45_Impl, const OString&, void) { - sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrStartValue->GetValue()) * 255) / 100); - sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrEndValue->GetValue()) * 255) / 100); - sal_uInt16 nTemp = static_cast<sal_uInt16>(maMtrTrgrAngle->GetValue()); + sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT)) * 255) / 100); + sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT)) * 255) / 100); + sal_uInt16 nTemp = static_cast<sal_uInt16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE)); if (nTemp>=315) nTemp -= 360; nTemp += 45; - maMtrTrgrAngle->SetValue(nTemp); + mxMtrTrgrAngle->set_value(nTemp, FieldUnit::DEGREE); ExecuteValueModify(nStartCol, nEndCol); } -IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Right_Click45_Impl, ToolBox *, void) +IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Right_Click45_Impl, const OString&, void) { - sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrStartValue->GetValue()) * 255) / 100); - sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrEndValue->GetValue()) * 255) / 100); - sal_uInt16 nTemp = static_cast<sal_uInt16>(maMtrTrgrAngle->GetValue()); + sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT)) * 255) / 100); + sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT)) * 255) / 100); + sal_uInt16 nTemp = static_cast<sal_uInt16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE)); if (nTemp<45) nTemp += 360; nTemp -= 45; - maMtrTrgrAngle->SetValue(nTemp); + mxMtrTrgrAngle->set_value(nTemp, FieldUnit::DEGREE); ExecuteValueModify(nStartCol, nEndCol); } -void AreaTransparencyGradientPopup::dispose() -{ - maCenterGrid.clear(); - maAngleGrid.clear(); - maMtrTrgrCenterX.clear(); - maMtrTrgrCenterY.clear(); - maMtrTrgrAngle.clear(); - maBtnLeft45.clear(); - maBtnRight45.clear(); - maMtrTrgrStartValue.clear(); - maMtrTrgrEndValue.clear(); - maMtrTrgrBorder.clear(); - FloatingWindow::dispose(); -} - } } // end of namespace svx::sidebar /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx index 0dba161ef7fd..f8bfd20bf561 100644 --- a/svx/source/tbxctrls/PaletteManager.cxx +++ b/svx/source/tbxctrls/PaletteManager.cxx @@ -341,7 +341,7 @@ void PaletteManager::AddRecentColor(const Color& rRecentColor, const OUString& r batch->commit(); } -void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater) +void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdaterBase* pBtnUpdater) { mpBtnUpdater = pBtnUpdater; } diff --git a/svx/source/tbxctrls/itemwin.cxx b/svx/source/tbxctrls/itemwin.cxx index f879c0a84313..c6b07d3b71de 100644 --- a/svx/source/tbxctrls/itemwin.cxx +++ b/svx/source/tbxctrls/itemwin.cxx @@ -732,6 +732,33 @@ void SvxFillAttrBox::Fill(weld::ComboBox& rBox, const XHatchListRef &pList) rBox.thaw(); } +void SvxFillAttrBox::Fill(weld::ComboBox& rBox, const XGradientListRef &pList) +{ + if( !pList.is() ) + return; + + long nCount = pList->Count(); + ScopedVclPtrInstance< VirtualDevice > pVD; + rBox.freeze(); + + for( long i = 0; i < nCount; i++ ) + { + const XGradientEntry* pEntry = pList->GetGradient(i); + const BitmapEx aBitmapEx = pList->GetUiBitmap( i ); + if( !aBitmapEx.IsEmpty() ) + { + const Size aBmpSize(aBitmapEx.GetSizePixel()); + pVD->SetOutputSizePixel(aBmpSize, false); + pVD->DrawBitmapEx(Point(), aBitmapEx); + rBox.append("", pEntry->GetName(), *pVD); + } + else + rBox.append_text(pEntry->GetName()); + } + + rBox.thaw(); +} + void SvxFillAttrBox::Fill(weld::ComboBox& rBox, const XBitmapListRef &pList) { if( !pList.is() ) diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx index b4c7ca5e4e9f..10ad6779c234 100644 --- a/svx/source/tbxctrls/tbcontrl.cxx +++ b/svx/source/tbxctrls/tbcontrl.cxx @@ -32,7 +32,6 @@ #include <vcl/bitmapaccess.hxx> #include <vcl/menubtn.hxx> #include <vcl/vclptr.hxx> -#include <vcl/weldutils.hxx> #include <svtools/valueset.hxx> #include <svtools/ctrlbox.hxx> #include <svl/style.hxx> @@ -1775,7 +1774,8 @@ SvxColorWindow::SvxColorWindow(const OUString& rCommand, } } -ColorWindow::ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager, +ColorWindow::ColorWindow(const OUString& rCommand, + std::shared_ptr<PaletteManager> const & rPaletteManager, ColorStatus& rColorStatus, sal_uInt16 nSlotId, const Reference< XFrame >& rFrame, @@ -1785,6 +1785,7 @@ ColorWindow::ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager : ToolbarPopupBase(rFrame) , m_xBuilder(Application::CreateBuilder(rMenuButton.get_widget(), "svx/ui/colorwindow.ui")) , theSlotId(nSlotId) + , maCommand(rCommand) , mpParentWindow(pParentWindow) , maMenuButton(rMenuButton) , mxPaletteManager(rPaletteManager) @@ -1877,6 +1878,12 @@ ColorWindow::ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager mxRecentColorSet->set_size_request(aSize.Width(), aSize.Height()); AddStatusListener( ".uno:ColorTableState" ); + AddStatusListener( maCommand ); + if ( maCommand == ".uno:FrameLineColor" ) + { + AddStatusListener( ".uno:BorderTLBR" ); + AddStatusListener( ".uno:BorderBLTR" ); + } } IMPL_LINK_NOARG(ColorWindow, FocusHdl, weld::Widget&, void) @@ -2036,7 +2043,9 @@ IMPL_LINK(ColorWindow, SelectHdl, SvtValueSet*, pColorSet, void) if (maMenuButton.get_active()) maMenuButton.set_active(false); - maColorSelectFunction(OUString(), aNamedColor); + maSelectedLink.Call(aNamedColor); + + maColorSelectFunction(maCommand, aNamedColor); } IMPL_LINK_NOARG(SvxColorWindow, SelectPaletteHdl, ListBox&, void) @@ -2092,7 +2101,9 @@ IMPL_LINK(ColorWindow, AutoColorClickHdl, weld::Button&, rButton, void) if (maMenuButton.get_active()) maMenuButton.set_active(false); - maColorSelectFunction(OUString(), aNamedColor); + maSelectedLink.Call(aNamedColor); + + maColorSelectFunction(maCommand, aNamedColor); } IMPL_LINK_NOARG(SvxColorWindow, OpenPickerClickHdl, Button*, void) @@ -2119,7 +2130,7 @@ IMPL_LINK_NOARG(ColorWindow, OpenPickerClickHdl, weld::Button&, void) { if (maMenuButton.get_active()) maMenuButton.set_active(false); - mxPaletteManager->PopupColorPicker(mpParentWindow, OUString(), GetSelectEntryColor().first); + mxPaletteManager->PopupColorPicker(mpParentWindow, maCommand, GetSelectEntryColor().first); } void SvxColorWindow::StartSelection() @@ -3456,25 +3467,54 @@ void SvxColorToolBoxControl::initialize( const css::uno::Sequence<css::uno::Any> { PopupWindowController::initialize( rArguments ); - ToolBox* pToolBox = nullptr; - sal_uInt16 nId = 0; - if ( !getToolboxId( nId, &pToolBox ) ) - { - SAL_WARN("svx.tbxcrtls", "ToolBox not found!"); - return; - } - m_nSlotId = MapCommandToSlotId( m_aCommandURL ); + if ( m_nSlotId == SID_ATTR_LINE_COLOR || m_nSlotId == SID_ATTR_FILL_COLOR || m_nSlotId == SID_FRAME_LINECOLOR || m_nSlotId == SID_BACKGROUND_COLOR ) + { // Sidebar uses wide buttons for those. - m_bSplitButton = typeid( *pToolBox ) != typeid( sfx2::sidebar::SidebarToolBox ); + m_bSplitButton = !m_bSidebar; + } auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(getCommandURL(), getModuleName()); OUString aCommandLabel = vcl::CommandInfoProvider::GetLabelForCommand(aProperties); - m_xBtnUpdater.reset( new svx::ToolboxButtonColorUpdater( m_nSlotId, nId, pToolBox, !m_bSplitButton, aCommandLabel ) ); - pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) ); + if (m_pToolbar) + { + EnsurePaletteManager(); + + const css::uno::Reference<css::awt::XWindow> xParent = m_xFrame->getContainerWindow(); + weld::Window* pParentFrame = Application::GetFrameWeld(xParent); + + const OString aId(m_aCommandURL.toUtf8()); + + auto xPopover = std::make_unique<ColorWindow>( + m_aCommandURL, + m_xPaletteManager, + m_aColorStatus, + m_nSlotId, + m_xFrame, + pParentFrame, + MenuOrToolMenuButton(m_pToolbar, aId), + m_aColorSelectFunction); + + if ( m_bSplitButton ) + xPopover->SetSelectedHdl( LINK( this, SvxColorToolBoxControl, SelectedHdl ) ); + + m_pToolbar->set_item_popover(aId, xPopover->getTopLevel()); + mxPopover = std::move(xPopover); + + m_xBtnUpdater.reset(new svx::ToolboxButtonColorUpdater(m_nSlotId, aId, m_pToolbar, !m_bSplitButton, aCommandLabel, m_xFrame)); + return; + } + + ToolBox* pToolBox = nullptr; + sal_uInt16 nId = 0; + if (getToolboxId(nId, &pToolBox)) + { + m_xBtnUpdater.reset( new svx::VclToolboxButtonColorUpdater( m_nSlotId, nId, pToolBox, !m_bSplitButton, aCommandLabel, m_aCommandURL, m_xFrame ) ); + pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) ); + } } void SvxColorToolBoxControl::update() @@ -3552,11 +3592,15 @@ void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& { ToolBox* pToolBox = nullptr; sal_uInt16 nId = 0; - if ( !getToolboxId( nId, &pToolBox ) ) - return; + getToolboxId(nId, &pToolBox); if ( rEvent.FeatureURL.Complete == m_aCommandURL ) - pToolBox->EnableItem( nId, rEvent.IsEnabled ); + { + if (m_pToolbar) + m_pToolbar->set_item_sensitive(m_aCommandURL.toUtf8(), rEvent.IsEnabled); + else + pToolBox->EnableItem( nId, rEvent.IsEnabled ); + } bool bValue; if ( !m_bSplitButton ) @@ -3565,15 +3609,29 @@ void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& m_xBtnUpdater->Update( m_aColorStatus.GetColor() ); } else if ( rEvent.State >>= bValue ) - pToolBox->CheckItem( nId, bValue ); + { + if (m_pToolbar) + m_pToolbar->set_item_active(m_aCommandURL.toUtf8(), bValue); + else if (pToolBox) + pToolBox->CheckItem( nId, bValue ); + } } void SvxColorToolBoxControl::execute(sal_Int16 /*nSelectModifier*/) { if ( !m_bSplitButton ) { - // Open the popup also when Enter key is pressed. - createPopupWindow(); + if (m_pToolbar) + { + // Toggle the popup also when toolbutton is activated + const OString aId(m_aCommandURL.toUtf8()); + m_pToolbar->set_menu_item_active(aId, !m_pToolbar->get_menu_item_active(aId)); + } + else + { + // Open the popup also when Enter key is pressed. + createPopupWindow(); + } return; } @@ -3611,17 +3669,7 @@ sal_Bool SvxColorToolBoxControl::opensSubToolbar() void SvxColorToolBoxControl::updateImage() { - ToolBox* pToolBox = nullptr; - sal_uInt16 nId = 0; - if ( !getToolboxId( nId, &pToolBox ) ) - return; - - Image aImage = vcl::CommandInfoProvider::GetImageForCommand(m_aCommandURL, m_xFrame, pToolBox->GetImageSize()); - if ( !!aImage ) - { - pToolBox->SetItemImage( nId, aImage ); - m_xBtnUpdater->Update(m_xBtnUpdater->GetCurrentColor(), true); - } + m_xBtnUpdater->Update(m_xBtnUpdater->GetCurrentColor(), true); } OUString SvxColorToolBoxControl::getSubToolbarName() @@ -3741,8 +3789,7 @@ void SvxSimpleUndoRedoController::StateChanged( sal_uInt16, SfxItemState eState, SvxCurrencyToolBoxControl::SvxCurrencyToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext ) : PopupWindowController( rContext, nullptr, OUString() ), m_eLanguage( Application::GetSettings().GetLanguageTag().getLanguageType() ), - m_nFormatKey( NUMBERFORMAT_ENTRY_NOT_FOUND ), - m_pToolbar(nullptr) + m_nFormatKey( NUMBERFORMAT_ENTRY_NOT_FOUND ) { } @@ -3877,28 +3924,15 @@ namespace } } -void SvxCurrencyToolBoxControl::EndPopupMode() -{ - m_pToolbar->set_menu_item_active(m_aCommandURL.toUtf8(), false); -} - -void SvxCurrencyToolBoxControl::dispose() -{ - m_xPopover.reset(); - svt::PopupWindowController::dispose(); -} - void SvxCurrencyToolBoxControl::initialize( const css::uno::Sequence< css::uno::Any >& rArguments ) { PopupWindowController::initialize(rArguments); - if (weld::TransportAsXWindow* pTunnel = dynamic_cast<weld::TransportAsXWindow*>(getParent().get())) + if (m_pToolbar) { - m_pToolbar = dynamic_cast<weld::Toolbar*>(pTunnel->getWidget()); - assert(m_pToolbar && "must be a toolbar"); auto xPopover = std::make_unique<CurrencyList_Impl>(this, m_pToolbar, m_aFormatString, m_eLanguage); m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(), xPopover->getTopLevel()); - m_xPopover = std::move(xPopover); + mxPopover = std::move(xPopover); return; } @@ -4310,6 +4344,7 @@ void ColorListBox::createColorWindow() EnsurePaletteManager(); m_xColorWindow.reset(new ColorWindow( + OUString() /*m_aCommandURL*/, m_xPaletteManager, m_aColorStatus, m_nSlotId, @@ -4319,7 +4354,7 @@ void ColorListBox::createColorWindow() m_aColorWrapper)); SetNoSelection(); - m_xButton->set_popover(m_xColorWindow->GetWidget()); + m_xButton->set_popover(m_xColorWindow->getTopLevel()); if (m_bShowNoneButton) m_xColorWindow->ShowNoneButton(); m_xColorWindow->SelectEntry(m_aSelectedColor); diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx index 547ae1c42757..2895f258590b 100644 --- a/svx/source/tbxctrls/tbxcolorupdate.cxx +++ b/svx/source/tbxctrls/tbxcolorupdate.cxx @@ -21,9 +21,11 @@ #include <svx/svxids.hrc> #include <svx/xdef.hxx> +#include <vcl/commandinfoprovider.hxx> #include <vcl/svapp.hxx> #include <vcl/toolbox.hxx> #include <vcl/virdev.hxx> +#include <vcl/weld.hxx> #include <vcl/settings.hxx> #include <tools/debug.hxx> @@ -32,16 +34,20 @@ namespace svx { - ToolboxButtonColorUpdater::ToolboxButtonColorUpdater( - sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* pToolBox, bool bWideButton, const OUString& rCommandLabel) + ToolboxButtonColorUpdaterBase::ToolboxButtonColorUpdaterBase(bool bWideButton, const OUString& rCommandLabel, + const OUString& rCommandURL, + const css::uno::Reference<css::frame::XFrame>& rFrame) : mbWideButton(bWideButton) - , mnBtnId(nTbxBtnId) - , mpTbx(pToolBox) + , mbWasHiContrastMode(Application::GetSettings().GetStyleSettings().GetHighContrastMode()) , maCurColor(COL_TRANSPARENT) , maCommandLabel(rCommandLabel) + , maCommandURL(rCommandURL) + , mxFrame(rFrame) + { + } + + void ToolboxButtonColorUpdaterBase::Init(sal_uInt16 nSlotId) { - DBG_ASSERT(pToolBox, "ToolBox not found :-("); - mbWasHiContrastMode = pToolBox && pToolBox->GetSettings().GetStyleSettings().GetHighContrastMode(); switch (nSlotId) { case SID_ATTR_CHAR_COLOR: @@ -68,10 +74,57 @@ namespace svx } } - ToolboxButtonColorUpdater::~ToolboxButtonColorUpdater() + VclToolboxButtonColorUpdater::VclToolboxButtonColorUpdater( + sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* pToolBox, bool bWideButton, + const OUString& rCommandLabel, const OUString& rCommandURL, + const css::uno::Reference<css::frame::XFrame>& rFrame) + : ToolboxButtonColorUpdaterBase(bWideButton, rCommandLabel, rCommandURL, rFrame) + , mnBtnId(nTbxBtnId) + , mpTbx(pToolBox) + { + Init(nSlotId); + } + + void VclToolboxButtonColorUpdater::SetQuickHelpText(const OUString& rText) + { + mpTbx->SetQuickHelpText(mnBtnId, rText); + } + + OUString VclToolboxButtonColorUpdater::GetQuickHelpText() const + { + return mpTbx->GetQuickHelpText(mnBtnId); + } + + void VclToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev) + { + mpTbx->SetItemImage(mnBtnId, Image(pVirDev->GetBitmapEx(Point(0,0), maBmpSize))); + } + + VclPtr<VirtualDevice> VclToolboxButtonColorUpdater::CreateVirtualDevice() const + { + auto xRet = VclPtr<VirtualDevice>::Create(*mpTbx, + DeviceFormat::DEFAULT, DeviceFormat::DEFAULT); + xRet->SetBackground(mpTbx->GetControlBackground()); + return xRet; + } + + vcl::ImageType VclToolboxButtonColorUpdater::GetImageSize() const + { + return mpTbx->GetImageSize(); + } + + Size VclToolboxButtonColorUpdater::GetItemSize() const + { + if (mbWideButton) + return mpTbx->GetItemContentSize(mnBtnId); + Image aImage(mpTbx->GetItemImage(mnBtnId)); + return aImage.GetSizePixel(); + } + + ToolboxButtonColorUpdaterBase::~ToolboxButtonColorUpdaterBase() {} - void ToolboxButtonColorUpdater::Update(const NamedColor &rNamedColor) + void ToolboxButtonColorUpdaterBase::Update(const NamedColor &rNamedColor) { Update(rNamedColor.first); if (!mbWideButton) @@ -80,14 +133,14 @@ namespace svx OUString colorSuffix = OUString(" (%1)").replaceFirst("%1", rNamedColor.second); OUString colorHelpText = maCommandLabel + colorSuffix; - mpTbx->SetQuickHelpText(mnBtnId, colorHelpText); + SetQuickHelpText(colorHelpText); } } - void ToolboxButtonColorUpdater::Update(const Color& rColor, bool bForceUpdate) + void ToolboxButtonColorUpdaterBase::Update(const Color& rColor, bool bForceUpdate) { - Image aImage(mpTbx->GetItemImage(mnBtnId)); - Size aItemSize(mbWideButton ? mpTbx->GetItemContentSize(mnBtnId) : aImage.GetSizePixel()); + Size aItemSize(GetItemSize()); + #ifdef IOS // tdf#126966 // Oddly enough, it is in the "not wide button" case that we want the larger ones, hmm. if (!mbWideButton) @@ -102,7 +155,7 @@ namespace svx } #endif const bool bSizeChanged = (maBmpSize != aItemSize); - const bool bDisplayModeChanged = (mbWasHiContrastMode != mpTbx->GetSettings().GetStyleSettings().GetHighContrastMode()); + const bool bDisplayModeChanged = (mbWasHiContrastMode != Application::GetSettings().GetStyleSettings().GetHighContrastMode()); Color aColor(rColor); // !!! #109290# Workaround for SetFillColor with COL_AUTO @@ -115,19 +168,20 @@ namespace svx if (!aItemSize.Width() || !aItemSize.Height()) return; - ScopedVclPtr<VirtualDevice> pVirDev(VclPtr<VirtualDevice>::Create(*Application::GetDefaultDevice(), - DeviceFormat::DEFAULT, DeviceFormat::DEFAULT)); + ScopedVclPtr<VirtualDevice> pVirDev(CreateVirtualDevice()); pVirDev->SetOutputSizePixel(aItemSize); maBmpSize = aItemSize; - mbWasHiContrastMode = mpTbx->GetSettings().GetStyleSettings().GetHighContrastMode(); + auto xImage = vcl::CommandInfoProvider::GetXGraphicForCommand(maCommandURL, mxFrame, GetImageSize()); + pVirDev->DrawImage(Point(0, 0), Image(xImage)); + + const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); + mbWasHiContrastMode = rStyleSettings.GetHighContrastMode(); if ((COL_TRANSPARENT != aColor) && (maBmpSize.Width() == maBmpSize.Height())) pVirDev->SetLineColor(aColor); - else if( mpTbx->GetBackground().GetColor().IsDark() ) - pVirDev->SetLineColor(COL_WHITE); else - pVirDev->SetLineColor(COL_BLACK); + pVirDev->SetLineColor(rStyleSettings.GetDisableColor()); // use not only COL_TRANSPARENT for detection of transparence, // but the method/way which is designed to do that @@ -151,12 +205,12 @@ namespace svx pVirDev->DrawRect(maUpdRect); - mpTbx->SetItemOverlayImage(mnBtnId, Image(pVirDev->GetBitmapEx(Point(0,0), aItemSize))); + SetImage(pVirDev.get()); } - OUString ToolboxButtonColorUpdater::GetCurrentColorName() + OUString ToolboxButtonColorUpdaterBase::GetCurrentColorName() { - OUString sColorName = mpTbx->GetQuickHelpText(mnBtnId); + OUString sColorName = GetQuickHelpText(); // The obtained string is of format: color context (color name) // Generate a substring which contains only the color name sal_Int32 nStart = sColorName.indexOf('('); @@ -166,6 +220,61 @@ namespace svx sColorName = sColorName.copy( 0, nLength - 1); return sColorName; } + + ToolboxButtonColorUpdater::ToolboxButtonColorUpdater(sal_uInt16 nSlotId, const OString& rTbxBtnId, weld::Toolbar* ptrTbx, bool bWideButton, + const OUString& rCommandLabel, const css::uno::Reference<css::frame::XFrame>& rFrame) + : ToolboxButtonColorUpdaterBase(bWideButton, rCommandLabel, OUString::fromUtf8(rTbxBtnId), rFrame) + , msBtnId(rTbxBtnId) + , mpTbx(ptrTbx) + { + Init(nSlotId); + } + + void ToolboxButtonColorUpdater::SetQuickHelpText(const OUString& rText) + { + mpTbx->set_item_tooltip_text(msBtnId, rText); + } + + OUString ToolboxButtonColorUpdater::GetQuickHelpText() const + { + return mpTbx->get_item_tooltip_text(msBtnId); + } + + void ToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev) + { + mpTbx->set_item_image(msBtnId, pVirDev); + } + + VclPtr<VirtualDevice> ToolboxButtonColorUpdater::CreateVirtualDevice() const + { + return mpTbx->create_virtual_device(); + } + + vcl::ImageType ToolboxButtonColorUpdater::GetImageSize() const + { + return mpTbx->get_icon_size(); + } + + Size ToolboxButtonColorUpdater::GetItemSize() const + { + vcl::ImageType eImageType = GetImageSize(); + int nHeight(16); + switch (eImageType) + { + case vcl::ImageType::Size16: + nHeight = 16; + break; + case vcl::ImageType::Size26: + nHeight = 26; + break; + case vcl::ImageType::Size32: + nHeight = 32; + break; + } + int nWidth = mbWideButton ? nHeight * 5 : nHeight; + return Size(nWidth, nHeight); + } + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/uiconfig/ui/floatingareastyle.ui b/svx/uiconfig/ui/floatingareastyle.ui index 5ba56ad8d0ac..bef7b2400015 100644 --- a/svx/uiconfig/ui/floatingareastyle.ui +++ b/svx/uiconfig/ui/floatingareastyle.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.20.0 --> +<!-- Generated with glade 3.22.1 --> <interface domain="svx"> <requires lib="gtk+" version="3.18"/> <object class="GtkAdjustment" id="adjustment1"> @@ -12,16 +12,30 @@ <property name="step_increment">5</property> <property name="page_increment">10</property> </object> - <object class="GtkWindow" id="FloatingAreaStyle"> + <object class="GtkAdjustment" id="adjustment3"> + <property name="upper">100</property> + <property name="step_increment">5</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment4"> + <property name="upper">100</property> + <property name="step_increment">5</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment5"> + <property name="upper">100</property> + <property name="step_increment">5</property> + <property name="page_increment">10</property> + </object> + <object class="GtkAdjustment" id="adjustment6"> + <property name="upper">100</property> + <property name="step_increment">5</property> + <property name="page_increment">10</property> + </object> + <object class="GtkPopover" id="FloatingAreaStyle"> <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> + <property name="no_show_all">True</property> <property name="border_width">4</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">True</property> - <property name="type_hint">popup-menu</property> - <property name="skip_pager_hint">True</property> - <property name="deletable">False</property> <child> <object class="GtkGrid"> <property name="visible">True</property> @@ -42,7 +56,7 @@ <property name="halign">start</property> <property name="label" translatable="yes" context="floatingareastyle|label1">_Angle:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">angle:0degrees</property> + <property name="mnemonic_widget">angle</property> </object> <packing> <property name="left_attach">0</property> @@ -56,7 +70,7 @@ <property name="column_spacing">12</property> <property name="column_homogeneous">True</property> <child> - <object class="GtkSpinButton" id="angle:0degrees"> + <object class="GtkSpinButton" id="angle"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="floatingareastyle|angle|tooltip_text">Specify the angle of rotation for the gradient shading style.</property> @@ -75,6 +89,9 @@ <object class="GtkToolbar" id="lefttoolbox"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="toolbar_style">icons</property> + <property name="show_arrow">False</property> + <property name="icon_size">2</property> <child> <object class="GtkToolButton" id="left"> <property name="visible">True</property> @@ -84,7 +101,7 @@ </object> <packing> <property name="expand">False</property> - <property name="homogeneous">True</property> + <property name="homogeneous">False</property> </packing> </child> </object> @@ -97,6 +114,9 @@ <object class="GtkToolbar" id="righttoolbox"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="toolbar_style">icons</property> + <property name="show_arrow">False</property> + <property name="icon_size">2</property> <child> <object class="GtkToolButton" id="right"> <property name="visible">True</property> @@ -106,7 +126,7 @@ </object> <packing> <property name="expand">False</property> - <property name="homogeneous">True</property> + <property name="homogeneous">False</property> </packing> </child> </object> @@ -146,7 +166,7 @@ <property name="halign">start</property> <property name="label" translatable="yes" context="floatingareastyle|label4">_Start value:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">start:0%</property> + <property name="mnemonic_widget">start</property> </object> <packing> <property name="left_attach">0</property> @@ -160,7 +180,7 @@ <property name="halign">start</property> <property name="label" translatable="yes" context="floatingareastyle|label5">_End value:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">end:0%</property> + <property name="mnemonic_widget">end</property> </object> <packing> <property name="left_attach">1</property> @@ -168,11 +188,11 @@ </packing> </child> <child> - <object class="GtkSpinButton" id="start:0%"> + <object class="GtkSpinButton" id="start"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="floatingareastyle|start|tooltip_text">Enter a transparency value for the beginning point of the gradient, where 0% is fully opaque and 100% is fully transparent.</property> - <property name="adjustment">adjustment2</property> + <property name="adjustment">adjustment4</property> </object> <packing> <property name="left_attach">0</property> @@ -180,11 +200,11 @@ </packing> </child> <child> - <object class="GtkSpinButton" id="end:0%"> + <object class="GtkSpinButton" id="end"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="floatingareastyle|end|tooltip_text">Enter a transparency value for the endpoint of the gradient, where 0% is fully opaque and 100% is fully transparent.</property> - <property name="adjustment">adjustment2</property> + <property name="adjustment">adjustment5</property> </object> <packing> <property name="left_attach">1</property> @@ -209,7 +229,7 @@ <property name="halign">start</property> <property name="label" translatable="yes" context="floatingareastyle|label6">_Border:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">border:0%</property> + <property name="mnemonic_widget">border</property> </object> <packing> <property name="left_attach">0</property> @@ -217,11 +237,11 @@ </packing> </child> <child> - <object class="GtkSpinButton" id="border:0%"> + <object class="GtkSpinButton" id="border"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="floatingareastyle|border|tooltip_text">Specify the border value of gradient transparency.</property> - <property name="adjustment">adjustment2</property> + <property name="adjustment">adjustment6</property> </object> <packing> <property name="left_attach">0</property> @@ -247,7 +267,7 @@ <property name="halign">start</property> <property name="label" translatable="yes" context="floatingareastyle|label2">Center _X:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">centerx:0%</property> + <property name="mnemonic_widget">centerx</property> </object> <packing> <property name="left_attach">0</property> @@ -261,7 +281,7 @@ <property name="halign">start</property> <property name="label" translatable="yes" context="floatingareastyle|label3">Center _Y:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">centery:0%</property> + <property name="mnemonic_widget">centery</property> </object> <packing> <property name="left_attach">1</property> @@ -269,7 +289,7 @@ </packing> </child> <child> - <object class="GtkSpinButton" id="centerx:0%"> + <object class="GtkSpinButton" id="centerx"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="floatingareastyle|centerx|tooltip_text">Specify the horizontal offset percentage from the center for the gradient shading style. 50% is the horizontal center.</property> @@ -281,11 +301,11 @@ </packing> </child> <child> - <object class="GtkSpinButton" id="centery:0%"> + <object class="GtkSpinButton" id="centery"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="floatingareastyle|centery|tooltip_text">Specify the vertical offset percentage from the center for the gradient shading style. 50% is the vertical center.</property> - <property name="adjustment">adjustment2</property> + <property name="adjustment">adjustment3</property> </object> <packing> <property name="left_attach">1</property> @@ -301,4 +321,14 @@ </object> </child> </object> + <object class="GtkSizeGroup"> + <widgets> + <widget name="angle"/> + <widget name="start"/> + <widget name="end"/> + <widget name="border"/> + <widget name="centerx"/> + <widget name="centery"/> + </widgets> + </object> </interface> diff --git a/svx/uiconfig/ui/sidebararea.ui b/svx/uiconfig/ui/sidebararea.ui index ba5169a23614..79e5299ec252 100644 --- a/svx/uiconfig/ui/sidebararea.ui +++ b/svx/uiconfig/ui/sidebararea.ui @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.16.1 --> +<!-- Generated with glade 3.22.1 --> <interface domain="svx"> - <requires lib="LibreOffice" version="1.0"/> <requires lib="gtk+" version="3.18"/> <object class="GtkAdjustment" id="adjustment1"> <property name="upper">100</property> @@ -13,6 +12,23 @@ <property name="step_increment">1</property> <property name="page_increment">10</property> </object> + <object class="GtkAdjustment" id="adjustment4"> + <property name="upper">100</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkListStore" id="liststore4"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + <!-- column-name image --> + <column type="GdkPixbuf"/> + <!-- column-name surface --> + <column type="CairoSurface"/> + </columns> + </object> <object class="GtkGrid" id="AreaPropertyPanel"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -38,15 +54,14 @@ <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|filllabel|tooltip_text">Fill:</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="sidebararea|filllabel">_Fill:</property> <property name="use_underline">True</property> + <property name="mnemonic_widget">fillstyle</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -55,21 +70,23 @@ <property name="can_focus">False</property> <property name="hexpand">True</property> <child> - <object class="sfxlo-SidebarToolBox" id="selectcolor"> + <object class="GtkToolbar" id="selectcolor"> <property name="can_focus">True</property> + <property name="halign">start</property> + <property name="toolbar_style">icons</property> + <property name="show_arrow">False</property> + <property name="icon_size">2</property> <child> - <object class="GtkMenuToolButton" id="color"> - <property name="width_request">105</property> + <object class="GtkMenuToolButton" id=".uno:FillColor"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|color|tooltip_text">Select the color to apply.</property> - <property name="action_name">.uno:FillColor</property> <property name="use_underline">True</property> </object> <packing> - <property name="expand">True</property> - <property name="homogeneous">True</property> + <property name="expand">False</property> + <property name="homogeneous">False</property> </packing> </child> </object> @@ -80,13 +97,27 @@ </packing> </child> <child> - <object class="svxlo-SvxFillAttrBox" id="fillattr"> - <property name="can_focus">True</property> + <object class="GtkComboBox" id="fillattr"> + <property name="visible">True</property> + <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|fillattr|tooltip_text">Select the effect to apply.</property> - <accessibility> - <relation type="labelled-by" target="filllabel"/> - </accessibility> + <property name="hexpand">True</property> + <property name="model">liststore4</property> + <property name="entry_text_column">0</property> + <property name="id_column">1</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext3"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererPixbuf" id="cellrenderertext4"/> + <attributes> + <attribute name="surface">3</attribute> + </attributes> + </child> <child internal-child="accessible"> <object class="AtkObject" id="fillattr-atkobject"> <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|fillattr-atkobject">Hatching/Bitmap</property> @@ -100,10 +131,19 @@ </packing> </child> <child> - <object class="svxcorelo-SvxColorListBox" id="fillgrad1"> + <object class="GtkMenuButton" id="fillgrad1"> + <property name="visible">True</property> <property name="can_focus">True</property> + <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|fillgrad1|tooltip_text">Fill gradient from.</property> + <property name="valign">center</property> + <property name="hexpand">True</property> + <property name="draw_indicator">True</property> + <property name="label" translatable="no"></property> + <child> + <placeholder/> + </child> </object> <packing> <property name="expand">True</property> @@ -115,21 +155,14 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> - <object class="svxlo-SvxFillTypeBox" id="fillstyle"> + <object class="GtkComboBoxText" id="fillstyle"> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|fillstyle|tooltip_text">Select the fill type to apply.</property> - <property name="entry_text_column">0</property> - <property name="id_column">1</property> - <accessibility> - <relation type="labelled-by" target="fillstyle"/> - </accessibility> <child internal-child="accessible"> <object class="AtkObject" id="fillstyle-atkobject"> <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|fillstyle-atkobject">Fill Type</property> @@ -139,21 +172,26 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> - <object class="svxcorelo-SvxColorListBox" id="fillgrad2"> + <object class="GtkMenuButton" id="fillgrad2"> + <property name="visible">True</property> <property name="can_focus">True</property> + <property name="receives_default">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|fillgrad2|tooltip_text">Fill gradient to.</property> + <property name="valign">center</property> + <property name="hexpand">True</property> + <property name="draw_indicator">True</property> + <property name="label" translatable="no"></property> + <child> + <placeholder/> + </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">2</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -163,7 +201,7 @@ <child> <object class="GtkComboBoxText" id="gradientstyle"> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes" context="sidebararea|gradientstyle|tooltip_text">Select the gradient style.</property> <items> <item translatable="yes" context="sidebararea|gradientstyle">Linear</item> @@ -202,17 +240,15 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> - <object class="GtkSpinButton" id="gradangle:0degrees"> + <object class="GtkSpinButton" id="gradangle"> <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|gradangle|tooltip_text">Select the gradient angle.</property> <property name="adjustment">adjustment2</property> <child internal-child="accessible"> - <object class="AtkObject" id="gradangle:0degrees-atkobject"> + <object class="AtkObject" id="gradangle-atkobject"> <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|gradangle-atkobject">Gradient angle</property> </object> </child> @@ -220,8 +256,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -230,21 +264,19 @@ <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|transparencylabel|tooltip_text">Transparency</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="sidebararea|transparencylabel">_Transparency:</property> <property name="use_underline">True</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> <object class="GtkComboBoxText" id="transtype"> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|transtype|tooltip_text">Select the type of transparency to apply.</property> <items> @@ -266,8 +298,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">3</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -275,27 +305,26 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="halign">start</property> + <property name="toolbar_style">icons</property> + <property name="show_arrow">False</property> + <property name="icon_size">2</property> <child> - <object class="GtkMenuToolButton" id="gradient"> + <object class="GtkMenuToolButton" id="sidebargradient"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|gradient|tooltip_text">Specify the variation of gradient transparency.</property> - <property name="hexpand">True</property> - <property name="action_name">.uno:sidebargradient</property> <property name="use_underline">True</property> </object> <packing> - <property name="expand">True</property> - <property name="homogeneous">True</property> + <property name="expand">False</property> + <property name="homogeneous">False</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">4</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -319,6 +348,7 @@ <property name="can_focus">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|transparencyslider|tooltip_text">Specify 0% for fully opaque through 100% for fully transparent.</property> <property name="hexpand">True</property> + <property name="adjustment">adjustment4</property> <property name="round_digits">1</property> <property name="draw_value">False</property> </object> @@ -326,21 +356,17 @@ <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> - <object class="GtkSpinButton" id="settransparency:0%"> + <object class="GtkSpinButton" id="settransparency"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="has_tooltip">True</property> <property name="tooltip_text" translatable="yes" context="sidebararea|settransparency|tooltip_text">Specify 0% for fully opaque through 100% for fully transparent.</property> - <property name="max_length">100</property> - <property name="secondary_icon_activatable">False</property> <property name="adjustment">adjustment1</property> - <property name="numeric">True</property> <child internal-child="accessible"> - <object class="AtkObject" id="settransparency:0%-atkobject"> + <object class="AtkObject" id="settransparency-atkobject"> <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|settransparency-atkobject">Transparency</property> </object> </child> @@ -348,8 +374,6 @@ <packing> <property name="left_attach">3</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> @@ -363,8 +387,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> @@ -381,7 +403,7 @@ <widget name="filllabel"/> <widget name="gradientstyle"/> <widget name="bmpimport"/> - <widget name="gradangle:0degrees"/> + <widget name="gradangle"/> <widget name="transparencylabel"/> </widgets> </object> diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index cb6f6d5f0087..910778b2da6e 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1099,7 +1099,25 @@ public: m_xToolBox->SetItemText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), rLabel); } - virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) override + { + m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), Image(StockImage::Yes, rIconName)); + } + + virtual void set_item_image(const OString& rIdent, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + { + m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), Image(rIcon)); + } + + virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) override + { + if (pDevice) + m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), createImage(*pDevice)); + else + m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), Image()); + } + + virtual void set_item_image(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override { m_xToolBox->SetItemImage(m_xToolBox->GetItemId(nIndex), Image(rIcon)); } @@ -1114,6 +1132,11 @@ public: m_xToolBox->SetQuickHelpText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), rTip); } + virtual OUString get_item_tooltip_text(const OString& rIdent) const override + { + return m_xToolBox->GetQuickHelpText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent))); + } + virtual vcl::ImageType get_icon_size() const override { return m_xToolBox->GetImageSize(); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 6630ee15f2fc..a291dafc7d44 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -2989,6 +2989,34 @@ namespace return pRet; } + GdkPixbuf* getPixbuf(const OUString& rIconName) + { + if (rIconName.isEmpty()) + return nullptr; + + GdkPixbuf* pixbuf = nullptr; + + if (rIconName.lastIndexOf('.') != rIconName.getLength() - 4) + { + assert((rIconName== "dialog-warning" || rIconName== "dialog-error" || rIconName== "dialog-information") && + "unknown stock image"); + + GError *error = nullptr; + GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); + pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(rIconName, RTL_TEXTENCODING_UTF8).getStr(), + 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); + } + else + { + const AllSettings& rSettings = Application::GetSettings(); + pixbuf = load_icon_by_name_theme_lang(rIconName, + rSettings.GetStyleSettings().DetermineIconTheme(), + rSettings.GetUILanguageTag().getBcp47()); + } + + return pixbuf; + } + GtkWidget* image_new_from_virtual_device(const VirtualDevice& rImageSurface) { GtkWidget* pImage = nullptr; @@ -7101,6 +7129,33 @@ private: signal_clicked(OString(pStr, pStr ? strlen(pStr) : 0)); } + static void set_item_image(GtkToolButton* pItem, const css::uno::Reference<css::graphic::XGraphic>& rIcon) + { + GtkWidget* pImage = nullptr; + + if (GdkPixbuf* pixbuf = getPixbuf(rIcon)) + { + pImage = gtk_image_new_from_pixbuf(pixbuf); + g_object_unref(pixbuf); + gtk_widget_show(pImage); + } + + gtk_tool_button_set_icon_widget(pItem, pImage); + } + + static void set_item_image(GtkToolButton* pItem, VirtualDevice* pDevice) + { + GtkWidget* pImage = nullptr; + + if (pDevice) + { + pImage = image_new_from_virtual_device(*pDevice); + gtk_widget_show(pImage); + } + + gtk_tool_button_set_icon_widget(pItem, pImage); + } + public: GtkInstanceToolbar(GtkToolbar* pToolbar, GtkInstanceBuilder* pBuilder, bool bTakeOwnership) : GtkInstanceWidget(GTK_WIDGET(pToolbar), pBuilder, bTakeOwnership) @@ -7268,20 +7323,38 @@ public: return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8); } - virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) override { - GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex); + GtkToolButton* pItem = m_aMap[rIdent]; GtkWidget* pImage = nullptr; - if (GdkPixbuf* pixbuf = getPixbuf(rIcon)) + if (GdkPixbuf* pixbuf = getPixbuf(rIconName)) { pImage = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); gtk_widget_show(pImage); } - gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(pItem), pImage); + gtk_tool_button_set_icon_widget(pItem, pImage); + } + + virtual void set_item_image(const OString& rIdent, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + { + GtkToolButton* pItem = m_aMap[rIdent]; + set_item_image(pItem, rIcon); + } + + virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) override + { + GtkToolButton* pItem = m_aMap[rIdent]; + set_item_image(pItem, pDevice); + } + + virtual void set_item_image(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + { + GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex); + set_item_image(GTK_TOOL_BUTTON(pItem), rIcon); } virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override @@ -7296,6 +7369,13 @@ public: gtk_widget_set_tooltip_text(GTK_WIDGET(pItem), OUStringToOString(rTip, RTL_TEXTENCODING_UTF8).getStr()); } + virtual OUString get_item_tooltip_text(const OString& rIdent) const override + { + GtkToolButton* pItem = m_aMap.find(rIdent)->second; + const gchar* pStr = gtk_widget_get_tooltip_text(GTK_WIDGET(pItem)); + return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8); + } + virtual vcl::ImageType get_icon_size() const override { return GtkToVcl(gtk_toolbar_get_icon_size(m_pToolbar)); @@ -7957,34 +8037,6 @@ public: return found; } - GdkPixbuf* getPixbuf(const OUString& rIconName) - { - if (rIconName.isEmpty()) - return nullptr; - - GdkPixbuf* pixbuf = nullptr; - - if (rIconName.lastIndexOf('.') != rIconName.getLength() - 4) - { - assert((rIconName== "dialog-warning" || rIconName== "dialog-error" || rIconName== "dialog-information") && - "unknown stock image"); - - GError *error = nullptr; - GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); - pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(rIconName, RTL_TEXTENCODING_UTF8).getStr(), - 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); - } - else - { - const AllSettings& rSettings = Application::GetSettings(); - pixbuf = load_icon_by_name_theme_lang(rIconName, - rSettings.GetStyleSettings().DetermineIconTheme(), - rSettings.GetUILanguageTag().getBcp47()); - } - - return pixbuf; - } - void insert_row(GtkListStore* pListStore, GtkTreeIter& iter, int pos, const OUString* pId, const OUString& rText, const OUString* pIconName, const VirtualDevice* pDevice) { if (!pIconName && !pDevice) |