/**************************************************************
 *
 * 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 "ccoll.hrc"
#include "helpid.h"
// TabPage ******************************************************************
TabPage TP_CONDCOLL
{
	HelpID = HID_COND_COLL ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Hide = TRUE ;
	FixedLine FL_CONDITION
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Options" ;
	};
	CheckBox CB_CONDITION
	{
		HelpID = "sw:CheckBox:TP_CONDCOLL:CB_CONDITION" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 100, 10 ) ;
		TabStop = TRUE ;
		Disable = TRUE ;
		Text [ en-US ] = "~Conditional Style" ;
	};
	FixedText FT_CONTEXT
	{
		Pos = MAP_APPFONT ( 12, 28 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "Conte~xt" ;
	};
	FixedText FT_USED
	{
		Pos = MAP_APPFONT ( 100, 28 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "Applied Styles" ;
	};
	Control TB_CONDCOLLS
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 39 ) ;
		Size = MAP_APPFONT ( 173, 123 ) ;
		TabStop = TRUE ;
		ClipChildren = TRUE ;
		Disable = TRUE ;
		Border = TRUE ;
	};
	FixedText FT_STYLE
	{
		Pos = MAP_APPFONT ( 190, 28 ) ;
		Size = MAP_APPFONT ( 58, 8 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "~Paragraph Styles" ;
	};
	ListBox LB_STYLE
	{
		HelpID = "sw:ListBox:TP_CONDCOLL:LB_STYLE" ;
		Pos = MAP_APPFONT ( 188, 39 ) ;
		Size = MAP_APPFONT ( 60, 108 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		Sort = TRUE ;
		Disable = TRUE ;
		HScroll = TRUE ;
	};
	ListBox LB_FILTER
	{
		HelpID = "sw:ListBox:TP_CONDCOLL:LB_FILTER" ;
		Pos = MAP_APPFONT ( 188, 150 ) ;
		Size = MAP_APPFONT ( 60, 50 ) ;
		DropDown = TRUE ;
		TabStop = TRUE ;
		Border = TRUE ;
		Disable = TRUE ;
		HScroll = TRUE ;
	};
	PushButton PB_REMOVE
	{
		HelpID = "sw:PushButton:TP_CONDCOLL:PB_REMOVE" ;
		Pos = MAP_APPFONT ( 129, 165 ) ;
		Size = MAP_APPFONT ( 50, 12 ) ;
		TabStop = TRUE ;
		Disable = TRUE ;
		Text [ en-US ] = "Re~move" ;
	};
	PushButton PB_ASSIGN
	{
		HelpID = "sw:PushButton:TP_CONDCOLL:PB_ASSIGN" ;
		Pos = MAP_APPFONT ( 185, 165 ) ;
		Size = MAP_APPFONT ( 50, 12 ) ;
		TabStop = TRUE ;
		Disable = TRUE ;
		Text [ en-US ] = "~Apply" ;
	};
	StringArray STR_REGIONS
	{
		ItemList [ en-US ] =
		{
			< "Table Header" ;			> ;
			< "Table" ;					> ;
			< "Frame" ;					> ;
			< "Section" ;				> ;
			< "Footnote" ;				> ;
			< "Endnote" ;				> ;
			< "Header" ;				> ;
			< "Footer" ;				> ;
			< " 1st Outline Level" ;	> ;
			< " 2nd Outline Level" ;	> ;
			< " 3rd Outline Level" ;	> ;
			< " 4th Outline Level" ;	> ;
			< " 5th Outline Level" ;	> ;
			< " 6th Outline Level" ;	> ;
			< " 7th Outline Level" ;	> ;
			< " 8th Outline Level" ;	> ;
			< " 9th Outline Level" ;	> ;
			< "10th Outline Level" ;	> ;
			< " 1st Numbering Level" ;	> ;
			< " 2nd Numbering Level" ;	> ;
			< " 3rd Numbering Level" ;	> ;
			< " 4th Numbering Level" ;	> ;
			< " 5th Numbering Level" ;	> ;
			< " 6th Numbering Level" ;	> ;
			< " 7th Numbering Level" ;	> ;
			< " 8th Numbering Level" ;	> ;
			< " 9th Numbering Level" ;	> ;
			< "10th Numbering Level" ;	> ;
		};
	};
	String STR_NOTEMPL
	{
		Text [ en-US ] = "<none>" ;
	};
};

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