/**************************************************************
 *
 * 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 ---------------------------------------------------------------

#include <cuires.hrc>
#include "optmemory.hrc"
#include "helpid.hrc"

TabPage OFA_TP_MEMORY
{
	HelpID = HID_OFA_TP_MEMORY ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Hide = TRUE ;
	FixedLine GB_UNDO
	{
		Pos = MAP_APPFONT ( COL0, ROW0 ) ;
		Size = MAP_APPFONT ( WHOLE_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Undo" ;
	};
	FixedText FT_UNDO
	{
		Pos = MAP_APPFONT ( COL1, OFFS_TEXTBOX_FIXEDTEXT ( ROW1 ) ) ;
		Size = MAP_APPFONT ( WIDTH1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Number of steps" ;
	};
	NumericField ED_UNDO
	{
		HelpID = "cui:NumericField:OFA_TP_MEMORY:ED_UNDO" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL3, ROW1 ) ;
		Size = MAP_APPFONT ( WIDTH2, RSC_CD_TEXTBOX_HEIGHT ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		First = 1 ;
		Maximum = 1000 ;
		Value = 100 ;
		Last = 100 ;
		SpinSize = 1 ;
		MaxTextLength = 4 ;
	};
	FixedLine GB_GRAPHICCACHE
	{
		Pos = MAP_APPFONT ( COL0, ROW2 ) ;
		Size = MAP_APPFONT ( WHOLE_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Graphics cache" ;
	};
	FixedText FT_GRAPHICCACHE
	{
		Pos = MAP_APPFONT ( COL1, OFFS_TEXTBOX_FIXEDTEXT ( ROW3 ) ) ;
		Size = MAP_APPFONT ( WIDTH1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Use for %PRODUCTNAME" ;
	};
	NumericField NF_GRAPHICCACHE
	{
		HelpID = "cui:NumericField:OFA_TP_MEMORY:NF_GRAPHICCACHE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL3, ROW3 ) ;
		Size = MAP_APPFONT ( WIDTH2, RSC_CD_TEXTBOX_HEIGHT ) ;
		Minimum = 1 ;
		Maximum = 256 ;
		SpinSize = 1 ;
		Spin = TRUE ;
		Repeat = TRUE ;
	};
	FixedText FT_GRAPHICCACHE_UNIT
	{
		Pos = MAP_APPFONT ( COL5, OFFS_TEXTBOX_FIXEDTEXT ( ROW3 ) ) ;
		Size = MAP_APPFONT ( WIDTH3, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "MB" ;
	};
	FixedText FT_GRAPHICOBJECTCACHE
	{
		Pos = MAP_APPFONT ( COL1, OFFS_TEXTBOX_FIXEDTEXT ( ROW4 ) ) ;
		Size = MAP_APPFONT ( WIDTH1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Memory per object" ;
	};
	NumericField NF_GRAPHICOBJECTCACHE
	{
		HelpID = "cui:NumericField:OFA_TP_MEMORY:NF_GRAPHICOBJECTCACHE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL3, ROW4 ) ;
		Size = MAP_APPFONT ( WIDTH2, RSC_CD_TEXTBOX_HEIGHT ) ;
		Minimum = 10 ;
		Maximum = 2560 ;
		SpinSize = 1 ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 1 ;
	};
	FixedText FT_GRAPHICOBJECTCACHE_UNIT
	{
		Pos = MAP_APPFONT ( COL5, OFFS_TEXTBOX_FIXEDTEXT ( ROW4 ) ) ;
		Size = MAP_APPFONT ( WIDTH3, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "MB" ;
	};
	FixedText FT_GRAPHICOBJECTTIME
	{
		Pos = MAP_APPFONT ( COL1, OFFS_TEXTBOX_FIXEDTEXT ( ROW5 ) ) ;
		Size = MAP_APPFONT ( WIDTH1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Remove from memory after" ;
	};
	TimeField TF_GRAPHICOBJECTTIME
	{
		HelpID = "cui:TimeField:OFA_TP_MEMORY:TF_GRAPHICOBJECTTIME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL3, ROW5 ) ;
		Size = MAP_APPFONT ( WIDTH2, RSC_CD_TEXTBOX_HEIGHT ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Value = Time
		{
			Minute = 10 ;
		};
		Minimum = Time
		{
			Minute = 1 ;
		};
		Maximum = Time
		{
			Hour = 23 ;
			Minute = 59 ;
		};
		First = Time
		{
			Minute = 10 ;
		};
		Last = Time
		{
			Hour = 23 ;
			Minute = 59 ;
		};
		Format = TIMEF_NONE ;
		Duration = TRUE ;
		StrictFormat = TRUE ;
	};
	FixedText FT_GRAPHICOBJECTTIME_UNIT
	{
		Pos = MAP_APPFONT ( COL5, OFFS_TEXTBOX_FIXEDTEXT ( ROW5 ) ) ;
		Size = MAP_APPFONT ( WIDTH3, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "hh:mm" ;
	};
	FixedLine GB_OLECACHE
	{
		Pos = MAP_APPFONT ( COL0, ROW6 ) ;
		Size = MAP_APPFONT ( WHOLE_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Cache for inserted objects" ;
	};
	FixedText FT_OLECACHE
	{
		Pos = MAP_APPFONT ( COL1, OFFS_TEXTBOX_FIXEDTEXT ( ROW7 ) ) ;
		Size = MAP_APPFONT ( WIDTH1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Number of objects" ;
	};
	NumericField NF_OLECACHE
	{
		HelpID = "cui:NumericField:OFA_TP_MEMORY:NF_OLECACHE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL3, ROW7 ) ;
		Size = MAP_APPFONT ( WIDTH2, RSC_CD_TEXTBOX_HEIGHT ) ;
		Minimum = 1 ;
		Maximum = 1024 ;
		Spin = TRUE ;
		Repeat = TRUE ;
	};
	FixedLine FL_QUICKLAUNCH
	{
		Pos = MAP_APPFONT ( COL0, ROW8 ) ;
		Size = MAP_APPFONT ( WHOLE_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "%PRODUCTNAME Quickstarter" ;
	};
	CheckBox CB_QUICKLAUNCH
	{
		HelpID = "cui:CheckBox:OFA_TP_MEMORY:CB_QUICKLAUNCH" ;
		Pos = MAP_APPFONT ( COL1, ROW9 ) ;
		Size = MAP_APPFONT ( WHOLE_WIDTH - COL1, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Load %PRODUCTNAME during system start-up" ;
	};
	String STR_QUICKLAUNCH_UNX
	{
		Text [ en-US ] = "Enable systray Quickstarter" ;
	};
};

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