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

String RID_SVXSTR_HMERR_CHECKINSTALL
{
	Text [ en-US ] = "is not available for spellchecking\nPlease check your installation and install the desired language\n" ;
};

// RID_SVXDLG_HYPHENATE --------------------------------------------------
ModalDialog RID_SVXDLG_HYPHENATE
{
	HelpId = HID_HYPHENATE ;
	Size = MAP_APPFONT ( 200, 111 ) ;
	OutputSize = TRUE ;
	SvLook = TRUE ;
	Text [ en-US ] = "Hyphenation" ;
	Moveable = TRUE ;

	FixedText FT_WORD
	{
		Pos = MAP_APPFONT ( 5, 5 ) ;
		Size = MAP_APPFONT ( 120, 8 ) ;
		Text [ en-US ] = "~Word" ;
	};
	Edit ED_WORD
	{
		HelpID = "cui:Edit:RID_SVXDLG_HYPHENATE:ED_WORD" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 5, 17 ) ;
		Size = MAP_APPFONT ( 132, 12 ) ;
		TABSTOP = TRUE ;
		LEFT = TRUE ;
	};
	ImageButton BTN_LEFT
	{
		HelpID = "cui:ImageButton:RID_SVXDLG_HYPHENATE:BTN_LEFT" ;
		Pos = MAP_APPFONT ( 56, 33 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TABSTOP = TRUE ;
		SYMBOL = IMAGEBUTTON_ARROW_LEFT ;
	};
	ImageButton BTN_RIGHT
	{
		HelpID = "cui:ImageButton:RID_SVXDLG_HYPHENATE:BTN_RIGHT" ;
		Pos = MAP_APPFONT ( 75, 33 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TABSTOP = TRUE ;
		Symbol = IMAGEBUTTON_ARROW_RIGHT ;
	};
	OKButton BTN_HYPH_CUT
	{
		Pos = MAP_APPFONT ( 144, 17 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "H~yphenate" ;
		TABSTOP = TRUE ;
		DEFBUTTON = TRUE ;
	};
	PushButton BTN_HYPH_CONTINUE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_HYPHENATE:BTN_HYPH_CONTINUE" ;
		Pos = MAP_APPFONT ( 144, 35 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Skip" ;
		TABSTOP = TRUE ;
	};
	PushButton BTN_HYPH_DELETE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_HYPHENATE:BTN_HYPH_DELETE" ;
		Pos = MAP_APPFONT ( 144, 52 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Remove" ;
		TABSTOP = TRUE ;
	};
	FixedLine FL_BOTTOM
	{
		Pos = MAP_APPFONT ( 0, 81 ) ;
		Size = MAP_APPFONT ( 200, 8 ) ;
	};
	HelpButton BTN_HYPH_HELP
	{
		Pos = MAP_APPFONT ( 5, 93 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TABSTOP = TRUE ;
	};
	PushButton BTN_HYPH_ALL
	{
		HelpID = "cui:PushButton:RID_SVXDLG_HYPHENATE:BTN_HYPH_ALL" ;
		Pos = MAP_APPFONT ( 63, 93 ) ;
		Size = MAP_APPFONT ( 74, 14 ) ;
		Text [ en-US ] = "Hyphenate ~All" ;
		TABSTOP = TRUE ;
	};
	CancelButton BTN_HYPH_CANCEL
	{
		Pos = MAP_APPFONT ( 144, 93 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Close" ;
		TABSTOP = TRUE ;
	};
};

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