/**************************************************************
 *
 * 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 "misc.hrc"
#include "docfnote.hrc"
#include "helpid.h"
#include "cmdid.h"
#include "frmui.hrc"
TabDialog DLG_DOC_FOOTNOTE
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Text [ en-US ] = "Footnotes/Endnotes Settings" ;
	Moveable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = TP_FOOTNOTEOPTION ;
				PageResID = TP_FOOTNOTEOPTION ;
				Text [ en-US ] = "Footnotes" ;
			};
			PageItem
			{
				Identifier = TP_ENDNOTEOPTION ;
				PageResID = TP_ENDNOTEOPTION ;
				Text [ en-US ] = "Endnotes" ;
			};
		};
	};
};
TabPage TP_FOOTNOTEOPTION
{
	SVLook = TRUE ;
	Hide = TRUE ;
	HelpID = HID_FOOTNOTE_OPTIONS ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	FixedLine FL_NUM
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "AutoNumbering" ;
		Group = TRUE ;
	};
	FixedText FT_NUMTYPE
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 51, 8 ) ;
		Text [ en-US ] = "Num~bering" ;
	};
	ListBox LB_NUMVIEW
	{
		HelpID = "sw:ListBox:TP_FOOTNOTEOPTION:LB_NUMVIEW" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 65, 14 ) ;
		Size = MAP_APPFONT ( 59, 72 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_OFFSET
	{
		Pos = MAP_APPFONT ( 130, 16 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "~Start at" ;
	};
	NumericField FLD_OFFSET
	{
		HelpID = "sw:NumericField:TP_FOOTNOTEOPTION:FLD_OFFSET" ;
		Pos = MAP_APPFONT ( 189, 14 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Spin = TRUE ;
		Minimum = 1 ;
		First = 1 ;
		Last = 9999 ;
		Maximum = 9999 ;
		TabStop = TRUE ;
		Border = TRUE ;
	};
	FixedText FT_NUMCOUNT
	{
		Pos = MAP_APPFONT ( 12, 31 ) ;
		Size = MAP_APPFONT ( 51, 8 ) ;
		Text [ en-US ] = "~Counting" ;
	};
	ListBox LB_NUMCOUNT
	{
		HelpID = "sw:ListBox:TP_FOOTNOTEOPTION:LB_NUMCOUNT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 65, 29 ) ;
		Size = MAP_APPFONT ( 59, 50 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DropDown = TRUE ;
		CurPos = 0 ;
		StringList [ en-US ] =
		{
			< "Per page" ;		> ;
			< "Per chapter" ;	> ;
			< "Per document" ;	> ;
		};
	};
	FixedText FT_PREFIX
	{
		Pos = MAP_APPFONT ( 12, 46 ) ;
		Size = MAP_APPFONT ( 48, 8 ) ;
		Text [ en-US ] = "~Before" ;
		Left = TRUE ;
	};
	Edit ED_PREFIX
	{
		HelpID = "sw:Edit:TP_FOOTNOTEOPTION:ED_PREFIX" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 65, 44 ) ;
		Size = MAP_APPFONT ( 59, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 50 ;
	};
	FixedText FT_SUFFIX
	{
		Pos = MAP_APPFONT ( 130, 46 ) ;
		Size = MAP_APPFONT ( 48, 8 ) ;
		Text [ en-US ] = "~After" ;
		Left = TRUE ;
	};
	Edit ED_SUFFIX
	{
		HelpID = "sw:Edit:TP_FOOTNOTEOPTION:ED_SUFFIX" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 189, 44 ) ;
		Size = MAP_APPFONT ( 59, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 50 ;
	};
	FixedText FT_POS
	{
		Pos = MAP_APPFONT ( 12, 63 ) ;
		Size = MAP_APPFONT ( 36, 8 ) ;
		Text [ en-US ] = "Position" ;
	};
	RadioButton RB_POS_PAGE
	{
		HelpID = "sw:RadioButton:TP_FOOTNOTEOPTION:RB_POS_PAGE" ;
		Pos = MAP_APPFONT ( 65, 62 ) ;
		Size = MAP_APPFONT ( 150, 10 ) ;
		Text [ en-US ] = "~End of page" ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	RadioButton RB_POS_CHAPTER
	{
		HelpID = "sw:RadioButton:TP_FOOTNOTEOPTION:RB_POS_CHAPTER" ;
		Pos = MAP_APPFONT ( 65, 75 ) ;
		Size = MAP_APPFONT ( 150, 10 ) ;
		Text [ en-US ] = "En~d of document" ;
	};
	FixedLine FL_TEMPL
	{
		Pos = MAP_APPFONT ( 6, 89 ) ;
		Size = MAP_APPFONT ( 103, 8 ) ;
		Text [ en-US ] = "Styles" ;
	};
	FixedText FT_PARA_TEMPL
	{
		Pos = MAP_APPFONT ( 12, 102 ) ;
		Size = MAP_APPFONT ( 35, 8 ) ;
		Text [ en-US ] = "Pa~ragraph" ;
		Left = TRUE ;
	};
	ListBox LB_PARA_TEMPL
	{
		HelpID = "sw:ListBox:TP_FOOTNOTEOPTION:LB_PARA_TEMPL" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 48, 100 ) ;
		Size = MAP_APPFONT ( 58, 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		CurPos = 0 ;
		Sort = TRUE ;
	};
	FixedText FT_PAGE_TEMPL
	{
		Pos = MAP_APPFONT ( 12, 118 ) ;
		Size = MAP_APPFONT ( 35, 8 ) ;
		Text [ en-US ] = "~Page" ;
		Left = TRUE ;
	};
	ListBox LB_PAGE_TEMPL
	{
		HelpID = "sw:ListBox:TP_FOOTNOTEOPTION:LB_PAGE_TEMPL" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 48, 116) ;
		Size = MAP_APPFONT ( 58, 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedLine FL_CHAR_TEMPL
	{
		Pos = MAP_APPFONT ( 113, 89 ) ;
		Size = MAP_APPFONT ( 141, 8 ) ;

		Text [ en-US ] = "Character Styles" ;
	};
	FixedText FT_ANCHR_CHARFMT
	{
		Pos = MAP_APPFONT ( 117, 102 ) ;
		Size = MAP_APPFONT ( 67, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Te~xt area" ;
	};
	ListBox LB_ANCHR_CHARFMT
	{
		HelpID = "sw:ListBox:TP_FOOTNOTEOPTION:LB_ANCHR_CHARFMT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 186, 100 ) ;
		Size = MAP_APPFONT ( 65, 72 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_TEXT_CHARFMT
	{
		Pos = MAP_APPFONT ( 117, 118 ) ;
		Size = MAP_APPFONT ( 67, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "~Footnote area" ;
	};
	ListBox LB_TEXT_CHARFMT
	{
		HelpID = "sw:ListBox:TP_FOOTNOTEOPTION:LB_TEXT_CHARFMT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 186, 116 ) ;
		Size = MAP_APPFONT ( 65, 72 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedLine FL_CONT
	{
		Pos = MAP_APPFONT ( 6, 134 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Continuation notice" ;
	};
	FixedText FT_CONT
	{
		Pos = MAP_APPFONT ( 12, 148 ) ;
		Size = MAP_APPFONT ( 73, 8 ) ;
		Text [ en-US ] = "End ~of footnote" ;
		Left = TRUE ;
	};
	Edit ED_CONT
	{
		HelpID = "sw:Edit:TP_FOOTNOTEOPTION:ED_CONT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 145 ) ;
		Size = MAP_APPFONT ( 160, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 30 ;
	};
	FixedText FT_CONT_FROM
	{
		Pos = MAP_APPFONT ( 12, 163 ) ;
		Size = MAP_APPFONT ( 73, 8 ) ;
		Text [ en-US ] = "Star~t of next page" ;
		Left = TRUE ;
	};
	Edit ED_CONT_FROM
	{
		HelpID = "sw:Edit:TP_FOOTNOTEOPTION:ED_CONT_FROM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 161 ) ;
		Size = MAP_APPFONT ( 160, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 30 ;
	};
};
TabPage TP_ENDNOTEOPTION
{
	SVLook = TRUE ;
	Hide = TRUE ;
	HelpID = HID_ENDNOTE_OPTIONS ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	FixedLine FL_NUM
	{
		Pos = MAP_APPFONT ( 6, 2 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "AutoNumbering" ;
		Group = TRUE ;
	};
	FixedText FT_NUMTYPE
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 51, 8 ) ;
		Text [ en-US ] = "~Numbering" ;
	};
	ListBox LB_NUMVIEW
	{
		HelpID = "sw:ListBox:TP_ENDNOTEOPTION:LB_NUMVIEW" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 65, 14 ) ;
		Size = MAP_APPFONT ( 59, 72 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DropDown = TRUE ;
		CurPos = 0 ;
		StringList =
		{
			"A, B, C" ;
			"a, b, c" ;
			"I, II, III" ;
			"i, ii, iii" ;
			"1, 2, 3" ;
			"A, .., AA, .., AAA" ;
			"a, .., aa, .., aaa" ;
		};
	};
	FixedText FT_OFFSET
	{
		Pos = MAP_APPFONT ( 130, 16 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "~Start at" ;
	};
	NumericField FLD_OFFSET
	{
		HelpID = "sw:NumericField:TP_ENDNOTEOPTION:FLD_OFFSET" ;
		Pos = MAP_APPFONT ( 189, 14 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Spin = TRUE ;
		Minimum = 1 ;
		First = 1 ;
		Last = 9999 ;
		Maximum = 9999 ;
		TabStop = TRUE ;
		Border = TRUE ;
	};
	FixedText FT_NUMCOUNT
	{
		Pos = MAP_APPFONT ( 82, 14 ) ;
		Size = MAP_APPFONT ( 36, 8 ) ;
		Hide = TRUE;
	};
	ListBox LB_NUMCOUNT
	{
		HelpID = "sw:ListBox:TP_ENDNOTEOPTION:LB_NUMCOUNT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 27 ) ;
		Size = MAP_APPFONT ( 62, 72 ) ;
		Hide = TRUE ;
	};
	FixedText FT_PREFIX
	{
		Pos = MAP_APPFONT ( 12, 32 ) ;
		Size = MAP_APPFONT ( 48, 8 ) ;

		Text [ en-US ] = "~Before" ;
		Left = TRUE ;
	};
	Edit ED_PREFIX
	{
		HelpID = "sw:Edit:TP_ENDNOTEOPTION:ED_PREFIX" ;
		Pos = MAP_APPFONT ( 65, 30 ) ;
		Size = MAP_APPFONT ( 59, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 50 ;
	};
	FixedText FT_SUFFIX
	{
		Pos = MAP_APPFONT ( 130, 32 ) ;
		Size = MAP_APPFONT ( 48, 8 ) ;
		Text [ en-US ] = "~After" ;
		Left = TRUE ;
	};
	Edit ED_SUFFIX
	{
		HelpID = "sw:Edit:TP_ENDNOTEOPTION:ED_SUFFIX" ;
		Pos = MAP_APPFONT ( 189, 30 ) ;
		Size = MAP_APPFONT ( 59, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 50 ;
	};
	FixedText FT_POS
	{
		Pos = MAP_APPFONT ( 82, 14 ) ;
		Size = MAP_APPFONT ( 36, 8 ) ;
		Hide = TRUE;
	};
	RadioButton RB_POS_PAGE
	{
		HelpID = "sw:RadioButton:TP_ENDNOTEOPTION:RB_POS_PAGE" ;
		Pos = MAP_APPFONT ( 12, 104 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "End ~of page" ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	RadioButton RB_POS_CHAPTER
	{
		HelpID = "sw:RadioButton:TP_ENDNOTEOPTION:RB_POS_CHAPTER" ;
		Pos = MAP_APPFONT ( 12, 118 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "End of ~document" ;
	};
	FixedLine FL_TEMPL
	{
		Pos = MAP_APPFONT ( 6, 46 ) ;
		Size = MAP_APPFONT ( 115, 8 ) ;
		Text [ en-US ] = "Styles" ;
	};
	FixedText FT_PARA_TEMPL
	{
		Pos = MAP_APPFONT ( 12, 58 ) ;
		Size = MAP_APPFONT ( 38, 8 ) ;
		Text [ en-US ] = "Pa~ragraph" ;
		Left = TRUE ;
	};
	ListBox LB_PARA_TEMPL
	{
		HelpID = "sw:ListBox:TP_ENDNOTEOPTION:LB_PARA_TEMPL" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 51, 56 ) ;
		Size = MAP_APPFONT ( 67, 72 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		CurPos = 0 ;
		Sort = TRUE ;
	};
	FixedText FT_PAGE_TEMPL
	{
		Pos = MAP_APPFONT ( 12, 74 ) ;
		Size = MAP_APPFONT ( 38, 8 ) ;
		Text [ en-US ] = "~Page" ;
		Left = TRUE ;
	};
	ListBox LB_PAGE_TEMPL
	{
		HelpID = "sw:ListBox:TP_ENDNOTEOPTION:LB_PAGE_TEMPL" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 51, 72 ) ;
		Size = MAP_APPFONT ( 67, 72 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedLine FL_CHAR_TEMPL
	{
		Pos = MAP_APPFONT ( 125, 46 ) ;
		Size = MAP_APPFONT ( 129, 8 ) ;
		Text [ en-US ] = "Character Styles" ;
	};
	FixedText FT_ANCHR_CHARFMT
	{
		Pos = MAP_APPFONT ( 129, 58 ) ;
		Size = MAP_APPFONT ( 55, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Te~xt area" ;
	};
	ListBox LB_ANCHR_CHARFMT
	{
		HelpID = "sw:ListBox:TP_ENDNOTEOPTION:LB_ANCHR_CHARFMT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 186, 56 ) ;
		Size = MAP_APPFONT ( 65, 72 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_TEXT_CHARFMT
	{
		Pos = MAP_APPFONT ( 129, 74 ) ;
		Size = MAP_APPFONT ( 55, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "~Endnote area" ;
	};
	ListBox LB_TEXT_CHARFMT
	{
		HelpID = "sw:ListBox:TP_ENDNOTEOPTION:LB_TEXT_CHARFMT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 186, 72 ) ;
		Size = MAP_APPFONT ( 65, 72 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedLine FL_CONT
	{
		Pos = MAP_APPFONT ( 80, 91 ) ;
		Size = MAP_APPFONT ( 174, 8 ) ;
		Text [ en-US ] = "Continuation notice" ;
	};
	FixedText FT_CONT
	{
		Pos = MAP_APPFONT ( 86, 103 ) ;
		Size = MAP_APPFONT ( 38, 8 ) ;
		Text [ en-US ] = "~Following page" ;
		Left = TRUE ;
	};
	Edit ED_CONT
	{
		HelpID = "sw:Edit:TP_ENDNOTEOPTION:ED_CONT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 137, 101 ) ;
		Size = MAP_APPFONT ( 114, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 30 ;
	};
	FixedText FT_CONT_FROM
	{
		Pos = MAP_APPFONT ( 86, 118 ) ;
		Size = MAP_APPFONT ( 38, 8 ) ;
		Text [ en-US ] = "~Start" ;
		Left = TRUE ;
	};
	Edit ED_CONT_FROM
	{
		HelpID = "sw:Edit:TP_ENDNOTEOPTION:ED_CONT_FROM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 137, 116 ) ;
		Size = MAP_APPFONT ( 114, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		MaxTextLength = 30 ;
	};
};

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