summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu33
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu4
-rw-r--r--sw/inc/cmdid.h4
-rw-r--r--sw/sdi/_viewsh.sdi9
-rw-r--r--sw/sdi/swriter.sdi38
-rw-r--r--sw/source/uibase/inc/workctrl.hxx2
-rw-r--r--sw/source/uibase/ribbar/workctrl.cxx480
-rw-r--r--sw/source/uibase/uiview/view2.cxx16
-rw-r--r--sw/source/uibase/uiview/viewstat.cxx4
-rw-r--r--sw/uiconfig/swriter/toolbar/findbar.xml2
-rw-r--r--sw/util/sw.component12
11 files changed, 554 insertions, 50 deletions
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
index 35c874fdfb1b..64fbbf30f4fc 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
@@ -441,6 +441,39 @@
</node>
</node>
<node oor:name="ToolBar">
+ <node oor:name="lo.writer.ScrollToPrevious" oor:op="replace">
+ <prop oor:name="Command">
+ <value>.uno:ScrollToPrevious</value>
+ </prop>
+ <prop oor:name="Module">
+ <value/>
+ </prop>
+ <prop oor:name="Controller">
+ <value>lo.writer.PreviousScrollToolboxController</value>
+ </prop>
+ </node>
+ <node oor:name="lo.writer.ScrollToNext" oor:op="replace">
+ <prop oor:name="Command">
+ <value>.uno:ScrollToNext</value>
+ </prop>
+ <prop oor:name="Module">
+ <value/>
+ </prop>
+ <prop oor:name="Controller">
+ <value>lo.writer.NextScrollToolboxController</value>
+ </prop>
+ </node>
+ <node oor:name="lo.writer.NavElement" oor:op="replace">
+ <prop oor:name="Command">
+ <value>.uno:NavElement</value>
+ </prop>
+ <prop oor:name="Module">
+ <value/>
+ </prop>
+ <prop oor:name="Controller">
+ <value>lo.writer.NavElementToolBoxController</value>
+ </prop>
+ </node>
<node oor:name="ZoomToolBox" oor:op="replace">
<prop oor:name="Command">
<value>.uno:ZoomToolBox</value>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
index cf0e0cb1f400..adedee8965f2 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
@@ -2718,9 +2718,9 @@
<value xml:lang="en-US">Continue previous numbering</value>
</prop>
</node>
- <node oor:name=".uno:NavigationPopup" oor:op="replace">
+ <node oor:name=".uno:NavElement" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
- <value xml:lang="en-US">Navigate by</value>
+ <value xml:lang="en-US">Navigate By</value>
</prop>
</node>
<node oor:name=".uno:ScrollToPrevious" oor:op="replace">
diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index 4edb28028e82..e48346f25124 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -173,8 +173,8 @@
#define FN_SET_MODOPT_TBLNUMFMT (FN_VIEW + 52) /* Number recognition in tables */
#define FN_HSCROLL_METRIC (FN_VIEW + 53) /* Metric horizontal scrollbar */
#define FN_VSCROLL_METRIC (FN_VIEW + 54) /* Metric vertical scrollbar */
-// 55 is free
-#define FN_NAVIGATION_POPUP (FN_VIEW + 56) /* Navigation Popup */
+
+#define FN_NAV_ELEMENT (FN_VIEW + 55) /* Navigate By drop down controller */
#define FN_SCROLL_PREV (FN_VIEW + 57) /* uno:ScrollToPrevious */
#define FN_SCROLL_NEXT (FN_VIEW + 58) /* uno:ScrollToNext */
#define FN_VIEW_HIDE_WHITESPACE (FN_VIEW + 59) /* Hide header, footer, and pagebreak */
diff --git a/sw/sdi/_viewsh.sdi b/sw/sdi/_viewsh.sdi
index 361d6818a8b9..62e67f6b0d5c 100644
--- a/sw/sdi/_viewsh.sdi
+++ b/sw/sdi/_viewsh.sdi
@@ -67,15 +67,16 @@ interface BaseTextEditView
ExecMethod = Execute ;
StateMethod = NoState ;
]
+ FN_NAV_ELEMENT
+ [
+ ExecMethod = Execute ;
+ StateMethod = GetState ;
+ ]
FN_SCROLL_NAVIGATION
[
ExecMethod = NoExec ;
StateMethod = NoState ;
]
- FN_NAVIGATION_POPUP
- [
- ExecMethod = Execute;
- ]
FN_SCROLL_PREV
[
ExecMethod = Execute;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index ed71f495a8cc..999b03c166ad 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -4940,23 +4940,6 @@ SfxBoolItem ScrollNavigation FN_SCROLL_NAVIGATION
GroupId = SfxGroupId::View;
]
-SfxVoidItem NavigationPopup FN_NAVIGATION_POPUP
-()
-[
- AutoUpdate = FALSE,
- FastCall = FALSE,
- ReadOnlyDoc = TRUE,
- Toggle = FALSE,
- Container = FALSE,
- RecordAbsolute = FALSE,
- RecordPerSet;
-
- AccelConfig = FALSE,
- MenuConfig = FALSE,
- ToolBoxConfig = FALSE,
- GroupId = SfxGroupId::Navigator;
-]
-
SfxVoidItem ScrollToPrevious FN_SCROLL_PREV
()
[
@@ -4970,7 +4953,7 @@ SfxVoidItem ScrollToPrevious FN_SCROLL_PREV
AccelConfig = FALSE,
MenuConfig = FALSE,
- ToolBoxConfig = FALSE,
+ ToolBoxConfig = TRUE,
GroupId = SfxGroupId::Navigator;
]
@@ -4987,7 +4970,7 @@ SfxVoidItem ScrollToNext FN_SCROLL_NEXT
AccelConfig = FALSE,
MenuConfig = FALSE,
- ToolBoxConfig = FALSE,
+ ToolBoxConfig = TRUE,
GroupId = SfxGroupId::Navigator;
]
@@ -7613,3 +7596,20 @@ SfxUInt16Item JumpToSpecificPage SID_JUMP_TO_SPECIFIC_PAGE
ToolBoxConfig = TRUE,
GroupId = SfxGroupId::Navigator;
]
+
+SfxVoidItem NavElement FN_NAV_ELEMENT
+
+[
+ AutoUpdate = TRUE,
+ FastCall = FALSE,
+ ReadOnlyDoc = FALSE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = FALSE,
+ MenuConfig = FALSE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::Navigator;
+]
diff --git a/sw/source/uibase/inc/workctrl.hxx b/sw/source/uibase/inc/workctrl.hxx
index 64f93e9ace5d..8ed649b63a69 100644
--- a/sw/source/uibase/inc/workctrl.hxx
+++ b/sw/source/uibase/inc/workctrl.hxx
@@ -104,6 +104,8 @@ public:
static OUString GetToolTip(bool bNext);
void GrabFocus() { m_pToolBox->GrabFocus(); }
+
+ virtual void statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
};
class SwPreviewZoomControl : public SfxToolBoxControl
diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx
index d8bb9811fe9a..2e39915a9743 100644
--- a/sw/source/uibase/ribbar/workctrl.cxx
+++ b/sw/source/uibase/ribbar/workctrl.cxx
@@ -49,6 +49,7 @@
#include <svx/dialogs.hrc>
#include <svx/strings.hrc>
#include "bitmaps.hlst"
+#include <toolkit/helper/vclunohelper.hxx>
// Size check
#define NAVI_ENTRIES 20
@@ -345,6 +346,8 @@ SwScrollNaviPopup::SwScrollNaviPopup(sal_uInt16 nId, const Reference< XFrame >&
m_pToolBox->SetSelectHdl(LINK(this, SwScrollNaviPopup, SelectHdl));
m_pToolBox->StartSelection();
m_pToolBox->Show();
+
+ AddStatusListener(".uno:NavElement");
}
SwScrollNaviPopup::~SwScrollNaviPopup()
@@ -364,16 +367,10 @@ IMPL_LINK(SwScrollNaviPopup, SelectHdl, ToolBox*, pSet, void)
sal_uInt16 nSet = pSet->GetCurItemId();
if( nSet != NID_PREV && nSet != NID_NEXT )
{
- SwView::SetMoveType(nSet);
- m_pToolBox->SetItemText(NID_NEXT, sQuickHelp[nSet - NID_START]);
- m_pToolBox->SetItemText(NID_PREV, sQuickHelp[nSet - NID_START + NID_COUNT]);
- m_pInfoField->SetText(m_pToolBox->GetItemText(nSet));
- // check the current button only
- for(ToolBox::ImplToolItems::size_type i = 0; i < NID_COUNT; i++)
- {
- sal_uInt16 nItemId = m_pToolBox->GetItemId( i );
- m_pToolBox->CheckItem( nItemId, nItemId == nSet );
- }
+ SwView::SetMoveType( nSet );
+ Sequence< PropertyValue > aArgs;
+ SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( GetFrame()->getController(), UNO_QUERY ),
+ ".uno:NavElement", aArgs );
}
else
{
@@ -416,10 +413,27 @@ OUString SwScrollNaviPopup::GetToolTip(bool bNext)
sal_uInt16 nResId = SwView::GetMoveType();
if (!bNext)
nResId += NID_COUNT;
- const char* id = STR_IMGBTN_ARY[nResId];
+ const char* id = STR_IMGBTN_ARY[nResId - NID_START];
return id ? SwResId(id): OUString();
}
+void SwScrollNaviPopup::statusChanged( const css::frame::FeatureStateEvent& rEvent )
+{
+ if ( rEvent.FeatureURL.Path == "NavElement" )
+ {
+ sal_uInt16 nSet = SwView::GetMoveType();
+ m_pToolBox->SetItemText( NID_NEXT, sQuickHelp[nSet - NID_START] );
+ m_pToolBox->SetItemText( NID_PREV, sQuickHelp[nSet - NID_START + NID_COUNT] );
+ m_pInfoField->SetText( m_pToolBox->GetItemText( nSet ) );
+ // check the current button only
+ for( ToolBox::ImplToolItems::size_type i = 0; i < NID_COUNT; i++ )
+ {
+ sal_uInt16 nItemId = m_pToolBox->GetItemId( i );
+ m_pToolBox->CheckItem( nItemId, nItemId == nSet );
+ }
+ }
+}
+
class SwZoomBox_Impl : public ComboBox
{
sal_uInt16 nSlotId;
@@ -636,4 +650,448 @@ VclPtr<vcl::Window> SwJumpToSpecificPageControl::CreateItemWindow( vcl::Window *
return pRet.get();
}
+class NavElementBox_Impl;
+class NavElementToolBoxControl : public svt::ToolboxController,
+ public lang::XServiceInfo
+{
+ public:
+ explicit NavElementToolBoxControl(
+ const css::uno::Reference< css::uno::XComponentContext >& rServiceManager );
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override;
+ virtual void SAL_CALL acquire() throw () override;
+ virtual void SAL_CALL release() throw () override;
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+ // XComponent
+ virtual void SAL_CALL dispose() override;
+
+ // XStatusListener
+ virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override;
+
+ // XToolbarController
+ virtual void SAL_CALL execute( sal_Int16 KeyModifier ) override;
+ virtual void SAL_CALL click() override;
+ virtual void SAL_CALL doubleClick() override;
+ virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createPopupWindow() override;
+ virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) override;
+
+ void dispatchCommand( const css::uno::Sequence< css::beans::PropertyValue >& rArgs );
+ using svt::ToolboxController::dispatchCommand;
+
+ private:
+ VclPtr<NavElementBox_Impl> m_pBox;
+};
+
+class NavElementBox_Impl : public ListBox
+{
+public:
+ NavElementBox_Impl( vcl::Window* pParent,
+ const uno::Reference< frame::XFrame >& _xFrame,
+ NavElementToolBoxControl& rCtrl );
+
+ void Update();
+
+ virtual bool EventNotify( NotifyEvent& rNEvt ) override;
+
+protected:
+ virtual void Select() override;
+
+private:
+ NavElementToolBoxControl* m_pCtrl;
+ bool m_bRelease;
+ uno::Reference< frame::XFrame > m_xFrame;
+
+ void ReleaseFocus_Impl();
+};
+
+NavElementBox_Impl::NavElementBox_Impl(
+ vcl::Window* _pParent,
+ const uno::Reference< frame::XFrame >& _xFrame,
+ NavElementToolBoxControl& _rCtrl ) :
+
+ ListBox( _pParent, WinBits( WB_DROPDOWN ) ),
+
+ m_pCtrl ( &_rCtrl ),
+ m_bRelease ( true ),
+ m_xFrame ( _xFrame )
+{
+ SetSizePixel( Size( 150, 260 ) );
+
+ sal_uInt16 i;
+ for ( i = 0; i < NID_COUNT; i++ )
+ {
+ sal_uInt16 nNaviId = aNavigationInsertIds[i];
+ if ( ( NID_PREV != nNaviId ) && ( NID_NEXT != nNaviId ) )
+ InsertEntry( SwResId( aNavigationStrIds[i] ), Image( BitmapEx( aNavigationImgIds[i] ) ) );
+ }
+}
+
+void NavElementBox_Impl::ReleaseFocus_Impl()
+{
+ if ( !m_bRelease )
+ {
+ m_bRelease = true;
+ return;
+ }
+
+ if ( m_xFrame.is() && m_xFrame->getContainerWindow().is() )
+ m_xFrame->getContainerWindow()->setFocus();
+}
+
+void NavElementBox_Impl::Select()
+{
+ ListBox::Select();
+
+ if ( !IsTravelSelect() )
+ {
+ sal_uInt16 nPos = GetSelectEntryPos();
+ // adjust array index for Ids after NID_PREV in aNavigationInsterIds
+ if ( nPos >= NID_COUNT/2 - 1 )
+ ++nPos;
+
+ sal_uInt16 nMoveType = aNavigationInsertIds[nPos];
+ SwView::SetMoveType( nMoveType );
+
+ css::uno::Sequence< css::beans::PropertyValue > aArgs;
+
+ /* #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
+ This instance may be deleted in the meantime (i.e. when a dialog is opened
+ while in Dispatch()), accessing members will crash in this case. */
+ ReleaseFocus_Impl();
+
+ m_pCtrl->dispatchCommand( aArgs );
+ }
+}
+
+void NavElementBox_Impl::Update()
+{
+ sal_uInt16 nMoveType = SwView::GetMoveType();
+ sal_uInt16 i;
+ for ( i = 0; i < SAL_N_ELEMENTS( aNavigationInsertIds ); ++i )
+ {
+ if ( nMoveType == aNavigationInsertIds[i] )
+ {
+ const char* id = aNavigationStrIds[i];
+ OUString sText = SwResId( id );
+ SelectEntry( sText );
+ break;
+ }
+ }
+}
+
+bool NavElementBox_Impl::EventNotify( NotifyEvent& rNEvt )
+{
+ bool bHandled = false;
+
+ if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
+ {
+ sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
+
+ switch ( nCode )
+ {
+ case KEY_RETURN:
+ case KEY_TAB:
+ {
+ if ( KEY_TAB == nCode )
+ m_bRelease = false;
+ else
+ bHandled = true;
+ Select();
+ break;
+ }
+
+ case KEY_ESCAPE:
+ ReleaseFocus_Impl();
+ bHandled = true;
+ break;
+ }
+ }
+ else if( MouseNotifyEvent::LOSEFOCUS == rNEvt.GetType() )
+ {
+ }
+
+ return bHandled || ListBox::EventNotify( rNEvt );
+}
+
+NavElementToolBoxControl::NavElementToolBoxControl( const uno::Reference< uno::XComponentContext >& rxContext )
+ : svt::ToolboxController( rxContext,
+ uno::Reference< frame::XFrame >(),
+ ".uno:NavElement" ),
+ m_pBox( nullptr )
+{
+}
+
+// XInterface
+css::uno::Any SAL_CALL NavElementToolBoxControl::queryInterface( const css::uno::Type& aType )
+{
+ uno::Any a = ToolboxController::queryInterface( aType );
+ if ( a.hasValue() )
+ return a;
+
+ return ::cppu::queryInterface( aType, static_cast< lang::XServiceInfo* >( this ) );
+}
+
+void SAL_CALL NavElementToolBoxControl::acquire() throw ()
+{
+ ToolboxController::acquire();
+}
+
+void SAL_CALL NavElementToolBoxControl::release() throw ()
+{
+ ToolboxController::release();
+}
+
+// XServiceInfo
+sal_Bool SAL_CALL NavElementToolBoxControl::supportsService( const OUString& ServiceName )
+{
+ return cppu::supportsService( this, ServiceName );
+}
+
+OUString SAL_CALL NavElementToolBoxControl::getImplementationName()
+{
+ return OUString("lo.writer.NavElementToolBoxController");
+}
+
+uno::Sequence< OUString > SAL_CALL NavElementToolBoxControl::getSupportedServiceNames()
+{
+ uno::Sequence<OUString> aSNS { "com.sun.star.frame.ToolbarController" };
+ return aSNS;
+}
+
+// XComponent
+void SAL_CALL NavElementToolBoxControl::dispose()
+{
+ svt::ToolboxController::dispose();
+
+ SolarMutexGuard aSolarMutexGuard;
+ m_pBox.disposeAndClear();
+}
+
+// XStatusListener
+void SAL_CALL NavElementToolBoxControl::statusChanged( const frame::FeatureStateEvent& rEvent )
+{
+ if ( m_pBox )
+ {
+ SolarMutexGuard aSolarMutexGuard;
+ if ( rEvent.FeatureURL.Path == "NavElement" )
+ {
+ if ( rEvent.IsEnabled )
+ {
+ m_pBox->Enable();
+ m_pBox->Update();
+ }
+ else
+ m_pBox->Disable();
+ }
+ }
+}
+
+// XToolbarController
+void SAL_CALL NavElementToolBoxControl::execute( sal_Int16 /*KeyModifier*/ )
+{
+}
+
+void SAL_CALL NavElementToolBoxControl::click()
+{
+}
+
+void SAL_CALL NavElementToolBoxControl::doubleClick()
+{
+}
+
+uno::Reference< awt::XWindow > SAL_CALL NavElementToolBoxControl::createPopupWindow()
+{
+ return uno::Reference< awt::XWindow >();
+}
+
+uno::Reference< awt::XWindow > SAL_CALL NavElementToolBoxControl::createItemWindow(
+ const uno::Reference< awt::XWindow >& xParent )
+{
+ uno::Reference< awt::XWindow > xItemWindow;
+
+ VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow( xParent );
+ if ( pParent )
+ {
+ SolarMutexGuard aSolarMutexGuard;
+ m_pBox = VclPtr<NavElementBox_Impl>::Create( pParent, m_xFrame, *this );
+ xItemWindow = VCLUnoHelper::GetInterface( m_pBox );
+ }
+
+ uno::Reference< util::XURLTransformer > xURLTransformer = getURLTransformer();
+
+ return xItemWindow;
+}
+
+void NavElementToolBoxControl::dispatchCommand(
+ const uno::Sequence< beans::PropertyValue >& rArgs )
+{
+ uno::Reference< frame::XDispatchProvider > xDispatchProvider( m_xFrame, uno::UNO_QUERY );
+ if ( xDispatchProvider.is() )
+ {
+ util::URL aURL;
+ uno::Reference< frame::XDispatch > xDispatch;
+ uno::Reference< util::XURLTransformer > xURLTransformer = getURLTransformer();
+
+ aURL.Complete = ".uno:NavElement";
+ xURLTransformer->parseStrict( aURL );
+ xDispatch = xDispatchProvider->queryDispatch( aURL, OUString(), 0 );
+ if ( xDispatch.is() )
+ xDispatch->dispatch( aURL, rArgs );
+ }
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+lo_writer_NavElementToolBoxController_get_implementation(
+ css::uno::XComponentContext *rxContext,
+ css::uno::Sequence<css::uno::Any> const &)
+{
+ return cppu::acquire( new NavElementToolBoxControl( rxContext ) );
+}
+
+class PrevNextScrollToolboxController : public svt::ToolboxController,
+ public css::lang::XServiceInfo
+{
+public:
+ enum Type { PREVIOUS, NEXT };
+
+ PrevNextScrollToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext, Type eType );
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override;
+ virtual void SAL_CALL acquire() throw () override;
+ virtual void SAL_CALL release() throw () override;
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+ // XComponent
+ virtual void SAL_CALL dispose() override;
+
+ // XToolbarController
+ virtual void SAL_CALL execute( sal_Int16 /* KeyModifier */ ) override;
+ virtual void SAL_CALL click() override;
+
+ // XStatusListener
+ virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
+
+private:
+ Type meType;
+};
+
+PrevNextScrollToolboxController::PrevNextScrollToolboxController( const css::uno::Reference< css::uno::XComponentContext > & rxContext, Type eType )
+ : svt::ToolboxController( rxContext,
+ css::uno::Reference< css::frame::XFrame >(),
+ (eType == PREVIOUS) ? OUString( ".uno:ScrollToPrevious" ): OUString( ".uno:ScrollToNext" ) ),
+ meType( eType )
+{
+ addStatusListener(".uno:NavElement");
+}
+
+// XInterface
+css::uno::Any SAL_CALL PrevNextScrollToolboxController::queryInterface( const css::uno::Type& aType )
+{
+ css::uno::Any a = ToolboxController::queryInterface( aType );
+ if ( a.hasValue() )
+ return a;
+
+ return ::cppu::queryInterface( aType, static_cast< css::lang::XServiceInfo* >( this ) );
+}
+
+void SAL_CALL PrevNextScrollToolboxController::acquire() throw ()
+{
+ ToolboxController::acquire();
+}
+
+void SAL_CALL PrevNextScrollToolboxController::release() throw ()
+{
+ ToolboxController::release();
+}
+
+// XServiceInfo
+OUString SAL_CALL PrevNextScrollToolboxController::getImplementationName()
+{
+ return meType == PrevNextScrollToolboxController::PREVIOUS?
+ OUString( "lo.writer.PreviousScrollToolboxController" ) :
+ OUString( "lo.writer.NextScrollToolboxController" );
+}
+
+sal_Bool SAL_CALL PrevNextScrollToolboxController::supportsService( const OUString& ServiceName )
+{
+ return cppu::supportsService(this, ServiceName);
+}
+
+css::uno::Sequence< OUString > SAL_CALL PrevNextScrollToolboxController::getSupportedServiceNames()
+{
+ return { "com.sun.star.frame.ToolbarController" };
+}
+
+// XComponent
+void SAL_CALL PrevNextScrollToolboxController::dispose()
+{
+ SolarMutexGuard aSolarMutexGuard;
+
+ svt::ToolboxController::dispose();
+}
+
+// XToolbarController
+void SAL_CALL PrevNextScrollToolboxController::execute( sal_Int16 /* KeyModifier */ )
+{
+}
+
+void SAL_CALL PrevNextScrollToolboxController::click()
+{
+ uno::Sequence< beans::PropertyValue > rArgs;
+
+ uno::Reference< frame::XDispatchProvider > xDispatchProvider( m_xFrame, uno::UNO_QUERY );
+ if ( xDispatchProvider.is() )
+ {
+ util::URL aURL;
+ uno::Reference< frame::XDispatch > xDispatch;
+ uno::Reference< util::XURLTransformer > xURLTransformer = getURLTransformer();
+
+ aURL.Complete = getCommandURL();
+ xURLTransformer->parseStrict( aURL );
+ xDispatch = xDispatchProvider->queryDispatch( aURL, OUString(), 0 );
+ if ( xDispatch.is() )
+ xDispatch->dispatch( aURL, rArgs );
+ }
+}
+
+// XStatusListener
+void SAL_CALL PrevNextScrollToolboxController::statusChanged( const css::frame::FeatureStateEvent& rEvent )
+{
+ if ( rEvent.FeatureURL.Path == "NavElement" )
+ {
+ ToolBox* pToolBox = nullptr;
+ sal_uInt16 nId = 0;
+ if ( getToolboxId( nId, &pToolBox ) )
+ pToolBox->SetQuickHelpText( nId, ( meType == PrevNextScrollToolboxController::PREVIOUS?SwScrollNaviPopup::GetToolTip( false ):
+ SwScrollNaviPopup::GetToolTip( true ) ) );
+ }
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+lo_writer_PreviousScrollToolboxController_get_implementation(
+ css::uno::XComponentContext *context,
+ css::uno::Sequence<css::uno::Any> const &)
+{
+ return cppu::acquire( new PrevNextScrollToolboxController( context, PrevNextScrollToolboxController::PREVIOUS ) );
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+lo_writer_NextScrollToolboxController_get_implementation(
+ css::uno::XComponentContext *context,
+ css::uno::Sequence<css::uno::Any> const &)
+{
+ return cppu::acquire( new PrevNextScrollToolboxController( context, PrevNextScrollToolboxController::NEXT ) );
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index ceedd12dd57b..1aa16d537050 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1011,6 +1011,11 @@ void SwView::Execute(SfxRequest &rReq)
lcl_SetAllTextToDefaultLanguage( *m_pWrtShell, RES_CHRATR_CJK_LANGUAGE );
}
break;
+ case FN_NAV_ELEMENT:
+ {
+ // nothing here on purpose - if removed only the listbox that changed is changed
+ }
+ break;
case FN_SCROLL_PREV:
case FN_SCROLL_NEXT:
{
@@ -1022,17 +1027,6 @@ void SwView::Execute(SfxRequest &rReq)
Application::PostUserEvent( LINK(this, SwView, MoveNavigationHdl), pbNext );
}
break;
- case FN_NAVIGATION_POPUP:
- {
- // First make sure that the sidebar is visible
- GetViewFrame()->ShowChildWindow(SID_SIDEBAR);
-
- ::sfx2::sidebar::Sidebar::ShowPanel(
- "SwNavigatorPanel",
- GetViewFrame()->GetFrame().GetFrameInterface());
-
- }
- break;
case SID_JUMPTOMARK:
if( pArgs && SfxItemState::SET == pArgs->GetItemState(SID_JUMPTOMARK, false, &pItem))
JumpToSwMark( static_cast<const SfxStringItem*>(pItem)->GetValue() );
diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx
index 522503c58b56..e5387497133d 100644
--- a/sw/source/uibase/uiview/viewstat.cxx
+++ b/sw/source/uibase/uiview/viewstat.cxx
@@ -77,6 +77,10 @@ void SwView::GetState(SfxItemSet &rSet)
{
switch(nWhich)
{
+ case FN_NAV_ELEMENT:
+ // used to update all instances of this control
+ rSet.InvalidateItem( nWhich );
+ break;
case FN_EDIT_LINK_DLG:
if( m_pWrtShell->GetLinkManager().GetLinks().empty() )
rSet.DisableItem(nWhich);
diff --git a/sw/uiconfig/swriter/toolbar/findbar.xml b/sw/uiconfig/swriter/toolbar/findbar.xml
index 7305b61d01e8..733055ba688e 100644
--- a/sw/uiconfig/swriter/toolbar/findbar.xml
+++ b/sw/uiconfig/swriter/toolbar/findbar.xml
@@ -27,7 +27,7 @@
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:SearchDialog"/>
<toolbar:toolbarseparator/>
- <toolbar:toolbaritem xlink:href=".uno:NavigationPopup"/>
+ <toolbar:toolbaritem xlink:href=".uno:NavElement"/>
<toolbar:toolbaritem xlink:href=".uno:ScrollToPrevious"/>
<toolbar:toolbaritem xlink:href=".uno:ScrollToNext"/>
<toolbar:toolbarseparator/>
diff --git a/sw/util/sw.component b/sw/util/sw.component
index c069d632ecbe..1bbc6766d913 100644
--- a/sw/util/sw.component
+++ b/sw/util/sw.component
@@ -18,6 +18,18 @@
-->
<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
prefix="sw" xmlns="http://openoffice.org/2010/uno-components">
+ <implementation name="lo.writer.NavElementToolBoxController"
+ constructor="lo_writer_NavElementToolBoxController_get_implementation">
+ <service name="com.sun.star.frame.ToolbarController"/>
+ </implementation>
+ <implementation name="lo.writer.PreviousScrollToolboxController"
+ constructor="lo_writer_PreviousScrollToolboxController_get_implementation">
+ <service name="com.sun.star.frame.ToolbarController"/>
+ </implementation>
+ <implementation name="lo.writer.NextScrollToolboxController"
+ constructor="lo_writer_NextScrollToolboxController_get_implementation">
+ <service name="com.sun.star.frame.ToolbarController"/>
+ </implementation>
<implementation name="SwXAutoTextContainer"
constructor="SwXAutoTextContainer_get_implementation">
<service name="com.sun.star.text.AutoTextContainer"/>