make Control::ImplCallEventListenersAndHandler take a lambda

so that we make the Link<> calls type-safe, without having to make this
a template method

Change-Id: I2e36bd6aa7c63440f72d266b593e101965b5ebce
This commit is contained in:
Noel Grandin
2015-08-17 11:33:14 +02:00
parent 81908b3853
commit a50cd18768
12 changed files with 27 additions and 29 deletions

View File

@@ -69,15 +69,13 @@ protected:
@param nEvent @param nEvent
the event to notify to our event listeners the event to notify to our event listeners
@param rHandler @param callHandler
the handler to call the lambda function that calls the handler
@param pCaller
the parameter to pass to the handler call
@return @return
if the Control instance has been destroyed in any of the call if the Control instance has been destroyed in any of the call
*/ */
bool ImplCallEventListenersAndHandler( bool ImplCallEventListenersAndHandler(
sal_uLong nEvent, const Link<>& rHandler, void* pCaller sal_uLong nEvent, std::function<void()> callHandler
); );
/** draws the given text onto the given device /** draws the given text onto the given device

View File

@@ -78,7 +78,7 @@ bool ScCondFrmtEntry::Notify( NotifyEvent& rNEvt )
{ {
if( rNEvt.GetType() == MouseNotifyEvent::MOUSEBUTTONDOWN ) if( rNEvt.GetType() == MouseNotifyEvent::MOUSEBUTTONDOWN )
{ {
ImplCallEventListenersAndHandler( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, maClickHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, [this] () { maClickHdl.Call(this); } );
} }
return Control::Notify(rNEvt); return Control::Notify(rNEvt);
} }

View File

@@ -652,7 +652,7 @@ namespace svt { namespace table
void TableControl::Select() void TableControl::Select()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_TABLEROW_SELECT, m_pImpl->getSelectHandler(), this ); ImplCallEventListenersAndHandler( VCLEVENT_TABLEROW_SELECT, [this] () { m_pImpl->getSelectHandler().Call(this); } );
if ( m_pImpl->isAccessibleAlive() ) if ( m_pImpl->isAccessibleAlive() )
{ {

View File

@@ -114,7 +114,7 @@ void Button::SetCommandHandler(const OUString& aCommand)
void Button::Click() void Button::Click()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_BUTTON_CLICK, maClickHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_BUTTON_CLICK, [this] () { maClickHdl.Call(this); } );
} }
OUString Button::GetStandardText( StandardButtonType eButton ) OUString Button::GetStandardText( StandardButtonType eButton )
@@ -1548,7 +1548,7 @@ bool PushButton::PreNotify( NotifyEvent& rNEvt )
void PushButton::Toggle() void PushButton::Toggle()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_PUSHBUTTON_TOGGLE, maToggleHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_PUSHBUTTON_TOGGLE, [this] () { maToggleHdl.Call(this); } );
} }
void PushButton::SetSymbol( SymbolType eSymbol ) void PushButton::SetSymbol( SymbolType eSymbol )
@@ -2640,7 +2640,7 @@ bool RadioButton::PreNotify( NotifyEvent& rNEvt )
void RadioButton::Toggle() void RadioButton::Toggle()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_RADIOBUTTON_TOGGLE, maToggleHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_RADIOBUTTON_TOGGLE, [this] () { maToggleHdl.Call(this); } );
} }
bool RadioButton::SetModeRadioImage( const Image& rImage ) bool RadioButton::SetModeRadioImage( const Image& rImage )
@@ -3595,7 +3595,7 @@ bool CheckBox::PreNotify( NotifyEvent& rNEvt )
void CheckBox::Toggle() void CheckBox::Toggle()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_CHECKBOX_TOGGLE, maToggleHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_CHECKBOX_TOGGLE, [this] () { maToggleHdl.Call(this); } );
} }
void CheckBox::SetState( TriState eState ) void CheckBox::SetState( TriState eState )

View File

@@ -556,12 +556,12 @@ void ComboBox::ToggleDropDown()
void ComboBox::Select() void ComboBox::Select()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_COMBOBOX_SELECT, m_pImpl->m_SelectHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_COMBOBOX_SELECT, [this] () { m_pImpl->m_SelectHdl.Call(this); } );
} }
void ComboBox::DoubleClick() void ComboBox::DoubleClick()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_COMBOBOX_DOUBLECLICK, m_pImpl->m_DoubleClickHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_COMBOBOX_DOUBLECLICK, [this] () { m_pImpl->m_DoubleClickHdl.Call(this); } );
} }
bool ComboBox::IsAutoSizeEnabled() const { return m_pImpl->m_isDDAutoSize; } bool ComboBox::IsAutoSizeEnabled() const { return m_pImpl->m_isDDAutoSize; }

View File

@@ -258,7 +258,7 @@ bool Control::Notify( NotifyEvent& rNEvt )
{ {
mbHasControlFocus = true; mbHasControlFocus = true;
CompatStateChanged( StateChangedType::ControlFocus ); CompatStateChanged( StateChangedType::ControlFocus );
if ( ImplCallEventListenersAndHandler( VCLEVENT_CONTROL_GETFOCUS, maGetFocusHdl, this ) ) if ( ImplCallEventListenersAndHandler( VCLEVENT_CONTROL_GETFOCUS, [this] () { maGetFocusHdl.Call(this); } ) )
// been destroyed within the handler // been destroyed within the handler
return true; return true;
} }
@@ -272,7 +272,7 @@ bool Control::Notify( NotifyEvent& rNEvt )
{ {
mbHasControlFocus = false; mbHasControlFocus = false;
CompatStateChanged( StateChangedType::ControlFocus ); CompatStateChanged( StateChangedType::ControlFocus );
if ( ImplCallEventListenersAndHandler( VCLEVENT_CONTROL_LOSEFOCUS, maLoseFocusHdl, this ) ) if ( ImplCallEventListenersAndHandler( VCLEVENT_CONTROL_LOSEFOCUS, [this] () { maLoseFocusHdl.Call(this); } ) )
// been destroyed within the handler // been destroyed within the handler
return true; return true;
} }
@@ -320,7 +320,7 @@ void Control::AppendLayoutData( const Control& rSubControl ) const
} }
} }
bool Control::ImplCallEventListenersAndHandler( sal_uLong nEvent, const Link<>& rHandler, void* pCaller ) bool Control::ImplCallEventListenersAndHandler( sal_uLong nEvent, std::function<void()> callHandler )
{ {
VclPtr<Control> xThis(this); VclPtr<Control> xThis(this);
@@ -328,7 +328,7 @@ bool Control::ImplCallEventListenersAndHandler( sal_uLong nEvent, const Link<>&
if ( !xThis->IsDisposed() ) if ( !xThis->IsDisposed() )
{ {
rHandler.Call( pCaller ); callHandler();
if ( !xThis->IsDisposed() ) if ( !xThis->IsDisposed() )
return false; return false;

View File

@@ -2416,7 +2416,7 @@ void Edit::Modify()
if ( mpUpdateDataTimer ) if ( mpUpdateDataTimer )
mpUpdateDataTimer->Start(); mpUpdateDataTimer->Start();
if ( ImplCallEventListenersAndHandler( VCLEVENT_EDIT_MODIFY, maModifyHdl, this ) ) if ( ImplCallEventListenersAndHandler( VCLEVENT_EDIT_MODIFY, [this] () { maModifyHdl.Call(this); } ) )
// have been destroyed while calling into the handlers // have been destroyed while calling into the handlers
return; return;

View File

@@ -77,7 +77,7 @@ void FixedHyperlink::MouseButtonUp( const MouseEvent& )
{ {
// calls the link if the control is enabled and the mouse is over the text. // calls the link if the control is enabled and the mouse is over the text.
if ( IsEnabled() && ImplIsOverText(GetPointerPosPixel()) ) if ( IsEnabled() && ImplIsOverText(GetPointerPosPixel()) )
ImplCallEventListenersAndHandler( VCLEVENT_BUTTON_CLICK, m_aClickHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_BUTTON_CLICK, [this] () { m_aClickHdl.Call(this); } );
} }
void FixedHyperlink::RequestHelp( const HelpEvent& rHEvt ) void FixedHyperlink::RequestHelp( const HelpEvent& rHEvt )

View File

@@ -972,12 +972,12 @@ bool ListBox::PreNotify( NotifyEvent& rNEvt )
void ListBox::Select() void ListBox::Select()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_LISTBOX_SELECT, maSelectHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_LISTBOX_SELECT, [this] () { maSelectHdl.Call(this); } );
} }
void ListBox::DoubleClick() void ListBox::DoubleClick()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_LISTBOX_DOUBLECLICK, maDoubleClickHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_LISTBOX_DOUBLECLICK, [this] () { maDoubleClickHdl.Call(this); } );
} }
void ListBox::Clear() void ListBox::Clear()

View File

@@ -1323,12 +1323,12 @@ bool ScrollBar::PreNotify( NotifyEvent& rNEvt )
void ScrollBar::Scroll() void ScrollBar::Scroll()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_SCROLLBAR_SCROLL, maScrollHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_SCROLLBAR_SCROLL, [this] () { maScrollHdl.Call(this); } );
} }
void ScrollBar::EndScroll() void ScrollBar::EndScroll()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_SCROLLBAR_ENDSCROLL, maEndScrollHdl, this ); ImplCallEventListenersAndHandler( VCLEVENT_SCROLLBAR_ENDSCROLL, [this] () { maEndScrollHdl.Call(this); } );
} }
long ScrollBar::DoScroll( long nNewPos ) long ScrollBar::DoScroll( long nNewPos )

View File

@@ -81,7 +81,7 @@ void SpinButton::Up()
ImplMoveFocus(true); ImplMoveFocus(true);
} }
ImplCallEventListenersAndHandler(VCLEVENT_SPINBUTTON_UP, maUpHdlLink, this); ImplCallEventListenersAndHandler(VCLEVENT_SPINBUTTON_UP, [this] () { maUpHdlLink.Call(this); } );
} }
void SpinButton::Down() void SpinButton::Down()
@@ -94,7 +94,7 @@ void SpinButton::Down()
ImplMoveFocus(false); ImplMoveFocus(false);
} }
ImplCallEventListenersAndHandler(VCLEVENT_SPINBUTTON_DOWN, maDownHdlLink, this); ImplCallEventListenersAndHandler(VCLEVENT_SPINBUTTON_DOWN, [this] () { maDownHdlLink.Call(this); } );
} }
void SpinButton::Resize() void SpinButton::Resize()

View File

@@ -383,22 +383,22 @@ void SpinField::dispose()
void SpinField::Up() void SpinField::Up()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_UP, maUpHdlLink, this ); ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_UP, [this] () { maUpHdlLink.Call(this); } );
} }
void SpinField::Down() void SpinField::Down()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_DOWN, maDownHdlLink, this ); ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_DOWN, [this] () { maDownHdlLink.Call(this); } );
} }
void SpinField::First() void SpinField::First()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_FIRST, maFirstHdlLink, this ); ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_FIRST, [this] () { maFirstHdlLink.Call(this); } );
} }
void SpinField::Last() void SpinField::Last()
{ {
ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_LAST, maLastHdlLink, this ); ImplCallEventListenersAndHandler( VCLEVENT_SPINFIELD_LAST, [this] () { maLastHdlLink.Call(this); } );
} }
void SpinField::MouseButtonDown( const MouseEvent& rMEvt ) void SpinField::MouseButtonDown( const MouseEvent& rMEvt )