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


/* StarView ressource file */

#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" ;
};


































