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

// TP_CONFIG_EVENT -------------------------------------------------------
TabPage RID_SVXPAGE_EVENTS
{
	HelpId = HID_SVX_CONFIG_EVENT ;
	OutputSize = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 272, 258 ) ;
	String STR_EVENT
	{
		Text [ en-US ] = "Event" ;
	};
	String STR_ASSMACRO
	{
		Text [ en-US ] = "Assigned Action" ;
	};
	Control LB_EVENT
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 205, 229 ) ;
		TabStop = TRUE ;
		HelpID = HID_SVX_MACRO_LB_EVENT ;
	};
	FixedText TXT_SAVEIN
	{
		Pos = MAP_APPFONT ( 6, 240 ) ;
		Size = MAP_APPFONT ( 55, 8 ) ;
		Group = TRUE ;
		Text [ en-US ] = "Save In" ;
	};
	ListBox LB_SAVEIN
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_EVENTS:LB_SAVEIN" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 54, 238 ) ;
		Size = MAP_APPFONT ( 132, 53 ) ;
		DropDown = TRUE ;
	};
	FixedText FT_ASSIGN
	{
		Pos = MAP_APPFONT ( 217, ROW0 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Assign:" ;
	};
	PushButton PB_ASSIGN
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_EVENTS:PB_ASSIGN" ;
		Pos = MAP_APPFONT ( 217, ROW0A ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "M~acro..." ;
	};
	PushButton PB_DELETE
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_EVENTS:PB_DELETE" ;
		Pos = MAP_APPFONT ( 217, ROW0A+RSC_CD_PUSHBUTTON_HEIGHT+12 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "~Remove" ;
	};
	Image IMG_MACRO
	{
		ImageBitmap = Bitmap { File = "id018.png" ; };
	};
	Image IMG_COMPONENT
	{
		ImageBitmap = Bitmap { File = "component_16.png" ; };
	};
	Image IMG_MACRO_H
	{
		ImageBitmap = Bitmap { File = "idh018.png" ; };
	};
	Image IMG_COMPONENT_H
	{
		ImageBitmap = Bitmap { File = "component_16_h.png" ; };
	};
};

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