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

// pragma ----------------------------------------------------------------

// include ---------------------------------------------------------------
#include <svtools/controldims.hrc>
#include "connect.hrc"
#include <cuires.hrc>
#include "helpid.hrc"
#include <svx/dialogs.hrc>

// RID_SVXPAGE_CONNECTION ------------------------------------------------
TabPage RID_SVXPAGE_CONNECTION
{
	HelpId = HID_PAGE_CONNECTION ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Text [ en-US ] = "Connector" ;
	FixedText FT_TYPE
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 25, 8 ) ;
		Text [ en-US ] = "~Type" ;
	};
	ListBox LB_TYPE
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_CONNECTION:LB_TYPE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 37, 6 ) ;
		Size = MAP_APPFONT ( 83, 54 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedLine FL_DELTA
	{
		Pos = MAP_APPFONT ( 6, 24 ) ;
		Size = MAP_APPFONT ( 120, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Line skew" ;
	};
	FixedText FT_LINE_1
	{
		Pos = MAP_APPFONT ( 12, 37 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "Line ~1" ;
	};
	MetricField MTR_FLD_LINE_1
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_LINE_1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 35 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	FixedText FT_LINE_2
	{
		Pos = MAP_APPFONT ( 12, 53 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "Line ~2" ;
	};
	MetricField MTR_FLD_LINE_2
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_LINE_2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 51 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	FixedText FT_LINE_3
	{
		Pos = MAP_APPFONT ( 12, 69 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "Line ~3" ;
	};
	MetricField MTR_FLD_LINE_3
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_LINE_3" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 67 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	FixedLine FL_DISTANCE
	{
		Pos = MAP_APPFONT ( 6, 85 ) ;
		Size = MAP_APPFONT ( 120, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Line spacing" ;
	};
	FixedText FT_HORZ_1
	{
		Pos = MAP_APPFONT ( 12, 98 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "~Begin horizontal" ;
	};
	MetricField MTR_FLD_HORZ_1
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_HORZ_1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 96 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	FixedText FT_HORZ_2
	{
		Pos = MAP_APPFONT ( 12, 130 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "End ~horizontal" ;
	};
	MetricField MTR_FLD_HORZ_2
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_HORZ_2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 128 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	FixedText FT_VERT_1
	{
		Pos = MAP_APPFONT ( 12, 114 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "Begin ~vertical" ;
	};
	MetricField MTR_FLD_VERT_1
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_VERT_1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 112 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	FixedText FT_VERT_2
	{
		Pos = MAP_APPFONT ( 12, 146 ) ;
		Size = MAP_APPFONT ( 66, 8 ) ;
		Text [ en-US ] = "~End vertical" ;
	};
	MetricField MTR_FLD_VERT_2
	{
		HelpID = "cui:MetricField:RID_SVXPAGE_CONNECTION:MTR_FLD_VERT_2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 79, 144 ) ;
		Size = MAP_APPFONT ( 41, 12 ) ;
		TabStop = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		DecimalDigits = 2 ;
		Minimum = -10000 ;
		First = -10000 ;
		Maximum = 10000 ;
		Last = 10000 ;
		SpinSize = 10 ;
		Unit = FUNIT_CM ;
	};
	Control CTL_PREVIEW
	{
		HelpId = HID_PAGE_CONNECTION_CTL_PREVIEW ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6 + 120 + RSC_SP_FLGR_SPACE_Y + RSC_SP_FLGR_INNERBORDER_LEFT, 35 ) ;
		Size = MAP_APPFONT ( 118, 121 ) ;
		QuickHelpText [ en-US ] = "Preview" ;
	};
};

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