summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-03-09 15:51:53 +0000
committerCaolán McNamara <caolanm@redhat.com>2021-03-11 10:07:57 +0100
commit001cf630f14109b4200b218161418350562713fa (patch)
tree02d0fe2d6a56ac7a0b6d991f455aba90d5b5f780
parent5229cacba320f829ca0acd6ef79ddbb09d52b2d9 (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.hxx28
-rw-r--r--sc/source/ui/app/scdll.cxx3
-rw-r--r--sc/source/ui/inc/navipi.hxx17
-rw-r--r--sc/source/ui/navipi/navipi.cxx41
-rw-r--r--sd/source/ui/app/sddll.cxx4
-rw-r--r--sd/source/ui/dlg/NavigatorChildWindow.cxx51
-rw-r--r--sd/source/ui/inc/NavigatorChildWindow.hxx17
-rw-r--r--sd/source/ui/inc/navigatr.hxx21
-rw-r--r--sd/source/ui/view/drviews4.cxx2
-rw-r--r--sd/source/ui/view/drviewsd.cxx2
-rw-r--r--sfx2/source/appl/appreg.cxx1
-rw-r--r--sfx2/source/dialog/navigat.cxx28
-rw-r--r--sw/source/uibase/app/swmodule.cxx3
-rw-r--r--sw/source/uibase/inc/navipi.hxx17
-rw-r--r--sw/source/uibase/utlui/navipi.cxx64
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: */