/**************************************************************
 *
 * 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_FUNC
{
	HelpID = HID_FLD_FUNC ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	FixedText FT_FUNCTYPE
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Text [ en-US ] = "~Type" ;
		Left = TRUE ;
	};
	ListBox LB_FUNCTYPE
	{
		HelpID = "sw:ListBox:TP_FLD_FUNC:LB_FUNCTYPE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 14 ) ;
		Size = MAP_APPFONT ( 76, 165 ) ;
		TabStop = TRUE ;
		Sort = FALSE ;
		AutoHScroll = TRUE ;
	};
	FixedText FT_FUNCSELECTION
	{
		Pos = MAP_APPFONT ( 88, 3 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Text [ en-US ] = "S~elect" ;
		Hide = TRUE ;
		Left = TRUE ;
	};
	ListBox LB_FUNCSELECTION
	{
		HelpID = "sw:ListBox:TP_FLD_FUNC:LB_FUNCSELECTION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 14 ) ;
		Size = MAP_APPFONT ( 76, 165 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Sort = TRUE ;
		AutoHScroll = TRUE ;
	};
	FixedText FT_FUNCFORMAT
	{
		Pos = MAP_APPFONT ( 88, 3 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "F~ormat" ;
	};
	ListBox LB_FUNCFORMAT
	{
		HelpID = "sw:ListBox:TP_FLD_FUNC:LB_FUNCFORMAT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88, 14 ) ;
		Size = MAP_APPFONT ( 76, 165 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_FUNCNAME
	{
		Pos = MAP_APPFONT ( 170, 3 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Na~me" ;
	};
	Edit ED_FUNCNAME
	{
		HelpID = "sw:Edit:TP_FLD_FUNC:ED_FUNCNAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 14 ) ;
		Size = MAP_APPFONT ( 84, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
	};
	FixedText FT_FUNCVALUE
	{
		Pos = MAP_APPFONT ( 170, 30 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Text [ en-US ] = "~Value" ;
		Left = TRUE ;
	};
	Edit ED_FUNCVALUE
	{
		HelpID = "sw:Edit:TP_FLD_FUNC:ED_FUNCVALUE" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 41 ) ;
		Size = MAP_APPFONT ( 84, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
	};
	FixedText FT_FUNCCOND1
	{
		Pos = MAP_APPFONT ( 170, 30 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Left = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "Then" ;
	};
	Edit ED_FUNCCOND1
	{
		HelpID = "sw:Edit:TP_FLD_FUNC:ED_FUNCCOND1" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 41 ) ;
		Size = MAP_APPFONT ( 84, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Hide = TRUE ;
	};
	FixedText FT_FUNCCOND2
	{
		Pos = MAP_APPFONT ( 170, 57 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Left = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "Else" ;
	};
	Edit ED_FUNCCOND2
	{
		HelpID = "sw:Edit:TP_FLD_FUNC:ED_FUNCCOND2" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 68 ) ;
		Size = MAP_APPFONT ( 84, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Hide = TRUE ;
	};
	PushButton BT_FUNCMACRO
	{
		HelpID = "sw:PushButton:TP_FLD_FUNC:BT_FUNCMACRO" ;
		Pos = MAP_APPFONT ( 204, 165 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Macro..." ;
		Disable = TRUE ;
		TabStop = TRUE ;
	};
	FixedText FT_LISTITEM
	{
		Pos = MAP_APPFONT ( 170, 3 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Ite~m" ;
	};
	Edit ED_LISTITEM
	{
		HelpID = "sw:Edit:TP_FLD_FUNC:ED_LISTITEM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 14 ) ;
		Size = MAP_APPFONT ( 84, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Hide = TRUE ;
	};
	PushButton PB_LISTADD
	{
		HelpID = "sw:PushButton:TP_FLD_FUNC:PB_LISTADD" ;
		Pos = MAP_APPFONT ( 170, 29 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Add" ;
	};
	FixedText FT_LISTITEMS
	{
		Pos = MAP_APPFONT ( 170, 46 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Items on ~list" ;
	};
	ListBox LB_LISTITEMS
	{
		HelpID = "sw:ListBox:TP_FLD_FUNC:LB_LISTITEMS" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 57 ) ;
		Size = MAP_APPFONT ( 83, 44 ) ;
		TabStop = TRUE ;
		Sort = FALSE ;
		AutoHScroll = TRUE ;
	};
	PushButton PB_LISTREMOVE
	{
		HelpID = "sw:PushButton:TP_FLD_FUNC:PB_LISTREMOVE" ;
		Pos = MAP_APPFONT ( 203, 104 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Remove" ;
	};
	PushButton PB_LISTUP
	{
		HelpID = "sw:PushButton:TP_FLD_FUNC:PB_LISTUP" ;
		Pos = MAP_APPFONT ( 203, 121 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Move ~Up" ;
	};
	PushButton PB_LISTDOWN
	{
		HelpID = "sw:PushButton:TP_FLD_FUNC:PB_LISTDOWN" ;
		Pos = MAP_APPFONT ( 203, 138 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Move Do~wn" ;
	};
	FixedText FT_LISTNAME
	{
		Pos = MAP_APPFONT ( 170, 156 ) ;
		Size = MAP_APPFONT ( 84, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Na~me" ;
	};
	Edit ED_LISTNAME
	{
		HelpID = "sw:Edit:TP_FLD_FUNC:ED_LISTNAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170, 167 ) ;
		Size = MAP_APPFONT ( 84, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Hide = TRUE ;
	};
	Text [ en-US ] = "Functions" ;
};

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