/**************************************************************
 *
 * 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 <cuires.hrc>
#include "insrc.hrc"

ModalDialog DLG_INS_ROW_COL
{
	HelpID = "cui:ModalDialog:DLG_INS_ROW_COL" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 136, 84 ) ;
	Text = "-" ; // Dummy text, will be overwritten later
	Moveable = TRUE ;
	OKButton BT_OK
	{
		Pos = MAP_APPFONT ( 80, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 80, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BT_HELP
	{
		Pos = MAP_APPFONT ( 80, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	RadioButton CB_POS_BEFORE
	{
		HelpID = "cui:RadioButton:DLG_INS_ROW_COL:CB_POS_BEFORE" ;
		Pos = MAP_APPFONT ( 12, 49 ) ;
		Size = MAP_APPFONT ( 56, 10 ) ;
		Text [ en-US ] = "~Before" ;
		TabStop = TRUE ;
	};
	RadioButton CB_POS_AFTER
	{
		HelpID = "cui:RadioButton:DLG_INS_ROW_COL:CB_POS_AFTER" ;
		Pos = MAP_APPFONT ( 12, 62 ) ;
		Size = MAP_APPFONT ( 56, 10 ) ;
		Text [ en-US ] = "A~fter" ;
		TabStop = TRUE ;
		Check = TRUE ;
	};
	NumericField ED_COUNT
	{
		HelpID = "cui:NumericField:DLG_INS_ROW_COL:ED_COUNT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 44, 14 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 99 ;
		Value = 1 ;
		First = 1 ;
		Last = 5 ;
	};
	FixedLine FL_INS
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 68, 8 ) ;
		Text [ en-US ] = "Insert" ;
	};
	FixedLine FL_POS
	{
		Pos = MAP_APPFONT ( 6, 38 ) ;
		Size = MAP_APPFONT ( 68, 8 ) ;
		Text [ en-US ] = "Position" ;
	};
	FixedText FT_COUNT
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "~Number" ;
		Left = TRUE ;
	};
	String STR_ROW
	{
		Text [ en-US ] = "Insert Rows" ;
	};
	String STR_COL
	{
		Text [ en-US ] = "Insert Columns" ;
	};
};

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