/**************************************************************
 *
 * 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.
 *
 *************************************************************/



#ifndef _SFX_HRC
#include <sfx2/sfx.hrc>
#endif
#ifndef _SVX_DIALOGS_HRC
#include <svx/dialogs.hrc>
#endif
#include "globals.hrc"
#include "misc.hrc"
#include "linenum.hrc"
#include "helpid.h"

/**************************************************************************/
/*                                                                        */
/**************************************************************************/
TabPage TP_LINENUMBERING
{
	HelpID = HID_LINENUMBERING ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	CheckBox CB_NUMBERING_ON
	{
		HelpID = "sw:CheckBox:TP_LINENUMBERING:CB_NUMBERING_ON" ;
		Pos = MAP_APPFONT ( 12, 6 ) ;
		Size = MAP_APPFONT ( 242, 8 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Show numbering" ;
	};
	FixedText FT_CHAR_STYLE
	{
		Pos = MAP_APPFONT ( 12, 30 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "~Character Style" ;
	};
	ListBox LB_CHAR_STYLE
	{
		HelpID = "sw:ListBox:TP_LINENUMBERING:LB_CHAR_STYLE" ;
		Pos = MAP_APPFONT ( 100, 30 ) ;
		Size = MAP_APPFONT ( 148, 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_FORMAT
	{
		Pos = MAP_APPFONT ( 12, 46 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "F~ormat" ;
	};
	ListBox LB_FORMAT
	{
		HelpID = "sw:ListBox:TP_LINENUMBERING:LB_FORMAT" ;
		Pos = MAP_APPFONT ( 100, 44 ) ;
		Size = MAP_APPFONT ( 148, 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_POS
	{
		Pos = MAP_APPFONT ( 12, 62 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "Position" ;
	};
	ListBox LB_POS
	{
		HelpID = "sw:ListBox:TP_LINENUMBERING:LB_POS" ;
		Pos = MAP_APPFONT ( 100, 60 ) ;
		Size = MAP_APPFONT ( 148, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		StringList [ en-US ] =
		{
			< "Left" ;	> ;
			< "Right" ;	> ;
			< "Inner" ;	> ;
			< "Outer" ;	> ;
		};
	};
	FixedText FT_OFFSET
	{
		Pos = MAP_APPFONT ( 12, 78 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "Spacing" ;
	};
	MetricField MF_OFFSET
	{
		HelpID = "sw:MetricField:TP_LINENUMBERING:MF_OFFSET" ;
		Pos = MAP_APPFONT ( 100, 76 ) ;
		Size = MAP_APPFONT ( 45, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 9999 ;
		DecimalDigits = 2 ;
		Unit = FUNIT_CM ;
		First = 0 ;
		Last = 9999 ;
		SpinSize = 10 ;
	};
	FixedText FT_NUM_INVERVAL
	{
		Pos = MAP_APPFONT ( 12, 94 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "Interval" ;
	};
	NumericField NF_NUM_INVERVAL
	{
		HelpID = "sw:NumericField:TP_LINENUMBERING:NF_NUM_INVERVAL" ;
		Pos = MAP_APPFONT ( 100, 92 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 1000 ;
		First = 1 ;
		Last = 1000 ;
		SpinSize = 1 ;
	};
	FixedText FT_NUM_ROWS
	{
		Pos = MAP_APPFONT ( 136, 94 ) ;
		Size = MAP_APPFONT ( 80, 10 ) ;
		Text [ en-US ] = "lines" ;
	};
	FixedLine FL_DISPLAY
	{
		Pos = MAP_APPFONT ( 6, 17 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "View" ;
	};
	FixedText FT_DIVISOR
	{
		Pos = MAP_APPFONT ( 12, 123 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Text" ;
	};
	Edit ED_DIVISOR
	{
		HelpID = "sw:Edit:TP_LINENUMBERING:ED_DIVISOR" ;
		Pos = MAP_APPFONT ( 45, 121 ) ;
		Size = MAP_APPFONT ( 76, 12 ) ;
		Left = TRUE ;
		Border = TRUE ;
	};
	FixedText FT_DIV_INTERVAL
	{
		Pos = MAP_APPFONT ( 12, 139 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
//		Disable = TRUE ;
		Text [ en-US ] = "Every" ;
	};
	NumericField NF_DIV_INTERVAL
	{
		HelpID = "sw:NumericField:TP_LINENUMBERING:NF_DIV_INTERVAL" ;
		Pos = MAP_APPFONT ( 45, 137 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 1000 ;
		First = 0 ;
		Last = 1000 ;
		SpinSize = 1 ;
//		Disable = TRUE ;
	};
	FixedText FT_DIV_ROWS
	{
		Pos = MAP_APPFONT ( 78, 139 ) ;
		Size = MAP_APPFONT ( 40, 8 ) ;
		Text [ en-US ] = "Lines" ;
	};
	FixedLine FL_DIVISOR
	{
		Pos = MAP_APPFONT ( 6, 110 ) ;
		Size = MAP_APPFONT ( 121, 8 ) ;
		Text [ en-US ] = "Separator" ;
	};
	CheckBox CB_COUNT_EMPTYLINES
	{
		HelpID = "sw:CheckBox:TP_LINENUMBERING:CB_COUNT_EMPTYLINES" ;
		Pos = MAP_APPFONT ( 139, 121 ) ;
		Size = MAP_APPFONT ( 110, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Blank lines" ;
	};
	CheckBox CB_COUNT_FRAMELINES
	{
		HelpID = "sw:CheckBox:TP_LINENUMBERING:CB_COUNT_FRAMELINES" ;
		Pos = MAP_APPFONT ( 139, 135 ) ;
		Size = MAP_APPFONT ( 110, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Lines in text frames" ;
	};
	CheckBox CB_RESTART_PAGE
	{
		HelpID = "sw:CheckBox:TP_LINENUMBERING:CB_RESTART_PAGE" ;
		Pos = MAP_APPFONT ( 139, 149 );
		Size = MAP_APPFONT ( 110, 10 );
		TabStop = TRUE ;
		Text [ en-US ] = "~Restart every new page" ;
	};
	FixedLine FL_COUNT
	{
		Pos = MAP_APPFONT ( 133, 110 ) ;
		Size = MAP_APPFONT ( 121, 8 ) ;
		Text [ en-US ] = "Count" ;
	};
	Text [ en-US ] = "Line Numbering" ;
};

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