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

#define MA_TABPAGE_HEIGHT       185

 // RID_SVXPAGE_POSITION_SIZE ------------------------------------------------
TabPage RID_SVXPAGE_POSITION_SIZE
{
	HelpId = HID_TRANS_POSITION_SIZE ;
	Hide = TRUE ;
	Text [ en-US ] = "Position and Size" ;
	Size = MAP_APPFONT ( 260 , MA_TABPAGE_HEIGHT ) ;

	FixedLine FL_POSITION
	{
		Pos = MAP_APPFONT ( 6 , 3  ) ;
		Size = MAP_APPFONT ( 248 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Position" ;
	};
	FixedText FT_POS_X
	{
		Pos = MAP_APPFONT ( 12 , 16 + 8  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "Position ~X" ;
	};
	FixedText FT_POS_Y
	{
		Pos = MAP_APPFONT ( 12 , 32 + 8  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "Position ~Y" ;
	};
	MetricField MTR_FLD_POS_X
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_POSITION_SIZE:MTR_FLD_POS_X";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 14 + 8  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -120000 ;
		Maximum = 240000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	MetricField MTR_FLD_POS_Y
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_POSITION_SIZE:MTR_FLD_POS_Y";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 30 + 8  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -120000 ;
		Maximum = 240000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	FixedText FT_POSREFERENCE
	{
		Pos = MAP_APPFONT ( 178 , 2 + 8  ) ;
		Size = MAP_APPFONT ( 70 , 10 ) ;
		Text [ en-US ] = "Base point";
	};
	Control CTL_POSRECT
	{
		HelpId = HID_TPPOSITION_CTRL ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 178 , 12 + 8  ) ;
		Size = MAP_APPFONT ( 48 , 34 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Base point" ;
	};

	// size

	FixedLine FL_SIZE
	{
		Pos = MAP_APPFONT ( 6 , 56  ) ;
		Size = MAP_APPFONT ( 248 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Size" ;
	};
	FixedText FT_WIDTH
	{
		Pos = MAP_APPFONT ( 12 , 16 + 61 ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "Wi~dth" ;
	};
	FixedText FT_HEIGHT
	{
		Pos = MAP_APPFONT ( 12 , 32 + 61  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "H~eight" ;
	};
	MetricField MTR_FLD_WIDTH
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_POSITION_SIZE:MTR_FLD_WIDTH";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 14 + 61  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 120000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	MetricField MTR_FLD_HEIGHT
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_POSITION_SIZE:MTR_FLD_HEIGHT";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 30 + 61  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 120000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	FixedText FT_SIZEREFERENCE
	{
		Pos = MAP_APPFONT ( 178 , 2 + 61  ) ;
		Size = MAP_APPFONT ( 70 , 10 ) ;
		Text [ en-US ] = "Base point";
	};
	Control CTL_SIZERECT
	{
		HelpId = HID_TPSIZE_CTRL ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 178 , 12 + 61 ) ;
		Size = MAP_APPFONT ( 48 , 34 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Base point" ;
	};
	CheckBox CBX_SCALE
	{
	    HelpID = "cui:CheckBox:RID_SVXPAGE_POSITION_SIZE:CBX_SCALE";
		Pos = MAP_APPFONT ( 12 , 47 + 61 ) ;
		Size = MAP_APPFONT ( 162 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Keep ratio" ;
	};

	// Protect

	FixedLine FL_PROTECT
	{
		Pos = MAP_APPFONT ( 6 , 120  ) ;
		Size = MAP_APPFONT ( 119 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Protect" ;
	};

	TriStateBox TSB_POSPROTECT
	{
	    HelpID = "cui:TriStateBox:RID_SVXPAGE_POSITION_SIZE:TSB_POSPROTECT";
		Pos = MAP_APPFONT ( 12 , 10 + 120 ) ;
		Size = MAP_APPFONT ( 113 , 10 ) ;
		Text [ en-US ] = "Position" ;
		TabStop = TRUE ;
	};

	TriStateBox TSB_SIZEPROTECT
	{
	    HelpID = "cui:TriStateBox:RID_SVXPAGE_POSITION_SIZE:TSB_SIZEPROTECT";
		Pos = MAP_APPFONT ( 12 , 24 + 120 ) ;
		Size = MAP_APPFONT ( 113 , 10 ) ;
		Text [ en-US ] = "~Size" ;
		TabStop = TRUE ;
	};

	// Adjust

	FixedLine FL_ADJUST
	{
		Pos = MAP_APPFONT ( 6 + 123 + 6 , 120 ) ;
		Size = MAP_APPFONT ( 119 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Adapt" ;
	};
	TriStateBox TSB_AUTOGROW_WIDTH
	{
	    HelpID = "cui:TriStateBox:RID_SVXPAGE_POSITION_SIZE:TSB_AUTOGROW_WIDTH";
		Pos = MAP_APPFONT ( 12 + 121 + 8, 10 + 120 ) ;
        Size = MAP_APPFONT ( 113 , 10 ) ;
		Text [ en-US ] = "~Fit width to text" ;
		TabStop = TRUE ;
	};
	TriStateBox TSB_AUTOGROW_HEIGHT
	{
	    HelpID = "cui:TriStateBox:RID_SVXPAGE_POSITION_SIZE:TSB_AUTOGROW_HEIGHT";
        Pos = MAP_APPFONT ( 12 + 121 + 8, 24 + 120 ) ;
        Size = MAP_APPFONT ( 113 , 10 ) ;
		Text [ en-US ] = "Fit ~height to text" ;
		TabStop = TRUE ;
	};

	FixedLine FL_DIVIDER
	{
		Pos = MAP_APPFONT( 6 + 119 + 5, 128 );
		Size = MAP_APPFONT( RSC_CD_FIXEDLINE_WIDTH, 26 );
		Vert = True;
	};

	// Anchor

	FixedLine FL_ANCHOR
	{
		Pos = MAP_APPFONT ( 6 + 123 + 6 , 120 ) ;
		Size = MAP_APPFONT ( 119 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Anchor" ;
	};
	FixedText FT_ANCHOR
	{
		Pos = MAP_APPFONT ( 12 + 121 + 8, 10 + 120 ) ;
        Size = MAP_APPFONT ( 37 , 10 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Anchor" ;
	};
	ListBox LB_ANCHOR
	{
	    HelpID = "cui:ListBox:RID_SVXPAGE_POSITION_SIZE:LB_ANCHOR";
		Pos = MAP_APPFONT ( 46 + 121 + 16 , 8 + 120 ) ;
		Size = MAP_APPFONT ( 54 , 60 ) ;
		Hide = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "To paragraph" ; > ;
			< "As character" ; > ;
			< "To page" ; > ;
			< "To frame" ; > ;
		};
	};
	FixedText FT_ORIENT
	{
		Pos = MAP_APPFONT ( 12 + 121 + 8, 24 + 120 ) ;
		Size = MAP_APPFONT ( 37 , 10 ) ;
        Hide = TRUE ;
		Text [ en-US ] = "P~osition";
	};
	ListBox LB_ORIENT
	{
	    HelpID = "cui:ListBox:RID_SVXPAGE_POSITION_SIZE:LB_ORIENT";
		Pos = MAP_APPFONT ( 46 + 121 + 16 , 22 + 120 );
		Size = MAP_APPFONT ( 54 , 60 ) ;
		Hide = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "From top" ; > ;
			< "Above" ; > ;
			< "Centered" ; > ;
			< "Below" ; > ;
			< "Top of character" ; > ;
			< "Center of character" ; > ;
			< "Bottom of character" ; > ;
			< "Top of line" ; > ;
			< "Center of line" ; > ;
			< "Bottom of line" ; > ;
		};
	};
};

 // RID_SVXPAGE_ANGLE --------------------------------------------------------
TabPage RID_SVXPAGE_ANGLE
{
	HelpId = HID_TRANS_ANGLE ;
	Hide = TRUE ;
	Text [ en-US ] = "Angle" ;
	Size = MAP_APPFONT ( 260 , MA_TABPAGE_HEIGHT ) ;
	FixedLine FL_POSITION
	{
		Pos = MAP_APPFONT ( 6 , 3  ) ;
		Size = MAP_APPFONT ( 248 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Pivot point" ;
	};
	FixedText FT_POS_X
	{
		Pos = MAP_APPFONT ( 12 , 16 + 11  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "Position ~X" ;
	};
	FixedText FT_POS_Y
	{
		Pos = MAP_APPFONT ( 12 , 32 + 11  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "Position ~Y" ;
	};
	MetricField MTR_FLD_POS_X
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_ANGLE:MTR_FLD_POS_X";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 14 + 11  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -500000 ;
		Maximum = 500000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	MetricField MTR_FLD_POS_Y
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_ANGLE:MTR_FLD_POS_Y";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 30 + 11 ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -500000 ;
		Maximum = 500000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	FixedText FT_POSPRESETS
	{
		Pos = MAP_APPFONT ( 178 , 14  ) ;
        Size = MAP_APPFONT ( 70 , 8 ) ;
		Text [ en-US ] = "Default settings";
	};
	Control CTL_RECT
	{
		HelpId = HID_TPROTATION_CTRL1 ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 178 , 14 + 11 ) ;
		Size = MAP_APPFONT ( 70 , 48 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Rotation point" ;
	};
	FixedLine FL_ANGLE
	{
		Pos = MAP_APPFONT ( 6 , 71 + 11 ) ;
		Size = MAP_APPFONT ( 248 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Rotation angle" ;
	};
	FixedText FT_ANGLE
	{
		Pos = MAP_APPFONT ( 12 , 84 + 22  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "~Angle" ;
	};
	MetricField MTR_FLD_ANGLE
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_ANGLE:MTR_FLD_ANGLE";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 82 + 22  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -500000 ;
		Maximum = 500000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText [ en-US ] = " degrees" ;
		SpinSize = 500 ;
	};
	FixedText FT_ANGLEPRESETS
	{
		Pos = MAP_APPFONT ( 178 , 82 + 11  ) ;
        Size = MAP_APPFONT ( 70 , 8 ) ;
		Text [ en-US ] = "Default settings";
	};
	Control CTL_ANGLE
	{
		HelpId = HID_TPROTATION_CTRL2 ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 178 , 82 + 22  ) ;
		Size = MAP_APPFONT ( 70 , 48 ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Rotation Angle";
	};
};
 // RID_SVXPAGE_SLANT -----------------------------------------------------
TabPage RID_SVXPAGE_SLANT
{
	HelpId = HID_TRANS_SLANT ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260 , MA_TABPAGE_HEIGHT ) ;
	Text [ en-US ] = "Slant & Corner Radius" ;
	FixedLine FL_RADIUS
	{
		Pos = MAP_APPFONT ( 6 , 3  ) ;
		Size = MAP_APPFONT ( 248 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Corner radius" ;
	};
	FixedText FT_RADIUS
	{
		Pos = MAP_APPFONT ( 12 , 16  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "~Radius" ;
	};
	MetricField MTR_FLD_RADIUS
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_SLANT:MTR_FLD_RADIUS";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 14  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 500000 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_MM ;
		SpinSize = 10 ;
	};
	FixedLine FL_SLANT
	{
		Pos = MAP_APPFONT ( 6 , 35  ) ;
		Size = MAP_APPFONT ( 248 , RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Slant" ;
	};
	FixedText FT_ANGLE
	{
		Pos = MAP_APPFONT ( 12 , 48  ) ;
		Size = MAP_APPFONT ( 40 , 10 ) ;
		Text [ en-US ] = "~Angle" ;
	};
	MetricField MTR_FLD_ANGLE
	{
	    HelpID = "cui:MetricField:RID_SVXPAGE_SLANT:MTR_FLD_ANGLE";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 56 , 46  ) ;
		Size = MAP_APPFONT ( 54 , 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -8900 ;
		First = -8900 ;
		Maximum = 8900 ;
		Last = 8900 ;
		StrictFormat = TRUE ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CUSTOM ;
		SpinSize = 500 ;
		CustomUnitText [ en-US ] = " degrees" ;
	};
};
 // RID_SVXDLG_TRANSFORM -----------------------------------------------------

#define _POS_SIZE_TEXT \
    Text [ en-US ] = "Position and Size" ;          \


TabDialog RID_SVXDLG_TRANSFORM\
{
	OutputSize = TRUE ;
	SvLook = TRUE ;
	Size = MAP_APPFONT ( 289 , MA_TABPAGE_HEIGHT + 41 ) ;
	Text [ en-US ] = "Position and Size" ;\
	Moveable = TRUE ;
	TabControl TAB_CONTROL\
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 3 , 3 ) ;
		Size = MAP_APPFONT ( 260 , MA_TABPAGE_HEIGHT ) ;
		PageList =
		{
			PageItem\
			{
				Identifier = RID_SVXPAGE_POSITION_SIZE ;
				PageResID = RID_SVXPAGE_POSITION_SIZE ;
                _POS_SIZE_TEXT
            };
            PageItem
            {
                Identifier = RID_SVXPAGE_SWPOSSIZE;
                PageResID = RID_SVXPAGE_SWPOSSIZE;
                _POS_SIZE_TEXT
            };
            PageItem
			{
				Identifier = RID_SVXPAGE_ANGLE ;
				Text [ en-US ] = "Rotation" ;
				PageResID = RID_SVXPAGE_ANGLE ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_SLANT ;
				PageResID = RID_SVXPAGE_SLANT ;
				Text [ en-US ] = "Slant & Corner Radius" ;
			};
		};
	};
};
 // ********************************************************************** EOF
























































































