/**************************************************************
 *
 * 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 "insfnote.hrc"
#include "helpid.h"
// #define DLG_INS_FOOTNOTE 257
ModalDialog DLG_INS_FOOTNOTE
{
	HelpID = "sw:ModalDialog:DLG_INS_FOOTNOTE" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 160, 100 ) ;
	Text [ en-US ] = "Insert Footnote/Endnote" ;
	Moveable = TRUE ;
	Edit ED_NUMBER_CHAR
	{
		HelpID = "sw:Edit:DLG_INS_FOOTNOTE:ED_NUMBER_CHAR" ;
		Disable = TRUE ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 69, 27 ) ;
		Size = MAP_APPFONT ( 23, 12 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		Left = TRUE ;
	};
	String STR_CHAR
	{
		Text [ en-US ] = "Character" ;
	};
	OKButton BT_OK
	{
		Pos = MAP_APPFONT ( 104, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 104, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	HelpButton BT_HELP
	{
		Pos = MAP_APPFONT ( 104, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	ImageButton BT_PREV
	{
		HelpID = "sw:ImageButton:DLG_INS_FOOTNOTE:BT_PREV" ;
		Pos = MAP_APPFONT ( 104, 82 ) ;
		Size = MAP_APPFONT ( 24, 14 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		SYMBOL = IMAGEBUTTON_PREV ;
	};
	ImageButton BT_NEXT
	{
		HelpID = "sw:ImageButton:DLG_INS_FOOTNOTE:BT_NEXT" ;
		Pos = MAP_APPFONT ( 130, 82 ) ;
		Size = MAP_APPFONT ( 24, 14 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		SYMBOL = IMAGEBUTTON_NEXT ;
	};
	RadioButton RB_NUMBER_AUTO
	{
		HelpID = "sw:RadioButton:DLG_INS_FOOTNOTE:RB_NUMBER_AUTO" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 79, 10 ) ;
		Text [ en-US ] = "~Automatic" ;
		TabStop = TRUE ;
		Group = TRUE ;
		Check = TRUE ;
	};
	RadioButton RB_NUMBER_CHAR
	{
		HelpID = "sw:RadioButton:DLG_INS_FOOTNOTE:RB_NUMBER_CHAR" ;
		Pos = MAP_APPFONT ( 12, 27 ) ;
		Size = MAP_APPFONT ( 54, 10 ) ;
		Text [ en-US ] = "~Character" ;
	};
	FixedLine FL_NUMBER
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 92, 8 ) ;
		Text [ en-US ] = "Numbering" ;
	};
	PushButton BT_NUMBER_CHAR
	{
		HelpID = "sw:PushButton:DLG_INS_FOOTNOTE:BT_NUMBER_CHAR" ;
		Pos = MAP_APPFONT ( 69, 42 ) ;
		Size = MAP_APPFONT ( 12, 12 ) ;
		Text = "..." ;
	};
	RadioButton RB_TYPE_FTN
	{
		HelpID = "sw:RadioButton:DLG_INS_FOOTNOTE:RB_TYPE_FTN" ;
		Pos = MAP_APPFONT ( 12, 70 ) ;
		Size = MAP_APPFONT ( 79, 10 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		Check = TRUE ;
		Text [ en-US ] = "~Footnote" ;
	};
	RadioButton RB_TYPE_ENDNOTE
	{
		HelpID = "sw:RadioButton:DLG_INS_FOOTNOTE:RB_TYPE_ENDNOTE" ;
		Pos = MAP_APPFONT ( 12, 83 ) ;
		Size = MAP_APPFONT ( 79, 10 ) ;
		Text [ en-US ] = "~Endnote" ;
	};
	FixedLine FL_TYPE
	{
		Pos = MAP_APPFONT ( 6, 60 ) ;
		Size = MAP_APPFONT ( 92, 8 ) ;
		Text [ en-US ] = "Type" ;
	};
};

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