diff options
Diffstat (limited to 'sc/source/ui/inc/optsolver.hxx')
-rw-r--r-- | sc/source/ui/inc/optsolver.hxx | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/sc/source/ui/inc/optsolver.hxx b/sc/source/ui/inc/optsolver.hxx new file mode 100644 index 000000000000..3fc71d5d9b75 --- /dev/null +++ b/sc/source/ui/inc/optsolver.hxx @@ -0,0 +1,267 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: optsolver.hxx,v $ + * $Revision: 1.3 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SC_OPTSOLVER_HXX +#define SC_OPTSOLVER_HXX + +#include "global.hxx" +#include "address.hxx" +#include "anyrefdg.hxx" +#include <vcl/fixed.hxx> +#include <vcl/group.hxx> +#include <vcl/lstbox.hxx> +#include <com/sun/star/uno/Sequence.hxx> + +#include <vector> + +namespace com { namespace sun { namespace star { + namespace beans { struct PropertyValue; } +} } } + +//============================================================================ + +class ScCursorRefEdit : public formula::RefEdit +{ + Link maCursorUpLink; + Link maCursorDownLink; + +public: + ScCursorRefEdit( ScAnyRefDlg* pParent, const ResId& rResId ); + void SetCursorLinks( const Link& rUp, const Link& rDown ); + +protected: + virtual void KeyInput( const KeyEvent& rKEvt ); +}; + + +/// The dialog's content for a row, not yet parsed +struct ScOptConditionRow +{ + String aLeftStr; + USHORT nOperator; + String aRightStr; + + ScOptConditionRow() : nOperator(0) {} + bool IsDefault() const { return aLeftStr.Len() == 0 && aRightStr.Len() == 0 && nOperator == 0; } +}; + +/// All settings from the dialog, saved with the DocShell for the next call +class ScOptSolverSave +{ + String maObjective; + BOOL mbMax; + BOOL mbMin; + BOOL mbValue; + String maTarget; + String maVariable; + std::vector<ScOptConditionRow> maConditions; + String maEngine; + com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> maProperties; + +public: + ScOptSolverSave( const String& rObjective, BOOL bMax, BOOL bMin, BOOL bValue, + const String& rTarget, const String& rVariable, + const std::vector<ScOptConditionRow>& rConditions, + const String& rEngine, + const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProperties ); + + const String& GetObjective() const { return maObjective; } + BOOL GetMax() const { return mbMax; } + BOOL GetMin() const { return mbMin; } + BOOL GetValue() const { return mbValue; } + const String& GetTarget() const { return maTarget; } + const String& GetVariable() const { return maVariable; } + const std::vector<ScOptConditionRow>& GetConditions() const { return maConditions; } + const String& GetEngine() const { return maEngine; } + const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& GetProperties() const + { return maProperties; } +}; + +class ScOptSolverDlg : public ScAnyRefDlg +{ +public: + ScOptSolverDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent, + ScDocShell* pDocSh, ScAddress aCursorPos ); + ~ScOptSolverDlg(); + + virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ); + virtual BOOL IsRefInputMode() const; + virtual void SetActive(); + virtual BOOL Close(); + +private: + FixedText maFtObjectiveCell; + formula::RefEdit maEdObjectiveCell; + formula::RefButton maRBObjectiveCell; + + FixedText maFtDirection; + RadioButton maRbMax; + RadioButton maRbMin; + RadioButton maRbValue; + formula::RefEdit maEdTargetValue; + formula::RefButton maRBTargetValue; + + FixedText maFtVariableCells; + formula::RefEdit maEdVariableCells; + formula::RefButton maRBVariableCells; + + FixedLine maFlConditions; + + FixedText maFtCellRef; // labels are together with controls for the first row + ScCursorRefEdit maEdLeft1; + formula::RefButton maRBLeft1; + FixedText maFtOperator; + ListBox maLbOp1; + FixedText maFtConstraint; + ScCursorRefEdit maEdRight1; + formula::RefButton maRBRight1; + ImageButton maBtnDel1; + + ScCursorRefEdit maEdLeft2; + formula::RefButton maRBLeft2; + ListBox maLbOp2; + ScCursorRefEdit maEdRight2; + formula::RefButton maRBRight2; + ImageButton maBtnDel2; + + ScCursorRefEdit maEdLeft3; + formula::RefButton maRBLeft3; + ListBox maLbOp3; + ScCursorRefEdit maEdRight3; + formula::RefButton maRBRight3; + ImageButton maBtnDel3; + + ScCursorRefEdit maEdLeft4; + formula::RefButton maRBLeft4; + ListBox maLbOp4; + ScCursorRefEdit maEdRight4; + formula::RefButton maRBRight4; + ImageButton maBtnDel4; + + ScrollBar maScrollBar; + + FixedLine maFlButtons; + + PushButton maBtnOpt; + HelpButton maBtnHelp; + CancelButton maBtnCancel; + PushButton maBtnSolve; + + String maInputError; + String maConditionError; + + ScDocShell* mpDocShell; + ScDocument* mpDoc; + const SCTAB mnCurTab; + formula::RefEdit* mpEdActive; + bool mbDlgLostFocus; + + static const sal_uInt16 EDIT_ROW_COUNT = 4; + ScCursorRefEdit* mpLeftEdit[EDIT_ROW_COUNT]; + formula::RefButton* mpLeftButton[EDIT_ROW_COUNT]; + ScCursorRefEdit* mpRightEdit[EDIT_ROW_COUNT]; + formula::RefButton* mpRightButton[EDIT_ROW_COUNT]; + ListBox* mpOperator[EDIT_ROW_COUNT]; + ImageButton* mpDelButton[EDIT_ROW_COUNT]; + + std::vector<ScOptConditionRow> maConditions; + long nScrollPos; + + com::sun::star::uno::Sequence<rtl::OUString> maImplNames; + com::sun::star::uno::Sequence<rtl::OUString> maDescriptions; + String maEngine; + com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> maProperties; + + void Init(const ScAddress& rCursorPos); + bool CallSolver(); + void ReadConditions(); + void ShowConditions(); + void EnableButtons(); + bool ParseRef( ScRange& rRange, const String& rInput, bool bAllowRange ); + bool FindTimeout( sal_Int32& rTimeout ); + void ShowError( bool bCondition, formula::RefEdit* pFocus ); + + DECL_LINK( BtnHdl, PushButton* ); + DECL_LINK( DelBtnHdl, PushButton* ); + DECL_LINK( GetFocusHdl, Control* ); + DECL_LINK( LoseFocusHdl, Control* ); + DECL_LINK( ScrollHdl, ScrollBar* ); + DECL_LINK( CursorUpHdl, ScCursorRefEdit* ); + DECL_LINK( CursorDownHdl, ScCursorRefEdit* ); + DECL_LINK( CondModifyHdl, Edit* ); + DECL_LINK( TargetModifyHdl, Edit* ); + DECL_LINK( SelectHdl, ListBox* ); +}; + + +class ScSolverProgressDialog : public ModelessDialog +{ + FixedText maFtProgress; + FixedText maFtTime; + FixedLine maFlButtons; + OKButton maBtnOk; + +public: + ScSolverProgressDialog( Window* pParent ); + ~ScSolverProgressDialog(); + + void HideTimeLimit(); + void SetTimeLimit( sal_Int32 nSeconds ); +}; + +class ScSolverNoSolutionDialog : public ModalDialog +{ + FixedText maFtNoSolution; + FixedText maFtErrorText; + FixedLine maFlButtons; + OKButton maBtnOk; + +public: + ScSolverNoSolutionDialog( Window* pParent, const String& rErrorText ); + ~ScSolverNoSolutionDialog(); +}; + +class ScSolverSuccessDialog : public ModalDialog +{ + FixedText maFtSuccess; + FixedText maFtResult; + FixedText maFtQuestion; + FixedLine maFlButtons; + OKButton maBtnOk; + CancelButton maBtnCancel; + +public: + ScSolverSuccessDialog( Window* pParent, const String& rSolution ); + ~ScSolverSuccessDialog(); +}; + + +#endif + |