/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/

#include "optsolver.hrc"

ModelessDialog RID_SCDLG_OPTSOLVER
{
	OutputSize = TRUE ;
	HelpId = CMD_SID_OPENDLG_OPTSOLVER ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 250, 210 ) ;
	Text [ en-US ] = "Solver" ;
	Moveable = TRUE ;
	Closeable = FALSE ;

	FixedText FT_OBJECTIVECELL
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 86, 8 ) ;
		Text [ en-US ] = "Target cell" ;
	};
	Edit ED_OBJECTIVECELL
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_OBJECTIVECELL" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 94, 6 ) ;
		Size = MAP_APPFONT ( 135, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_OBJECTIVECELL
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_OBJECTIVECELL" ;
		Pos = MAP_APPFONT ( 231, 5 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};

	FixedText FT_DIRECTION
	{
		Pos = MAP_APPFONT ( 6, 24 ) ;
		Size = MAP_APPFONT ( 86, 8 ) ;
		Text [ en-US ] = "Optimize result to" ;
	};
	RadioButton RB_MAX
	{
		HelpID = "sc:RadioButton:RID_SCDLG_OPTSOLVER:RB_MAX" ;
		Pos = MAP_APPFONT ( 94, 24 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Text [ en-US ] = "Maximum" ;
		TabStop = TRUE ;
	};
	RadioButton RB_MIN
	{
		HelpID = "sc:RadioButton:RID_SCDLG_OPTSOLVER:RB_MIN" ;
		Pos = MAP_APPFONT ( 94, 38 ) ;
		Size = MAP_APPFONT ( 50, 10 ) ;
		Text [ en-US ] = "Minimum" ;
		TabStop = TRUE ;
	};
	RadioButton RB_VALUE
	{
		HelpID = "sc:RadioButton:RID_SCDLG_OPTSOLVER:RB_VALUE" ;
		Pos = MAP_APPFONT ( 94, 52 ) ;
		Size = MAP_APPFONT ( 42, 10 ) ;
		Text [ en-US ] = "Value" ;
		TabStop = TRUE ;
	};
	Edit ED_TARGET
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_TARGET" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 138, 50 ) ;
		Size = MAP_APPFONT ( 91, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_TARGET
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_TARGET" ;
		Pos = MAP_APPFONT ( 231, 49 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};

	FixedText FT_VARIABLECELLS
	{
		Pos = MAP_APPFONT ( 6, 68 ) ;
		Size = MAP_APPFONT ( 86, 8 ) ;
		Text [ en-US ] = "By changing cells" ;
	};
	Edit ED_VARIABLECELLS
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_VARIABLECELLS" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 94, 66 ) ;
		Size = MAP_APPFONT ( 135, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_VARIABLECELLS
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_VARIABLECELLS" ;
		Pos = MAP_APPFONT ( 231, 65 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};

	FixedLine FL_CONDITIONS
	{
		Pos = MAP_APPFONT ( 6, 88 ) ;
		Size = MAP_APPFONT ( 241, 8 ) ;
		Text [ en-US ] = "Limiting conditions" ;
	};

	FixedText FT_CELLREF
	{
		Pos = MAP_APPFONT ( 12, 102 ) ;
		Size = MAP_APPFONT ( 78, 8 ) ;
		Text [ en-US ] = "Cell reference" ;
	};
	FixedText FT_OPERATOR
	{
		Pos = MAP_APPFONT ( 94, 102 ) ;
		Size = MAP_APPFONT ( 40, 8 ) ;
		Text [ en-US ] = "Operator" ;
	};
	FixedText FT_CONSTRAINT
	{
		Pos = MAP_APPFONT ( 138, 102 ) ;
		Size = MAP_APPFONT ( 78, 8 ) ;
		Text [ en-US ] = "Value" ;
	};

	Edit ED_LEFT1
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_LEFT1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 114 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_LEFT1
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_LEFT1" ;
		Pos = MAP_APPFONT ( 77, 113 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ListBox LB_OP1
	{
		HelpID = "sc:ListBox:RID_SCDLG_OPTSOLVER:LB_OP1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 94, 114 ) ;
		Size = MAP_APPFONT ( 40, 56 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "<=" ; Default ;		> ;
			< "=" ; Default ;		> ;
			< ">=" ; Default ;		> ;
			< "Integer" ; Default ;	> ;
			< "Binary" ; Default ;	> ;
		};
	};
	Edit ED_RIGHT1
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_RIGHT1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 138, 114 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_RIGHT1
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_RIGHT1" ;
		Pos = MAP_APPFONT ( 203, 113 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ImageButton IB_DELETE1
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_DELETE1" ;
		Pos = MAP_APPFONT ( 219, 113 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Remove" ;
		// image is set dynamically
	};

	Edit ED_LEFT2
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_LEFT2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 129 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_LEFT2
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_LEFT2" ;
		Pos = MAP_APPFONT ( 77, 128 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ListBox LB_OP2
	{
		HelpID = "sc:ListBox:RID_SCDLG_OPTSOLVER:LB_OP2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 94, 129 ) ;
		Size = MAP_APPFONT ( 40, 56 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "<=" ; Default ;		> ;
			< "=" ; Default ;		> ;
			< ">=" ; Default ;		> ;
			< "Integer" ; Default ;	> ;
			< "Binary" ; Default ;	> ;
		};
	};
	Edit ED_RIGHT2
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_RIGHT2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 138, 129 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_RIGHT2
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_RIGHT2" ;
		Pos = MAP_APPFONT ( 203, 128 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ImageButton IB_DELETE2
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_DELETE2" ;
		Pos = MAP_APPFONT ( 219, 128 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Remove" ;
		// image is set dynamically
	};

	Edit ED_LEFT3
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_LEFT3" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 144 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_LEFT3
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_LEFT3" ;
		Pos = MAP_APPFONT ( 77, 143 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ListBox LB_OP3
	{
		HelpID = "sc:ListBox:RID_SCDLG_OPTSOLVER:LB_OP3" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 94, 144 ) ;
		Size = MAP_APPFONT ( 40, 56 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "<=" ; Default ;		> ;
			< "=" ; Default ;		> ;
			< ">=" ; Default ;		> ;
			< "Integer" ; Default ;	> ;
			< "Binary" ; Default ;	> ;
		};
	};
	Edit ED_RIGHT3
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_RIGHT3" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 138, 144 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_RIGHT3
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_RIGHT3" ;
		Pos = MAP_APPFONT ( 203, 143 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ImageButton IB_DELETE3
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_DELETE3" ;
		Pos = MAP_APPFONT ( 219, 143 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Remove" ;
		// image is set dynamically
	};

	Edit ED_LEFT4
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_LEFT4" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 159 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_LEFT4
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_LEFT4" ;
		Pos = MAP_APPFONT ( 77, 158 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ListBox LB_OP4
	{
		HelpID = "sc:ListBox:RID_SCDLG_OPTSOLVER:LB_OP4" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 94, 159 ) ;
		Size = MAP_APPFONT ( 40, 56 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "<=" ; Default ;		> ;
			< "=" ; Default ;		> ;
			< ">=" ; Default ;		> ;
			< "Integer" ; Default ;	> ;
			< "Binary" ; Default ;	> ;
		};
	};
	Edit ED_RIGHT4
	{
		HelpID = "sc:Edit:RID_SCDLG_OPTSOLVER:ED_RIGHT4" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 138, 159 ) ;
		Size = MAP_APPFONT ( 63, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton IB_RIGHT4
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_RIGHT4" ;
		Pos = MAP_APPFONT ( 203, 158 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	ImageButton IB_DELETE4
	{
		HelpID = "sc:ImageButton:RID_SCDLG_OPTSOLVER:IB_DELETE4" ;
		Pos = MAP_APPFONT ( 219, 158 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Remove" ;
		// image is set dynamically
	};

	ScrollBar SB_SCROLL
	{
		Pos = MAP_APPFONT ( 236, 113 ) ;
		Size = MAP_APPFONT ( 8, 59 ) ;
		VScroll = TRUE ;
	};

	FixedLine FL_BUTTONS
	{
		Pos = MAP_APPFONT ( 0, 179 ) ;
		Size = MAP_APPFONT ( 250, 8 ) ;
	};

	PushButton BTN_OPTIONS
	{
		HelpID = "sc:PushButton:RID_SCDLG_OPTSOLVER:BTN_OPTIONS" ;
		Pos = MAP_APPFONT ( 6, 190 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Options..." ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 67, 190 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		TabStop = TRUE ;
	};
	CancelButton BTN_CLOSE
	{
		Pos = MAP_APPFONT ( 128, 190 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Close" ;
	};
	PushButton BTN_SOLVE
	{
		HelpID = "sc:PushButton:RID_SCDLG_OPTSOLVER:BTN_SOLVE" ;
		Pos = MAP_APPFONT ( 189, 190 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Solve" ;
		DefButton = TRUE ;
	};

	// IMG_DEL_H not used - image is set dynamically

	String STR_INVALIDINPUT
	{
		Text [ en-US ] = "Invalid input." ;
	};
	String STR_INVALIDCONDITION
	{
		Text [ en-US ] = "Invalid condition." ;
	};
};


ModelessDialog RID_SCDLG_SOLVER_PROGRESS
{
	OutputSize = TRUE ;
	HelpId = HID_SC_SOLVER_PROGRESS ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 118, 72 ) ;
	Moveable = TRUE ;
	Closeable = FALSE ;
	FixedText FT_PROGRESS
	{
		Pos = MAP_APPFONT ( 6, 11 ) ;
		Size = MAP_APPFONT ( 106, 8 ) ;
		Center = TRUE ;
		Text [ en-US ] = "Solving in progress..." ;
	};
	FixedText FT_TIMELIMIT
	{
		Pos = MAP_APPFONT ( 6, 25 ) ;
		Size = MAP_APPFONT ( 106, 8 ) ;
		Center = TRUE ;
		Text [ en-US ] = "(time limit # seconds)" ;
	};
	FixedLine FL_BUTTONS
	{
		Pos = MAP_APPFONT ( 0, 41 ) ;
		Size = MAP_APPFONT ( 118, 8 ) ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 34, 52 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	Text [ en-US ] = "Solving..." ;
};


ModalDialog RID_SCDLG_SOLVER_NOSOLUTION
{
	OutputSize = TRUE ;
	HelpId = HID_SC_SOLVER_NOSOLUTION ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 118, 72 ) ;
	Moveable = TRUE ;
	FixedText FT_NOSOLUTION
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 106, 8 ) ;
		Text [ en-US ] = "No solution was found." ;
	};
	FixedText FT_ERRORTEXT
	{
		Pos = MAP_APPFONT ( 6, 22 ) ;
		Size = MAP_APPFONT ( 106, 16 ) ;
		WordBreak = TRUE ;
		// text is dynamic
	};
	FixedLine FL_BUTTONS
	{
		Pos = MAP_APPFONT ( 0, 41 ) ;
		Size = MAP_APPFONT ( 118, 8 ) ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 34, 52 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	Text [ en-US ] = "No Solution" ;
};


ModalDialog RID_SCDLG_SOLVER_SUCCESS
{
	OutputSize = TRUE ;
	HelpId = HID_SC_SOLVER_SUCCESS ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 138, 89 ) ;
	Moveable = TRUE ;
	FixedText FT_SUCCESS
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 126, 8 ) ;
		Text [ en-US ] = "Solving successfully finished." ;
	};
	FixedText FT_RESULT
	{
		Pos = MAP_APPFONT ( 6, 22 ) ;
		Size = MAP_APPFONT ( 126, 8 ) ;
		Text [ en-US ] = "Result:" ;
	};
	FixedText FT_QUESTION
	{
		Pos = MAP_APPFONT ( 6, 36 ) ;
		Size = MAP_APPFONT ( 126, 16 ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "Do you want to keep the result or do you want to restore previous values?" ;
	};
	FixedLine FL_BUTTONS
	{
		Pos = MAP_APPFONT ( 0, 58 ) ;
		Size = MAP_APPFONT ( 138, 8 ) ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 6, 69 ) ;
		Size = MAP_APPFONT ( 60, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
		Text [ en-US ] = "Keep Result" ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 72, 69 ) ;
		Size = MAP_APPFONT ( 60, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Restore Previous" ;
	};
	Text [ en-US ] = "Solving Result" ;
};

// ********************************************************************** EOF
