/**************************************************************
 * 
 * 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 ) ;
	};
};
