/**************************************************************
 *
 * 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 <svtools/controldims.hrc>
#include <cuires.hrc>
#include "textattr.hrc"
#include "helpid.hrc"
#include <svx/dialogs.hrc>

// RID_SVXPAGE_TEXTATTR --------------------------------------------------
TabPage RID_SVXPAGE_TEXTATTR
{
	HelpId = HID_PAGE_TEXTATTR ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Text [ en-US ] = "Text" ;
	FixedLine FL_TEXT
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Text" ;
	};
	TriStateBox TSB_AUTOGROW_WIDTH
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_AUTOGROW_WIDTH" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 102, 10 ) ;
		Text [ en-US ] = "Fit wi~dth to text" ;
	};
	TriStateBox TSB_AUTOGROW_HEIGHT
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_AUTOGROW_HEIGHT" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 12, 28 ) ;
		Size = MAP_APPFONT ( 102, 10 ) ;
		Text [ en-US ] = "Fit h~eight to text" ;
	};
	TriStateBox TSB_FIT_TO_SIZE
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_FIT_TO_SIZE" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 12, 42 ) ;
		Size = MAP_APPFONT ( 102, 10 ) ;
		Text [ en-US ] = "~Fit to frame" ;
	};
	TriStateBox TSB_CONTOUR
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_CONTOUR" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 12, 56 ) ;
		Size = MAP_APPFONT ( 102, 10 ) ;
		Text [ en-US ] = "~Adjust to contour" ;
	};
	TriStateBox TSB_WORDWRAP_TEXT
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_WORDWRAP_TEXT" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 132, 14 ) ;
		Size = MAP_APPFONT ( 127, 10 ) ;
		Text [ en-US ] = "~Word wrap text in shape" ;
	};
	TriStateBox TSB_AUTOGROW_SIZE
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_AUTOGROW_SIZE" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 132, 28 ) ;
		Size = MAP_APPFONT ( 127, 10 ) ;
		Text [ en-US ] = "~Resize shape to fit text" ;
	};
	FixedLine FL_DISTANCE
	{
		Pos = MAP_APPFONT ( 6, 72 ) ;
		Size = MAP_APPFONT ( 114, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Spacing to borders" ;
	};
	FixedText FT_LEFT
	{
		Pos = MAP_APPFONT ( 12, 85 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "~Left" ;
	};
	FixedText FT_RIGHT
	{
		Pos = MAP_APPFONT ( 12, 101 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "~Right" ;
	};
	FixedText FT_TOP
	{
		Pos = MAP_APPFONT ( 12, 117 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "~Top" ;
	};
	FixedText FT_BOTTOM
	{
		Pos = MAP_APPFONT ( 12, 133 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Text [ en-US ] = "~Bottom" ;
	};
	MetricField MTR_FLD_LEFT
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_TEXTATTR:MTR_FLD_LEFT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 69, 83 ) ;
		Size = MAP_APPFONT ( 45, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
	};
	MetricField MTR_FLD_RIGHT
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_TEXTATTR:MTR_FLD_RIGHT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 69, 99 ) ;
		Size = MAP_APPFONT ( 45, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
	};
	MetricField MTR_FLD_TOP
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_TEXTATTR:MTR_FLD_TOP" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 69, 115 ) ;
		Size = MAP_APPFONT ( 45, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
	};
	MetricField MTR_FLD_BOTTOM
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_TEXTATTR:MTR_FLD_BOTTOM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 69, 131 ) ;
		Size = MAP_APPFONT ( 45, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
	};
	FixedLine FL_SEPARATOR
	{
		Pos = MAP_APPFONT ( 121, 83 ) ;
		Size = MAP_APPFONT ( RSC_CD_FIXEDLINE_WIDTH, 66 ) ;
		Vert = TRUE ;
	};
	FixedLine FL_POSITION
	{
		Pos = MAP_APPFONT ( 126, 72 ) ;
		Size = MAP_APPFONT ( 128, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Text anchor" ;
	};
	Control CTL_POSITION
	{
		HelpId = HID_TEXTATTR_CTL_POSITION ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 132, 83 ) ;
		Size = MAP_APPFONT ( 116, 52 ) ;
		TabStop = TRUE ;
	};
	TriStateBox TSB_FULL_WIDTH
	{
		HelpID = "cui:TriStateBox:RID_SVXPAGE_TEXTATTR:TSB_FULL_WIDTH" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 132, 139 ) ;
		Size = MAP_APPFONT ( 116, 10 ) ;
		Text [ en-US ] = "Full ~width" ;
	};
};

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