/**************************************************************
 *
 * 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 "splitcelldlg.hrc"

ModalDialog RID_SVX_SPLITCELLDLG
{
	HelpID = "cui:ModalDialog:RID_SVX_SPLITCELLDLG" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 169, 108 ) ;
	Text [ en-US ] = "Split Cells" ;
	Moveable = TRUE ;

	OKButton BT_OK
	{
		Pos = MAP_APPFONT ( 115, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 115, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BT_HELP
	{
		Pos = MAP_APPFONT ( 115, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_COUNT
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 67, 8 ) ;
		Text [ en-US ] = "~Split cell into" ;
		Left = TRUE ;
	};
	NumericField ED_COUNT
	{
		HelpID = "cui:NumericField:RID_SVX_SPLITCELLDLG:ED_COUNT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 82, 14 ) ;
		Size = MAP_APPFONT ( 21, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Right = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 2 ;
		Maximum = 20 ;
		First = 2 ;
		Last = 5 ;
	};
	FixedLine FL_COUNT
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 103, 8 ) ;
		Text [ en-US ] = "Split" ;
	};
	ImageRadioButton RB_HORZ
	{
		HelpID = "cui:ImageRadioButton:RID_SVX_SPLITCELLDLG:RB_HORZ" ;
		Pos = MAP_APPFONT ( 12, 47 ) ;
		Size = MAP_APPFONT ( 90, 18 ) ;
		Group = TRUE ;
		Text [ en-US ] = "H~orizontally" ;
		RadioButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "zetlhor2.png" ;} ;
		};
		TabStop = TRUE ;
		Check = TRUE ;
	};
	CheckBox CB_PROP
	{
		HelpID = "cui:CheckBox:RID_SVX_SPLITCELLDLG:CB_PROP" ;
		Pos = MAP_APPFONT ( 18, 68 ) ;
		Size = MAP_APPFONT ( 91, 12 ) ;
		Text [ en-US ] = "~Into equal proportions" ;
	};
	Image BMP_SPLIT_VERT
		{
			ImageBitmap = Bitmap {File = "zetlver2_h.png" ;} ;
		};
	Image BMP_SPLIT_HORZ
		{
			ImageBitmap = Bitmap {File = "zetlhor2_h.png" ;} ;
		};
	ImageRadioButton RB_VERT
	{
		HelpID = "cui:ImageRadioButton:RID_SVX_SPLITCELLDLG:RB_VERT" ;
		Pos = MAP_APPFONT ( 12, 84 ) ;
		Size = MAP_APPFONT ( 90, 18 ) ;
		Text [ en-US ] = "~Vertically" ;
		RadioButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "zetlver2.png" ;} ;
		};
		TabStop = TRUE ;
	};
	FixedLine FL_DIR
	{
		Pos = MAP_APPFONT ( 6, 36 ) ;
		Size = MAP_APPFONT ( 103, 8 ) ;
		Text [ en-US ] = "Direction" ;
	};
};

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