diff options
Diffstat (limited to 'vcl/source/edit/vclmedit.cxx')
-rw-r--r-- | vcl/source/edit/vclmedit.cxx | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx index dd46cdad48fd..cc3a5898cab7 100644 --- a/vcl/source/edit/vclmedit.cxx +++ b/vcl/source/edit/vclmedit.cxx @@ -47,7 +47,8 @@ private: public: TextWindow( vcl::Window* pParent ); - virtual ~TextWindow(); + virtual ~TextWindow(); + virtual void dispose() SAL_OVERRIDE; ExtTextEngine* GetTextEngine() const { return mpExtTextEngine; } ExtTextView* GetTextView() const { return mpExtTextView; } @@ -75,12 +76,12 @@ public: class ImpVclMEdit : public SfxListener { private: - VclMultiLineEdit* pVclMultiLineEdit; + VclPtr<VclMultiLineEdit> pVclMultiLineEdit; - TextWindow* mpTextWindow; - ScrollBar* mpHScrollBar; - ScrollBar* mpVScrollBar; - ScrollBarBox* mpScrollBox; + VclPtr<TextWindow> mpTextWindow; + VclPtr<ScrollBar> mpHScrollBar; + VclPtr<ScrollBar> mpVScrollBar; + VclPtr<ScrollBarBox> mpScrollBox; Point maTextWindowOffset; sal_Int32 mnTextWidth; @@ -152,7 +153,7 @@ ImpVclMEdit::ImpVclMEdit( VclMultiLineEdit* pEdt, WinBits nWinStyle ) { pVclMultiLineEdit = pEdt; mnTextWidth = 0; - mpTextWindow = new TextWindow( pEdt ); + mpTextWindow = VclPtr<TextWindow>::Create( pEdt ); mpTextWindow->Show(); InitFromStyle( nWinStyle ); StartListening( *mpTextWindow->GetTextEngine() ); @@ -160,9 +161,9 @@ ImpVclMEdit::ImpVclMEdit( VclMultiLineEdit* pEdt, WinBits nWinStyle ) void ImpVclMEdit::ImpUpdateSrollBarVis( WinBits nWinStyle ) { - const bool bHaveVScroll = (NULL != mpVScrollBar); - const bool bHaveHScroll = (NULL != mpHScrollBar); - const bool bHaveScrollBox = (NULL != mpScrollBox); + const bool bHaveVScroll = (nullptr != mpVScrollBar); + const bool bHaveHScroll = (nullptr != mpHScrollBar); + const bool bHaveScrollBox = (nullptr != mpScrollBox); bool bNeedVScroll = ( nWinStyle & WB_VSCROLL ) == WB_VSCROLL; const bool bNeedHScroll = ( nWinStyle & WB_HSCROLL ) == WB_HSCROLL; @@ -183,8 +184,8 @@ void ImpVclMEdit::ImpUpdateSrollBarVis( WinBits nWinStyle ) bool bScrollbarsChanged = false; if ( bHaveVScroll != bNeedVScroll ) { - delete mpVScrollBar; - mpVScrollBar = bNeedVScroll ? new ScrollBar( pVclMultiLineEdit, WB_VSCROLL|WB_DRAG ) : NULL; + mpVScrollBar.disposeAndClear(); + mpVScrollBar = bNeedVScroll ? VclPtr<ScrollBar>::Create( pVclMultiLineEdit, WB_VSCROLL|WB_DRAG ) : nullptr; if ( bNeedVScroll ) { @@ -197,8 +198,8 @@ void ImpVclMEdit::ImpUpdateSrollBarVis( WinBits nWinStyle ) if ( bHaveHScroll != bNeedHScroll ) { - delete mpHScrollBar; - mpHScrollBar = bNeedHScroll ? new ScrollBar( pVclMultiLineEdit, WB_HSCROLL|WB_DRAG ) : NULL; + mpHScrollBar.disposeAndClear(); + mpHScrollBar = bNeedHScroll ? VclPtr<ScrollBar>::Create( pVclMultiLineEdit, WB_HSCROLL|WB_DRAG ) : nullptr; if ( bNeedHScroll ) { @@ -211,8 +212,8 @@ void ImpVclMEdit::ImpUpdateSrollBarVis( WinBits nWinStyle ) if ( bHaveScrollBox != bNeedScrollBox ) { - delete mpScrollBox; - mpScrollBox = bNeedScrollBox ? new ScrollBarBox( pVclMultiLineEdit, WB_SIZEABLE ) : NULL; + mpScrollBox.disposeAndClear(); + mpScrollBox = bNeedScrollBox ? VclPtr<ScrollBarBox>::Create( pVclMultiLineEdit, WB_SIZEABLE ) : nullptr; if ( bNeedScrollBox ) mpScrollBox->Show(); @@ -257,10 +258,11 @@ void ImpVclMEdit::InitFromStyle( WinBits nWinStyle ) ImpVclMEdit::~ImpVclMEdit() { EndListening( *mpTextWindow->GetTextEngine() ); - delete mpTextWindow; - delete mpHScrollBar; - delete mpVScrollBar; - delete mpScrollBox; + mpTextWindow.disposeAndClear(); + mpHScrollBar.disposeAndClear(); + mpVScrollBar.disposeAndClear(); + mpScrollBox.disposeAndClear(); + pVclMultiLineEdit.disposeAndClear(); } void ImpVclMEdit::ImpSetScrollBarRanges() @@ -730,8 +732,14 @@ TextWindow::TextWindow( vcl::Window* pParent ) : Window( pParent ) TextWindow::~TextWindow() { + disposeOnce(); +} + +void TextWindow::dispose() +{ delete mpExtTextView; delete mpExtTextEngine; + Window::dispose(); } void TextWindow::MouseMove( const MouseEvent& rMEvt ) @@ -937,11 +945,19 @@ VclMultiLineEdit::VclMultiLineEdit( vcl::Window* pParent, WinBits nWinStyle ) VclMultiLineEdit::~VclMultiLineEdit() { + disposeOnce(); +} + +void VclMultiLineEdit::dispose() +{ { std::unique_ptr< ImpVclMEdit > xDelete(pImpVclMEdit); pImpVclMEdit = NULL; } delete pUpdateDataTimer; + pUpdateDataTimer = NULL; + + Edit::dispose(); } WinBits VclMultiLineEdit::ImplInitStyle( WinBits nStyle ) @@ -1145,17 +1161,17 @@ void VclMultiLineEdit::SetText( const OUString& rStr ) OUString VclMultiLineEdit::GetText() const { - return pImpVclMEdit->GetText(); + return pImpVclMEdit ? pImpVclMEdit->GetText() : OUString(""); } OUString VclMultiLineEdit::GetText( LineEnd aSeparator ) const { - return pImpVclMEdit->GetText( aSeparator ); + return pImpVclMEdit ? pImpVclMEdit->GetText( aSeparator ) : OUString(""); } -OUString VclMultiLineEdit::GetTextLines( LineEnd aSeparator ) const +OUString VclMultiLineEdit::GetTextLines( LineEnd aSeparator ) const { - return pImpVclMEdit->GetTextLines( aSeparator ); + return pImpVclMEdit ? pImpVclMEdit->GetTextLines( aSeparator ) : OUString(""); } void VclMultiLineEdit::Resize() |