/**************************************************************
 *
 * 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 "hangulhanjadlg.hrc"

Window RID_SVX_WND_COMMON_LINGU
{
	DialogControl = TRUE ; // we want to tab out of this
	Hide = TRUE ;

	FixedText FT_WORD
	{
		Pos = MAP_APPFONT ( 6, 9 ) ;
		Size = MAP_APPFONT ( 42, 10 ) ;
		Text [ en-US ] = "Origi~nal" ;
	};
	Control FT_AKTWORD
	{
		HelpId=HID_SPELLDLG_SETWORD ;
		Pos = MAP_APPFONT ( 51, 9 ) ;
		Size = MAP_APPFONT ( 164, 10 ) ;
		Border = FALSE ;
		TabStop = TRUE ;
	};

	FixedText FT_NEWWORD
	{
		Pos = MAP_APPFONT ( 6, 25 ) ;
		Size = MAP_APPFONT ( 42, 10 ) ;
		Text [ en-US ] = "~Word" ;
	};

	Edit ED_NEWWORD
	{
		Pos = MAP_APPFONT ( 51, 24 ) ;
		Size = MAP_APPFONT ( 137, 12 ) ;
		Border = TRUE ;
	};

	FixedText FT_SUGGESTION
	{
		Pos = MAP_APPFONT ( 6, 48 ) ;
		Size = MAP_APPFONT ( 42, 10 ) ;
		Text [ en-US ] = "~Suggestions" ;
	};

	PushButton BTN_IGNORE
	{
		Pos = MAP_APPFONT ( 224, 6 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "~Ignore" ;
	};

	PushButton BTN_IGNOREALL
	{
		Pos = MAP_APPFONT ( 224, 22 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "Always I~gnore" ;
	};

	PushButton BTN_CHANGE
	{
		Pos = MAP_APPFONT ( 224, 40 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "~Replace" ;
		DefButton = TRUE ;
	};

	PushButton BTN_CHANGEALL
	{
		Pos = MAP_APPFONT ( 224, 56 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Text [ en-US ] = "Always R~eplace" ;
	};

	PushButton BTN_OPTIONS
	{
		Pos = MAP_APPFONT ( 224, 129 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Options..." ;
	};

	FixedText FT_STATUS
	{
		Pos = MAP_APPFONT ( 6, 155 ) ;
		Size = MAP_APPFONT ( 130, 10 ) ;
	};

	GroupBox GB_AUDIT
	{
		Pos = MAP_APPFONT ( 1, 1 ) ;
		Size = MAP_APPFONT ( 283, 148 ) ;
		Hide=TRUE ;
	};

	HelpButton BTN_SPL_HELP
	{
		Pos = MAP_APPFONT ( 160, 153 ) ;
		Size = MAP_APPFONT ( 55, 14 ) ;
	};

	CancelButton BTN_SPL_CANCEL
	{
		Pos = MAP_APPFONT ( 224 , 153 ) ;
		Size = MAP_APPFONT ( 55 , 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Close" ;
	};
};

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