/**************************************************************
 *
 * 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 "fldtdlg.hrc"
#include "helpid.h"
TabPage TP_FLD_REF
{
	HelpID = HID_FLD_REF ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	FixedText FT_REFTYPE
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Text [ en-US ] = "~Type" ;
		Left = TRUE ;
	};
	ListBox LB_REFTYPE
	{
		HelpID = "sw:ListBox:TP_FLD_REF:LB_REFTYPE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 14 ) ;
		Size = MAP_APPFONT ( 76, 73 ) ;
		TabStop = TRUE ;
		AutoHScroll = TRUE ;
	};
	FixedText FT_REFSELECTION
	{
		Pos = MAP_APPFONT ( 88, 3 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Text [ en-US ] = "S~election" ;
		Left = TRUE ;
	};
	ListBox LB_REFSELECTION
	{
		HelpID = "sw:ListBox:TP_FLD_REF:LB_REFSELECTION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 14 ) ;
		Size = MAP_APPFONT ( 166, 136 ) ;
		TabStop = TRUE ;
		Sort = TRUE ;
	};
	/* TreeListBox in order to have tool tips - shares window position and size with LB_REFSELECTION */
	Control LB_REFSELECTION_TOOLTIP
	{
		HelpID = HID_REFSELECTION_TOOLTIP ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 14 ) ;
		Size = MAP_APPFONT ( 166, 136 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_REFFORMAT
	{
		Pos = MAP_APPFONT ( 6, 93 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Insert ~reference to" ;
	};
	ListBox LB_REFFORMAT
	{
		HelpID = "sw:ListBox:TP_FLD_REF:LB_REFFORMAT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 104 ) ;
		Size = MAP_APPFONT ( 76, 75 ) ;
		TabStop = TRUE ;
		DropDown = FALSE ;
		//Sort = TRUE;
	};
	FixedText FT_REFNAME
	{
		Pos = MAP_APPFONT ( 88, 155 ) ;
		Size = MAP_APPFONT ( 80, 10 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Na~me" ;
	};
	Edit ED_REFNAME
	{
		HelpID = "sw:Edit:TP_FLD_REF:ED_REFNAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 167 ) ;
		Size = MAP_APPFONT ( 80, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
	};
	FixedText FT_REFVALUE
	{
		Pos = MAP_APPFONT ( 174, 155 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "~Value" ;
		Disable = TRUE ;
		Left = TRUE ;
	};
	Edit ED_REFVALUE
	{
		HelpID = "sw:Edit:TP_FLD_REF:ED_REFVALUE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 174, 167 ) ;
		Size = MAP_APPFONT ( 80, 12 ) ;
		TabStop = TRUE ;
		Disable = TRUE ;
		Left = TRUE ;
	};
	String STR_REFBOOKMARK
	{
		Text [ en-US ] = "Bookmarks" ;
	};
	String STR_REFFOOTNOTE
	{
		Text [ en-US ] = "Footnotes" ;
	};
	String STR_REFENDNOTE
	{
		Text [ en-US ] = "Endnotes" ;
	};
	String STR_REFHEADING
	{
		Text [ en-US ] = "Headings" ;
	};
	String STR_REFNUMITEM
	{
		Text [ en-US ] = "Numbered Paragraphs" ;
	};
	Text [ en-US ] = "Cross-references" ;
};

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