/**************************************************************
 * 
 * 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" ;
	};
};
