diff options
-rw-r--r-- | officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu | 33 | ||||
-rw-r--r-- | officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu | 4 | ||||
-rw-r--r-- | sw/inc/cmdid.h | 4 | ||||
-rw-r--r-- | sw/sdi/_viewsh.sdi | 9 | ||||
-rw-r--r-- | sw/sdi/swriter.sdi | 38 | ||||
-rw-r--r-- | sw/source/uibase/inc/workctrl.hxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/ribbar/workctrl.cxx | 480 | ||||
-rw-r--r-- | sw/source/uibase/uiview/view2.cxx | 16 | ||||
-rw-r--r-- | sw/source/uibase/uiview/viewstat.cxx | 4 | ||||
-rw-r--r-- | sw/uiconfig/swriter/toolbar/findbar.xml | 2 | ||||
-rw-r--r-- | sw/util/sw.component | 12 |
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"/> |