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

// RID_SVXDLG_SEARCHFORMAT -----------------------------------------------
TabDialog RID_SVXDLG_SEARCHFORMAT
{
	OutputSize = TRUE ;
	SvLook = TRUE ;
	Text [ en-US ] = "Text Format" ;
	Moveable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_NAME ;
				Text [ en-US ] = "Font" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_EFFECTS ;
				Text [ en-US ] = "Font Effects" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_POSITION ;
				Text [ en-US ] = "Position" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_CHAR_TWOLINES ;
				Text [ en-US ] = "Asian Layout" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_STD_PARAGRAPH ;
				Text [ en-US ] = "Indents & Spacing" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_ALIGN_PARAGRAPH ;
				Text [ en-US ] = "Alignment" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_EXT_PARAGRAPH ;
				Text [ en-US ] = "Text Flow" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_PARA_ASIAN ;
				Text [ en-US ] = "Asian Typography" ;
			};
			PageItem
			{
				Identifier = RID_SVXPAGE_BACKGROUND ;
				Text [ en-US ] = "Background" ;
			};
		};
	};
};
// RID_SVXDLG_SEARCHATTRIBUTE --------------------------------------------
ModalDialog RID_SVXDLG_SEARCHATTR
{
	HelpId = HID_SEARCHATTR ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 194, 128 ) ;
	Text [ en-US ] = "Attributes" ;
	Moveable = TRUE ;
	Control LB_ATTR
	{
		HelpId = HID_SEARCHATTR_CTL_ATTR ;
		ClipChildren = TRUE ;
		Border = TRUE ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 6, 14 ) ;
		Size = MAP_APPFONT ( 120, 108 ) ;
	};
	FixedText FL_ATTR
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 124, 8 ) ;
		Text [ en-US ] = "~Options" ;
	};
	OKButton BTN_ATTR_OK
	{
		Pos = MAP_APPFONT ( 136, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_ATTR_CANCEL
	{
		Pos = MAP_APPFONT ( 136, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	HelpButton BTN_ATTR_HELP
	{
		Pos = MAP_APPFONT ( 136, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
};
// RID_SVXDLG_SEARCHSIMILARITY -------------------------------------------
ModalDialog RID_SVXDLG_SEARCHSIMILARITY
{
	HelpId = HID_SEARCHSIMILARITY ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 178, 76 ) ;
	Text [ en-US ] = "Similarity Search" ;
	Moveable = TRUE ;
	FixedText FT_OTHER
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 70, 8 ) ;
		Text [ en-US ] = "~Exchange characters" ;
	};
	NumericField NF_OTHER
	{
		HelpID = "cui:NumericField:RID_SVXDLG_SEARCHSIMILARITY:NF_OTHER" ;
		Pos = MAP_APPFONT ( 86, 14 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		Border = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		First = 1 ;
		Maximum = 30 ;
		Last = 30 ;
		Value = 1 ;
		TabStop = TRUE ;
	};
	FixedText FT_LONGER
	{
		Pos = MAP_APPFONT ( 12, 30 ) ;
		Size = MAP_APPFONT ( 70, 8 ) ;
		Text [ en-US ] = "~Add characters" ;
	};
	NumericField NF_LONGER
	{
		HelpID = "cui:NumericField:RID_SVXDLG_SEARCHSIMILARITY:NF_LONGER" ;
		Pos = MAP_APPFONT ( 86, 28 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		Border = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		First = 1 ;
		Maximum = 30 ;
		Last = 30 ;
		Value = 1 ;
		TabStop = TRUE ;
	};
	FixedText FT_SHORTER
	{
		Pos = MAP_APPFONT ( 12, 46 ) ;
		Size = MAP_APPFONT ( 70, 8 ) ;
		Text [ en-US ] = "~Remove characters" ;
	};
	NumericField NF_SHORTER
	{
		HelpID = "cui:NumericField:RID_SVXDLG_SEARCHSIMILARITY:NF_SHORTER" ;
		Pos = MAP_APPFONT ( 86, 44 ) ;
		Size = MAP_APPFONT ( 24, 12 ) ;
		Border = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 0 ;
		First = 1 ;
		Maximum = 30 ;
		Last = 30 ;
		Value = 1 ;
		TabStop = TRUE ;
	};
	CheckBox CB_RELAX
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SEARCHSIMILARITY:CB_RELAX" ;
		Pos = MAP_APPFONT ( 12, 60 ) ;
		Size = MAP_APPFONT ( 98, 10 ) ;
		Text [ en-US ] = "~Combine" ;
		TabStop = TRUE ;
	};
	FixedLine FL_SIMILARITY
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 110, 8 ) ;
		Text [ en-US ] = "Settings" ;
	};
	OKButton BTN_ATTR_OK
	{
		Pos = MAP_APPFONT ( 122, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_ATTR_CANCEL
	{
		Pos = MAP_APPFONT ( 122, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_ATTR_HELP
	{
		Pos = MAP_APPFONT ( 122, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

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