/**************************************************************
 *
 * 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 "namedlg.hrc"
ModelessDialog RID_SCDLG_NAMES
{
	OutputSize = TRUE ;
	HelpId = CMD_FID_DEFINE_NAME ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 222, 142 ) ;
	Text [ en-US ] = "Define Names" ;
	Moveable = TRUE ;
	// Closeable = TRUE; // This dialog has a Cancel button!
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 166, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 166, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 166, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	PushButton BTN_ADD
	{
	    HelpID = "sc:PushButton:RID_SCDLG_NAMES:BTN_ADD" ;
        Pos = MAP_APPFONT ( 166, 74 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Add" ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	PushButton BTN_REMOVE
	{
	    HelpID = "sc:PushButton:RID_SCDLG_NAMES:BTN_REMOVE" ;
        Pos = MAP_APPFONT ( 166, 92 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Delete" ;
		TabStop = TRUE ;
	};
    FixedLine FL_NAME
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 154, 8 ) ;
		Text [ en-US ] = "Name" ;
	};
/*
	ComboBox ED_NAME
	{
        Pos = MAP_APPFONT ( 12, 14 ) ;
        Size = MAP_APPFONT ( 145, 92 ) ;
		TabStop = TRUE ;
		VScroll = TRUE ;
		Sort = TRUE ;
	};
*/
        Edit ED_NAME
	{
	Border = TRUE ;
        Pos = MAP_APPFONT ( 12, 14 ) ;
        Size = MAP_APPFONT ( 145, 11 ) ;
	};

	ListBox LB_NAMES
	{
	Border = TRUE ;
        Pos = MAP_APPFONT ( 12, 25 ) ;
		Size = MAP_APPFONT ( 145, 84 ) ;
		TabStop = TRUE ;
		VScroll = TRUE ;
		AutoHScroll = TRUE ;
		Sort = TRUE ;
	};
	FixedLine FL_ASSIGN
	{
        Pos = MAP_APPFONT ( 6, 112 ) ;
		Size = MAP_APPFONT ( 154, 8 ) ;
		Text [ en-US ] = "Assigned to" ;
	};
	Edit ED_ASSIGN
	{
	    HelpID = "sc:Edit:RID_SCDLG_NAMES:ED_ASSIGN" ;
		Border = TRUE ;
        Pos = MAP_APPFONT ( 12, 123 ) ;
        Size = MAP_APPFONT ( 131, 12 ) ;
		TabStop = TRUE ;
	};
	ImageButton RB_ASSIGN
	{
	    HelpID = "sc:ImageButton:RID_SCDLG_NAMES:RB_ASSIGN" ;
        Pos = MAP_APPFONT ( 145, 122 ) ;
		Size = MAP_APPFONT ( 13, 15 ) ;
		TabStop = FALSE ;
		QuickHelpText [ en-US ] = "Shrink" ;
	};
	MoreButton BTN_MORE
	{
	    HelpID = "sc:MoreButton:RID_SCDLG_NAMES:BTN_MORE" ;
		Pos = MAP_APPFONT ( 166, 122 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		MapUnit = MAP_APPFONT ;
		Delta = 41 ;
	};
	FixedLine FL_TYPE
	{
		Pos = MAP_APPFONT ( 6, 142 ) ;
		Size = MAP_APPFONT ( 154, 8 ) ;
		Text [ en-US ] = "Area type" ;
	};
	CheckBox BTN_PRINTAREA
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_NAMES:BTN_PRINTAREA" ;
        Pos = MAP_APPFONT ( 12, 153 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "~Print range" ;
		TabStop = TRUE ;
	};
	CheckBox BTN_CRITERIA
	{
		HelpID = "sc:CheckBox:RID_SCDLG_NAMES:BTN_CRITERIA" ;
		Pos = MAP_APPFONT ( 12, 167 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "~Filter" ;
		TabStop = TRUE ;
	};
	CheckBox BTN_ROWHEADER
	{
		HelpID = "sc:CheckBox:RID_SCDLG_NAMES:BTN_ROWHEADER" ;
		Pos = MAP_APPFONT ( 75, 167 ) ;
		Size = MAP_APPFONT ( 82, 10 ) ;
		Text [ en-US ] = "Repeat ~row" ;
		TabStop = TRUE ;
	};
	CheckBox BTN_COLHEADER
	{
		HelpID = "sc:CheckBox:RID_SCDLG_NAMES:BTN_COLHEADER" ;
		Pos = MAP_APPFONT ( 75, 153 ) ;
		Size = MAP_APPFONT ( 82, 10 ) ;
		Text [ en-US ] = "Repeat ~column" ;
		TabStop = TRUE ;
	};
	String STR_ADD
	{
		Text [ en-US ] = "~Add" ;
	};
	String STR_MODIFY
	{
		Text [ en-US ] = "Mod~ify" ;
	};
	String STR_INVALIDSYMBOL
	{
		Text [ en-US ] = "Invalid expression" ;
	};
};

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