From df97997452b443f184c07c8cb1eedaaa0621f05f Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 13 Jan 2012 07:53:08 +0100 Subject: [PATCH] refactor slightly to avoid link problems with gcc 4.7 --- sc/source/ui/inc/anyrefdg.hxx | 23 ++++++++--- sc/source/ui/miscdlgs/anyrefdg.cxx | 80 ++++++++++++++--------------------- 2 files changed, 49 insertions(+), 54 deletions(-) diff --git a/sc/source/ui/inc/anyrefdg.hxx b/sc/source/ui/inc/anyrefdg.hxx index 3dd531b..383f6b3 100644 --- a/sc/source/ui/inc/anyrefdg.hxx +++ b/sc/source/ui/inc/anyrefdg.hxx @@ -121,7 +121,6 @@ class SC_DLLPUBLIC ScRefHandler : //public SfxModelessDialog, public: operator Window *(){ return &m_rWindow; } Window * operator ->() { return static_cast(*this); } - template friend class ScRefHdlrImplBase; friend class formula::RefButton; friend class formula::RefEdit; @@ -152,6 +151,9 @@ protected: bool ParseWithNames( ScRangeList& rRanges, const String& rStr, ScDocument* pDoc ); + void preNotify(const NotifyEvent& rEvent, const bool bBindRef); + void stateChanged(const StateChangedType nStateChange, const bool bBindRef); + public: ScRefHandler( Window &rWindow, SfxBindings* pB/*, SfxChildWindow* pCW, Window* pParent, sal_uInt16 nResId*/, bool bBindRef ); @@ -222,6 +224,20 @@ ScRefHdlrImplBase::ScRefHdlrImplBase( TParentWindow* pParent, template ScRefHdlrImplBase::~ScRefHdlrImplBase(){} +template +long ScRefHdlrImplBase::PreNotify( NotifyEvent& rNEvt ) +{ + ScRefHandler::preNotify( rNEvt, bBindRef ); + return TWindow::PreNotify( rNEvt ); +} + +template +void ScRefHdlrImplBase::StateChanged( StateChangedType nStateChange ) +{ + TWindow::StateChanged( nStateChange ); + ScRefHandler::stateChanged( nStateChange, bBindRef ); +} + //============================================================================ template struct ScRefHdlrImpl: ScRefHdlrImplBase @@ -257,11 +273,6 @@ inline bool ScRefHandler::CanInputDone( sal_Bool bForced ) return m_aHelper.CanInputDone( bForced ); } -template <> SC_DLLPUBLIC void ScRefHdlrImplBase::StateChanged( StateChangedType nStateChange ); -template <> SC_DLLPUBLIC long ScRefHdlrImplBase::PreNotify( NotifyEvent& rNEvt ); -template <> SC_DLLPUBLIC void ScRefHdlrImplBase::StateChanged( StateChangedType nStateChange ); -template <> SC_DLLPUBLIC long ScRefHdlrImplBase::PreNotify( NotifyEvent& rNEvt ); - #endif // SC_ANYREFDG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx index 91e3858..b0a4ad6 100644 --- a/sc/source/ui/miscdlgs/anyrefdg.cxx +++ b/sc/source/ui/miscdlgs/anyrefdg.cxx @@ -865,54 +865,38 @@ void ScRefHandler::ToggleCollapsed( formula::RefEdit* pEdit, formula::RefButton* m_aHelper.ToggleCollapsed( pEdit, pButton ); } -#if defined( _MSC_VER ) -#define INTRODUCE_TEMPLATE -#else -#define INTRODUCE_TEMPLATE template <> -#endif - -#define IMPL_TWINDOW_PRENOTIFY( TWindow,bBindRef ) \ -INTRODUCE_TEMPLATE long ScRefHdlrImplBase::PreNotify( NotifyEvent& rNEvt )\ -{\ - if( bBindRef || m_bInRefMode )\ - {\ - sal_uInt16 nSwitch=rNEvt.GetType();\ - if(nSwitch==EVENT_GETFOCUS)\ - {\ - pActiveWin=rNEvt.GetWindow();\ - }\ - }\ - return TWindow::PreNotify(rNEvt);\ -} - -#define IMPL_TWINDOW_STATECHANGED( TWindow,bBindRef ) \ -INTRODUCE_TEMPLATE void ScRefHdlrImplBase::StateChanged( StateChangedType nStateChange )\ -{\ - TWindow::StateChanged( nStateChange );\ -\ - if( !bBindRef && !m_bInRefMode ) return;\ - \ - if(nStateChange == STATE_CHANGE_VISIBLE)\ - {\ - if(m_rWindow.IsVisible())\ - {\ - m_aHelper.enableInput( false );\ - m_aHelper.EnableSpreadsheets();\ - m_aHelper.SetDispatcherLock( sal_True );\ - aTimer.Start();\ - }\ - else\ - {\ - m_aHelper.enableInput( sal_True );\ - m_aHelper.SetDispatcherLock( false ); /*//! here and in DoClose ?*/\ - }\ - }\ -} - -IMPL_TWINDOW_PRENOTIFY( SfxModelessDialog, true ) -IMPL_TWINDOW_PRENOTIFY( SfxTabDialog, false ) -IMPL_TWINDOW_STATECHANGED( SfxModelessDialog, true ) -IMPL_TWINDOW_STATECHANGED( SfxTabDialog, false ) +void ScRefHandler::preNotify(const NotifyEvent& rNEvt, const bool bBindRef) +{ + if( bBindRef || m_bInRefMode ) + { + sal_uInt16 nSwitch=rNEvt.GetType(); + if(nSwitch==EVENT_GETFOCUS) + { + pActiveWin=rNEvt.GetWindow(); + } + } +} + +void ScRefHandler::stateChanged(const StateChangedType nStateChange, const bool bBindRef) +{ + if( !bBindRef && !m_bInRefMode ) return; + + if(nStateChange == STATE_CHANGE_VISIBLE) + { + if(m_rWindow.IsVisible()) + { + m_aHelper.enableInput( false ); + m_aHelper.EnableSpreadsheets(); + m_aHelper.SetDispatcherLock( sal_True ); + aTimer.Start(); + } + else + { + m_aHelper.enableInput( sal_True ); + m_aHelper.SetDispatcherLock( false ); /*//! here and in DoClose ?*/ + } + } +} IMPL_LINK( ScRefHandler, UpdateFocusHdl, Timer*, EMPTYARG ) { -- 1.7.7.5