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

// RID_SVXPAGE_NUMBERFORMAT ----------------------------------------------
TabPage RID_SVXPAGE_NUMBERFORMAT
{
	HelpId = HID_NUMBERFORMAT ;
	Hide = TRUE ;
	Text [ en-US ] = "Number Format" ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	FixedText FT_CATEGORY
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 70, 8 ) ;
		Text [ en-US ] = "~Category" ;
	};
	ListBox LB_CATEGORY
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_NUMBERFORMAT:LB_CATEGORY" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 14 ) ;
		Size = MAP_APPFONT ( 70, 71 ) ;
		AutoHScroll = TRUE ;
		StringList [ en-US ] =
		{
			< "All" ; Default ;				> ;
			< "User-defined" ; Default ;	> ;
			< "Number" ; Default ;			> ;
			< "Percent" ; Default ;			> ;
			< "Currency" ; Default ;		> ;
			< "Date" ; Default ;			> ;
			< "Time" ; Default ;			> ;
			< "Scientific" ; Default ;		> ;
			< "Fraction" ; Default ;		> ;
			< "Boolean Value" ; Default ;	> ;
			< "Text" ; Default ;			> ;
		};
	};
	FixedText FT_EDFORMAT
	{
		Pos = MAP_APPFONT ( 6, 136 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "~Format code" ;
	};
	Edit ED_FORMAT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_NUMBERFORMAT:ED_FORMAT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 147 ) ;
		Size = MAP_APPFONT ( 200, 12 ) ;
	};
	FixedText FT_COMMENT
	{
		Pos = MAP_APPFONT ( 6, 163 ) ;
		Size = MAP_APPFONT ( 248, 16 ) ;
		WordBreak = TRUE ;
		NoLabel = TRUE ;
	};
	Edit ED_COMMENT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_NUMBERFORMAT:ED_COMMENT" ;
		Hide = TRUE ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 163 ) ;
		Size = MAP_APPFONT ( 248, 12 ) ;
	};
	FixedText FT_FORMAT
	{
		Pos = MAP_APPFONT ( 82, 3 ) ;
		Size = MAP_APPFONT ( 90, 8 ) ;
		Text [ en-US ] = "F~ormat" ;
	};

	ListBox LB_CURRENCY
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_NUMBERFORMAT:LB_CURRENCY" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 82, 14 ) ;
		Size = MAP_APPFONT ( 90, 71 ) ;
		DropDown = TRUE ;
		TabStop = TRUE ;
		StringList [ en-US ] =
		{
			< "Automatically" ; Default ;	> ;
		};
	};

	Control LB_FORMAT
	{
		HelpId = HID_NUMBERFORMAT_LB_FORMAT ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 82, 27 ) ;
		Size = MAP_APPFONT ( 90, 58 ) ;
		TabStop = TRUE ;
	};

	FixedText FT_DECIMALS
	{
		Pos = MAP_APPFONT ( 12, 104 ) ;
		Size = MAP_APPFONT ( 69, 8 ) ;
		Text [ en-US ] = "~Decimal places" ;
	};
	NumericField ED_DECIMALS
	{
		HelpID = "cui:NumericField:RID_SVXPAGE_NUMBERFORMAT:ED_DECIMALS" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 84, 102 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		Spin = TRUE ;
		Maximum = 20 ;
		Last = 15 ;
		First = 0 ;
		StrictFormat = TRUE ;
		SpinSize = 1 ;
		Repeat = TRUE ;
	};
	FixedText FT_LEADZEROES
	{
		Pos = MAP_APPFONT ( 12, 120 ) ;
		Size = MAP_APPFONT ( 69, 8 ) ;
		Text [ en-US ] = "Leading ~zeros" ;
	};
	NumericField ED_LEADZEROES
	{
		HelpID = "cui:NumericField:RID_SVXPAGE_NUMBERFORMAT:ED_LEADZEROES" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 84, 118 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		Spin = TRUE ;
		Maximum = 20 ;
		Last = 15 ;
		First = 0 ;
		StrictFormat = TRUE ;
		SpinSize = 1 ;
		Repeat = TRUE ;
	};
	CheckBox BTN_NEGRED
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_NUMBERFORMAT:BTN_NEGRED" ;
		Pos = MAP_APPFONT ( 133, 104 ) ;
		Size = MAP_APPFONT ( 100, 10 ) ;
		Text [ en-US ] = "~Negative numbers red" ;
	};
	CheckBox BTN_THOUSAND
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_NUMBERFORMAT:BTN_THOUSAND" ;
		Pos = MAP_APPFONT ( 133, 120 ) ;
		Size = MAP_APPFONT ( 100, 10 ) ;
		Text [ en-US ] = "~Thousands separator" ;
	};
	FixedLine FL_OPTIONS
	{
		Pos = MAP_APPFONT ( 6, 91 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Options" ;
	};
	FixedText FT_LANGUAGE
	{
		Pos = MAP_APPFONT ( 178, 3 ) ;
		Size = MAP_APPFONT ( 76, 8 ) ;
		Text [ en-US ] = "~Language" ;
	};
	ListBox LB_LANGUAGE
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_NUMBERFORMAT:LB_LANGUAGE" ;
		Border = TRUE ;
		Sort = TRUE ;
		Pos = MAP_APPFONT ( 178, 14 ) ;
		Size = MAP_APPFONT ( 76, 71 ) ;
		DropDown = TRUE ;
	};
	CheckBox CB_SOURCEFORMAT
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_NUMBERFORMAT:CB_SOURCEFORMAT" ;
		Pos = MAP_APPFONT ( 178, 42 ) ;
		Size = MAP_APPFONT ( 76, 10 ) ;
		Text [ en-US ] = "So~urce format" ;
	};
	Window WND_NUMBER_PREVIEW
	{
		Border = TRUE ;
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 178, 67 ) ;
		Size = MAP_APPFONT ( 76, 18 ) ;
		HelpId = HID_NUMBERFORMAT_WND_NUMBER_PREVIEW ;
	};
	ImageButton IB_ADD
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 208, 146 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		HelpId = HID_NUMBERFORMAT_TBI_ADD ;
		QuickHelpText [ en-US ] = "Add" ;
	};
	ImageButton IB_REMOVE
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 240, 146 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		HelpId = HID_NUMBERFORMAT_TBI_REMOVE ;
		QuickHelpText [ en-US ] = "Remove" ;
	};
	ImageButton IB_INFO
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT ( 224, 146 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		HelpId = HID_NUMBERFORMAT_TBI_INFO ;
		QuickHelpText [ en-US ] = "Edit Comment" ;
	};
	ImageList IL_ICON
	{
		Prefix = "nu" ;
		MaskColor = Color { Red = 0xFFFF ; Green = 0x0000 ; Blue = 0xFFFF ; };
		IdList =
		{
			IID_ADD ;
			IID_REMOVE ;
			IID_INFO ;
		};
		IdCount = { 3 ; };
	};
	ImageList IL_ICON_HC
	{
		Prefix = "nuh" ;
		MaskColor = Color { Red = 0xFFFF ; Green = 0x0000 ; Blue = 0xFFFF ; };
		IdList =
		{
			IID_ADD ;
			IID_REMOVE ;
			IID_INFO ;
		};
		IdCount = { 3 ; };
	};

	String STR_AUTO_ENTRY
	{
		Text [ en-US ] = "Automatic" ;
	};

};

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