/**************************************************************
 *
 * 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 "TableDesignPane.hrc"
#include "glob.hrc"

Control DLG_TABLEDESIGNPANE
{
	OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;

	Size = MAP_APPFONT( 264, 134 );
	Text [ en-US ] = "Table Design";

	FixedLine FL_STYLE_OPTIONS+1
	{
        Pos = MAP_APPFONT ( 143, 3 ) ;
        Size = MAP_APPFONT ( 120, 10 ) ;
		OutputSize = TRUE;
		Text [ en-US ] = "Show";
	};

	CheckBox CB_HEADER_ROW+1
	{
        Pos = MAP_APPFONT ( 146, 3 ) ;
        Size = MAP_APPFONT ( 120 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Header Row" ;
	};

	CheckBox CB_TOTAL_ROW+1
	{
        Pos = MAP_APPFONT ( 146, 16 ) ;
        Size = MAP_APPFONT ( 120 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Total Row" ;
	};

	CheckBox CB_BANDED_ROWS+1
	{
        Pos = MAP_APPFONT ( 146, 29 ) ;
        Size = MAP_APPFONT ( 120 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Banded Rows" ;
	};

	CheckBox CB_FIRST_COLUMN+1
	{
        Pos = MAP_APPFONT ( 146, 42 ) ;
        Size = MAP_APPFONT ( 120 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "First Column" ;
	};

	CheckBox CB_LAST_COLUMN+1
	{
        Pos = MAP_APPFONT ( 146, 55 ) ;
        Size = MAP_APPFONT ( 120 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Last Column" ;
	};

	CheckBox CB_BANDED_COLUMNS+1
	{
        Pos = MAP_APPFONT ( 146, 68 ) ;
        Size = MAP_APPFONT ( 120 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Banded Columns" ;
	};

	FixedLine FL_TABLE_STYLES+1
	{
        Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT( 120, 8 );
		OutputSize = TRUE;
		Text [ en-US ] = "Styles";
	};

	Control CT_TABLE_STYLES+1
	{
        Pos = MAP_APPFONT ( 4, 3 ) ;
		Size = MAP_APPFONT( 120, 143 );
		Border = TRUE ;
		TabStop = TRUE ;
	};
};

ModalDialog DLG_TABLEDESIGNPANE
{
    HelpID = "sd:ModalDialog:DLG_TABLEDESIGNPANE";
	OutputSize = TRUE;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Size = MAP_APPFONT( 272, 198 );

	Text [ en-US ] = "Table Design";

	FixedLine FL_SEP1
	{
		Pos = MAP_APPFONT( 135, 14 );
		Size = MAP_APPFONT( 8, 143 );
		Vert = TRUE ;
	};
	FixedLine FL_SEP2
	{
		Pos = MAP_APPFONT ( 0 , 160 ) ;
        Size = MAP_APPFONT ( 272 , 12 ) ;
	};

	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 6 , 176 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 158 , 176 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 211 , 176 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
};
