/**************************************************************
 *
 * 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 "globals.hrc"
#include "pgfnote.hrc"
#include "helpid.h"
TabPage TP_FOOTNOTE_PAGE
{
	HelpID = HID_FOOTNOTE_PAGE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Hide = TRUE ;
	RadioButton RB_MAXHEIGHT_PAGE
	{
		HelpID = "sw:RadioButton:TP_FOOTNOTE_PAGE:RB_MAXHEIGHT_PAGE" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 132, 10 ) ;
		Text [ en-US ] = "~Not larger than page area" ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	RadioButton RB_MAXHEIGHT
	{
		HelpID = "sw:RadioButton:TP_FOOTNOTE_PAGE:RB_MAXHEIGHT" ;
		Pos = MAP_APPFONT ( 12, 28 ) ;
		Size = MAP_APPFONT ( 132, 10 ) ;
		Text [ en-US ] = "Maximum footnote ~height" ;
	};
	MetricField ED_MAXHEIGHT
	{
		HelpID = "sw:MetricField:TP_FOOTNOTE_PAGE:ED_MAXHEIGHT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 148, 26 ) ;
		Size = MAP_APPFONT ( 42, 12 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 50 ;
		Maximum = 99999 ;
		DecimalDigits = 2 ;
		Value = 200 ;
		Unit = FUNIT_CM ;
		First = 10 ;
		Last = 99999 ;
		SpinSize = 10 ;
	};
	FixedText FT_DIST
	{
		Pos = MAP_APPFONT ( 12, 44 ) ;
		Size = MAP_APPFONT ( 132, 8 ) ;
		Text [ en-US ] = "Space to text" ;
		Left = TRUE ;
	};
	MetricField ED_DIST
	{
		HelpID = "sw:MetricField:TP_FOOTNOTE_PAGE:ED_DIST" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 148, 42 ) ;
		Size = MAP_APPFONT ( 42, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Maximum = 999 ;
		DecimalDigits = 2 ;
		Value = 10 ;
		Unit = FUNIT_CM ;
		First = 5 ;
		Last = 99999 ;
		SpinSize = 10 ;
	};
	FixedLine FL_FOOTNOTE_SIZE
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Footnote area" ;
	};
	FixedText FT_LINEPOS
	{
		Pos = MAP_APPFONT ( 12, 73 ) ;
		Size = MAP_APPFONT ( 132, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "~Position" ;
	};
	ListBox DLB_LINEPOS
	{
		HelpID = "sw:ListBox:TP_FOOTNOTE_PAGE:DLB_LINEPOS" ;
		Pos = MAP_APPFONT ( 148, 71 ) ;
		Size = MAP_APPFONT ( 57, 40 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DropDown = TRUE ;
		CurPos = 0 ;
		StringList [ en-US ] =
		{
			< "Left" ; Default ;		> ;
			< "Centered" ; Default ;	> ;
			< "Right" ; Default ;		> ;
		};
	};
	FixedText FT_LINETYPE
	{
		Pos = MAP_APPFONT ( 12, 89 ) ;
		Size = MAP_APPFONT ( 132, 8 ) ;
		Group = TRUE ;
		Left = TRUE ;
		Text [ en-US ] = "~Weight" ;
	};
	ListBox DLB_LINETYPE
	{
		HelpID = "sw:ListBox:TP_FOOTNOTE_PAGE:DLB_LINETYPE" ;
		Pos = MAP_APPFONT ( 148, 87 ) ;
		Size = MAP_APPFONT ( 57, 50 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DropDown = TRUE ;
		CurPos = 0 ;
	};

	FixedText FT_LINEWIDTH
	{
		Pos = MAP_APPFONT ( 12, 105 ) ;
		Size = MAP_APPFONT ( 132, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "~Length" ;
	};
	MetricField ED_LINEWIDTH
	{
		HelpID = "sw:MetricField:TP_FOOTNOTE_PAGE:ED_LINEWIDTH" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 148, 103 ) ;
		Size = MAP_APPFONT ( 42, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Maximum = 100 ;
		Value = 100 ;
		Unit = FUNIT_PERCENT ;
		First = 10 ;
		Last = 100 ;
	};
	FixedText FT_LINEDIST
	{
		Pos = MAP_APPFONT ( 12, 121 ) ;
		Size = MAP_APPFONT ( 132, 8 ) ;
		Text [ en-US ] = "~Spacing to footnote contents" ;
		Left = TRUE ;
	};
	MetricField ED_LINEDIST
	{
		HelpID = "sw:MetricField:TP_FOOTNOTE_PAGE:ED_LINEDIST" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 148, 119 ) ;
		Size = MAP_APPFONT ( 42, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Maximum = 999 ;
		DecimalDigits = 2 ;
		Value = 10 ;
		Unit = FUNIT_CM ;
		First = 5 ;
		Last = 99999 ;
		SpinSize = 10 ;
	};
	FixedLine FL_LINE
	{
		Pos = MAP_APPFONT ( 6, 60 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Separator line" ;
	};
};

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