/**************************************************************
 *
 * 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 "helpid.hrc"
#include "moptions.hrc"
ModalDialog RID_MACROOPTIONS
{
	HelpId = "basctl:ModalDialog:RID_MACROOPTIONS" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 224 , 121 ) ;
	Text [ en-US ] = "Description" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	FixedText RID_FT_SBXNAME
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 6 , 6 ) ;
		Size = MAP_APPFONT ( 150 , 10 ) ;
	};
	OKButton RID_PB_OK
	{
		Pos = MAP_APPFONT ( 168 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton RID_PB_CANCEL
	{
		Pos = MAP_APPFONT ( 168 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton RID_PB_HELP
	{
		Pos = MAP_APPFONT ( 168 , 53 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	FixedText RID_FT_DESCR
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 6 , 19 ) ;
		Size = MAP_APPFONT ( 69 , 10 ) ;
		Text [ en-US ] = "Description" ;
	};
	MultiLineEdit RID_ME_DESCR
	{
	    HelpID = "basctl:MultiLineEdit:RID_MACROOPTIONS:RID_ME_DESCR";
		Border = TRUE ;
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 6 , 32 ) ;
		Size = MAP_APPFONT ( 154 , 36 ) ;
		TabStop = TRUE ;
		VScroll = TRUE ;
		IgnoreTab = TRUE ;
	};
	FixedLine RID_FL_HELP
	{
		Pos = MAP_APPFONT ( 6 , 73 ) ;
		Size = MAP_APPFONT ( 212 , 8 ) ;
		Text [ en-US ] = "Help information" ;
	};
	FixedText RID_FT_HELPID
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 9 , 83 ) ;
		Size = MAP_APPFONT ( 80 , 10 ) ;
		Text [ en-US ] = "Help ID" ;
	};
	NumericField RID_NF_HELPID
	{
	    HelpID = "basctl:NumericField:RID_MACROOPTIONS:RID_NF_HELPID";
		Border = TRUE ;
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 95 , 83 ) ;
		Size = MAP_APPFONT ( 120 , 12 ) ;
		TabStop = TRUE ;
		Minimum = 0 ;
		Maximum = 0xFFFFFFFF ;
	};
	FixedText RID_FT_HELPNAME
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 9 , 99 ) ;
		Size = MAP_APPFONT ( 80 , 10 ) ;
		Text [ en-US ] = "Help file name" ;
	};
	Edit RID_ED_HELPNAME
	{
	    HelpID = "basctl:Edit:RID_MACROOPTIONS:RID_ED_HELPNAME";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 95 , 99 ) ;
		Size = MAP_APPFONT ( 120 , 12 ) ;
		TabStop = TRUE ;
	};
};
