/**************************************************************
 *
 * 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.
 *
 *************************************************************/

#ifndef EXTENSIONS_PROPRESID_HRC
#include "formresid.hrc"
#endif

ModalDialog RID_DLG_SELECTLABELCONTROL
{
	HelpID = "extensions:ModalDialog:RID_DLG_SELECTLABELCONTROL" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 200, 151 ) ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	FixedText 1
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 188, 20 ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "These are control fields that can be used as label fields for the $control_class$ $control_name$." ;
	};
	Control 1
	{
		Pos = MAP_APPFONT ( 6, 29 ) ;
		Size = MAP_APPFONT ( 188, 83 ) ;
		TabStop = TRUE ;
		Border	= TRUE ;
	};
	CheckBox 1
	{
		HelpID = "extensions:CheckBox:RID_DLG_SELECTLABELCONTROL:1" ;
		Pos = MAP_APPFONT ( 6, 115 ) ;
		Size = MAP_APPFONT ( 188, 8 ) ;
		Text [ en-US ] = "~No assignment" ;
	};
	FixedLine 1
	{
		Pos = MAP_APPFONT ( 3, 126 ) ;
		Size = MAP_APPFONT ( 194, 2 ) ;
	};
	OKButton 1
	{
		Pos = MAP_APPFONT ( 91, 131 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton 1
	{
		Pos = MAP_APPFONT ( 144, 131 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	Text [ en-US ] = "Label Field Selection" ;
};

String RID_STR_FORMS
{
	Text [ en-US ] = "Forms" ;
};

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