summaryrefslogtreecommitdiff
path: root/svx/source/tbxctrls
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/tbxctrls')
-rw-r--r--svx/source/tbxctrls/extrusioncontrols.cxx163
-rw-r--r--svx/source/tbxctrls/extrusioncontrols.hxx22
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