diff options
Diffstat (limited to 'vcl/source/control/button.cxx')
-rw-r--r-- | vcl/source/control/button.cxx | 64 |
1 files changed, 30 insertions, 34 deletions
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx index 09abe44f5f80..bf23b10fb9d4 100644 --- a/vcl/source/control/button.cxx +++ b/vcl/source/control/button.cxx @@ -88,14 +88,19 @@ ImplCommonButtonData::~ImplCommonButtonData() } Button::Button( WindowType nType ) : - Control( nType ) + Control( nType ), + mpButtonData( new ImplCommonButtonData ) { - mpButtonData = new ImplCommonButtonData; } Button::~Button() { - delete mpButtonData; + disposeOnce(); +} + +void Button::dispose() +{ + Control::dispose(); } void Button::SetCommandHandler(const OUString& aCommand) @@ -1173,10 +1178,6 @@ PushButton::PushButton( vcl::Window* pParent, const ResId& rResId ) : Show(); } -PushButton::~PushButton() -{ -} - void PushButton::MouseButtonDown( const MouseEvent& rMEvt ) { if ( rMEvt.IsLeft() && @@ -1583,7 +1584,8 @@ void PushButton::SetPressed( bool bPressed ) void PushButton::EndSelection() { EndTracking( ENDTRACK_CANCEL ); - if ( ImplGetButtonState() & BUTTON_DRAW_PRESSED ) + if ( !IsDisposed() && + ImplGetButtonState() & BUTTON_DRAW_PRESSED ) { ImplGetButtonState() &= ~BUTTON_DRAW_PRESSED; if ( !mbPressed ) @@ -2143,20 +2145,20 @@ void RadioButton::group(RadioButton &rOther) if (!m_xGroup) { - m_xGroup.reset(new std::vector<RadioButton*>); + m_xGroup.reset(new std::vector<VclPtr<RadioButton> >); m_xGroup->push_back(this); } - std::vector<RadioButton*>::iterator aFind = std::find(m_xGroup->begin(), m_xGroup->end(), &rOther); + auto aFind = std::find(m_xGroup->begin(), m_xGroup->end(), VclPtr<RadioButton>(&rOther)); if (aFind == m_xGroup->end()) { m_xGroup->push_back(&rOther); if (rOther.m_xGroup) { - std::vector< RadioButton* > aOthers(rOther.GetRadioButtonGroup(false)); + std::vector< VclPtr<RadioButton> > aOthers(rOther.GetRadioButtonGroup(false)); //make all members of the group share the same button group - for (std::vector<RadioButton*>::iterator aI = aOthers.begin(), aEnd = aOthers.end(); aI != aEnd; ++aI) + for (auto aI = aOthers.begin(), aEnd = aOthers.end(); aI != aEnd; ++aI) { aFind = std::find(m_xGroup->begin(), m_xGroup->end(), *aI); if (aFind == m_xGroup->end()) @@ -2165,8 +2167,7 @@ void RadioButton::group(RadioButton &rOther) } //make all members of the group share the same button group - for (std::vector<RadioButton*>::iterator aI = m_xGroup->begin(), aEnd = m_xGroup->end(); - aI != aEnd; ++aI) + for (auto aI = m_xGroup->begin(), aEnd = m_xGroup->end(); aI != aEnd; ++aI) { RadioButton* pButton = *aI; pButton->m_xGroup = m_xGroup; @@ -2178,14 +2179,14 @@ void RadioButton::group(RadioButton &rOther) ImplUncheckAllOther(); } -std::vector< RadioButton* > RadioButton::GetRadioButtonGroup(bool bIncludeThis) const +std::vector< VclPtr<RadioButton> > RadioButton::GetRadioButtonGroup(bool bIncludeThis) const { if (m_xGroup) { if (bIncludeThis) return *m_xGroup; - std::vector< RadioButton* > aGroup; - for (std::vector<RadioButton*>::iterator aI = m_xGroup->begin(), aEnd = m_xGroup->end(); aI != aEnd; ++aI) + std::vector< VclPtr<RadioButton> > aGroup; + for (auto aI = m_xGroup->begin(), aEnd = m_xGroup->end(); aI != aEnd; ++aI) { RadioButton *pRadioButton = *aI; if (pRadioButton == this) @@ -2207,7 +2208,7 @@ std::vector< RadioButton* > RadioButton::GetRadioButtonGroup(bool bIncludeThis) else break; } - std::vector< RadioButton* > aGroup; + std::vector< VclPtr<RadioButton> > aGroup; // insert radiobuttons up to next group do { @@ -2226,9 +2227,9 @@ void RadioButton::ImplUncheckAllOther() { mpWindowImpl->mnStyle |= WB_TABSTOP; - std::vector<RadioButton*> aGroup(GetRadioButtonGroup(false)); + std::vector<VclPtr<RadioButton> > aGroup(GetRadioButtonGroup(false)); // iterate over radio button group and checked buttons - for (std::vector<RadioButton*>::iterator aI = aGroup.begin(), aEnd = aGroup.end(); aI != aEnd; ++aI) + for (auto aI = aGroup.begin(), aEnd = aGroup.end(); aI != aEnd; ++aI) { RadioButton *pWindow = *aI; if ( pWindow->IsChecked() ) @@ -2305,11 +2306,18 @@ void RadioButton::ImplLoadRes( const ResId& rResId ) RadioButton::~RadioButton() { + disposeOnce(); +} + +void RadioButton::dispose() +{ if (m_xGroup) { - m_xGroup->erase(std::remove(m_xGroup->begin(), m_xGroup->end(), this), - m_xGroup->end()); + m_xGroup->erase(std::remove(m_xGroup->begin(), m_xGroup->end(), VclPtr<RadioButton>(this)), + m_xGroup->end()); + m_xGroup.reset(); } + Button::dispose(); } void RadioButton::MouseButtonDown( const MouseEvent& rMEvt ) @@ -3753,10 +3761,6 @@ ImageButton::ImageButton( vcl::Window* pParent, const ResId& rResId ) : ImplInitStyle(); } -ImageButton::~ImageButton() -{ -} - void ImageButton::ImplInitStyle() { WinBits nStyle = GetStyle(); @@ -3775,20 +3779,12 @@ ImageRadioButton::ImageRadioButton( vcl::Window* pParent, WinBits nStyle ) : { } -ImageRadioButton::~ImageRadioButton() -{ -} - TriStateBox::TriStateBox( vcl::Window* pParent, WinBits nStyle ) : CheckBox( pParent, nStyle ) { EnableTriState( true ); } -TriStateBox::~TriStateBox() -{ -} - DisclosureButton::DisclosureButton( vcl::Window* pParent, WinBits nStyle ) : CheckBox( pParent, nStyle ) { |