diff options
Diffstat (limited to 'svx/source/tbxctrls')
-rw-r--r-- | svx/source/tbxctrls/extrusioncontrols.cxx | 163 | ||||
-rw-r--r-- | svx/source/tbxctrls/extrusioncontrols.hxx | 22 |
2 files changed, 80 insertions, 105 deletions
diff --git a/svx/source/tbxctrls/extrusioncontrols.cxx b/svx/source/tbxctrls/extrusioncontrols.cxx index d81e40d26a53..3bdfba02bd63 100644 --- a/svx/source/tbxctrls/extrusioncontrols.cxx +++ b/svx/source/tbxctrls/extrusioncontrols.cxx @@ -122,105 +122,83 @@ static const char* aDirectionStrs[] = }; ExtrusionDirectionWindow::ExtrusionDirectionWindow( - svt::ToolboxController& rController, - vcl::Window* pParentWindow -) - : ToolbarMenu(rController.getFrameInterface(), pParentWindow, WB_STDPOPUP) - , mrController(rController) - , maImgPerspective(StockImage::Yes, RID_SVXBMP_PERSPECTIVE) - , maImgParallel(StockImage::Yes, RID_SVXBMP_PARALLEL) + svt::PopupWindowController* pControl, + weld::Widget* pParent) + : WeldToolbarPopup(pControl->getFrameInterface(), pParent, "svx/ui/directionwindow.ui", "DirectionWindow") + , mxControl(pControl) + , mxDirectionSet(new SvtValueSet(nullptr)) + , mxDirectionSetWin(new weld::CustomWeld(*m_xBuilder, "valueset", *mxDirectionSet)) + , mxPerspective(m_xBuilder->weld_radio_button("perspective")) + , mxParallel(m_xBuilder->weld_radio_button("parallel")) { + mxDirectionSet->SetStyle(WB_TABSTOP | WB_MENUSTYLEVALUESET | WB_FLATVALUESET | WB_NOBORDER | WB_NO_DIRECTSELECT); + for (sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; ++i) { maImgDirection[i] = Image(StockImage::Yes, aDirectionBmps[i]); } - SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectToolbarMenuHdl ) ); - mpDirectionSet = createEmptyValueSetControl(); - - mpDirectionSet->SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectValueSetHdl ) ); - mpDirectionSet->SetColCount( 3 ); - mpDirectionSet->EnableFullItemMode( false ); + mxDirectionSet->SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectValueSetHdl ) ); + mxDirectionSet->SetColCount( 3 ); + mxDirectionSet->EnableFullItemMode( false ); for (sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; ++i) { - mpDirectionSet->InsertItem(i + 1, maImgDirection[i], SvxResId(aDirectionStrs[i])); + mxDirectionSet->InsertItem(i + 1, maImgDirection[i], SvxResId(aDirectionStrs[i])); } - mpDirectionSet->SetOutputSizePixel(Size(72, 72)); - - appendEntry(2, mpDirectionSet ); - appendSeparator(); - appendEntry(0, SvxResId(RID_SVXSTR_PERSPECTIVE), maImgPerspective); - appendEntry(1, SvxResId(RID_SVXSTR_PARALLEL), maImgParallel); + Size aSize(72, 72); + mxDirectionSet->GetDrawingArea()->set_size_request(aSize.Width(), aSize.Height()); + mxDirectionSet->SetOutputSizePixel(aSize); - SetOutputSizePixel( getMenuSize() ); + mxPerspective->connect_clicked(LINK(this, ExtrusionDirectionWindow, SelectToolbarMenuHdl)); + mxParallel->connect_clicked(LINK(this, ExtrusionDirectionWindow, SelectToolbarMenuHdl)); AddStatusListener( g_sExtrusionDirection ); AddStatusListener( g_sExtrusionProjection ); } -ExtrusionDirectionWindow::~ExtrusionDirectionWindow() +void ExtrusionDirectionWindow::GrabFocus() { - disposeOnce(); + mxDirectionSet->GrabFocus(); } -void ExtrusionDirectionWindow::dispose() +ExtrusionDirectionWindow::~ExtrusionDirectionWindow() { - mpDirectionSet.clear(); - ToolbarMenu::dispose(); } -void ExtrusionDirectionWindow::DataChanged( const DataChangedEvent& rDCEvt ) +void ExtrusionDirectionWindow::implSetDirection( sal_Int32 nSkew, bool bEnabled ) { - ToolbarMenu::DataChanged( rDCEvt ); - - if( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) ) + sal_uInt16 nItemId; + for( nItemId = DIRECTION_NW; nItemId <= DIRECTION_SE; nItemId++ ) { - for( sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; i++ ) - { - mpDirectionSet->SetItemImage( i+1, maImgDirection[ i ] ); - } - - setEntryImage( 0, maImgPerspective ); - setEntryImage( 1, maImgParallel ); + if( gSkewList[nItemId] == nSkew ) + break; } -} - -void ExtrusionDirectionWindow::implSetDirection( sal_Int32 nSkew, bool bEnabled ) -{ - if( mpDirectionSet ) + if( nItemId <= DIRECTION_SE ) { - sal_uInt16 nItemId; - for( nItemId = DIRECTION_NW; nItemId <= DIRECTION_SE; nItemId++ ) - { - if( gSkewList[nItemId] == nSkew ) - break; - } - - if( nItemId <= DIRECTION_SE ) - { - mpDirectionSet->SelectItem( nItemId+1 ); - } - else - { - mpDirectionSet->SetNoSelection(); - } + mxDirectionSet->SelectItem( nItemId+1 ); + } + else + { + mxDirectionSet->SetNoSelection(); } - enableEntry( 2, bEnabled ); -} + if (bEnabled) + mxDirectionSet->Enable(); + else + mxDirectionSet->Disable(); +} void ExtrusionDirectionWindow::implSetProjection( sal_Int32 nProjection, bool bEnabled ) { - checkEntry( 0, (nProjection == 0) && bEnabled ); - checkEntry( 1, (nProjection == 1 ) && bEnabled ); - enableEntry( 0, bEnabled ); - enableEntry( 1, bEnabled ); + mxPerspective->set_active(nProjection == 0 && bEnabled); + mxParallel->set_active(nProjection == 1 && bEnabled); + mxPerspective->set_sensitive(bEnabled); + mxParallel->set_sensitive(bEnabled); } - void ExtrusionDirectionWindow::statusChanged( const css::frame::FeatureStateEvent& Event ) @@ -253,41 +231,29 @@ void ExtrusionDirectionWindow::statusChanged( } } - -IMPL_LINK( ExtrusionDirectionWindow, SelectValueSetHdl, ValueSet*, pControl, void ) -{ - SelectHdl(pControl); -} -IMPL_LINK( ExtrusionDirectionWindow, SelectToolbarMenuHdl, ToolbarMenu*, pControl, void ) +IMPL_LINK_NOARG(ExtrusionDirectionWindow, SelectValueSetHdl, SvtValueSet*, void) { - SelectHdl(pControl); + Sequence< PropertyValue > aArgs( 1 ); + aArgs[0].Name = OUString(g_sExtrusionDirection).copy(5); + aArgs[0].Value <<= gSkewList[mxDirectionSet->GetSelectedItemId()-1]; + + mxControl->dispatchCommand( g_sExtrusionDirection, aArgs ); + + mxControl->EndPopupMode(); } -void ExtrusionDirectionWindow::SelectHdl(void const * pControl) + +IMPL_LINK_NOARG(ExtrusionDirectionWindow, SelectToolbarMenuHdl, weld::Button&, void) { - if ( IsInPopupMode() ) - EndPopupMode(); + int nProjection = mxPerspective->get_active() ? 0 : 1; - if( pControl == mpDirectionSet ) - { - Sequence< PropertyValue > aArgs( 1 ); - aArgs[0].Name = OUString(g_sExtrusionDirection).copy(5); - aArgs[0].Value <<= gSkewList[mpDirectionSet->GetSelectedItemId()-1]; + Sequence< PropertyValue > aArgs( 1 ); + aArgs[0].Name = OUString(g_sExtrusionProjection).copy(5); + aArgs[0].Value <<= static_cast<sal_Int32>(nProjection); - mrController.dispatchCommand( g_sExtrusionDirection, aArgs ); - } - else - { - int nProjection = getSelectedEntryId(); - if( (nProjection >= 0) && (nProjection < 2 ) ) - { - Sequence< PropertyValue > aArgs( 1 ); - aArgs[0].Name = OUString(g_sExtrusionProjection).copy(5); - aArgs[0].Value <<= static_cast<sal_Int32>(nProjection); + mxControl->dispatchCommand( g_sExtrusionProjection, aArgs ); + implSetProjection( nProjection, true ); - mrController.dispatchCommand( g_sExtrusionProjection, aArgs ); - implSetProjection( nProjection, true ); - } - } + mxControl->EndPopupMode(); } ExtrusionDirectionControl::ExtrusionDirectionControl( @@ -300,10 +266,19 @@ ExtrusionDirectionControl::ExtrusionDirectionControl( { } +std::unique_ptr<WeldToolbarPopup> ExtrusionDirectionControl::weldPopupWindow() +{ + return std::make_unique<ExtrusionDirectionWindow>(this, m_pToolbar); +} VclPtr<vcl::Window> ExtrusionDirectionControl::createVclPopupWindow( vcl::Window* pParent ) { - return VclPtr<ExtrusionDirectionWindow>::Create( *this, pParent ); + mxInterimPopover = VclPtr<InterimToolbarPopup>::Create(getFrameInterface(), pParent, + std::make_unique<ExtrusionDirectionWindow>(this, pParent->GetFrameWeld())); + + mxInterimPopover->Show(); + + return mxInterimPopover; } // XInitialization diff --git a/svx/source/tbxctrls/extrusioncontrols.hxx b/svx/source/tbxctrls/extrusioncontrols.hxx index db901dc82fe7..4dceea5e9848 100644 --- a/svx/source/tbxctrls/extrusioncontrols.hxx +++ b/svx/source/tbxctrls/extrusioncontrols.hxx @@ -47,26 +47,26 @@ class ValueSet; namespace svx { -class ExtrusionDirectionWindow : public svtools::ToolbarMenu +class ExtrusionDirectionWindow final : public WeldToolbarPopup { public: - ExtrusionDirectionWindow( svt::ToolboxController& rController, vcl::Window* pParentWindow ); + ExtrusionDirectionWindow(svt::PopupWindowController* pControl, weld::Widget* pParentWindow); + virtual void GrabFocus() override; virtual ~ExtrusionDirectionWindow() override; - virtual void dispose() override; virtual void statusChanged( const css::frame::FeatureStateEvent& Event ) override; - virtual void DataChanged( const DataChangedEvent& rDCEvt ) override; private: - svt::ToolboxController& mrController; - VclPtr<ValueSet> mpDirectionSet; + rtl::Reference<svt::PopupWindowController> mxControl; + std::unique_ptr<SvtValueSet> mxDirectionSet; + std::unique_ptr<weld::CustomWeld> mxDirectionSetWin; + std::unique_ptr<weld::RadioButton> mxPerspective; + std::unique_ptr<weld::RadioButton> mxParallel; Image maImgDirection[9]; - Image const maImgPerspective; - Image const maImgParallel; - DECL_LINK( SelectToolbarMenuHdl, ToolbarMenu*, void ); - DECL_LINK( SelectValueSetHdl, ValueSet*, void ); + DECL_LINK( SelectToolbarMenuHdl, weld::Button&, void ); + DECL_LINK( SelectValueSetHdl, SvtValueSet*, void ); void SelectHdl(void const *); void implSetDirection( sal_Int32 nSkew, bool bEnabled ); @@ -74,12 +74,12 @@ private: }; - class ExtrusionDirectionControl : public svt::PopupWindowController { public: explicit ExtrusionDirectionControl( const css::uno::Reference< css::uno::XComponentContext >& rxContext ); + virtual std::unique_ptr<WeldToolbarPopup> weldPopupWindow() override; virtual VclPtr<vcl::Window> createVclPopupWindow( vcl::Window* pParent ) override; // XInitialization |