/**************************************************************
 *
 * 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 <cuires.hrc>
#include "helpid.hrc"
#include "SpellDialog.hrc"
// pragma ----------------------------------------------------------------

// RID_SVXDLG_SPELLCHECK -------------------------------------------------

ModelessDialog RID_SVXDLG_SPELLCHECK
{
	HelpId = HID_SPELLCHECK ;
	Size = MAP_APPFONT ( 270, 188 ) ;
	OutputSize = TRUE ;
	Closeable = TRUE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Text [ en-US ] = "Spellcheck: " ;

	Moveable = TRUE ;

	FixedImage IMG_VENDOR
	{
		Pos = MAP_APPFONT ( 0, 0 ) ;
		Size = MAP_APPFONT ( 270, 21 ) ;
		Hide = TRUE ;
	};

	FixedText FT_LANGUAGE
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 100, 8 ) ;
		Text [ en-US ] = "Text languag~e" ;
	};
	ListBox LB_LANGUAGE
	{
		HelpID = "cui:ListBox:RID_SVXDLG_SPELLCHECK:LB_LANGUAGE" ;
		Pos = MAP_APPFONT ( 110, 6 ) ;
		Size = MAP_APPFONT ( 93, 55 ) ;
		Border = TRUE ;
		Sort = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_NOTINDICT
	{
		Pos = MAP_APPFONT ( 6, 26 ) ;
		Size = MAP_APPFONT ( 120, 8 ) ;
		Text [ en-US ] = "~Not in dictionary" ;
	};

	MultiLineEdit ED_NEWWORD
	{
		HelpID = "cui:MultiLineEdit:RID_SVXDLG_SPELLCHECK:ED_NEWWORD" ;
		Pos = MAP_APPFONT ( 6, 37 ) ;
		Size = MAP_APPFONT ( 197, 48 ) ;
		Border = TRUE ;
		VScroll = TRUE ;
		IgnoreTab = TRUE ;
	};

	FixedText FT_SUGGESTION
	{
		Pos = MAP_APPFONT ( 6, 88 ) ;
		Size = MAP_APPFONT ( 120, 8 ) ;
		Text [ en-US ] = "~Suggestions" ;
	};
	ListBox LB_SUGGESTION
	{
		HelpID = "cui:ListBox:RID_SVXDLG_SPELLCHECK:LB_SUGGESTION" ;
		Pos = MAP_APPFONT ( 6, 99 ) ;
		Size = MAP_APPFONT ( 197, 48 ) ;
		Border = TRUE ;
	};

	CheckBox CB_CHECK_GRAMMAR
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SPELLCHECK:CB_CHECK_GRAMMAR" ;
		Pos = MAP_APPFONT ( 6, 153 ) ;
		Size = MAP_APPFONT ( 100, 10 ) ;
		Text [ en-US ] = "Check ~grammar" ;
		Hide = TRUE ;
	};

	PushButton PB_IGNORE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_IGNORE" ;
		Pos = MAP_APPFONT ( 209, 37 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "~Ignore Once" ;
	};

	PushButton PB_IGNOREALL
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_IGNOREALL" ;
		Pos = MAP_APPFONT ( 209, 54 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "I~gnore All" ;
	};
	PushButton PB_IGNORERULE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_IGNORERULE" ;
		Pos = MAP_APPFONT ( 209, 54 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "I~gnore Rule" ;
		Hide = TRUE ;
	};
	MenuButton MB_ADDTODICT
	{
		HelpID = "cui:MenuButton:RID_SVXDLG_SPELLCHECK:MB_ADDTODICT" ;
		Pos = MAP_APPFONT ( 209, 71 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "~Add" ;
	};

	PushButton PB_CHANGE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_CHANGE" ;
		Pos = MAP_APPFONT ( 209, 99 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "~Change" ;
		DefButton = TRUE ;
	};

	PushButton PB_CHANGEALL
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_CHANGEALL" ;
		Pos = MAP_APPFONT ( 209, 117 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "Change A~ll" ;
	};
	PushButton PB_EXPLAIN
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_EXPLAIN" ;
		Pos = MAP_APPFONT ( 209, 117 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "~Explain..." ;
	};
	PushButton PB_AUTOCORR
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_AUTOCORR" ;
		Pos = MAP_APPFONT ( 209, 134 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "AutoCor~rect" ;
	};
	GroupBox GB_BACKGROUND
	{
		Pos = MAP_APPFONT ( 2, 21 ) ;
		Size = MAP_APPFONT ( 267, 146 ) ;
		Hide = FALSE ;
	};

	HelpButton PB_HELP
	{
		Pos = MAP_APPFONT ( 6, 170 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
	};
	PushButton PB_OPTIONS
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_OPTIONS" ;
		Pos = MAP_APPFONT ( 87, 170 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "O~ptions..." ;
	};
	PushButton PB_UNDO
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_UNDO" ;
		Pos = MAP_APPFONT ( 148, 170 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "~Undo" ;
	};

	PushButton PB_CLOSE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_SPELLCHECK:PB_CLOSE" ;
		Pos = MAP_APPFONT ( 209, 170 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Cl~ose" ;
	};
	String ST_RESUME
	{
		Text [ en-US ] = "Resu~me" ;
	};
	String ST_NOSUGGESTIONS
	{
		Text [en-US] = "(no suggestions)" ;
	};
	String ST_SPELLING
	{
		Text [ en-US ] = "Spelling: $LANGUAGE ($LOCATION)" ;
	};
	String ST_SPELLING_AND_GRAMMAR
	{
		Text [ en-US ] = "Spelling and Grammar: $LANGUAGE ($LOCATION)" ;
	};
	String ST_SPELLING_AND_GRAMMAR_VENDORNAME
	{
		Text [ en-US ] = "Spelling and Grammar: $LANGUAGE ($LOCATION) [$VendorName]" ;
	};
	Image IMG_DEFAULT_VENDOR
	{
		ImageBitmap = Bitmap {File = "vendor01.png" ;} ;
	};
	Image IMG_DEFAULT_VENDOR_HC
	{
		ImageBitmap = Bitmap {File = "vendor01h.png" ;} ;
	};
};

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