diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-03-09 15:51:53 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-03-11 10:07:57 +0100 |
commit | 001cf630f14109b4200b218161418350562713fa (patch) | |
tree | 02d0fe2d6a56ac7a0b6d991f455aba90d5b5f780 | |
parent | 5229cacba320f829ca0acd6ef79ddbb09d52b2d9 (diff) |
register navigator individually in each module that it exists in
instead of globally. This makes the navigators the same
as everything else and easier to deal with.
Change-Id: I882612e73d36485b84161a2d3fbc1188f734c0fb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112244
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/sfx2/navigat.hxx | 28 | ||||
-rw-r--r-- | sc/source/ui/app/scdll.cxx | 3 | ||||
-rw-r--r-- | sc/source/ui/inc/navipi.hxx | 17 | ||||
-rw-r--r-- | sc/source/ui/navipi/navipi.cxx | 41 | ||||
-rw-r--r-- | sd/source/ui/app/sddll.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/dlg/NavigatorChildWindow.cxx | 51 | ||||
-rw-r--r-- | sd/source/ui/inc/NavigatorChildWindow.hxx | 17 | ||||
-rw-r--r-- | sd/source/ui/inc/navigatr.hxx | 21 | ||||
-rw-r--r-- | sd/source/ui/view/drviews4.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/view/drviewsd.cxx | 2 | ||||
-rw-r--r-- | sfx2/source/appl/appreg.cxx | 1 | ||||
-rw-r--r-- | sfx2/source/dialog/navigat.cxx | 28 | ||||
-rw-r--r-- | sw/source/uibase/app/swmodule.cxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/inc/navipi.hxx | 17 | ||||
-rw-r--r-- | sw/source/uibase/utlui/navipi.cxx | 64 |
15 files changed, 165 insertions, 134 deletions
diff --git a/include/sfx2/navigat.hxx b/include/sfx2/navigat.hxx index 29b7c84f41c6..f5fc9acb3fd7 100644 --- a/include/sfx2/navigat.hxx +++ b/include/sfx2/navigat.hxx @@ -23,30 +23,24 @@ #include <sfx2/childwin.hxx> #include <sfx2/dockwin.hxx> -class SfxNavigatorWrapper final : public SfxChildWindow +class SFX2_DLLPUBLIC SfxNavigatorWrapper : public SfxChildWindow { - +protected: + void Initialize(SfxChildWinInfo* pInfo); public: - SfxNavigatorWrapper( vcl::Window* pParent , - sal_uInt16 nId , - SfxBindings* pBindings , - SfxChildWinInfo* pInfo ); - - SFX_DECL_CHILDWINDOW(SfxNavigatorWrapper); + SfxNavigatorWrapper( vcl::Window* pParent , + sal_uInt16 nId , + SfxBindings* pBindings , + SfxChildWinInfo* pInfo ); }; -class SFX2_DLLPUBLIC SfxNavigator final : public SfxDockingWindow +class SFX2_DLLPUBLIC SfxNavigator : public SfxDockingWindow { - SfxChildWindow* pWrapper; - public: - SfxNavigator( SfxBindings* pBindings , - SfxChildWindow* pChildWin , - vcl::Window* pParent , - WinBits nBits ); + SfxNavigator(SfxBindings* pBindings, SfxChildWindow* pChildWin, + vcl::Window* pParent); - virtual void Resize() override; - virtual bool Close() override; + virtual void Resize() override; }; #endif diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx index 56d5e106e042..548ae028853a 100644 --- a/sc/source/ui/app/scdll.cxx +++ b/sc/source/ui/app/scdll.cxx @@ -177,7 +177,6 @@ void ScDLL::Init() // Child Windows ScInputWindowWrapper ::RegisterChildWindow(true, pMod, SfxChildWindowFlags::TASK|SfxChildWindowFlags::FORCEDOCK); - ScNavigatorDialogWrapper ::RegisterChildWindowContext(static_cast<sal_uInt16>(ScTabViewShell::GetInterfaceId()), pMod); ScSolverDlgWrapper ::RegisterChildWindow(false, pMod); ScOptSolverDlgWrapper ::RegisterChildWindow(false, pMod); ScXMLSourceDlgWrapper ::RegisterChildWindow(false, pMod); @@ -225,6 +224,8 @@ void ScDLL::Init() sc::SearchResultsDlgWrapper::RegisterChildWindow(false, pMod); ScCondFormatDlgWrapper::RegisterChildWindow(false, pMod); + ScNavigatorWrapper::RegisterChildWindow(false, pMod, SfxChildWindowFlags::NEVERHIDE); + // Add 3DObject Factory E3dObjFactory(); diff --git a/sc/source/ui/inc/navipi.hxx b/sc/source/ui/inc/navipi.hxx index fae782112f7c..37f6bffffbb1 100644 --- a/sc/source/ui/inc/navipi.hxx +++ b/sc/source/ui/inc/navipi.hxx @@ -24,6 +24,7 @@ #include <vcl/idle.hxx> #include <svl/lstner.hxx> #include <sfx2/childwin.hxx> +#include <sfx2/navigat.hxx> #include <sfx2/sidebar/PanelLayout.hxx> #include "content.hxx" @@ -85,8 +86,8 @@ private: class ScNavigatorDlg : public PanelLayout, public SfxListener { +friend class ScNavigatorWin; friend class ScNavigatorControllerItem; -friend class ScNavigatorDialogWrapper; friend class ScContentTree; private: @@ -179,18 +180,12 @@ public: virtual void StateChanged(StateChangedType nStateChange) override; }; -class ScNavigatorDialogWrapper: public SfxChildWindowContext +class ScNavigatorWrapper final : public SfxNavigatorWrapper { public: - ScNavigatorDialogWrapper( vcl::Window* pParent, - sal_uInt16 nId, - SfxBindings* pBindings, - SfxChildWinInfo* pInfo ); - - SFX_DECL_CHILDWINDOWCONTEXT(ScNavigatorDialogWrapper) - -private: - VclPtr<ScNavigatorDlg> pNavigator; + ScNavigatorWrapper(vcl::Window *pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo); + SFX_DECL_CHILDWINDOW(ScNavigatorWrapper); }; #endif // INCLUDED_SC_SOURCE_UI_INC_NAVIPI_HXX diff --git a/sc/source/ui/navipi/navipi.cxx b/sc/source/ui/navipi/navipi.cxx index eda7cc08fb4d..5d813e172033 100644 --- a/sc/source/ui/navipi/navipi.cxx +++ b/sc/source/ui/navipi/navipi.cxx @@ -309,18 +309,29 @@ ScNavigatorSettings::ScNavigatorSettings() maExpandedVec.fill(false); } -SFX_IMPL_CHILDWINDOWCONTEXT( ScNavigatorDialogWrapper, SID_NAVIGATOR ) +class ScNavigatorWin : public SfxNavigator +{ +private: + VclPtr<ScNavigatorDlg> pNavigator; +public: + ScNavigatorWin(SfxBindings* _pBindings, SfxChildWindow* pMgr, vcl::Window* pParent); + virtual void dispose() override + { + pNavigator.disposeAndClear(); + SfxNavigator::dispose(); + } + virtual ~ScNavigatorWin() override + { + disposeOnce(); + } +}; -ScNavigatorDialogWrapper::ScNavigatorDialogWrapper(vcl::Window* pParent, - sal_uInt16 nId, - SfxBindings* pBind, - SAL_UNUSED_PARAMETER SfxChildWinInfo* /* pInfo */) - : SfxChildWindowContext(nId) +ScNavigatorWin::ScNavigatorWin(SfxBindings* _pBindings, SfxChildWindow* _pMgr, vcl::Window* _pParent) + : SfxNavigator(_pBindings, _pMgr, _pParent) { - pNavigator = VclPtr<ScNavigatorDlg>::Create(pBind, pParent); - if (SfxNavigator* pNav = dynamic_cast<SfxNavigator*>(pParent)) - pNav->SetMinOutputSizePixel(pNavigator->GetOptimalSize()); - SetWindow(pNavigator); + pNavigator = VclPtr<ScNavigatorDlg>::Create(_pBindings, this); + pNavigator->Show(); + SetMinOutputSizePixel(pNavigator->GetOptimalSize()); } ScNavigatorDlg::ScNavigatorDlg(SfxBindings* pB, vcl::Window* pParent) @@ -936,4 +947,14 @@ void ScNavigatorDlg::EndOfDataArea() } } +SFX_IMPL_DOCKINGWINDOW(ScNavigatorWrapper, SID_NAVIGATOR); + +ScNavigatorWrapper::ScNavigatorWrapper(vcl::Window *_pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo) + : SfxNavigatorWrapper(_pParent, nId, pBindings, pInfo) +{ + SetWindow(VclPtr<ScNavigatorWin>::Create(pBindings, this, _pParent)); + Initialize(pInfo); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx index 828ab885e9dd..cbcd201095d3 100644 --- a/sd/source/ui/app/sddll.cxx +++ b/sd/source/ui/app/sddll.cxx @@ -148,8 +148,6 @@ void SdDLL::RegisterControllers(SdModule* pMod) SdTbxCtlGlueEscDir::RegisterControl( SID_GLUE_ESCDIR, pMod ); ::sd::AnimationChildWindow::RegisterChildWindow(false, pMod); - ::sd::NavigatorChildWindow::RegisterChildWindowContext( static_cast<sal_uInt16>(::sd::DrawViewShell::GetInterfaceId()), pMod ); - ::sd::NavigatorChildWindow::RegisterChildWindowContext( static_cast<sal_uInt16>(::sd::GraphicViewShell::GetInterfaceId()), pMod ); Svx3DChildWindow::RegisterChildWindow(false, pMod); SvxFontWorkChildWindow::RegisterChildWindow(false, pMod); @@ -169,6 +167,8 @@ void SdDLL::RegisterControllers(SdModule* pMod) ::sfx2::sidebar::SidebarChildWindow::RegisterChildWindow(false, pMod); DevelopmentToolChildWindow::RegisterChildWindow(false, pMod); + ::sd::SdNavigatorWrapper::RegisterChildWindow(false, pMod, SfxChildWindowFlags::NEVERHIDE); + SvxFillToolBoxControl::RegisterControl(0, pMod); SvxLineWidthToolBoxControl::RegisterControl(0, pMod); diff --git a/sd/source/ui/dlg/NavigatorChildWindow.cxx b/sd/source/ui/dlg/NavigatorChildWindow.cxx index 1773734dd64c..804a7ccad262 100644 --- a/sd/source/ui/dlg/NavigatorChildWindow.cxx +++ b/sd/source/ui/dlg/NavigatorChildWindow.cxx @@ -22,14 +22,11 @@ #include <app.hrc> #include <sfx2/bindings.hxx> #include <sfx2/dispatch.hxx> -#include <sfx2/navigat.hxx> #include <sfx2/sfxsids.hrc> #include <svl/eitem.hxx> namespace sd { -SFX_IMPL_CHILDWINDOWCONTEXT(NavigatorChildWindow, SID_NAVIGATOR) - static void RequestNavigatorUpdate (SfxBindings const * pBindings) { if (pBindings != nullptr @@ -43,23 +40,47 @@ static void RequestNavigatorUpdate (SfxBindings const * pBindings) } } -NavigatorChildWindow::NavigatorChildWindow ( - vcl::Window* pParent, - sal_uInt16 nId, - SfxBindings* pBindings, - SfxChildWinInfo* ) - : SfxChildWindowContext( nId ) +SdNavigatorFloat::SdNavigatorFloat(SfxBindings* _pBindings, SfxChildWindow* _pMgr, vcl::Window* _pParent) + : SfxNavigator(_pBindings, _pMgr, _pParent) { - VclPtr<SdNavigatorWin> pNavWin = VclPtr<SdNavigatorWin>::Create( - pParent, pBindings); + pNavWin = VclPtr<SdNavigatorWin>::Create(this, _pBindings); + pNavWin->Show(); pNavWin->SetUpdateRequestFunctor( - [pBindings] () { return RequestNavigatorUpdate(pBindings); }); + [_pBindings] () { return RequestNavigatorUpdate(_pBindings); }); + + SetMinOutputSizePixel(pNavWin->GetOptimalSize()); +} + +void SdNavigatorFloat::InitTreeLB(const SdDrawDocument* pDoc) +{ + pNavWin->InitTreeLB(pDoc); +} + +void SdNavigatorFloat::FreshTree(const SdDrawDocument* pDoc) +{ + pNavWin->FreshTree(pDoc); +} + +void SdNavigatorFloat::dispose() +{ + pNavWin.disposeAndClear(); + SfxNavigator::dispose(); +} - if (SfxNavigator* pNav = dynamic_cast<SfxNavigator*>(pParent)) - pNav->SetMinOutputSizePixel(pNavWin->GetOptimalSize()); +SdNavigatorFloat::~SdNavigatorFloat() +{ + disposeOnce(); +} - SetWindow( pNavWin ); +SFX_IMPL_DOCKINGWINDOW(SdNavigatorWrapper, SID_NAVIGATOR); + +SdNavigatorWrapper::SdNavigatorWrapper(vcl::Window *_pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo) + : SfxNavigatorWrapper(_pParent, nId, pBindings, pInfo) +{ + SetWindow(VclPtr<SdNavigatorFloat>::Create(pBindings, this, _pParent)); + Initialize(pInfo); } } // end of namespace sd diff --git a/sd/source/ui/inc/NavigatorChildWindow.hxx b/sd/source/ui/inc/NavigatorChildWindow.hxx index 4654c23a0ef6..4199cab677ba 100644 --- a/sd/source/ui/inc/NavigatorChildWindow.hxx +++ b/sd/source/ui/inc/NavigatorChildWindow.hxx @@ -20,26 +20,19 @@ #pragma once #include <sfx2/childwin.hxx> +#include <sfx2/navigat.hxx> namespace vcl { class Window; } class SfxBindings; namespace sd { -/** - * Derivative of SfxChildWindowContext as "container" for navigator - */ -class NavigatorChildWindow - : public SfxChildWindowContext +class SdNavigatorWrapper final : public SfxNavigatorWrapper { public: - NavigatorChildWindow ( - vcl::Window*, - sal_uInt16, - SfxBindings*, - SfxChildWinInfo*); - - SFX_DECL_CHILDWINDOWCONTEXT(NavigatorChildWindow) + SdNavigatorWrapper(vcl::Window *pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo); + SFX_DECL_CHILDWINDOW(SdNavigatorWrapper); }; } // end of namespace sd diff --git a/sd/source/ui/inc/navigatr.hxx b/sd/source/ui/inc/navigatr.hxx index e43175600d24..ece000c7371e 100644 --- a/sd/source/ui/inc/navigatr.hxx +++ b/sd/source/ui/inc/navigatr.hxx @@ -22,6 +22,7 @@ #include <sfx2/ctrlitem.hxx> #include <sfx2/sidebar/PanelLayout.hxx> +#include <sfx2/navigat.hxx> #include "sdtreelb.hxx" #include <pres.hxx> @@ -30,7 +31,7 @@ namespace vcl { class Window; } namespace sd { class DrawDocShell; -class NavigatorChildWindow; +class SdNavigatorFloat; } class Menu; class SdNavigatorControllerItem; @@ -77,6 +78,22 @@ private: ::sd::DrawDocShell* mpDocShell; }; +namespace sd { + +class SdNavigatorFloat : public SfxNavigator +{ +private: + VclPtr<SdNavigatorWin> pNavWin; +public: + SdNavigatorFloat(SfxBindings* _pBindings, SfxChildWindow* pMgr, vcl::Window* pParent); + void InitTreeLB(const SdDrawDocument* pDoc); + void FreshTree(const SdDrawDocument* pDoc); + virtual void dispose() override; + virtual ~SdNavigatorFloat() override; +}; + +} + class SD_DLLPUBLIC SdNavigatorWin : public PanelLayout { public: @@ -103,7 +120,7 @@ public: SdPageObjsTLV& GetObjects(); private: - friend class ::sd::NavigatorChildWindow; + friend class SdNavigatorFloat; friend class SdNavigatorControllerItem; friend class SdPageNameControllerItem; diff --git a/sd/source/ui/view/drviews4.cxx b/sd/source/ui/view/drviews4.cxx index 74844b847d73..fa8d9672e2d5 100644 --- a/sd/source/ui/view/drviews4.cxx +++ b/sd/source/ui/view/drviews4.cxx @@ -271,7 +271,7 @@ void DrawViewShell::FreshNavigatrTree() SfxChildWindow* pWindow = GetViewFrame()->GetChildWindow( SID_NAVIGATOR ); if( pWindow ) { - SdNavigatorWin* pNavWin = static_cast<SdNavigatorWin*>( pWindow->GetContextWindow( SD_MOD() ) ); + SdNavigatorFloat* pNavWin = static_cast<SdNavigatorFloat*>( pWindow->GetWindow() ); if( pNavWin ) pNavWin->FreshTree( GetDoc() ); } diff --git a/sd/source/ui/view/drviewsd.cxx b/sd/source/ui/view/drviewsd.cxx index 879051bc4c1f..763ae13eac91 100644 --- a/sd/source/ui/view/drviewsd.cxx +++ b/sd/source/ui/view/drviewsd.cxx @@ -57,7 +57,7 @@ void DrawViewShell::ExecNavigatorWin( SfxRequest& rReq ) SfxChildWindow* pWindow = GetViewFrame()->GetChildWindow( SID_NAVIGATOR ); if( pWindow ) { - SdNavigatorWin* pNavWin = static_cast<SdNavigatorWin*>( pWindow->GetContextWindow( SD_MOD() ) ); + SdNavigatorFloat* pNavWin = static_cast<SdNavigatorFloat*>(pWindow->GetWindow()); if( pNavWin ) pNavWin->InitTreeLB( GetDoc() ); } diff --git a/sfx2/source/appl/appreg.cxx b/sfx2/source/appl/appreg.cxx index 4e74737d3aad..6c9810cbf02c 100644 --- a/sfx2/source/appl/appreg.cxx +++ b/sfx2/source/appl/appreg.cxx @@ -47,7 +47,6 @@ void SfxApplication::Registrations_Impl() // ChildWindows SfxRecordingFloatWrapper_Impl::RegisterChildWindow(); - SfxNavigatorWrapper::RegisterChildWindow( false, nullptr, SfxChildWindowFlags::NEVERHIDE ); SfxPartChildWnd_Impl::RegisterChildWindow(); SfxDockingWrapper::RegisterChildWindow(); SfxInfoBarContainerChild::RegisterChildWindow( true, nullptr, SfxChildWindowFlags::NEVERHIDE ); diff --git a/sfx2/source/dialog/navigat.cxx b/sfx2/source/dialog/navigat.cxx index 0d52109d5c86..1487bcbcc8f3 100644 --- a/sfx2/source/dialog/navigat.cxx +++ b/sfx2/source/dialog/navigat.cxx @@ -24,20 +24,20 @@ #include <sfx2/sfxsids.hrc> #include <sfx2/strings.hrc> #include <sfx2/sfxresid.hxx> +#include <vcl/layout.hxx> #include <helpids.h> #include <tools/debug.hxx> -SFX_IMPL_DOCKINGWINDOW( SfxNavigatorWrapper , SID_NAVIGATOR ); - SfxNavigatorWrapper::SfxNavigatorWrapper( vcl::Window* pParentWnd , sal_uInt16 nId , - SfxBindings* pBindings , - SfxChildWinInfo* pInfo ) + SfxBindings* /*pBindings*/ , + SfxChildWinInfo* /*pInfo*/ ) : SfxChildWindow( pParentWnd , nId ) { - SetWindow( VclPtr<SfxNavigator>::Create( pBindings, this, pParentWnd, - WB_STDDOCKWIN | WB_CLIPCHILDREN | WB_SIZEABLE | WB_3DLOOK ) ); +} +void SfxNavigatorWrapper::Initialize(SfxChildWinInfo* pInfo) +{ GetWindow()->SetHelpId ( HID_NAVIGATOR_WINDOW ); GetWindow()->SetOutputSizePixel( Size( 270, 240 ) ); @@ -47,13 +47,11 @@ SfxNavigatorWrapper::SfxNavigatorWrapper( vcl::Window* pParentWnd , SfxNavigator::SfxNavigator( SfxBindings* pBind , SfxChildWindow* pChildWin , - vcl::Window* pParent , - WinBits nBits ) + vcl::Window* pParent ) : SfxDockingWindow( pBind , pChildWin , pParent , - nBits ) - , pWrapper( pChildWin ) + WB_STDDOCKWIN | WB_CLIPCHILDREN | WB_SIZEABLE | WB_3DLOOK ) { SetText(SfxResId(STR_SID_NAVIGATOR)); } @@ -61,14 +59,8 @@ SfxNavigator::SfxNavigator( SfxBindings* pBind , void SfxNavigator::Resize() { SfxDockingWindow::Resize(); - if ( pWrapper->GetContextWindow() ) - pWrapper->GetContextWindow()->SetSizePixel( GetOutputSizePixel() ); -} - -bool SfxNavigator::Close() -{ - DBG_ASSERT( GetChildWindow_Impl()->GetContext_Impl(), "No Context!" ); - return SfxDockingWindow::Close(); + if (vcl::Window *pChild = GetWindow(GetWindowType::FirstChild)) + VclContainer::setLayoutAllocation(*pChild, Point(0, 0), GetSizePixel()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx index d07ca6aa59aa..f8e5c016db90 100644 --- a/sw/source/uibase/app/swmodule.cxx +++ b/sw/source/uibase/app/swmodule.cxx @@ -295,7 +295,6 @@ void SwDLL::RegisterControls() SwFieldDlgWrapper::RegisterChildWindow( false, pMod ); SwFieldDataOnlyDlgWrapper::RegisterChildWindow( false, pMod ); SvxContourDlgChildWindow::RegisterChildWindow( false, pMod ); - SwNavigationChild::RegisterChildWindowContext( pMod ); SwInputChild::RegisterChildWindow( false, pMod, SfxChildWindowFlags::FORCEDOCK ); SwRedlineAcceptChild::RegisterChildWindow( false, pMod ); SwSyncChildWin::RegisterChildWindow( true, pMod ); @@ -324,6 +323,8 @@ void SwDLL::RegisterControls() ::sfx2::sidebar::SidebarChildWindow::RegisterChildWindow(false, pMod); + SwNavigatorWrapper::RegisterChildWindow(false, pMod, SfxChildWindowFlags::NEVERHIDE); + SwJumpToSpecificPageControl::RegisterControl(SID_JUMP_TO_SPECIFIC_PAGE, pMod); } diff --git a/sw/source/uibase/inc/navipi.hxx b/sw/source/uibase/inc/navipi.hxx index 8f0dd968f37f..0b0d0134a811 100644 --- a/sw/source/uibase/inc/navipi.hxx +++ b/sw/source/uibase/inc/navipi.hxx @@ -24,6 +24,7 @@ #include <vcl/transfer.hxx> #include <sfx2/childwin.hxx> #include <sfx2/sidebar/ControllerItem.hxx> +#include <sfx2/navigat.hxx> #include <sfx2/weldutils.hxx> #include <sfx2/sidebar/PanelLayout.hxx> #include "conttree.hxx" @@ -31,7 +32,6 @@ #include <memory> class SwWrtShell; -class SwNavigationChild; class SfxBindings; class SwNavigationConfig; class SwView; @@ -43,7 +43,7 @@ class SwNavigationPI : public PanelLayout , public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface , public SfxListener { - friend class SwNavigationChild; + friend class SwNavigatorWin; friend class SwContentTree; friend class SwGlobalTree; @@ -157,17 +157,12 @@ public: SwView* GetCreateView() const; }; -class SwNavigationChild : public SfxChildWindowContext +class SwNavigatorWrapper final : public SfxNavigatorWrapper { public: - SwNavigationChild( vcl::Window* , - sal_uInt16 nId, - SfxBindings* ); - - //! soon obsolete ! - static std::unique_ptr<SfxChildWindowContext> CreateImpl(vcl::Window *pParent, - SfxBindings *pBindings, SfxChildWinInfo* pInfo ); - static void RegisterChildWindowContext(SfxModule *pMod); + SwNavigatorWrapper(vcl::Window *pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo); + SFX_DECL_CHILDWINDOW(SwNavigatorWrapper); }; #endif diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx index c2a428cc412e..6052eafb1911 100644 --- a/sw/source/uibase/utlui/navipi.cxx +++ b/sw/source/uibase/utlui/navipi.cxx @@ -25,7 +25,6 @@ #include <sot/filelist.hxx> #include <sfx2/event.hxx> #include <sfx2/dispatch.hxx> -#include <sfx2/navigat.hxx> #include <sfx2/viewfrm.hxx> #include <tools/urlobj.hxx> #include <swtypes.hxx> @@ -50,25 +49,7 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::frame; -//! soon obsolete ! -std::unique_ptr<SfxChildWindowContext> SwNavigationChild::CreateImpl( vcl::Window *pParent, - SfxBindings *pBindings, SfxChildWinInfo* /*pInfo*/ ) -{ - return std::make_unique<SwNavigationChild>(pParent, - /* cast is safe here! */static_cast< sal_uInt16 >(SwView::GetInterfaceId()), - pBindings); -} -void SwNavigationChild::RegisterChildWindowContext(SfxModule* pMod) -{ - auto pFact = std::make_unique<SfxChildWinContextFactory>( - SwNavigationChild::CreateImpl, - /* cast is safe here! */static_cast< sal_uInt16 >(SwView::GetInterfaceId()) ); - SfxChildWindowContext::RegisterChildWindowContext(pMod, SID_NAVIGATOR, std::move(pFact)); -} - - // Filter the control characters out of the Outline-Entry - OUString SwNavigationPI::CleanEntry(const OUString& rEntry) { if (rEntry.isEmpty()) @@ -1108,13 +1089,28 @@ SwView* SwNavigationPI::GetCreateView() const return m_pCreateView; } -SwNavigationChild::SwNavigationChild( vcl::Window* pParent, - sal_uInt16 nId, - SfxBindings* _pBindings ) - : SfxChildWindowContext( nId ) +class SwNavigatorWin : public SfxNavigator +{ +private: + VclPtr<SwNavigationPI> pNavi; +public: + SwNavigatorWin(SfxBindings* _pBindings, SfxChildWindow* _pMgr, vcl::Window* pParent); + virtual void dispose() override + { + pNavi.disposeAndClear(); + SfxNavigator::dispose(); + } + virtual ~SwNavigatorWin() override + { + disposeOnce(); + } +}; + +SwNavigatorWin::SwNavigatorWin(SfxBindings* _pBindings, SfxChildWindow* _pMgr, vcl::Window* pParent) + : SfxNavigator(_pBindings, _pMgr, pParent) { Reference< XFrame > xFrame = _pBindings->GetActiveFrame(); - VclPtr< SwNavigationPI > pNavi = VclPtr< SwNavigationPI >::Create( pParent, xFrame, _pBindings ); + pNavi = VclPtr< SwNavigationPI >::Create( this, xFrame, _pBindings ); _pBindings->Invalidate(SID_NAVIGATOR); SwNavigationConfig* pNaviConfig = SW_MOD()->GetNavigationConfig(); @@ -1131,15 +1127,21 @@ SwNavigationChild::SwNavigationChild( vcl::Window* pParent, } pNavi->m_xContentTree->SetOutlineLevel( static_cast< sal_uInt8 >( pNaviConfig->GetOutlineLevel() ) ); pNavi->SetRegionDropMode( pNaviConfig->GetRegionMode() ); + pNavi->Show(); - if (SfxNavigator* pNav = dynamic_cast<SfxNavigator*>(pParent)) - { - pNav->SetMinOutputSizePixel(pNavi->GetOptimalSize()); - if (pNaviConfig->IsSmall()) - pNavi->ZoomIn(); - } + SetMinOutputSizePixel(pNavi->GetOptimalSize()); + if (pNaviConfig->IsSmall()) + pNavi->ZoomIn(); +} - SetWindow(pNavi); +SFX_IMPL_DOCKINGWINDOW(SwNavigatorWrapper, SID_NAVIGATOR); + +SwNavigatorWrapper::SwNavigatorWrapper(vcl::Window *_pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo) + : SfxNavigatorWrapper(_pParent, nId, pBindings, pInfo) +{ + SetWindow(VclPtr<SwNavigatorWin>::Create(pBindings, this, _pParent)); + Initialize(pInfo); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |