33#include <unonames.hxx>
42#include <com/sun/star/sheet/SolverConstraint.hpp>
43#include <com/sun/star/sheet/SolverConstraintOperator.hpp>
44#include <com/sun/star/sheet/XSolverDescription.hpp>
45#include <com/sun/star/sheet/XSolver.hpp>
50 : GenericDialogController(pParent,
"modules/scalc/ui/solverprogressdialog.ui",
51 "SolverProgressDialog")
52 , m_xFtTime(m_xBuilder->weld_label(
"progress"))
68 OUString aNew = aOld.replaceFirst(
"#", OUString::number(nSeconds));
73 : GenericDialogController(pParent,
"modules/scalc/ui/nosolutiondialog.ui",
"NoSolutionDialog")
74 , m_xFtErrorText(m_xBuilder->weld_label(
"error"))
84 : GenericDialogController(pParent,
"modules/scalc/ui/solversuccessdialog.ui",
"SolverSuccessDialog")
85 , m_xFtResult(m_xBuilder->weld_label(
"result"))
86 , m_xBtnOk(m_xBuilder->weld_button(
"ok"))
87 , m_xBtnCancel(m_xBuilder->weld_button(
"cancel"))
91 OUString aMessage =
m_xFtResult->get_label() +
" " + rSolution;
101 if (&rBtn == m_xBtnOk.get())
128 maCursorUpLink.Call( *
this );
130 maCursorDownLink.Call( *
this );
139 , maInputError(
ScResId(STR_INVALIDINPUT))
140 , maConditionError(
ScResId(STR_INVALIDCONDITION))
143 , mrDoc(pDocSh->GetDocument())
144 , mnCurTab(aCursorPos.
Tab())
145 , mbDlgLostFocus(false)
147 , mpEdActive(nullptr)
148 , m_xFtObjectiveCell(m_xBuilder->weld_label(
"targetlabel"))
149 , m_xEdObjectiveCell(new
formula::RefEdit(m_xBuilder->weld_entry(
"targetedit")))
150 , m_xRBObjectiveCell(new
formula::RefButton(m_xBuilder->weld_button(
"targetbutton")))
151 , m_xRbMax(m_xBuilder->weld_radio_button(
"max"))
152 , m_xRbMin(m_xBuilder->weld_radio_button(
"min"))
153 , m_xRbValue(m_xBuilder->weld_radio_button(
"value"))
154 , m_xEdTargetValue(new
formula::RefEdit(m_xBuilder->weld_entry(
"valueedit")))
155 , m_xRBTargetValue(new
formula::RefButton(m_xBuilder->weld_button(
"valuebutton")))
156 , m_xFtVariableCells(m_xBuilder->weld_label(
"changelabel"))
157 , m_xEdVariableCells(new
formula::RefEdit(m_xBuilder->weld_entry(
"changeedit")))
158 , m_xRBVariableCells(new
formula::RefButton(m_xBuilder->weld_button(
"changebutton")))
159 , m_xFtCellRef(m_xBuilder->weld_label(
"cellreflabel"))
161 , m_xRBLeft1(new
formula::RefButton(m_xBuilder->weld_button(
"ref1button")))
162 , m_xLbOp1(m_xBuilder->weld_combo_box(
"op1list"))
163 , m_xFtConstraint(m_xBuilder->weld_label(
"constraintlabel"))
165 , m_xRBRight1(new
formula::RefButton(m_xBuilder->weld_button(
"val1button")))
166 , m_xBtnDel1(m_xBuilder->weld_button(
"del1"))
168 , m_xRBLeft2(new
formula::RefButton(m_xBuilder->weld_button(
"ref2button")))
169 , m_xLbOp2(m_xBuilder->weld_combo_box(
"op2list"))
171 , m_xRBRight2(new
formula::RefButton(m_xBuilder->weld_button(
"val2button")))
172 , m_xBtnDel2(m_xBuilder->weld_button(
"del2"))
174 , m_xRBLeft3(new
formula::RefButton(m_xBuilder->weld_button(
"ref3button")))
175 , m_xLbOp3(m_xBuilder->weld_combo_box(
"op3list"))
177 , m_xRBRight3(new
formula::RefButton(m_xBuilder->weld_button(
"val3button")))
178 , m_xBtnDel3(m_xBuilder->weld_button(
"del3"))
180 , m_xRBLeft4(new
formula::RefButton(m_xBuilder->weld_button(
"ref4button")))
181 , m_xLbOp4(m_xBuilder->weld_combo_box(
"op4list"))
183 , m_xRBRight4(new
formula::RefButton(m_xBuilder->weld_button(
"val4button")))
184 , m_xBtnDel4(m_xBuilder->weld_button(
"del4"))
185 , m_xScrollBar(m_xBuilder->weld_scrolled_window(
"scrollbar", true))
186 , m_xBtnOpt(m_xBuilder->weld_button(
"options"))
187 , m_xBtnClose(m_xBuilder->weld_button(
"close"))
188 , m_xBtnSolve(m_xBuilder->weld_button(
"ok"))
189 , m_xBtnResetAll(m_xBuilder->weld_button(
"resetall"))
190 , m_xResultFT(m_xBuilder->weld_label(
"result"))
191 , m_xContents(m_xBuilder->weld_widget(
"grid"))
192 , m_pSolverSettings(mrDoc.FetchTable(mnCurTab)->GetSolverSettings())
257 pButton->set_image(xDelNm);
404 DoClose( ScOptSolverDlgWrapper::GetChildWindowId() );
457 aVal = aVal.replaceAt( aSel.
Min(), aSel.
Len(),
aStr );
550 auto xKeepAlive = shared_from_this();
551 if (&rBtn == m_xBtnSolve.get() || &rBtn == m_xBtnClose.get())
553 bool bSolve = ( &rBtn == m_xBtnSolve.get() );
555 SetDispatcherLock(
false );
560 bClose = CallSolver();
566 SaveSolverSettings();
572 SetDispatcherLock(
true );
575 else if (&rBtn == m_xBtnOpt.get())
578 m_xOptDlg = std::make_shared<ScSolverOptionsDialog>(
m_xDialog.get(), maImplNames, maDescriptions, maEngine,
maProperties);
582 maEngine = m_xOptDlg->GetEngine();
588 else if (&rBtn == m_xBtnResetAll.get())
591 m_xEdObjectiveCell->SetText(
sEmpty);
592 m_xEdTargetValue->SetText(
sEmpty);
593 m_xEdVariableCells->SetText(
sEmpty);
596 maEngine = maImplNames[0];
600 m_aConditions.clear();
603 m_xRbMax->set_active(
true);
604 m_xEdObjectiveCell->GrabFocus();
605 mpEdActive = m_xEdObjectiveCell.get();
612 mpEdActive =
nullptr;
614 if( &rCtrl == m_xEdObjectiveCell.get() )
615 pEdit = mpEdActive = m_xEdObjectiveCell.get();
616 else if( &rCtrl == m_xEdTargetValue.get() )
617 pEdit = mpEdActive = m_xEdTargetValue.get();
618 else if( &rCtrl == m_xEdVariableCells.get() )
619 pEdit = mpEdActive = m_xEdVariableCells.get();
620 for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow )
622 if( &rCtrl == mpLeftEdit[nRow] )
623 pEdit = mpEdActive = mpLeftEdit[nRow];
624 else if( &rCtrl == mpRightEdit[nRow] )
625 pEdit = mpEdActive = mpRightEdit[nRow];
635 mpEdActive =
nullptr;
637 if( &rCtrl == m_xRBObjectiveCell.get() )
638 pEdit = mpEdActive = m_xEdObjectiveCell.get();
639 else if( &rCtrl == m_xRBTargetValue.get() )
640 pEdit = mpEdActive = m_xEdTargetValue.get();
641 else if( &rCtrl == m_xRBVariableCells.get() )
642 pEdit = mpEdActive = m_xEdVariableCells.get();
643 for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow )
645 if( &rCtrl == mpLeftButton[nRow] )
646 pEdit = mpEdActive = mpLeftEdit[nRow];
647 else if( &rCtrl == mpRightButton[nRow] )
648 pEdit = mpEdActive = mpRightEdit[nRow];
658 if( &rCtrl == m_xRbValue.get() )
659 mpEdActive = m_xEdTargetValue.get();
662 for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow )
664 if( &rCtrl == mpOperator[nRow] )
665 mpEdActive = mpRightEdit[nRow];
672 mbDlgLostFocus = !
m_xDialog->has_toplevel_focus();
677 mbDlgLostFocus = !
m_xDialog->has_toplevel_focus();
682 for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow )
683 if (&rBtn == mpDelButton[nRow])
685 bool bHadFocus = rBtn.has_focus();
689 if ( nVecPos <
static_cast<tools::Long>(m_aConditions.size()) )
691 m_aConditions.erase( m_aConditions.begin() + nVecPos );
694 if ( bHadFocus && !rBtn.get_sensitive() )
699 mpEdActive = mpLeftEdit[nRow];
700 mpEdActive->GrabFocus();
710 if ( !m_xEdTargetValue->GetText().isEmpty() )
711 m_xRbValue->set_active(
true);
731 nScrollPos = m_xScrollBar->vadjustment_get_value();
734 mpEdActive->SelectAll();
739 if ( &rEdit == mpLeftEdit[0] || &rEdit == mpRightEdit[0] )
741 if ( nScrollPos > 0 )
747 mpEdActive->SelectAll();
753 for ( sal_uInt16 nRow = 1; nRow < EDIT_ROW_COUNT; ++nRow )
755 if ( &rEdit == mpLeftEdit[nRow] )
756 pFocus = mpLeftEdit[nRow-1];
757 else if ( &rEdit == mpRightEdit[nRow] )
758 pFocus = mpRightEdit[nRow-1];
770 if ( &rEdit == mpLeftEdit[EDIT_ROW_COUNT-1] || &rEdit == mpRightEdit[EDIT_ROW_COUNT-1] )
777 mpEdActive->SelectAll();
782 for ( sal_uInt16 nRow = 0; nRow+1 < EDIT_ROW_COUNT; ++nRow )
784 if ( &rEdit == mpLeftEdit[nRow] )
785 pFocus = mpLeftEdit[nRow+1];
786 else if ( &rEdit == mpRightEdit[nRow] )
787 pFocus = mpRightEdit[nRow+1];
815 VclMessageType::Warning, VclButtonsType::Ok,
835 return ( bAllowRange || rRange.
aStart == rRange.
aEnd );
838 return ( bAllowRange || rRange.
aStart == rRange.
aEnd );
851 for (sal_Int32 nProp=0; nProp<nPropCount && !bFound; ++nProp)
853 const beans::PropertyValue& rValue =
maProperties[nProp];
855 bFound = ( rValue.Value >>= rTimeout );
864 auto xProgress = std::make_shared<ScSolverProgressDialog>(
m_xDialog.get());
865 sal_Int32 nTimeout = 0;
867 xProgress->SetTimeLimit( nTimeout );
869 xProgress->HideTimeLimit();
897 uno::Sequence<table::CellAddress> aVariables;
898 sal_Int32 nVarPos = 0;
900 for (
size_t nRangePos=0, nRange = aVarRanges.
size(); nRangePos < nRange; ++nRangePos )
902 ScRange aRange( aVarRanges[ nRangePos ] );
910 aVariables.realloc( nVarPos + nAdd );
911 auto pVariables = aVariables.getArray();
915 pVariables[nVarPos++] = table::CellAddress( nTab, nCol, nRow );
918 uno::Sequence<sheet::SolverConstraint> aConstraints;
919 sal_Int32 nConstrPos = 0;
922 if ( !rConstr.aLeftStr.isEmpty() )
924 sheet::SolverConstraint aConstraint;
928 aConstraint.Operator =
static_cast<sheet::SolverConstraintOperator
>(rConstr.nOperator - 1);
931 if ( !
ParseRef( aLeftRange, rConstr.aLeftStr,
true ) )
937 bool bIsRange =
false;
939 if (
ParseRef( aRightRange, rConstr.aRightStr,
true ) )
942 aConstraint.Right <<= table::CellAddress( aRightRange.
aStart.
Tab(),
955 sal_uInt32 nFormat = 0;
958 aConstraint.Right <<= fValue;
959 else if ( aConstraint.Operator != sheet::SolverConstraintOperator_INTEGER &&
960 aConstraint.Operator != sheet::SolverConstraintOperator_BINARY )
971 aConstraints.realloc( nConstrPos + nAdd );
972 auto pConstraints = aConstraints.getArray();
977 aConstraint.Left = table::CellAddress( aLeftRange.
aStart.
Tab(), nCol, nRow );
979 aConstraint.Right <<= table::CellAddress( aRightRange.
aStart.
Tab(),
983 pConstraints[nConstrPos++] = aConstraint;
988 bool bMaximize =
m_xRbMax->get_active();
993 sheet::SolverConstraint aConstraint;
994 aConstraint.Left = aObjective;
995 aConstraint.Operator = sheet::SolverConstraintOperator_EQUAL;
999 if (
ParseRef( aRightRange, aValStr,
false ) )
1000 aConstraint.Right <<= table::CellAddress( aRightRange.
aStart.
Tab(),
1004 sal_uInt32 nFormat = 0;
1005 double fValue = 0.0;
1007 aConstraint.Right <<= fValue;
1015 aConstraints.realloc( nConstrPos + 1 );
1016 aConstraints.getArray()[nConstrPos++] = aConstraint;
1021 sal_Int32 nVarCount = aVariables.getLength();
1022 uno::Sequence<double> aOldValues( nVarCount );
1023 std::transform(std::cbegin(aVariables), std::cend(aVariables), aOldValues.getArray(),
1024 [
this](
const table::CellAddress& rVariable) ->
double {
1026 ScUnoConversion::FillScAddress( aCellPos, rVariable );
1027 return mrDoc.GetValue( aCellPos );
1033 OSL_ENSURE( xSolver.is(),
"can't get solver component" );
1034 if ( !xSolver.is() )
1037 xSolver->setDocument( xDocument );
1038 xSolver->setObjective( aObjective );
1039 xSolver->setVariables( aVariables );
1040 xSolver->setConstraints( aConstraints );
1041 xSolver->setMaximize( bMaximize );
1044 uno::Reference<beans::XPropertySet> xOptProp(xSolver, uno::UNO_QUERY);
1045 if ( xOptProp.is() )
1047 for (
const beans::PropertyValue& rValue : std::as_const(
maProperties))
1051 xOptProp->setPropertyValue( rValue.Name, rValue.Value );
1053 catch ( uno::Exception & )
1055 OSL_FAIL(
"Exception in solver option property");
1061 bool bSuccess = xSolver->getSuccess();
1065 bool bClose =
false;
1066 bool bRestore =
true;
1070 uno::Sequence<double> aSolution = xSolver->getSolution();
1071 if ( aSolution.getLength() == nVarCount )
1075 for (nVarPos=0; nVarPos<nVarCount; ++nVarPos)
1079 rFunc.
SetValueCell(aCellPos, aSolution[nVarPos],
false);
1087 static_cast<SCCOL>(aObjective.Column),
static_cast<SCROW>(aObjective.Row),
1088 static_cast<SCTAB>(aObjective.Sheet));
1101 uno::Reference<sheet::XSolverDescription> xDesc( xSolver, uno::UNO_QUERY );
1103 aError = xDesc->getStatusDescription();
1112 for (nVarPos=0; nVarPos<nVarCount; ++nVarPos)
1116 rFunc.
SetValueCell(aCellPos, std::as_const(aOldValues)[nVarPos],
false);
Reference< XExecutableDialog > m_xDialog
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
static bool Reschedule(bool bHandleAllCurrentEvents=false)
SC_DLLPUBLIC void Format(OStringBuffer &r, ScRefFlags nFlags, const ScDocument *pDocument=nullptr, const Details &rDetails=detailsOOOa1) const
void SetCursorLinks(const Link< ScCursorRefEdit &, void > &rUp, const Link< ScCursorRefEdit &, void > &rDown)
Link< ScCursorRefEdit &, void > maCursorDownLink
ScCursorRefEdit(std::unique_ptr< weld::Entry > xEntry)
Link< ScCursorRefEdit &, void > maCursorUpLink
bool SetValueCell(const ScAddress &rPos, double fVal, bool bInteraction)
ScModelObj * GetModel() const
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
SC_DLLPUBLIC const ScRangeData * GetRangeAtBlock(const ScRange &rBlock, OUString &rName, bool *pSheetLocal=nullptr) const
SC_DLLPUBLIC SvNumberFormatter * GetFormatTable() const
SC_DLLPUBLIC OUString GetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const ScInterpreterContext *pContext=nullptr) const
std::shared_ptr< sc::SolverSettings > m_pSolverSettings
std::unique_ptr< weld::Widget > m_xContents
std::unique_ptr< formula::RefButton > m_xRBRight3
std::unique_ptr< formula::RefButton > m_xRBRight1
void Init(const ScAddress &rCursorPos)
std::unique_ptr< ScCursorRefEdit > m_xEdLeft4
virtual ~ScOptSolverDlg() override
css::uno::Sequence< OUString > maDescriptions
std::unique_ptr< ScCursorRefEdit > m_xEdLeft2
void ShowError(bool bCondition, formula::RefEdit *pFocus)
void LoadSolverSettings()
std::unique_ptr< weld::RadioButton > m_xRbValue
std::unique_ptr< weld::RadioButton > m_xRbMin
std::unique_ptr< formula::RefButton > m_xRBTargetValue
weld::ComboBox * mpOperator[EDIT_ROW_COUNT]
std::unique_ptr< weld::Button > m_xBtnResetAll
std::unique_ptr< ScCursorRefEdit > m_xEdLeft3
std::unique_ptr< formula::RefButton > m_xRBRight2
std::unique_ptr< weld::Button > m_xBtnClose
bool ParseRef(ScRange &rRange, const OUString &rInput, bool bAllowRange)
formula::RefEdit * mpEdActive
std::unique_ptr< weld::ComboBox > m_xLbOp2
std::unique_ptr< weld::RadioButton > m_xRbMax
static const sal_uInt16 EDIT_ROW_COUNT
std::unique_ptr< weld::Button > m_xBtnDel2
std::unique_ptr< formula::RefEdit > m_xEdVariableCells
std::unique_ptr< formula::RefEdit > m_xEdObjectiveCell
bool FindTimeout(sal_Int32 &rTimeout)
std::unique_ptr< formula::RefButton > m_xRBLeft1
std::unique_ptr< weld::Button > m_xBtnDel3
virtual void SetActive() override
std::unique_ptr< weld::ComboBox > m_xLbOp1
ScCursorRefEdit * mpRightEdit[EDIT_ROW_COUNT]
std::unique_ptr< weld::Button > m_xBtnDel4
std::shared_ptr< ScSolverOptionsDialog > m_xOptDlg
ScOptSolverDlg(SfxBindings *pB, SfxChildWindow *pCW, weld::Window *pParent, ScDocShell *pDocSh, const ScAddress &aCursorPos)
virtual bool IsRefInputMode() const override
OUString maConditionError
std::unique_ptr< formula::RefEdit > m_xEdTargetValue
css::uno::Sequence< OUString > maImplNames
virtual void Close() override
std::unique_ptr< weld::Label > m_xFtVariableCells
std::unique_ptr< weld::ComboBox > m_xLbOp4
std::unique_ptr< weld::ScrolledWindow > m_xScrollBar
std::unique_ptr< weld::ComboBox > m_xLbOp3
formula::RefButton * mpLeftButton[EDIT_ROW_COUNT]
void SaveSolverSettings()
static sc::ConstraintOperator OperatorIndexToConstraintOperator(sal_Int32 nIndex)
std::unique_ptr< formula::RefButton > m_xRBLeft4
std::unique_ptr< formula::RefButton > m_xRBLeft2
ScCursorRefEdit * mpLeftEdit[EDIT_ROW_COUNT]
std::unique_ptr< formula::RefButton > m_xRBRight4
std::unique_ptr< weld::Label > m_xResultFT
bool IsEngineAvailable(std::u16string_view sEngineName)
std::unique_ptr< ScCursorRefEdit > m_xEdRight3
weld::Button * mpDelButton[EDIT_ROW_COUNT]
virtual void SetReference(const ScRange &rRef, ScDocument &rDoc) override
std::unique_ptr< weld::Button > m_xBtnOpt
std::unique_ptr< ScCursorRefEdit > m_xEdRight4
std::unique_ptr< weld::Label > m_xFtObjectiveCell
std::unique_ptr< formula::RefButton > m_xRBObjectiveCell
std::unique_ptr< ScCursorRefEdit > m_xEdRight2
std::unique_ptr< formula::RefButton > m_xRBVariableCells
std::unique_ptr< weld::Button > m_xBtnSolve
std::unique_ptr< formula::RefButton > m_xRBLeft3
std::vector< sc::ModelConstraint > m_aConditions
std::unique_ptr< weld::Label > m_xFtConstraint
std::unique_ptr< weld::Button > m_xBtnDel1
std::unique_ptr< ScCursorRefEdit > m_xEdRight1
formula::RefButton * mpRightButton[EDIT_ROW_COUNT]
css::uno::Sequence< css::beans::PropertyValue > maProperties
std::unique_ptr< weld::Label > m_xFtCellRef
std::unique_ptr< ScCursorRefEdit > m_xEdLeft1
static bool MakeRangeFromName(const OUString &rName, const ScDocument &rDoc, SCTAB nCurTab, ScRange &rRange, RutlNameScope eScope=RUTL_NAMES, ScAddress::Details const &rDetails=ScAddress::detailsOOOa1, bool bUseDetailsPos=false)
OUString Format(const ScDocument &rDocument, ScRefFlags nFlags=ScRefFlags::ZERO, const ScAddress::Details &rDetails=ScAddress::detailsOOOa1, bool bFullAddressNotation=false) const
Returns string with formatted cell range from aStart to aEnd, according to provided address conventio...
ScRefFlags ParseAny(const OUString &, const ScDocument &, const ScAddress::Details &rDetails=ScAddress::detailsOOOa1)
virtual void RefInputStart(formula::RefEdit *pEdit, formula::RefButton *pButton=nullptr) override
bool ParseWithNames(ScRangeList &rRanges, std::u16string_view rStr, const ScDocument &pDoc)
virtual void RefInputDone(bool bForced=false) override
bool DoClose(sal_uInt16 nId)
std::unique_ptr< weld::Label > m_xFtErrorText
ScSolverNoSolutionDialog(weld::Window *pParent, const OUString &rErrorText)
virtual ~ScSolverNoSolutionDialog() override
virtual ~ScSolverProgressDialog() override
std::unique_ptr< weld::Label > m_xFtTime
ScSolverProgressDialog(weld::Window *pParent)
void SetTimeLimit(sal_Int32 nSeconds)
virtual ~ScSolverSuccessDialog() override
ScSolverSuccessDialog(weld::Window *pParent, std::u16string_view rSolution)
std::unique_ptr< weld::Label > m_xFtResult
std::unique_ptr< weld::Button > m_xBtnCancel
std::unique_ptr< weld::Button > m_xBtnOk
static void GetImplementations(css::uno::Sequence< OUString > &rImplNames, css::uno::Sequence< OUString > &rDescriptions)
static css::uno::Sequence< css::beans::PropertyValue > GetDefaults(std::u16string_view rImplName)
static css::uno::Reference< css::sheet::XSolver > GetSolver(std::u16string_view rImplName)
static void FillScAddress(ScAddress &rScAddress, const css::table::CellAddress &rApiAddress)
css::uno::Reference< css::frame::XFrame > GetActiveFrame() const
SfxBindings & GetBindings() const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
sal_uInt16 GetCode() const
virtual void set_active(int pos)=0
void connect_changed(const Link< ComboBox &, void > &rLink)
static bool runAsync(const std::shared_ptr< DialogController > &rController, const std::function< void(sal_Int32)> &)
constexpr sal_uInt16 KEY_UP
constexpr sal_uInt16 KEY_DOWN
#define LINK(Instance, Class, Member)
SvGenericNameContainerMapImpl maProperties
sal_Int32 findValue(const css::uno::Sequence< T1 > &_rList, const T2 &_rValue)
Reference< graphic::XGraphic > GetXGraphicForCommand(const OUString &rsCommandName, const Reference< frame::XFrame > &rxFrame, vcl::ImageType eImageType)
IMPL_LINK_NOARG(ScOptSolverDlg, LoseEditFocusHdl, formula::RefEdit &, void)
IMPL_LINK(ScSolverSuccessDialog, ClickHdl, weld::Button &, rBtn, void)
OUString ScResId(TranslateId aId)
ConstraintOperator nOperator
Reference< XFrame > xFrame
constexpr OUStringLiteral SC_UNONAME_TIMEOUT