/**************************************************************
 *
 * 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 "globals.hrc"
#include "misc.hrc"
#include "num.hrc"
#include "cmdid.h"
#include "helpid.h"
#include "svx/dialogs.hrc"

/**************************************************************************/
/* TabPage positions                                                      */
/**************************************************************************/
TabPage TP_NUM_POSITION
{
	HelpID = HID_NUM_POSITION ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Hide = TRUE ;
	FixedLine FL_LEVEL
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 35, 8 ) ;
		Text [ en-US ] = "Level" ;
	};
	MultiListBox LB_LEVEL
	{
		HelpID = "sw:MultiListBox:TP_NUM_POSITION:LB_LEVEL" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 26, 163 ) ;
		TabStop = TRUE ;
		DropDown = FALSE ;
		Border = TRUE ;
		SimpleMode = TRUE ;
	};
	FixedLine FL_POSITION
	{
		Pos = MAP_APPFONT ( 47, 3 ) ;
		Size = MAP_APPFONT ( 207, 8 ) ;
		Group = TRUE ;
		Text [ en-US ] = "Position and spacing" ;
	};
	FixedText FT_BORDERDIST
	{
		Pos = MAP_APPFONT ( 50, 27 ) ;
		Size = MAP_APPFONT ( 105, 10 ) ;
		Text [ en-US ] = "Indent" ;
	};
	MetricField MF_BORDERDIST
	{
		HelpID = "sw:MetricField:TP_NUM_POSITION:MF_BORDERDIST" ;
		Pos = MAP_APPFONT ( 198, 25 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -1999 ;
		Maximum = 1999 ;
		DecimalDigits = 2 ;
		Value = 0 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 1999 ;
		SpinSize = 5 ;
	};
	CheckBox CB_RELATIVE
	{
		HelpID = "sw:CheckBox:TP_NUM_POSITION:CB_RELATIVE" ;
		Pos = MAP_APPFONT ( 198, 41 ) ;
		Size = MAP_APPFONT ( 52, 10 ) ;
		Text [ en-US ] = "Relati~ve" ;
	};
	FixedText FT_INDENT
	{
		Pos = MAP_APPFONT ( 50, 59 ) ;
		Size = MAP_APPFONT ( 105, 8 ) ;
		Text [ en-US ] = "Width of numbering" ;
	};
	MetricField MF_INDENT
	{
		HelpID = "sw:MetricField:TP_NUM_POSITION:MF_INDENT" ;
		Pos = MAP_APPFONT ( 198, 57 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 1999 ;
		DecimalDigits = 2 ;
		Value = 0 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 1999 ;
		SpinSize = 5 ;
	};
	FixedText FT_NUMDIST
	{
		Pos = MAP_APPFONT ( 50, 75 ) ;
		Size = MAP_APPFONT ( 105, 8 ) ;
		Text [ en-US ] = "Minimum space numbering <-> text" ;
	};
	MetricField MF_NUMDIST
	{
		HelpID = "sw:MetricField:TP_NUM_POSITION:MF_NUMDIST" ;
		Pos = MAP_APPFONT ( 198, 73 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 1999 ;
		DecimalDigits = 2 ;
		Value = 0 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 1999 ;
		SpinSize = 5 ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	FixedText FT_ALIGN
	{
		Pos = MAP_APPFONT ( 50, 91 ) ;
		Size = MAP_APPFONT ( 105, 8 ) ;
		Text [ en-US ] = "N~umbering alignment" ;
	};
	ListBox LB_ALIGN
	{
		HelpID = "sw:ListBox:TP_NUM_POSITION:LB_ALIGN" ;
		Pos = MAP_APPFONT ( 198, 89 ) ;
		Size = MAP_APPFONT ( 40, 40 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "Left" ;		> ;
			< "Centered" ;	> ;
			< "Right" ;		> ;
		};
	};
	FixedText FT_LABEL_FOLLOWED_BY
	{
		Pos = MAP_APPFONT ( 50, 27 ) ;
		Size = MAP_APPFONT ( 105, 10 ) ;
		Text [ en-US ] = "Numbering followed by" ;
	};
	ListBox LB_LABEL_FOLLOWED_BY
	{
		HelpID = "sw:ListBox:TP_NUM_POSITION:LB_LABEL_FOLLOWED_BY" ;
		Pos = MAP_APPFONT ( 198, 25 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "Tab stop" ;	> ;
			< "Space" ;		> ;
			< "Nothing" ;	> ;
		};
	};
	FixedText FT_LISTTAB
	{
		Pos = MAP_APPFONT ( 50, 43 ) ;
		Size = MAP_APPFONT ( 143, 10 ) ;
		Right = TRUE ;
		Text [ en-US ] = "at" ;
	};
	MetricField MF_LISTTAB
	{
		HelpID = "sw:MetricField:TP_NUM_POSITION:MF_LISTTAB" ;
		Pos = MAP_APPFONT ( 198, 41 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 1999 ;
		DecimalDigits = 2 ;
		Value = 0 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 1999 ;
		SpinSize = 5 ;
	};
	FixedText FT_ALIGN_2
	{
		Pos = MAP_APPFONT ( 50, 59 ) ;
		Size = MAP_APPFONT ( 105, 8 ) ;
	};
	ListBox LB_ALIGN_2
	{
		HelpID = "sw:ListBox:TP_NUM_POSITION:LB_ALIGN_2" ;
		Pos = MAP_APPFONT ( 198, 57 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_ALIGNED_AT
	{
		Pos = MAP_APPFONT ( 50, 75 ) ;
		Size = MAP_APPFONT ( 105, 8 ) ;
		Text [ en-US ] = "Aligned at" ;
	};
	MetricField MF_ALIGNED_AT
	{
		HelpID = "sw:MetricField:TP_NUM_POSITION:MF_ALIGNED_AT" ;
		Pos = MAP_APPFONT ( 198, 73 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -1999 ;
		Maximum = 1999 ;
		DecimalDigits = 2 ;
		Value = 0 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 1999 ;
		SpinSize = 5 ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	FixedText FT_INDENT_AT
	{
		Pos = MAP_APPFONT ( 50, 91 ) ;
		Size = MAP_APPFONT ( 105, 8 ) ;
		Text [ en-US ] = "Indent at" ;
	};
	MetricField MF_INDENT_AT
	{
		HelpID = "sw:MetricField:TP_NUM_POSITION:MF_INDENT_AT" ;
		Pos = MAP_APPFONT ( 198, 89 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = -1999 ;
		Maximum = 1999 ;
		DecimalDigits = 2 ;
		Value = 0 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 1999 ;
		SpinSize = 5 ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	PushButton PB_STANDARD
	{
		HelpID = "sw:PushButton:TP_NUM_POSITION:PB_STANDARD" ;
		Pos = MAP_APPFONT ( 198, 165 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Default" ;
	};
	Window WIN_PREVIEW
	{
		Pos = MAP_APPFONT ( 50, 113 ) ;
		Size = MAP_APPFONT ( 143, 67 ) ;
		Border = TRUE ;
	};
};

/**************************************************************************/
/* Dialogs for the test of Svx implementations                            */
/**************************************************************************/
TabDialog DLG_SVXTEST_NUM_BULLET
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Text [ en-US ] = "Bullets and Numbering" ;
	Moveable = TRUE ;
	TabControl 1
	{
		SVLook = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_PICK_BULLET ;
				Text [ en-US ] = "Bullets" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_PICK_SINGLE_NUM ;
				Text [ en-US ] = "Numbering" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_PICK_NUM ;
				Text [ en-US ] = "Outline" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_PICK_BMP ;
				Text [ en-US ] = "Graphics" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_NUM_POSITION ;
				Text [ en-US ] = "Position" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_NUM_OPTIONS ;
				Text [ en-US ] = "Options" ;
			};
		};
	};
	String ST_RESET
	{
		Text [ en-US ] = "~Remove" ;
	};
};

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