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

TabDialog RID_PAGEDIALOG_PAGE
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 289 , 176 ) ;
	Text [ en-US ] = "Page Setup" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
        PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_PAGE ;
				Text [ en-US ] = "Page" ;
				PageResID = RID_SVXPAGE_PAGE ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_BACKGROUND ;
				Text [ en-US ] = "Background" ;
				PageResID = RID_SVXPAGE_BACKGROUND ;
			};
        };
	};
	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 ) ;
		/* ### ACHTUNG: Neuer Text in Resource? Zurück : Zur³ck */
		Text [ en-US ] = "Return" ;
		TabStop = TRUE ;
	};
	
	String 1
	{
		Text [ en-US ] = "Page" ;
	};
	String 2
	{
		Text [ en-US ] = "Background" ;
	};
};

TabDialog RID_PAGEDIALOG_BACKGROUND
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 289 , 176 ) ;
	Text [ en-US ] = "Section Setup" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
	};
	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 ) ;
		/* ### ACHTUNG: Neuer Text in Resource? Zurück : Zur³ck */
		Text [ en-US ] = "Return" ;
		TabStop = TRUE ;
	};
	
	String 1
	{
		Text [ en-US ] = "Background" ;
	};
};
TabDialog RID_PAGEDIALOG_CHAR
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 289 , 176 ) ;
	Text [ en-US ] = "Character Settings" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_PAGE_CHAR ;
				Text [ en-US ] = "Font" ;
				PageResID = RID_PAGE_CHAR ;
			};
			PageItem
			{
				Identifier = RID_PAGE_EFFECTS ;
				Text [ en-US ] = "Font Effects" ;
				PageResID = RID_PAGE_EFFECTS ;
			};
			PageItem
			{
				Identifier = RID_PAGE_POSITION ;
				PageResID = RID_PAGE_POSITION ;
				Text [ en-US ] = "Position";
			};
			PageItem
			{
				Identifier = RID_PAGE_TWOLN ;
				PageResID = RID_PAGE_TWOLN;
				Text [ en-US ] = "Asian Layout";
			};
			PageItem
			{
				Identifier = RID_PAGE_BACKGROUND ;
				Text [ en-US ] = "Background" ;
				PageResID = RID_PAGE_BACKGROUND ;
			};
            PageItem
			{
				Identifier = RID_PAGE_ALIGNMENT ;
				Text [ en-US ] = "Alignment" ;
				PageResID = RID_PAGE_ALIGNMENT ;
			};
		};
	};
	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 ) ;
		/* ### ACHTUNG: Neuer Text in Resource? Zurück : Zur³ck */
		Text [ en-US ] = "Return" ;
		TabStop = TRUE ;
	};
	
	String 1
	{
		Text [ en-US ] = "Character" ;
	};
};
TabDialog RID_PAGEDIALOG_LINE
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 289 , 176 ) ;
	Text [ en-US ] = "Line" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		Pos = MAP_APPFONT ( 3 , 3 ) ;
		Size = MAP_APPFONT ( 260 , 135 ) ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_LINE ;
				Text [ en-US ] = "Line" ;
				PageResID = RID_SVXPAGE_LINE ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_LINE_DEF ;
				Text [ en-US ] = "Line Styles" ;
				PageResID = RID_SVXPAGE_LINE_DEF ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_LINEEND_DEF ;
				Text [ en-US ] = "Arrow Styles" ;
				PageResID = RID_SVXPAGE_LINEEND_DEF ;
			};
		};
	};
	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 ) ;
		/* ### ACHTUNG: Neuer Text in Resource? Zurück : Zur³ck */
		Text [ en-US ] = "Return" ;
		TabStop = TRUE ;
	};
	
	String 1
	{
		Text [ en-US ] = "Line" ;
	};
};
