/**************************************************************
 *
 * 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 "optaccessibility.hrc"
#include <sfx2/sfx.hrc>
#include "helpid.hrc"
#include <cuires.hrc>

TabPage RID_SVXPAGE_ACCESSIBILITYCONFIG
{
	HelpId = HID_OPTIONS_ACCESSIBILITYCONFIG ;
	Size = MAP_APPFONT ( 260, WHOLE_HEIGHT ) ;
	SVLook = TRUE ;
	Hide = TRUE ;
	FixedLine FL_MISCELLANEOUS
	{
		Pos = MAP_APPFONT ( COL0, ROWA_0 ) ;
		Size = MAP_APPFONT ( GB_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Miscellaneous options" ;
	};
	CheckBox CB_ACCESSIBILITY_TOOL
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_ACCESSIBILITY_TOOL" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWA_1 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "Support ~assistive technology tools (program restart required)" ;
	};
	CheckBox CB_TEXTSELECTION
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_TEXTSELECTION" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWA_2 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Use te~xt selection cursor in read-only text documents" ;
	};
	CheckBox CB_ANIMATED_GRAPHICS
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_ANIMATED_GRAPHICS" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWA_3 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Allow animated ~graphics" ;
	};
	CheckBox CB_ANIMATED_TEXTS
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_ANIMATED_TEXTS" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWA_4 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Allow animated ~text" ;
	};
	CheckBox CB_TIPHELP
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_TIPHELP" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, OFFS_TEXTBOX_FIXEDTEXT( ROWA_5 ) ) ;
		Size = MAP_APPFONT ( DIFF(COL2,COL3), RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "~Help tips disappear after " ;
	};
	NumericField NF_TIPHELP
	{
		HelpID = "cui:NumericField:RID_SVXPAGE_ACCESSIBILITYCONFIG:NF_TIPHELP" ;
		TabStop = TRUE ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL3, ROWA_5 ) ;
		Size = MAP_APPFONT ( EDIT_WIDTH, RSC_CD_TEXTBOX_HEIGHT ) ;
		Minimum = 1 ;
		Maximum = 99 ;
		First = 1 ;
		Last = 99 ;
		Spin = TRUE ;
		Repeat = TRUE ;
	};
	FixedText FT_TIPHELP
	{
		Pos = MAP_APPFONT ( COL4, OFFS_TEXTBOX_FIXEDTEXT( ROWA_5 ) ) ;
		Size = MAP_APPFONT ( UNIT_WIDTH, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "seconds" ;
	};
	FixedLine FL_HC_OPTIONS
	{
		Pos = MAP_APPFONT ( COL0, ROWB_0 ) ;
		Size = MAP_APPFONT ( GB_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Options for high contrast appearance" ;
	};
	CheckBox CB_AUTO_DETECT_HC
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_AUTO_DETECT_HC" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWB_1 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Automatically ~detect high contrast mode of operating system" ;
	};
	CheckBox CB_AUTOMATIC_FONT_COLOR
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_AUTOMATIC_FONT_COLOR" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWB_2 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Use automatic font ~color for screen display" ;
	};
	CheckBox CB_PAGE_PREVIEWS
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ACCESSIBILITYCONFIG:CB_PAGE_PREVIEWS" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( COL1, ROWB_3 ) ;
		Size = MAP_APPFONT ( CB_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "~Use system colors for page previews" ;
	};
};

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