summaryrefslogtreecommitdiff
path: root/sc/source/ui/app/inputwin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/app/inputwin.cxx')
-rw-r--r--sc/source/ui/app/inputwin.cxx175
1 files changed, 104 insertions, 71 deletions
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index f5dd784bc22e..95bd92d64358 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -124,7 +124,7 @@ ScInputWindowWrapper::ScInputWindowWrapper( vcl::Window* pParentP,
SfxChildWinInfo* /* pInfo */ )
: SfxChildWindow( pParentP, nId )
{
- ScInputWindow* pWin=new ScInputWindow( pParentP, pBindings );
+ VclPtr<ScInputWindow> pWin=VclPtr<ScInputWindow>::Create( pParentP, pBindings );
pWindow = pWin;
pWin->Show();
@@ -154,7 +154,7 @@ static inline bool lcl_isExperimentalMode()
// class ScInputWindow
-static ScTextWndBase* lcl_chooseRuntimeImpl( vcl::Window* pParent, SfxBindings* pBind )
+static VclPtr<ScTextWndBase> lcl_chooseRuntimeImpl( vcl::Window* pParent, SfxBindings* pBind )
{
ScTabViewShell* pViewSh = NULL;
SfxDispatcher* pDisp = pBind->GetDispatcher();
@@ -166,16 +166,16 @@ static ScTextWndBase* lcl_chooseRuntimeImpl( vcl::Window* pParent, SfxBindings*
}
if ( !lcl_isExperimentalMode() )
- return new ScTextWnd( pParent, pViewSh );
- return new ScInputBarGroup( pParent, pViewSh );
+ return VclPtr<ScTextWnd>::Create( pParent, pViewSh );
+ return VclPtr<ScInputBarGroup>::Create( pParent, pViewSh );
}
ScInputWindow::ScInputWindow( vcl::Window* pParent, SfxBindings* pBind ) :
// With WB_CLIPCHILDREN otherwise we get flickering
ToolBox ( pParent, WinBits(WB_CLIPCHILDREN) ),
- aWndPos ( this ),
- pRuntimeWindow ( lcl_chooseRuntimeImpl( this, pBind ) ),
- aTextWindow ( *pRuntimeWindow ),
+ aWndPos ( VclPtr<ScPosWnd>::Create(this) ),
+ pRuntimeWindow ( lcl_chooseRuntimeImpl( this, pBind ) ),
+ aTextWindow ( *pRuntimeWindow ),
pInputHdl ( NULL ),
aTextOk ( ScResId( SCSTR_QHELP_BTNOK ) ), // Not always new as a Resource
aTextCancel ( ScResId( SCSTR_QHELP_BTNCANCEL ) ),
@@ -202,7 +202,7 @@ ScInputWindow::ScInputWindow( vcl::Window* pParent, SfxBindings* pBind ) :
OSL_ENSURE( pViewSh, "no view shell for input window" );
// Position window, 3 buttons, input window
- InsertWindow ( 1, &aWndPos, ToolBoxItemBits::NONE, 0 );
+ InsertWindow ( 1, aWndPos.get(), ToolBoxItemBits::NONE, 0 );
InsertSeparator ( 1 );
InsertItem ( SID_INPUT_FUNCTION, IMAGE( SID_INPUT_FUNCTION ), ToolBoxItemBits::NONE, 2 );
InsertItem ( SID_INPUT_SUM, IMAGE( SID_INPUT_SUM ), ToolBoxItemBits::NONE, 3 );
@@ -210,8 +210,8 @@ ScInputWindow::ScInputWindow( vcl::Window* pParent, SfxBindings* pBind ) :
InsertSeparator ( 5 );
InsertWindow ( 7, &aTextWindow, ToolBoxItemBits::NONE, 6 );
- aWndPos .SetQuickHelpText( ScResId( SCSTR_QHELP_POSWND ) );
- aWndPos .SetHelpId ( HID_INSWIN_POS );
+ aWndPos ->SetQuickHelpText( ScResId( SCSTR_QHELP_POSWND ) );
+ aWndPos ->SetHelpId ( HID_INSWIN_POS );
aTextWindow.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
aTextWindow.SetHelpId ( HID_INSWIN_INPUT );
@@ -227,7 +227,7 @@ ScInputWindow::ScInputWindow( vcl::Window* pParent, SfxBindings* pBind ) :
SetHelpId( HID_SC_INPUTWIN ); // For the whole input row
- aWndPos .Show();
+ aWndPos ->Show();
aTextWindow.Show();
pInputHdl = SC_MOD()->GetInputHdl( pViewSh, false ); // use own handler even if ref-handler is set
@@ -259,6 +259,11 @@ ScInputWindow::ScInputWindow( vcl::Window* pParent, SfxBindings* pBind ) :
ScInputWindow::~ScInputWindow()
{
+ disposeOnce();
+}
+
+void ScInputWindow::dispose()
+{
bool bDown = ( ScGlobal::pSysLocale == NULL ); // after Clear?
// if any view's input handler has a pointer to this input window, reset it
@@ -282,6 +287,11 @@ ScInputWindow::~ScInputWindow()
}
SfxImageManager::GetImageManager( *SC_MOD() )->ReleaseToolBox( this );
+
+ pRuntimeWindow.disposeAndClear();
+ aWndPos.disposeAndClear();
+
+ ToolBox::dispose();
}
void ScInputWindow::SetInputHandler( ScInputHandler* pNew )
@@ -630,7 +640,7 @@ void ScInputWindow::SetFuncString( const OUString& rString, bool bDoEdit )
void ScInputWindow::SetPosString( const OUString& rStr )
{
- aWndPos.SetPos( rStr );
+ aWndPos->SetPos( rStr );
}
void ScInputWindow::SetTextString( const OUString& rString )
@@ -690,7 +700,7 @@ void ScInputWindow::SetSumAssignMode()
void ScInputWindow::SetFormulaMode( bool bSet )
{
- aWndPos.SetFormulaMode(bSet);
+ aWndPos->SetFormulaMode(bSet);
aTextWindow.SetFormulaMode(bSet);
}
@@ -755,7 +765,7 @@ void ScInputWindow::SwitchToTextWin()
void ScInputWindow::PosGrabFocus()
{
- aWndPos.GrabFocus();
+ aWndPos->GrabFocus();
}
void ScInputWindow::EnableButtons( bool bEnable )
@@ -897,54 +907,62 @@ void ScInputWindow::MouseButtonUp( const MouseEvent& rMEvt )
ScInputBarGroup::ScInputBarGroup(vcl::Window* pParent, ScTabViewShell* pViewSh)
: ScTextWndBase ( pParent, WinBits(WB_HIDE | WB_TABSTOP ) ),
- aMultiTextWnd ( this, pViewSh ),
- aButton ( this, WB_TABSTOP | WB_RECTSTYLE | WB_SMALLSTYLE ),
- aScrollBar ( this, WB_TABSTOP | WB_VERT | WB_DRAG ),
+ aMultiTextWnd ( VclPtr<ScMultiTextWnd>::Create(this, pViewSh) ),
+ aButton ( VclPtr<ImageButton>::Create(this, WB_TABSTOP | WB_RECTSTYLE | WB_SMALLSTYLE) ),
+ aScrollBar ( VclPtr<ScrollBar>::Create(this, WB_TABSTOP | WB_VERT | WB_DRAG) ),
nVertOffset ( 0 )
{
- aMultiTextWnd.Show();
- aMultiTextWnd.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
- aMultiTextWnd.SetHelpId( HID_INSWIN_INPUT );
+ aMultiTextWnd->Show();
+ aMultiTextWnd->SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
+ aMultiTextWnd->SetHelpId( HID_INSWIN_INPUT );
- Size aSize( GetSettings().GetStyleSettings().GetScrollBarSize(), aMultiTextWnd.GetPixelHeightForLines(1) );
+ Size aSize( GetSettings().GetStyleSettings().GetScrollBarSize(), aMultiTextWnd->GetPixelHeightForLines(1) );
- aButton.SetClickHdl( LINK( this, ScInputBarGroup, ClickHdl ) );
- aButton.SetSizePixel( aSize );
- aButton.Enable();
- aButton.SetSymbol( SymbolType::SPIN_DOWN );
- aButton.SetQuickHelpText( ScResId( SCSTR_QHELP_EXPAND_FORMULA ) );
- aButton.Show();
+ aButton->SetClickHdl( LINK( this, ScInputBarGroup, ClickHdl ) );
+ aButton->SetSizePixel( aSize );
+ aButton->Enable();
+ aButton->SetSymbol( SymbolType::SPIN_DOWN );
+ aButton->SetQuickHelpText( ScResId( SCSTR_QHELP_EXPAND_FORMULA ) );
+ aButton->Show();
- aScrollBar.SetSizePixel( aSize );
- aScrollBar.SetScrollHdl( LINK( this, ScInputBarGroup, Impl_ScrollHdl ) );
+ aScrollBar->SetSizePixel( aSize );
+ aScrollBar->SetScrollHdl( LINK( this, ScInputBarGroup, Impl_ScrollHdl ) );
}
ScInputBarGroup::~ScInputBarGroup()
{
+ disposeOnce();
+}
+void ScInputBarGroup::dispose()
+{
+ aMultiTextWnd.disposeAndClear();
+ aButton.disposeAndClear();
+ aScrollBar.disposeAndClear();
+ ScTextWndBase::dispose();
}
void
ScInputBarGroup::InsertAccessibleTextData( ScAccessibleEditLineTextData& rTextData )
{
- aMultiTextWnd.InsertAccessibleTextData( rTextData );
+ aMultiTextWnd->InsertAccessibleTextData( rTextData );
}
void
ScInputBarGroup::RemoveAccessibleTextData( ScAccessibleEditLineTextData& rTextData )
{
- aMultiTextWnd.RemoveAccessibleTextData( rTextData );
+ aMultiTextWnd->RemoveAccessibleTextData( rTextData );
}
const OUString&
ScInputBarGroup::GetTextString() const
{
- return aMultiTextWnd.GetTextString();
+ return aMultiTextWnd->GetTextString();
}
void ScInputBarGroup::SetTextString( const OUString& rString )
{
- aMultiTextWnd.SetTextString(rString);
+ aMultiTextWnd->SetTextString(rString);
}
void ScInputBarGroup::Resize()
@@ -965,89 +983,89 @@ void ScInputBarGroup::Resize()
Size aSize = GetSizePixel();
aSize.Width() = std::max( ((long)(nWidth - nLeft - LEFT_OFFSET)), (long)0 );
- aScrollBar.SetPosPixel(Point( aSize.Width() - aButton.GetSizePixel().Width(), aButton.GetSizePixel().Height() ) );
+ aScrollBar->SetPosPixel(Point( aSize.Width() - aButton->GetSizePixel().Width(), aButton->GetSizePixel().Height() ) );
Size aTmpSize( aSize );
- aTmpSize.Width() = aTmpSize.Width() - aButton.GetSizePixel().Width() - BUTTON_OFFSET;
- aMultiTextWnd.SetSizePixel(aTmpSize);
+ aTmpSize.Width() = aTmpSize.Width() - aButton->GetSizePixel().Width() - BUTTON_OFFSET;
+ aMultiTextWnd->SetSizePixel(aTmpSize);
- aMultiTextWnd.Resize();
+ aMultiTextWnd->Resize();
- aSize.Height() = aMultiTextWnd.GetSizePixel().Height();
+ aSize.Height() = aMultiTextWnd->GetSizePixel().Height();
SetSizePixel(aSize);
- if( aMultiTextWnd.GetNumLines() > 1 )
+ if( aMultiTextWnd->GetNumLines() > 1 )
{
- aButton.SetSymbol( SymbolType::SPIN_UP );
- aButton.SetQuickHelpText( ScResId( SCSTR_QHELP_COLLAPSE_FORMULA ) );
- Size scrollSize = aButton.GetSizePixel();
- scrollSize.Height() = aMultiTextWnd.GetSizePixel().Height() - aButton.GetSizePixel().Height();
- aScrollBar.SetSizePixel( scrollSize );
+ aButton->SetSymbol( SymbolType::SPIN_UP );
+ aButton->SetQuickHelpText( ScResId( SCSTR_QHELP_COLLAPSE_FORMULA ) );
+ Size scrollSize = aButton->GetSizePixel();
+ scrollSize.Height() = aMultiTextWnd->GetSizePixel().Height() - aButton->GetSizePixel().Height();
+ aScrollBar->SetSizePixel( scrollSize );
- Size aOutSz = aMultiTextWnd.GetOutputSize();
+ Size aOutSz = aMultiTextWnd->GetOutputSize();
- aScrollBar.SetVisibleSize( aOutSz.Height() );
- aScrollBar.SetPageSize( aOutSz.Height() );
- aScrollBar.SetLineSize( aMultiTextWnd.GetTextHeight() );
- aScrollBar.SetRange( Range( 0, aMultiTextWnd.GetEditEngTxtHeight() ) );
+ aScrollBar->SetVisibleSize( aOutSz.Height() );
+ aScrollBar->SetPageSize( aOutSz.Height() );
+ aScrollBar->SetLineSize( aMultiTextWnd->GetTextHeight() );
+ aScrollBar->SetRange( Range( 0, aMultiTextWnd->GetEditEngTxtHeight() ) );
- aScrollBar.Resize();
- aScrollBar.Show();
+ aScrollBar->Resize();
+ aScrollBar->Show();
}
else
{
- aButton.SetSymbol( SymbolType::SPIN_DOWN );
- aButton.SetQuickHelpText( ScResId( SCSTR_QHELP_EXPAND_FORMULA ) );
- aScrollBar.Hide();
+ aButton->SetSymbol( SymbolType::SPIN_DOWN );
+ aButton->SetQuickHelpText( ScResId( SCSTR_QHELP_EXPAND_FORMULA ) );
+ aScrollBar->Hide();
}
- aButton.SetPosPixel(Point(aSize.Width() - aButton.GetSizePixel().Width(), 0));
+ aButton->SetPosPixel(Point(aSize.Width() - aButton->GetSizePixel().Width(), 0));
Invalidate();
}
void ScInputBarGroup::StopEditEngine( bool bAll )
{
- aMultiTextWnd.StopEditEngine( bAll );
+ aMultiTextWnd->StopEditEngine( bAll );
}
void ScInputBarGroup::StartEditEngine()
{
- aMultiTextWnd.StartEditEngine();
+ aMultiTextWnd->StartEditEngine();
}
void ScInputBarGroup::MakeDialogEditView()
{
- aMultiTextWnd.MakeDialogEditView();
+ aMultiTextWnd->MakeDialogEditView();
}
EditView* ScInputBarGroup::GetEditView()
{
- return aMultiTextWnd.GetEditView();
+ return aMultiTextWnd->GetEditView();
}
bool ScInputBarGroup::IsInputActive()
{
- return aMultiTextWnd.IsInputActive();
+ return aMultiTextWnd->IsInputActive();
}
void ScInputBarGroup::SetFormulaMode(bool bSet)
{
- aMultiTextWnd.SetFormulaMode(bSet);
+ aMultiTextWnd->SetFormulaMode(bSet);
}
void ScInputBarGroup::IncrementVerticalSize()
{
- aMultiTextWnd.SetNumLines( aMultiTextWnd.GetNumLines() + 1 );
+ aMultiTextWnd->SetNumLines( aMultiTextWnd->GetNumLines() + 1 );
TriggerToolboxLayout();
}
void ScInputBarGroup::DecrementVerticalSize()
{
- if ( aMultiTextWnd.GetNumLines() > 1 )
+ if ( aMultiTextWnd->GetNumLines() > 1 )
{
- aMultiTextWnd.SetNumLines( aMultiTextWnd.GetNumLines() - 1 );
+ aMultiTextWnd->SetNumLines( aMultiTextWnd->GetNumLines() - 1 );
TriggerToolboxLayout();
}
}
@@ -1063,19 +1081,19 @@ IMPL_LINK_NOARG(ScInputBarGroup, ClickHdl)
OSL_FAIL("The parent window pointer pParent is null");
return 1;
}
- if( aMultiTextWnd.GetNumLines() > 1 )
+ if( aMultiTextWnd->GetNumLines() > 1 )
{
- aMultiTextWnd.SetNumLines( 1 );
+ aMultiTextWnd->SetNumLines( 1 );
}
else
{
- aMultiTextWnd.SetNumLines( aMultiTextWnd.GetLastNumExpandedLines() );
+ aMultiTextWnd->SetNumLines( aMultiTextWnd->GetLastNumExpandedLines() );
}
TriggerToolboxLayout();
// Restore focus to input line(s) if necessary
if ( SC_MOD()->GetInputHdl()->IsTopMode() )
- aMultiTextWnd.GrabFocus();
+ aMultiTextWnd->GrabFocus();
return 0;
}
@@ -1104,7 +1122,7 @@ void ScInputBarGroup::TriggerToolboxLayout()
if ( xLayoutManager.is() )
{
- if ( aMultiTextWnd.GetNumLines() > 1)
+ if ( aMultiTextWnd->GetNumLines() > 1)
rParent.SetToolbarLayoutMode( TBX_LAYOUT_LOCKVERT );
else
rParent.SetToolbarLayoutMode( TBX_LAYOUT_NORMAL );
@@ -1132,13 +1150,13 @@ void ScInputBarGroup::TriggerToolboxLayout()
IMPL_LINK_NOARG(ScInputBarGroup, Impl_ScrollHdl)
{
- aMultiTextWnd.DoScroll();
+ aMultiTextWnd->DoScroll();
return 0;
}
void ScInputBarGroup::TextGrabFocus()
{
- aMultiTextWnd.TextGrabFocus();
+ aMultiTextWnd->TextGrabFocus();
}
ScMultiTextWnd::ScMultiTextWnd( ScInputBarGroup* pParen, ScTabViewShell* pViewSh )
@@ -1480,11 +1498,20 @@ ScTextWnd::ScTextWnd( vcl::Window* pParent, ScTabViewShell* pViewSh )
ScTextWnd::~ScTextWnd()
{
+ disposeOnce();
+}
+
+void ScTextWnd::dispose()
+{
while (!maAccTextDatas.empty()) {
maAccTextDatas.back()->Dispose();
}
delete pEditView;
+ pEditView = NULL;
delete pEditEngine;
+ pEditEngine = NULL;
+
+ ScTextWndBase::dispose();
}
void ScTextWnd::Paint( const Rectangle& rRect )
@@ -2068,11 +2095,17 @@ ScPosWnd::ScPosWnd( vcl::Window* pParent ) :
ScPosWnd::~ScPosWnd()
{
+ disposeOnce();
+}
+
+void ScPosWnd::dispose()
+{
EndListening( *SfxGetpApp() );
HideTip();
delete pAccel;
+ ComboBox::dispose();
}
void ScPosWnd::SetFormulaMode( bool bSet )