diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-04-12 11:47:05 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-04-12 14:54:00 +0200 |
commit | 73e7db91ba006dc9333767de18df2c5057376183 (patch) | |
tree | 6ccb5d3a8059f2f3b0c7f83291d3bd92da8b7806 /sc/source/ui/miscdlgs/solvrdlg.cxx | |
parent | dd5fbb68ebaa8b8be8b6a4a97a8aedbf22d5714f (diff) |
weld ScSolverDlg
Change-Id: I35fa2f63eb47f18289892ffcf042d041752bfbd7
Reviewed-on: https://gerrit.libreoffice.org/70653
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc/source/ui/miscdlgs/solvrdlg.cxx')
-rw-r--r-- | sc/source/ui/miscdlgs/solvrdlg.cxx | 191 |
1 files changed, 99 insertions, 92 deletions
diff --git a/sc/source/ui/miscdlgs/solvrdlg.cxx b/sc/source/ui/miscdlgs/solvrdlg.cxx index 6bc2fff92818..55cfb6626dc0 100644 --- a/sc/source/ui/miscdlgs/solvrdlg.cxx +++ b/sc/source/ui/miscdlgs/solvrdlg.cxx @@ -42,86 +42,75 @@ namespace } } -ScSolverDlg::ScSolverDlg( SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent, +ScSolverDlg::ScSolverDlg( SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent, ScDocument* pDocument, const ScAddress& aCursorPos ) - : ScAnyRefDlg(pB, pCW, pParent, "GoalSeekDialog", "modules/scalc/ui/goalseekdlg.ui") + : ScAnyRefDlgController(pB, pCW, pParent, "modules/scalc/ui/goalseekdlg.ui", "GoalSeekDialog") , theFormulaCell(aCursorPos) , theVariableCell(aCursorPos) , pDoc(pDocument) , nCurTab(aCursorPos.Tab()) - , pEdActive(nullptr) , bDlgLostFocus(false) , errMsgInvalidVar(ScResId(STR_INVALIDVAR)) , errMsgInvalidForm(ScResId(STR_INVALIDFORM)) , errMsgNoFormula(ScResId(STR_NOFORMULA)) , errMsgInvalidVal(ScResId(STR_INVALIDVAL)) + , m_pEdActive(nullptr) + , m_xFtFormulaCell(m_xBuilder->weld_label("formulatext")) + , m_xEdFormulaCell(new formula::WeldRefEdit(m_xBuilder->weld_entry("formulaedit"))) + , m_xRBFormulaCell(new formula::WeldRefButton(m_xBuilder->weld_button("formulabutton"))) + , m_xEdTargetVal(m_xBuilder->weld_entry("target")) + , m_xFtVariableCell(m_xBuilder->weld_label("vartext")) + , m_xEdVariableCell(new formula::WeldRefEdit(m_xBuilder->weld_entry("varedit"))) + , m_xRBVariableCell(new formula::WeldRefButton(m_xBuilder->weld_button("varbutton"))) + , m_xBtnOk(m_xBuilder->weld_button("ok")) + , m_xBtnCancel(m_xBuilder->weld_button("cancel")) { - get(m_pFtFormulaCell, "formulatext"); - get(m_pEdFormulaCell, "formulaedit"); - m_pEdFormulaCell->SetReferences(this, m_pFtFormulaCell); - get(m_pRBFormulaCell, "formulabutton"); - m_pRBFormulaCell->SetReferences(this, m_pEdFormulaCell); - get(m_pEdTargetVal, "target"); - get(m_pFtVariableCell, "vartext"); - get(m_pEdVariableCell, "varedit"); - m_pEdVariableCell->SetReferences(this, m_pFtVariableCell); - get(m_pRBVariableCell, "varbutton"); - m_pRBVariableCell->SetReferences(this, m_pEdVariableCell); - get(m_pBtnOk, "ok"); - get(m_pBtnCancel, "cancel"); + m_xEdFormulaCell->SetReferences(this, m_xFtFormulaCell.get()); + m_xRBFormulaCell->SetReferences(this, m_xEdFormulaCell.get()); + m_xEdVariableCell->SetReferences(this, m_xFtVariableCell.get()); + m_xRBVariableCell->SetReferences(this, m_xEdVariableCell.get()); Init(); } ScSolverDlg::~ScSolverDlg() { - disposeOnce(); -} - -void ScSolverDlg::dispose() -{ - m_pFtFormulaCell.clear(); - m_pEdFormulaCell.clear(); - m_pRBFormulaCell.clear(); - m_pEdTargetVal.clear(); - m_pFtVariableCell.clear(); - m_pEdVariableCell.clear(); - m_pRBVariableCell.clear(); - m_pBtnOk.clear(); - m_pBtnCancel.clear(); - pEdActive.clear(); - ScAnyRefDlg::dispose(); } void ScSolverDlg::Init() { - m_pBtnOk->SetClickHdl( LINK( this, ScSolverDlg, BtnHdl ) ); - m_pBtnCancel->SetClickHdl( LINK( this, ScSolverDlg, BtnHdl ) ); - - Link<Control&,void> aLink = LINK( this, ScSolverDlg, GetFocusHdl ); - m_pEdFormulaCell->SetGetFocusHdl( aLink ); - m_pRBFormulaCell->SetGetFocusHdl( aLink ); - m_pEdVariableCell->SetGetFocusHdl( aLink ); - m_pRBVariableCell->SetGetFocusHdl( aLink ); - m_pEdTargetVal->SetGetFocusHdl( aLink ); - - aLink = LINK( this, ScSolverDlg, LoseFocusHdl ); - m_pEdFormulaCell->SetLoseFocusHdl ( aLink ); - m_pRBFormulaCell->SetLoseFocusHdl ( aLink ); - m_pEdVariableCell->SetLoseFocusHdl ( aLink ); - m_pRBVariableCell->SetLoseFocusHdl ( aLink ); + m_xBtnOk->connect_clicked( LINK( this, ScSolverDlg, BtnHdl ) ); + m_xBtnCancel->connect_clicked( LINK( this, ScSolverDlg, BtnHdl ) ); + + Link<formula::WeldRefEdit&,void> aEditLink = LINK( this, ScSolverDlg, GetEditFocusHdl ); + m_xEdFormulaCell->SetGetFocusHdl( aEditLink ); + m_xEdVariableCell->SetGetFocusHdl( aEditLink ); + + Link<formula::WeldRefButton&,void> aButtonLink = LINK( this, ScSolverDlg, GetButtonFocusHdl ); + m_xRBFormulaCell->SetGetFocusHdl( aButtonLink ); + m_xRBVariableCell->SetGetFocusHdl( aButtonLink ); + + m_xEdTargetVal->connect_focus_in(LINK(this, ScSolverDlg, GetFocusHdl)); + + aEditLink = LINK( this, ScSolverDlg, LoseEditFocusHdl ); + m_xEdFormulaCell->SetLoseFocusHdl ( aEditLink ); + m_xEdVariableCell->SetLoseFocusHdl ( aEditLink ); + + aButtonLink = LINK( this, ScSolverDlg, LoseButtonFocusHdl ); + m_xRBFormulaCell->SetLoseFocusHdl ( aButtonLink ); + m_xRBVariableCell->SetLoseFocusHdl ( aButtonLink ); OUString aStr(theFormulaCell.Format(ScRefFlags::ADDR_ABS, nullptr, pDoc->GetAddressConvention())); - m_pEdFormulaCell->SetText( aStr ); - m_pEdFormulaCell->GrabFocus(); - pEdActive = m_pEdFormulaCell; + m_xEdFormulaCell->SetText( aStr ); + m_xEdFormulaCell->GrabFocus(); + m_pEdActive = m_xEdFormulaCell.get(); } -bool ScSolverDlg::Close() +void ScSolverDlg::Close() { - return DoClose( ScSolverDlgWrapper::GetChildWindowId() ); + DoClose( ScSolverDlgWrapper::GetChildWindowId() ); } void ScSolverDlg::SetActive() @@ -129,22 +118,22 @@ void ScSolverDlg::SetActive() if ( bDlgLostFocus ) { bDlgLostFocus = false; - if( pEdActive ) - pEdActive->GrabFocus(); + if( m_pEdActive ) + m_pEdActive->GrabFocus(); } else { - GrabFocus(); + m_xDialog->grab_focus(); } RefInputDone(); } void ScSolverDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) { - if( pEdActive ) + if( m_pEdActive ) { if ( rRef.aStart != rRef.aEnd ) - RefInputStart(pEdActive); + RefInputStart(m_pEdActive); ScAddress aAdr = rRef.aStart; ScRefFlags nFmt = ( aAdr.Tab() == nCurTab ) @@ -152,11 +141,11 @@ void ScSolverDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) : ScRefFlags::ADDR_ABS_3D; OUString aStr(aAdr.Format(nFmt, pDocP, pDocP->GetAddressConvention())); - pEdActive->SetRefString( aStr ); + m_pEdActive->SetRefString( aStr ); - if ( pEdActive == m_pEdFormulaCell ) + if (m_pEdActive == m_xEdFormulaCell.get()) theFormulaCell = aAdr; - else if ( pEdActive == m_pEdVariableCell ) + else if (m_pEdActive == m_xEdVariableCell.get()) theVariableCell = aAdr; } } @@ -166,30 +155,30 @@ void ScSolverDlg::RaiseError( ScSolverErr eError ) switch ( eError ) { case SOLVERR_NOFORMULA: - lclErrorDialog(GetFrameWeld(), errMsgNoFormula, + lclErrorDialog(m_xDialog.get(), errMsgNoFormula, [this](sal_Int32 /*nResult*/) { - m_pEdFormulaCell->GrabFocus(); + m_xEdFormulaCell->GrabFocus(); }); break; case SOLVERR_INVALID_FORMULA: - lclErrorDialog(GetFrameWeld(), errMsgInvalidForm, + lclErrorDialog(m_xDialog.get(), errMsgInvalidForm, [this](sal_Int32 /*nResult*/) { - m_pEdFormulaCell->GrabFocus(); + m_xEdFormulaCell->GrabFocus(); }); break; case SOLVERR_INVALID_VARIABLE: - lclErrorDialog(GetFrameWeld(), errMsgInvalidVar, + lclErrorDialog(m_xDialog.get(), errMsgInvalidVar, [this](sal_Int32 /*nResult*/) { - m_pEdVariableCell->GrabFocus(); + m_xEdVariableCell->GrabFocus(); }); break; case SOLVERR_INVALID_TARGETVALUE: - lclErrorDialog(GetFrameWeld(), errMsgInvalidVal, + lclErrorDialog(m_xDialog.get(), errMsgInvalidVal, [this](sal_Int32 /*nResult*/) { - m_pEdTargetVal->GrabFocus(); + m_xEdTargetVal->grab_focus(); }); break; } @@ -197,7 +186,7 @@ void ScSolverDlg::RaiseError( ScSolverErr eError ) bool ScSolverDlg::IsRefInputMode() const { - return pEdActive != nullptr; + return m_pEdActive != nullptr; } bool ScSolverDlg::CheckTargetValue( const OUString& rStrVal ) @@ -210,11 +199,11 @@ bool ScSolverDlg::CheckTargetValue( const OUString& rStrVal ) // Handler: -IMPL_LINK( ScSolverDlg, BtnHdl, Button*, pBtn, void ) +IMPL_LINK(ScSolverDlg, BtnHdl, weld::Button&, rBtn, void) { - if (pBtn == m_pBtnOk) + if (&rBtn == m_xBtnOk.get()) { - theTargetValStr = m_pEdTargetVal->GetText(); + theTargetValStr = m_xEdTargetVal->get_text(); // The following code checks: // 1. do the strings contain correct references / defined names? @@ -222,8 +211,8 @@ IMPL_LINK( ScSolverDlg, BtnHdl, Button*, pBtn, void ) // 3. has a valid target value been entered? const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); - ScRefFlags nRes1 = theFormulaCell .Parse( m_pEdFormulaCell->GetText(), pDoc, eConv ); - ScRefFlags nRes2 = theVariableCell.Parse( m_pEdVariableCell->GetText(), pDoc, eConv ); + ScRefFlags nRes1 = theFormulaCell .Parse( m_xEdFormulaCell->GetText(), pDoc, eConv ); + ScRefFlags nRes2 = theVariableCell.Parse( m_xEdVariableCell->GetText(), pDoc, eConv ); if ( (nRes1 & ScRefFlags::VALID) == ScRefFlags::VALID ) { @@ -250,7 +239,7 @@ IMPL_LINK( ScSolverDlg, BtnHdl, Button*, pBtn, void ) GetBindings().GetDispatcher()->ExecuteList(SID_SOLVE, SfxCallMode::SLOT | SfxCallMode::RECORD, { &aOutItem }); - Close(); + response(RET_OK); } else RaiseError( SOLVERR_NOFORMULA ); } @@ -260,31 +249,49 @@ IMPL_LINK( ScSolverDlg, BtnHdl, Button*, pBtn, void ) } else RaiseError( SOLVERR_INVALID_FORMULA ); } - else if (pBtn == m_pBtnCancel) + else if (&rBtn == m_xBtnCancel.get()) { - Close(); + response(RET_CANCEL); } } -IMPL_LINK( ScSolverDlg, GetFocusHdl, Control&, rCtrl, void ) +IMPL_LINK(ScSolverDlg, GetEditFocusHdl, formula::WeldRefEdit&, rCtrl, void) +{ + if (&rCtrl == m_xEdFormulaCell.get()) + m_pEdActive = m_xEdFormulaCell.get(); + else if (&rCtrl == m_xEdVariableCell.get()) + m_pEdActive = m_xEdVariableCell.get(); + + if (m_pEdActive) + m_pEdActive->SelectAll(); +} + +IMPL_LINK_NOARG(ScSolverDlg, GetFocusHdl, weld::Widget&, void) +{ + m_pEdActive = nullptr; + m_xEdTargetVal->select_region(0, -1); +} + +IMPL_LINK(ScSolverDlg, GetButtonFocusHdl, formula::WeldRefButton&, rCtrl, void) { - Edit* pEdit = nullptr; - pEdActive = nullptr; - - if( (&rCtrl == static_cast<Control*>(m_pEdFormulaCell)) || (&rCtrl == static_cast<Control*>(m_pRBFormulaCell)) ) - pEdit = pEdActive = m_pEdFormulaCell; - else if( (&rCtrl == static_cast<Control*>(m_pEdVariableCell)) || (&rCtrl == static_cast<Control*>(m_pRBVariableCell)) ) - pEdit = pEdActive = m_pEdVariableCell; - else if( &rCtrl == static_cast<Control*>(m_pEdTargetVal) ) - pEdit = m_pEdTargetVal; - - if( pEdit ) - pEdit->SetSelection( Selection( 0, SELECTION_MAX ) ); + if (&rCtrl == m_xRBFormulaCell.get()) + m_pEdActive = m_xEdFormulaCell.get(); + else if (&rCtrl == m_xRBVariableCell.get()) + m_pEdActive = m_xEdVariableCell.get(); + + if (m_pEdActive) + m_pEdActive->SelectAll(); } -IMPL_LINK_NOARG(ScSolverDlg, LoseFocusHdl, Control&, void) +IMPL_LINK_NOARG(ScSolverDlg, LoseEditFocusHdl, formula::WeldRefEdit&, void) { - bDlgLostFocus = !IsActive(); + bDlgLostFocus = !m_xDialog->has_toplevel_focus(); } +IMPL_LINK_NOARG(ScSolverDlg, LoseButtonFocusHdl, formula::WeldRefButton&, void) +{ + bDlgLostFocus = !m_xDialog->has_toplevel_focus(); +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |