summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Raykowski <raykowj@gmail.com>2017-08-04 06:48:42 -0800
committerSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2017-08-10 08:43:56 +0200
commit0e8208057d098f961a62efa5318a80b0d3372d2a (patch)
tree52da596e9f90b03554fc08353b73ce3f1efd842a
parent67a61e54531801645d51ad89aac30064b8c4b4e8 (diff)
tdf#79167 Change search type through a drop down control
drop down control to change 'navigate by' search element small navigation popup relationally linked to drop down control dynamic tool tips added to previous and next 'navigate by' toolbar controls Change-Id: I4b1215b74b488f2571b529d9946f6574de6e270a Reviewed-on: https://gerrit.libreoffice.org/40776 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
-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"/>