/**************************************************************
 *
 * 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 <svx/dialogs.hrc>
#include "sc.hrc"

TabDialog RID_SCDLG_CHAR
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 289, 176 ) ;
	Text [ en-US ] = "Character" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 3, 3 ) ;
		Size = MAP_APPFONT ( 260, 135 ) ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_NAME ;
				Text [ en-US ] = "Font" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_EFFECTS ;
				Text [ en-US ] = "Font Effects" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_POSITION ;
				Text [ en-US ] = "Font Position" ;
			};
		};
	};
	OKButton 1
	{
		Pos = MAP_APPFONT ( 6, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	CancelButton 1
	{
		Pos = MAP_APPFONT ( 60, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton 1
	{
		Pos = MAP_APPFONT ( 114, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	PushButton 1
	{
		Pos = MAP_APPFONT ( 169, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Back" ;
		TabStop = TRUE ;
	};
};

TabDialog RID_SCDLG_PARAGRAPH
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 289, 176 ) ;
	Text [ en-US ] = "Paragraph" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 3, 3 ) ;
		Size = MAP_APPFONT ( 260, 135 ) ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_STD_PARAGRAPH ;
				Text [ en-US ] = "Indents & Spacing" ;
				PageResID = RID_SVXPAGE_STD_PARAGRAPH ;
			};
			/*
			PageItem
			{
				Identifier = RID_SVXPAGE_EXT_PARAGRAPH ;
				Text [ en-US ] = "Paragraph (Extensions)" ;
				PageResID = RID_SVXPAGE_EXT_PARAGRAPH ;
			};
			*/
			PageItem
			{
				Identifier = RID_SVXPAGE_ALIGN_PARAGRAPH ;
				PageResID = RID_SVXPAGE_ALIGN_PARAGRAPH ;
				Text [ en-US ] = "Alignment" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_PARA_ASIAN ;
				Text [ en-US ] = "Asian Typography" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_TABULATOR ;
				Text [ en-US ] = "Tab" ;
				PageResID = RID_SVXPAGE_TABULATOR ;
			};
		};
	};
	OKButton 1
	{
		Pos = MAP_APPFONT ( 6, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	CancelButton 1
	{
		Pos = MAP_APPFONT ( 60, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton 1
	{
		Pos = MAP_APPFONT ( 114, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	PushButton 1
	{
		Pos = MAP_APPFONT ( 169, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Back" ;
		TabStop = TRUE ;
	};
};

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