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

ModalDialog RID_SVXDLG_IMAPURL
{
	HelpID = "cui:ModalDialog:RID_SVXDLG_IMAPURL" ;
	SVLook = TRUE ;
	OutputSize = TRUE ;
	Closeable = TRUE ;
	Moveable = TRUE ;
	Size = MAP_APPFONT ( 214, 188 ) ;
	Text [ en-US ] = "Properties" ;

	FixedText FT_URL1
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 202, 8 ) ;
		Text [ en-US ] = "~URL" ;
	};
	Edit EDT_URL
	{
		HelpID = "cui:Edit:RID_SVXDLG_IMAPURL:EDT_URL" ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Pos = MAP_APPFONT ( 6, 17 ) ;
		Size = MAP_APPFONT ( 202, 12 ) ;
	};

	FixedText FT_TARGET
	{
		Pos = MAP_APPFONT ( 6, 32 ) ;
		Size = MAP_APPFONT ( 202, 8 ) ;
		Text [ en-US ] = "F~rame" ;
	};
	ComboBox CBB_TARGETS
	{
		HelpID = "cui:ComboBox:RID_SVXDLG_IMAPURL:CBB_TARGETS" ;
		Border = TRUE ;
		Sort = TRUE ;
		Pos = MAP_APPFONT ( 6, 43 ) ;
		Size = MAP_APPFONT ( 101, 50 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		HScroll = TRUE ;
	};

	FixedText FT_NAME
	{
		Pos = MAP_APPFONT ( 6, 59 ) ;
		Size = MAP_APPFONT ( 202, 8 ) ;
		Text [ en-US ] = "~Name" ;
	};
	Edit EDT_NAME
	{
		HelpID = "cui:Edit:RID_SVXDLG_IMAPURL:EDT_NAME" ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Pos = MAP_APPFONT ( 6, 70 ) ;
		Size = MAP_APPFONT ( 202, 12 ) ;
	};

	FixedText FT_URLDESCRIPTION
	{
		Pos = MAP_APPFONT ( 6, 85 ) ;
		Size = MAP_APPFONT ( 202, 8 ) ;
		Text [ en-US ] = "Alternative ~text" ;
	};

	Edit EDT_URLDESCRIPTION
	{
		HelpID = "cui:Edit:RID_SVXDLG_IMAPURL:EDT_URLDESCRIPTION" ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Pos = MAP_APPFONT ( 6, 96 ) ;
		Size = MAP_APPFONT ( 202, 12 ) ;
	};
	FixedText FT_DESCRIPTION
	{
		Pos = MAP_APPFONT ( 6, 111 ) ;
		Size = MAP_APPFONT ( 202, 8 ) ;
		Text [ en-US ] = "~Description" ;
	};

	MultiLineEdit EDT_DESCRIPTION
	{
		HelpID = "cui:MultiLineEdit:RID_SVXDLG_IMAPURL:EDT_DESCRIPTION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 122 ) ;
		Size = MAP_APPFONT ( 202, 34 ) ;
		TabStop = TRUE ;
		IgnoreTab = TRUE ;
		VScroll = TRUE ;
	};

	FixedLine FL_URL
	{
		Pos = MAP_APPFONT ( 0, 160 ) ;
		Size = MAP_APPFONT ( 214, 4 ) ;
	};

	// Buttons
	HelpButton BTN_HELP1
	{
		Pos = MAP_APPFONT ( 6, 168 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};

	OKButton BTN_OK1
	{
		TabStop = TRUE ;
		DefButton = TRUE ;
		Pos = MAP_APPFONT ( 107, 168 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};

	CancelButton BTN_CANCEL1
	{
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 160, 168 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
};

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