diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2014-09-14 15:45:02 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2014-09-14 22:07:17 +0200 |
commit | 051b29e1025253f35f87a04e297760aa8b40611f (patch) | |
tree | f836152e4e5db963740760d05d1d5358776493e3 | |
parent | d6a83d3f91336e23b51bfc3b3d58da799760829f (diff) |
convert Edit autocomplete Hdl to boost signals2
Here it also keep track of the connection, as it needs to be explicitly
disconnected in one place.
Change-Id: Id3e2882106ae55c2d880898956a36f84d3ce70ef
-rw-r--r-- | include/svtools/inettbc.hxx | 3 | ||||
-rw-r--r-- | include/vcl/combobox.hxx | 4 | ||||
-rw-r--r-- | include/vcl/edit.hxx | 5 | ||||
-rw-r--r-- | svtools/source/control/inettbc.cxx | 9 | ||||
-rw-r--r-- | vcl/source/control/combobox.cxx | 14 | ||||
-rw-r--r-- | vcl/source/control/edit.cxx | 24 |
6 files changed, 26 insertions, 33 deletions
diff --git a/include/svtools/inettbc.hxx b/include/svtools/inettbc.hxx index 82e324887a68..8d073a88765a 100644 --- a/include/svtools/inettbc.hxx +++ b/include/svtools/inettbc.hxx @@ -48,9 +48,10 @@ friend class SvtURLBox_Impl; SVT_DLLPRIVATE bool ProcessKey( const vcl::KeyCode& rCode ); SVT_DLLPRIVATE void TryAutoComplete(); SVT_DLLPRIVATE void UpdatePicklistForSmartProtocol_Impl(); - DECL_DLLPRIVATE_LINK( AutoCompleteHdl_Impl, void* ); SVT_DLLPRIVATE void Init(bool bSetDefaultHelpID); + SAL_DLLPRIVATE void AutoCompleteHandler( Edit* ); + protected: virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE; virtual void Select() SAL_OVERRIDE; diff --git a/include/vcl/combobox.hxx b/include/vcl/combobox.hxx index 95e35193030a..b80d088ab748 100644 --- a/include/vcl/combobox.hxx +++ b/include/vcl/combobox.hxx @@ -20,6 +20,7 @@ #ifndef INCLUDED_VCL_COMBOBOX_HXX #define INCLUDED_VCL_COMBOBOX_HXX +#include <boost/signals2/connection.hpp> #include <vcl/dllapi.h> #include <vcl/ctrl.hxx> #include <vcl/combobox.h> @@ -50,6 +51,7 @@ private: sal_Int32 m_nMaxWidthChars; Link maSelectHdl; Link maDoubleClickHdl; + boost::signals2::scoped_connection mAutocompleteConnection; struct ComboBoxBounds { @@ -71,11 +73,11 @@ private: DECL_DLLPRIVATE_LINK( ImplDoubleClickHdl, void* ); DECL_DLLPRIVATE_LINK( ImplPopupModeEndHdl, void* ); DECL_DLLPRIVATE_LINK( ImplSelectionChangedHdl, void* ); - DECL_DLLPRIVATE_LINK( ImplAutocompleteHdl, Edit* ); DECL_DLLPRIVATE_LINK( ImplListItemSelectHdl , void* ); SAL_DLLPRIVATE void ImplClickButtonHandler( ImplBtn* ); SAL_DLLPRIVATE void ImplUserDrawHandler( UserDrawEvent* ); + SAL_DLLPRIVATE void ImplAutocompleteHandler( Edit* ); protected: using Window::ImplInit; diff --git a/include/vcl/edit.hxx b/include/vcl/edit.hxx index 391e825437c0..5d41a1bf0852 100644 --- a/include/vcl/edit.hxx +++ b/include/vcl/edit.hxx @@ -20,6 +20,7 @@ #ifndef INCLUDED_VCL_EDIT_HXX #define INCLUDED_VCL_EDIT_HXX +#include <boost/signals2/signal.hpp> #include <tools/solar.h> #include <vcl/dllapi.h> #include <vcl/timer.hxx> @@ -94,7 +95,6 @@ private: mbActivePopup:1; Link maModifyHdl; Link maUpdateDataHdl; - Link maAutocompleteHdl; css::uno::Reference < css::i18n::XExtendedInputSequenceChecker > mxISC; @@ -238,8 +238,7 @@ public: void SetSubEdit( Edit* pEdit ); Edit* GetSubEdit() const { return mpSubEdit; } - void SetAutocompleteHdl( const Link& rHdl ); - const Link& GetAutocompleteHdl() const { return maAutocompleteHdl; } + boost::signals2::signal< void ( Edit* ) > autocompleteSignal; AutocompleteAction GetAutocompleteAction() const { return meAutocompleteAction; } virtual Size CalcMinimumSize() const; diff --git a/svtools/source/control/inettbc.cxx b/svtools/source/control/inettbc.cxx index e8e4d1c07b74..a5850531c182 100644 --- a/svtools/source/control/inettbc.cxx +++ b/svtools/source/control/inettbc.cxx @@ -899,7 +899,7 @@ void SvtURLBox::Init(bool bSetDefaultHelpID) SetText( OUString() ); - GetSubEdit()->SetAutocompleteHdl( LINK( this, SvtURLBox, AutoCompleteHdl_Impl ) ); + GetSubEdit()->autocompleteSignal.connect( boost::bind( &SvtURLBox::AutoCompleteHandler, this, _1 ) ); UpdatePicklistForSmartProtocol_Impl(); EnableAutoSize(GetStyle() & WB_AUTOSIZE); @@ -1127,15 +1127,10 @@ bool SvtURLBox::PreNotify( NotifyEvent& rNEvt ) } -IMPL_LINK_NOARG(SvtURLBox, AutoCompleteHdl_Impl) +void SvtURLBox::AutoCompleteHandler( Edit* ) { if ( GetSubEdit()->GetAutocompleteAction() == AUTOCOMPLETE_KEYINPUT ) - { TryAutoComplete(); - return 1L; - } - - return 0L; } diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 700fe04f5569..93d6c295dc07 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -224,14 +224,18 @@ void ComboBox::EnableAutocomplete( bool bEnable, bool bMatchCase ) mbMatchCase = bMatchCase; if ( bEnable ) - mpSubEdit->SetAutocompleteHdl( LINK( this, ComboBox, ImplAutocompleteHdl ) ); + { + if( !mAutocompleteConnection.connected()) + mAutocompleteConnection = mpSubEdit->autocompleteSignal.connect( + boost::bind( &ComboBox::ImplAutocompleteHandler, this, _1 ) ); + } else - mpSubEdit->SetAutocompleteHdl( Link() ); + mAutocompleteConnection.disconnect(); } bool ComboBox::IsAutocompleteEnabled() const { - return mpSubEdit->GetAutocompleteHdl().IsSet(); + return mAutocompleteConnection.connected(); } void ComboBox::ImplClickButtonHandler( ImplBtn* ) @@ -275,7 +279,7 @@ IMPL_LINK_NOARG(ComboBox, ImplPopupModeEndHdl) return 0; } -IMPL_LINK( ComboBox, ImplAutocompleteHdl, Edit*, pEdit ) +void ComboBox::ImplAutocompleteHandler( Edit* pEdit ) { Selection aSel = pEdit->GetSelection(); AutocompleteAction eAction = pEdit->GetAutocompleteAction(); @@ -326,8 +330,6 @@ IMPL_LINK( ComboBox, ImplAutocompleteHdl, Edit*, pEdit ) pEdit->SetText( aText, aSelection ); } } - - return 0; } IMPL_LINK_NOARG(ComboBox, ImplSelectHdl) diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index 287339c33b65..404a0a00d2de 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -1615,12 +1615,12 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt ) ImplCopyToSelectionClipboard(); } - if ( bGoEnd && maAutocompleteHdl.IsSet() && !rKEvt.GetKeyCode().GetModifier() ) + if ( bGoEnd && !autocompleteSignal.empty() && !rKEvt.GetKeyCode().GetModifier() ) { if ( (maSelection.Min() == maSelection.Max()) && (maSelection.Min() == maText.getLength()) ) { meAutocompleteAction = AUTOCOMPLETE_KEYINPUT; - maAutocompleteHdl.Call( this ); + autocompleteSignal( this ); } } @@ -1686,7 +1686,7 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt ) not suddenly to cycle the autocompletion case KEY_TAB: { - if ( !mbReadOnly && maAutocompleteHdl.IsSet() && + if ( !mbReadOnly && !autocompleteSignal.empty() && maSelection.Min() && (maSelection.Min() == maText.Len()) && !rKEvt.GetKeyCode().IsMod1() && !rKEvt.GetKeyCode().IsMod2() ) { @@ -1697,7 +1697,7 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt ) else meAutocompleteAction = AUTOCOMPLETE_TABFORWARD; - maAutocompleteHdl.Call( this ); + autocompleteSignal( this ); // Wurde nichts veraendert, dann TAB fuer DialogControl if ( GetSelection().Len() ) @@ -1715,12 +1715,12 @@ bool Edit::ImplHandleKeyEvent( const KeyEvent& rKEvt ) if ( !mbReadOnly ) { ImplInsertText(OUString(rKEvt.GetCharCode()), 0, true); - if ( maAutocompleteHdl.IsSet() ) + if ( !autocompleteSignal.empty() ) { if ( (maSelection.Min() == maSelection.Max()) && (maSelection.Min() == maText.getLength()) ) { meAutocompleteAction = AUTOCOMPLETE_KEYINPUT; - maAutocompleteHdl.Call( this ); + autocompleteSignal( this ); } } } @@ -2080,12 +2080,12 @@ void Edit::Command( const CommandEvent& rCEvt ) ImplModified(); // #i25161# call auto complete handler for ext text commit also - if ( maAutocompleteHdl.IsSet() ) + if ( autocompleteSignal.empty() ) { if ( (maSelection.Min() == maSelection.Max()) && (maSelection.Min() == maText.getLength()) ) { meAutocompleteAction = AUTOCOMPLETE_KEYINPUT; - maAutocompleteHdl.Call( this ); + autocompleteSignal( this ); } } } @@ -2446,13 +2446,6 @@ void Edit::SetReadOnly( bool bReadOnly ) } } -void Edit::SetAutocompleteHdl( const Link& rHdl ) -{ - maAutocompleteHdl = rHdl; - if ( mpSubEdit ) - mpSubEdit->SetAutocompleteHdl( rHdl ); -} - void Edit::SetInsertMode( bool bInsert ) { if ( bInsert != mbInsertMode ) @@ -2709,6 +2702,7 @@ void Edit::SetSubEdit( Edit* pEdit ) mpSubEdit->mbIsSubEdit = true; mpSubEdit->SetReadOnly( mbReadOnly ); + mpSubEdit->autocompleteSignal.connect( autocompleteSignal ); } } |