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


 // #pragma ******************************************************************

 // #include *****************************************************************
#include "globals.hrc"
#include "chrdlg.hrc"
#include "numpara.hrc"
#include "helpid.h"
 // TabPage ******************************************************************
TabPage TP_NUMPARA
{
	HelpID = HID_NUMPARA ;
    Size = MAP_APPFONT ( 260 , 185 ) ;
	Hide = TRUE ;
	FixedLine FL_OUTLINE_START
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Outline" ;
	};
	FixedText FT_OUTLINE_LEVEL
	{
        Pos = MAP_APPFONT ( 12 , 16 ) ;
        Size = MAP_APPFONT ( 112 , 8 ) ;
        Text [ en-US ] = "Outline level" ;
	};
	ListBox LB_OUTLINE_LEVEL
	{
	    HelpID = "sw:ListBox:TP_NUMPARA:LB_OUTLINE_LEVEL";
        Pos = MAP_APPFONT ( 130 , 14 ) ;
        Size = MAP_APPFONT ( 118 , 65 ) ;
		DropDown = TRUE ;
		Border = TRUE ;
		StringList [ en-US ] =
		{
			< "Body text" ; > ;
			< "Level 1" ; >;
			< "Level 2" ; >;
			< "Level 3" ; >;
			< "Level 4" ; >;
			< "Level 5" ; >;
			< "Level 6" ; >;
			< "Level 7" ; >;
			< "Level 8" ; >;
			< "Level 9" ; >;
			< "Level 10" ; >;
		};
        StringList [ x-comment ] =
        {
			< "Level 0" ; > ;
			< "Level 1" ; >;
			< "Level 2" ; >;
			< "Level 3" ; >;
			< "Level 4" ; >;
			< "Level 5" ; >;
			< "Level 6" ; >;
			< "Level 7" ; >;
			< "Level 8" ; >;
			< "Level 9" ; >;
			< "Level 10" ; >;
		};
	};
	FixedLine FL_NEW_START
	{
		Pos = MAP_APPFONT ( 6 , 32 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Numbering" ;
	};
    FixedText FT_NUMBER_STYLE
	{
        Pos = MAP_APPFONT ( 12 , 43 ) ;
        Size = MAP_APPFONT ( 112 , 8 ) ;
        Text [ en-US ] = "Numbering Style" ;
	};
	ListBox LB_NUMBER_STYLE
	{
	    HelpID = "sw:ListBox:TP_NUMPARA:LB_NUMBER_STYLE";
        Pos = MAP_APPFONT ( 130 , 41 ) ;
        Size = MAP_APPFONT ( 118 , 65 ) ;
		DropDown = TRUE ;
		Border = TRUE ;
		StringList [ en-US ] =
		{
			< "None" ; > ;
		};
	};
	TriStateBox CB_NEW_START
	{
	    HelpID = "sw:TriStateBox:TP_NUMPARA:CB_NEW_START";
		Pos = MAP_APPFONT ( 12 , 58 ) ;
		Size = MAP_APPFONT ( 160 , 10 ) ;
		Hide = TRUE ;
		TabStop = TRUE ;
		Text [ en-US ] = "R~estart at this paragraph" ;
	};
    TriStateBox CB_NUMBER_NEW_START
	{
        HelpID = "sw:TriStateBox:TP_NUMPARA:CB_NUMBER_NEW_START";
        Pos = MAP_APPFONT ( 21 , 73 ) ;
        Size = MAP_APPFONT ( 103 , 10 ) ;
		Hide = TRUE ;
		Disable = TRUE ;
        Text [ en-US ] = "S~tart with" ;
	};
	NumericField NF_NEW_START
	{
	    HelpID = "sw:NumericField:TP_NUMPARA:NF_NEW_START";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 130 , 72 ) ;
		Size = MAP_APPFONT ( 26 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		Maximum = 9999 ;
		Value = 0 ;
		First = 0 ;
		Last = 9999 ;
		Hide = TRUE ;
		Disable = TRUE ;
	};
    FixedLine FL_COUNT_PARA
	{
		Pos = MAP_APPFONT ( 6 , 89 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Line numbering" ;
	};
	TriStateBox CB_COUNT_PARA
	{
	    HelpID = "sw:TriStateBox:TP_NUMPARA:CB_COUNT_PARA";
		Pos = MAP_APPFONT ( 12 , 100 ) ;
		Size = MAP_APPFONT ( 160 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Include this paragraph in line numbering" ;
	};
	TriStateBox CB_RESTART_PARACOUNT
	{
	    HelpID = "sw:TriStateBox:TP_NUMPARA:CB_RESTART_PARACOUNT";
		Pos = MAP_APPFONT ( 12 , 116 ) ;
		Size = MAP_APPFONT ( 160 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Rest~art at this paragraph" ;
	};
	FixedText FT_RESTART_NO
	{
        Pos = MAP_APPFONT ( 21 , 132 ) ;
        Size = MAP_APPFONT ( 103 , 8 ) ;
		Disable = TRUE ;
        Text [ en-US ] = "~Start with" ;
	};
	NumericField NF_RESTART_PARA
	{
	    HelpID = "sw:NumericField:TP_NUMPARA:NF_RESTART_PARA";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 130 , 130 ) ;
		Size = MAP_APPFONT ( 26 , 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 65000 ;
		Value = 1 ;
		First = 1 ;
		Last = 65000 ;
		Disable = TRUE ;
	};
};
 // ********************************************************************** EOF










































