/**************************************************************
 *
 * 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 "charmap.hrc"
#include "helpid.hrc"
#include <svx/dialogs.hrc> // for RID_SVXDLG_CHARMAP

// RID_SVXDLG_CHARMAP ----------------------------------------------------
ModalDialog RID_SVXDLG_CHARMAP
{
	HelpId = CMD_SID_CHARMAP ;
	SvLook = TRUE ;
	Text [ en-US ] = "Special Characters" ;
	Size = MAP_APPFONT ( 297, 153 ) ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	Control CT_SHOWSET
	{
		HelpId = HID_CHARMAP_CTL_SHOWSET ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 24 ) ;
		Size = MAP_APPFONT ( 230, 112 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	FixedText FT_FONT
	{
		Pos = MAP_APPFONT ( 6, 8 ) ;
		Size = MAP_APPFONT ( 33, 8 ) ;
		Text [ en-US ] = "~Font" ;
		Left = TRUE ;
		Group = TRUE ;
	};
	ListBox LB_FONT
	{
		HelpID = "cui:ListBox:RID_SVXDLG_CHARMAP:LB_FONT" ;
		Pos = MAP_APPFONT ( 42, 6 ) ;
		Size = MAP_APPFONT ( 70, 58 ) ;
		Sort = TRUE ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_SUBSET
	{
		Pos = MAP_APPFONT ( 118, 8 ) ;
		Size = MAP_APPFONT ( 42, 8 ) ;
		Text [ en-US ] = "~Subset" ;
	};
	ListBox LB_SUBSET
	{
		HelpID = "cui:ListBox:RID_SVXDLG_CHARMAP:LB_SUBSET" ;
		Pos = MAP_APPFONT ( 161, 6 ) ;
		Size = MAP_APPFONT ( 63, 68 ) ;
		Sort = FALSE ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_SYMBOLE
	{
		Pos = MAP_APPFONT ( 6, 140 ) ;
		Size = MAP_APPFONT ( 38, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Characters:" ;
	};
	Control CT_SHOWTEXT
	{
		HelpId = HID_CHARMAP_CTL_SHOWTEXT ;
		Pos = MAP_APPFONT ( 46, 137 ) ;
		Size = MAP_APPFONT ( 244, 16 ) ;
		Group = TRUE ;
	};
	Control CT_SHOWCHAR
	{
		HelpId = HID_CHARMAP_CTL_SHOWCHAR ;
		Pos = MAP_APPFONT ( 241, 79 ) ;
		Size = MAP_APPFONT ( 50, 44 ) ;
		Group = TRUE ;
	};
	FixedText FT_CHARCODE
	{
		Pos = MAP_APPFONT ( 241, 126 ) ;
		Size = MAP_APPFONT ( 50, 8 ) ;
		Center = TRUE ;
	};
	OKButton BTN_CHAR_OK
	{
		Pos = MAP_APPFONT ( 242, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CHAR_CANCEL
	{
		Pos = MAP_APPFONT ( 242, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_CHAR_HELP
	{
		Pos = MAP_APPFONT ( 242, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	PushButton BTN_DELETE
	{
		HelpID = "cui:PushButton:RID_SVXDLG_CHARMAP:BTN_DELETE" ;
		Pos = MAP_APPFONT ( 242, 63 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Delete" ;
	};
};

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