/**************************************************************
 *
 * 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 <svtools/controldims.hrc>
#include <cuires.hrc>
#include "helpid.hrc"
#include "hyperdlg.hrc"

#define HYPERDLG_IMGBUTTON_HEIGHT RSC_CD_PUSHBUTTON_HEIGHT + 2

/*************************************************************************
| Tabpage : Internet
*************************************************************************/

TabPage RID_SVXPAGE_HYPERLINK_INTERNET
{
	Hide = TRUE ;
	HelpID = HID_HYPERLINK_INTERNET ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 162 ) ;
	Text [ en-US ] = "Hyperlink" ;

	FixedLine GRP_LINKTYPE
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Hyperlink type" ;
	};
	RadioButton RB_LINKTYP_INTERNET
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_INTERNET:RB_LINKTYP_INTERNET" ;
		Pos = MAP_APPFONT ( COL_2, 13 ) ;
		Size = MAP_APPFONT ( 57, 10 ) ;
		Text [ en-US ] = "~Web" ;
	};
	RadioButton RB_LINKTYP_FTP
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_INTERNET:RB_LINKTYP_FTP" ;
		Pos = MAP_APPFONT ( 114 + COL_DIFF, 13 ) ;
		Size = MAP_APPFONT ( 56 - COL_DIFF, 10 ) ;
		Text [ en-US ] = "~FTP" ;
	};
	RadioButton RB_LINKTYP_TELNET
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_INTERNET:RB_LINKTYP_TELNET" ;
		Pos = MAP_APPFONT ( 173, 13 ) ;
		Size = MAP_APPFONT ( 56, 10 ) ;
		Text [ en-US ] = "~Telnet" ;
	};
	FixedText FT_TARGET_HTML
	{
		Pos = MAP_APPFONT ( 12, 26 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Tar~get" ;
	};
	FixedText FT_LOGIN
	{
		Pos = MAP_APPFONT ( 12, 43 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "~Login name" ;
	};
	Edit ED_LOGIN
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_INTERNET:ED_LOGIN" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 42 ) ;
		Size = MAP_APPFONT ( 80 - COL_DIFF, 12 ) ;
	};
	FixedText FT_PASSWD
	{
		Pos = MAP_APPFONT ( 12, 60 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "~Password" ;
	};
	Edit ED_PASSWD
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_INTERNET:ED_PASSWD" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 59 ) ;
		Size = MAP_APPFONT ( 80 - COL_DIFF, 12 ) ;
		PassWord = TRUE ;
	};
	CheckBox CBX_ANONYMOUS
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_HYPERLINK_INTERNET:CBX_ANONYMOUS" ;
		Pos = MAP_APPFONT ( COL_2, 75 ) ;
		Size = MAP_APPFONT ( 89 - COL_DIFF, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Anonymous ~user" ;
	};
	ImageButton BTN_BROWSE
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_INTERNET:BTN_BROWSE" ;
		Pos = MAP_APPFONT ( 235, 24 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "WWW Browser" ;

		QuickHelpText [ en-US ] = "WWW Browser" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "browse.png" ;} ;
		};
	};
	Image IMG_BROWSE_HC
	{
		ImageBitmap = Bitmap {File = "browse_hc.png" ;} ;
	};
	ImageButton BTN_TARGET
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_INTERNET:BTN_TARGET" ;
		Pos = MAP_APPFONT ( 235, 40+2 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Target in Document" ;

		QuickHelpText [ en-US ] = "Target in Document" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "target.png" ;} ;
		};
	};
	Image IMG_TARGET_HC
	{
		ImageBitmap = Bitmap {File = "target_hc.png" ;} ;
	};
	FixedLine GRP_MORE
	{
		Pos = MAP_APPFONT ( 6, 92 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Further settings" ;
	};
	FixedText FT_FRAME
	{
		Pos = MAP_APPFONT ( 12, 105 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "F~rame" ;
	};
	ComboBox CB_FRAME
	{
		HelpID = "cui:ComboBox:RID_SVXPAGE_HYPERLINK_INTERNET:CB_FRAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 104 ) ;
		Size = MAP_APPFONT ( 66 - COL_DIFF, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_FORM
	{
		Pos = MAP_APPFONT ( 126, 105 ) ;
		Size = MAP_APPFONT ( 33, 8 ) ;
		Text [ en-US ] = "F~orm" ;
	};
	ListBox LB_FORM
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_HYPERLINK_INTERNET:LB_FORM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 160, 104 ) ;
		Size = MAP_APPFONT ( 70, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		AutoHScroll = TRUE ;
		DDExtraWidth = TRUE ;
		StringList [ en-US ] =
		{
			< "Text" ; Default ;	> ;
			< "Button" ; Default ;	> ;
		};
	};
	FixedText FT_INDICATION
	{
		Pos = MAP_APPFONT ( 12, 123 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Te~xt" ;
	};
	Edit ED_INDICATION
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_INTERNET:ED_INDICATION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 122 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	FixedText FT_TEXT
	{
		Pos = MAP_APPFONT ( 12, 140 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "N~ame" ;
	};
	Edit ED_TEXT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_INTERNET:ED_TEXT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 139 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	ImageButton BTN_SCRIPT
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_INTERNET:BTN_SCRIPT" ;
		Pos = MAP_APPFONT ( 235, 103-1 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		QuickHelpText [ en-US ] = "Events" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "script.png" ;} ;
		};
		Text [ en-US ] = "Events" ;
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap {File = "script_hc.png" ;} ;
	};
};

/*************************************************************************
| Tabpage : Mail & News
*************************************************************************/

TabPage RID_SVXPAGE_HYPERLINK_MAIL
{
	Hide = TRUE ;
	HelpID = HID_HYPERLINK_MAIL ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 162 ) ;
	Text [ en-US ] = "Hyperlink" ;

	FixedLine GRP_MAILNEWS
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Mail & news" ;
	};
	RadioButton RB_LINKTYP_MAIL
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_MAIL:RB_LINKTYP_MAIL" ;
		Pos = MAP_APPFONT ( COL_2, 13 ) ;
		Size = MAP_APPFONT ( 56 - COL_DIFF, 10 ) ;
		Text [ en-US ] = "~E-mail" ;
	};
	RadioButton RB_LINKTYP_NEWS
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_MAIL:RB_LINKTYP_NEWS" ;
		Pos = MAP_APPFONT ( 113, 13 ) ;
		Size = MAP_APPFONT ( 56, 10 ) ;
		Text [ en-US ] = "~News" ;
	};
	FixedText FT_RECEIVER
	{
		Pos = MAP_APPFONT ( 12, 26 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Re~ceiver" ;
	};
	FixedText FT_SUBJECT
	{
		Pos = MAP_APPFONT ( 12, 43 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "~Subject" ;
	};
	Edit ED_SUBJECT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_MAIL:ED_SUBJECT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 42 ) ;
		Size = MAP_APPFONT ( 176 - COL_DIFF, 12 ) ;
	};
	ImageButton BTN_ADRESSBOOK
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_MAIL:BTN_ADRESSBOOK" ;
		Pos = MAP_APPFONT ( 235, 24 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "adrbook.png" ;} ;
		};

		Text [ en-US ] = "Data Sources..." ;
		QuickHelpText [ en-US ] = "Data Sources..." ;
	};
	Image IMG_ADRESSBOOK_HC
	{
		ImageBitmap = Bitmap {File = "adrbook_hc.png" ;} ;
	};

	FixedLine GRP_MORE
	{
		Pos = MAP_APPFONT ( 6, 92 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Further settings" ;
	};
	FixedText FT_FRAME
	{
		Pos = MAP_APPFONT ( 12, 105 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "F~rame" ;
	};
	ComboBox CB_FRAME
	{
		HelpID = "cui:ComboBox:RID_SVXPAGE_HYPERLINK_MAIL:CB_FRAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 104 ) ;
		Size = MAP_APPFONT ( 66 - COL_DIFF, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_FORM
	{
		Pos = MAP_APPFONT ( 126, 105 ) ;
		Size = MAP_APPFONT ( 33, 10 ) ;
		Text [ en-US ] = "F~orm" ;
	};
	ListBox LB_FORM
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_HYPERLINK_MAIL:LB_FORM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 160, 104 ) ;
		Size = MAP_APPFONT ( 70, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		AutoHScroll = TRUE ;
		DDExtraWidth = TRUE ;
		StringList [ en-US ] =
		{
			< "Text" ; Default ;	> ;
			< "Button" ; Default ;	> ;
		};
	};
	FixedText FT_INDICATION
	{
		Pos = MAP_APPFONT ( 12, 123 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Te~xt" ;
	};
	Edit ED_INDICATION
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_MAIL:ED_INDICATION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 122 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	FixedText FT_TEXT
	{
		Pos = MAP_APPFONT ( 12, 140 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "N~ame" ;
	};
	Edit ED_TEXT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_MAIL:ED_TEXT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 139 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	ImageButton BTN_SCRIPT
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_MAIL:BTN_SCRIPT" ;
		Pos = MAP_APPFONT ( 235, 103-1 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Events" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "script.png" ;} ;
		};
		Text [ en-US ] = "Events" ;
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap {File = "script_hc.png" ;} ;
	};
};

/*************************************************************************
| Tabpage : Documents
*************************************************************************/

TabPage RID_SVXPAGE_HYPERLINK_DOCUMENT
{
	Hide = TRUE ;
	HelpID = HID_HYPERLINK_DOCUMENT ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 162 ) ;
	Text [ en-US ] = "Hyperlink" ;

	FixedLine GRP_DOCUMENT
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Document" ;
	};
	FixedText FT_PATH_DOC
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "~Path" ;
	};
	ImageButton BTN_FILEOPEN
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_DOCUMENT:BTN_FILEOPEN" ;
		Pos = MAP_APPFONT ( 235, 14 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Open File" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "fileopen.png" ;} ;
		};
		Text [ en-US ] = "Open File" ;
	};
	Image IMG_FILEOPEN_HC
	{
		ImageBitmap = Bitmap {File = "fileopen_hc.png" ;} ;
	};

	FixedLine GRP_TARGET
	{
		Pos = MAP_APPFONT ( 6, 38 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Target in document" ;
	};
	FixedText FT_TARGET_DOC
	{
		Pos = MAP_APPFONT ( 12, 53 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Targ~et" ;
	};
	Edit ED_TARGET_DOC
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_DOCUMENT:ED_TARGET_DOC" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 52 ) ;
		Size = MAP_APPFONT ( 176 - COL_DIFF, 12 ) ;
	};
	FixedText FT_URL
	{
		Pos = MAP_APPFONT ( 12, 70 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "URL" ;
	};
	FixedText FT_FULL_URL
	{
		Pos = MAP_APPFONT ( COL_2, 70 ) ;
		Size = MAP_APPFONT ( 176 - COL_DIFF, 12 ) ;
		Text [ en-US ] = "Test text" ;
	};
	ImageButton BTN_BROWSE
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_DOCUMENT:BTN_BROWSE" ;
		Pos = MAP_APPFONT ( 235, 51 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Target in Document" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "target.png" ;} ;
		};
		Text [ en-US ] = "Target in Document" ;
	};
	Image IMG_BROWSE_HC
	{
		ImageBitmap = Bitmap {File = "target_hc.png" ;} ;
	};

	FixedLine GRP_MORE
	{
		Pos = MAP_APPFONT ( 6, 92 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Further settings" ;
	};
	FixedText FT_FRAME
	{
		Pos = MAP_APPFONT ( 12, 105 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "F~rame" ;
	};
	ComboBox CB_FRAME
	{
		HelpID = "cui:ComboBox:RID_SVXPAGE_HYPERLINK_DOCUMENT:CB_FRAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 104 ) ;
		Size = MAP_APPFONT ( 66 - COL_DIFF, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_FORM
	{
		Pos = MAP_APPFONT ( 126, 105 ) ;
		Size = MAP_APPFONT ( 33, 10 ) ;
		Text [ en-US ] = "F~orm" ;
	};
	ListBox LB_FORM
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_HYPERLINK_DOCUMENT:LB_FORM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 160, 104 ) ;
		Size = MAP_APPFONT ( 70, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		AutoHScroll = TRUE ;
		DDExtraWidth = TRUE ;
		StringList [ en-US ] =
		{
			< "Text" ; Default ;	> ;
			< "Button" ; Default ;	> ;
		};
	};
	FixedText FT_INDICATION
	{
		Pos = MAP_APPFONT ( 12, 123 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Te~xt" ;
	};
	Edit ED_INDICATION
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_DOCUMENT:ED_INDICATION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 122 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	FixedText FT_TEXT
	{
		Pos = MAP_APPFONT ( 12, 140 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "N~ame" ;
	};
	Edit ED_TEXT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_DOCUMENT:ED_TEXT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 139 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	ImageButton BTN_SCRIPT
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_DOCUMENT:BTN_SCRIPT" ;
		Pos = MAP_APPFONT ( 235, 103-1 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Events" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "script.png" ;} ;
		};
		Text [ en-US ] = "Events" ;
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap {File = "script_hc.png" ;} ;
	};
};

/*************************************************************************
| Tabpage : New Documents
*************************************************************************/

TabPage RID_SVXPAGE_HYPERLINK_NEWDOCUMENT
{
	Hide = TRUE ;
	HelpID = HID_HYPERLINK_NEWDOCUMENT ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260, 162 ) ;
	Text [ en-US ] = "Hyperlink" ;

	FixedLine GRP_NEWDOCUMENT
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "New document" ;
	};
	RadioButton RB_EDITNOW
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:RB_EDITNOW" ;
		Pos = MAP_APPFONT ( COL_2, 13 ) ;
		Size = MAP_APPFONT ( 85 - COL_DIFF, 10 ) ;
		Text [ en-US ] = "Edit ~now" ;
	};
	RadioButton RB_EDITLATER
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:RB_EDITLATER" ;
		Pos = MAP_APPFONT ( 142, 13 ) ;
		Size = MAP_APPFONT ( 84, 10 ) ;
		Text [ en-US ] = "Edit ~later" ;
	};
	FixedText FT_PATH_NEWDOC
	{
		Pos = MAP_APPFONT ( 12, 26 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "~File" ;
	};
	Edit ED_PATH_NEWDOC
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:ED_PATH_NEWDOC" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 25 ) ;
		Size = MAP_APPFONT ( 176 - COL_DIFF, 12 ) ;
	};
	FixedText FT_DOCUMENT_TYPES
	{
		Pos = MAP_APPFONT ( 12, 43 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "File ~type" ;
	};
	ListBox LB_DOCUMENT_TYPES
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:LB_DOCUMENT_TYPES" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 42 ) ;
		Size = MAP_APPFONT ( 176 - COL_DIFF, 40 ) ;
		TabStop = TRUE ;
		DropDown = FALSE ;
	};
	ImageButton BTN_CREATE
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:BTN_CREATE" ;
		Pos = MAP_APPFONT ( 235, 24 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;

		QuickHelpText [ en-US ] = "Select Path" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "newdoc.png" ;} ;
		};
		Text [ en-US ] = "Select Path" ;
	};
	Image IMG_CREATE_HC
	{
		ImageBitmap = Bitmap {File = "newdoc_hc.png" ;} ;
	};

	FixedLine GRP_MORE
	{
		Pos = MAP_APPFONT ( 6, 92 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Further settings" ;
	};
	FixedText FT_FRAME
	{
		Pos = MAP_APPFONT ( 12, 105 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "F~rame" ;
	};
	ComboBox CB_FRAME
	{
		HelpID = "cui:ComboBox:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:CB_FRAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 104 ) ;
		Size = MAP_APPFONT ( 66 - COL_DIFF, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_FORM
	{
		Pos = MAP_APPFONT ( 126, 105 ) ;
		Size = MAP_APPFONT ( 33, 10 ) ;
		Text [ en-US ] = "F~orm" ;
	};
	ListBox LB_FORM
	{
		HelpID = "cui:ListBox:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:LB_FORM" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 160, 104 ) ;
		Size = MAP_APPFONT ( 70, 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		AutoHScroll = TRUE ;
		DDExtraWidth = TRUE ;
		StringList [ en-US ] =
		{
			< "Text" ; Default ;	> ;
			< "Button" ; Default ;	> ;
		};
	};
	FixedText FT_INDICATION
	{
		Pos = MAP_APPFONT ( 12, 123 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "Te~xt" ;
	};
	Edit ED_INDICATION
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:ED_INDICATION" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 122 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	FixedText FT_TEXT
	{
		Pos = MAP_APPFONT ( 12, 140 ) ;
		Size = MAP_APPFONT ( 39 + COL_DIFF, 8 ) ;
		Text [ en-US ] = "N~ame" ;
	};
	Edit ED_TEXT
	{
		HelpID = "cui:Edit:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:ED_TEXT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( COL_2, 139 ) ;
		Size = MAP_APPFONT ( 194 - COL_DIFF, 12 ) ;
	};
	ImageButton BTN_SCRIPT
	{
		HelpID = "cui:ImageButton:RID_SVXPAGE_HYPERLINK_NEWDOCUMENT:BTN_SCRIPT" ;
		Pos = MAP_APPFONT ( 235, 103-1 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_HEIGHT, HYPERDLG_IMGBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		QuickHelpText [ en-US ] = "Events" ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap {File = "script.png" ;} ;
		};
		Text [ en-US ] = "Events" ;
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap {File = "script_hc.png" ;} ;
	};
};

/*************************************************************************
| Tabpage-Dialog : Hyperlinks
*************************************************************************/
ModalDialog RID_SVXDLG_NEWHYPERLINK
{
	HelpID = CMD_SID_HYPERLINK_DIALOG ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 325, 185 ) ;
	Text [ en-US ] = "Hyperlink" ;
	Moveable = TRUE ;
};

/*************************************************************************
| Tabpage-Dialog : Hyperlinks
*************************************************************************/

String RID_SVXSTR_HYPDLG_APPLYBUT
{
	Text [ en-US ] = "Apply" ;
};
String RID_SVXSTR_HYPDLG_CLOSEBUT
{
	Text [ en-US ] = "Close" ;
};
String RID_SVXSTR_HYPDLG_MACROACT1
{
	Text [ en-US ] = "Mouse over object" ;
};
String RID_SVXSTR_HYPDLG_MACROACT2
{
	Text [ en-US ] = "Trigger hyperlink" ;
};
String RID_SVXSTR_HYPDLG_MACROACT3
{
	Text [ en-US ] = "Mouse leaves object" ;
};

String RID_SVXSTR_HYPDLG_NOVALIDFILENAME
{
	Text [ en-US ] = "Please type in a valid file name." ;
};

String RID_SVXSTR_HYPERDLG_HLINETTP
{
	Text [ en-US ] = "Internet" ;
};
String RID_SVXSTR_HYPERDLG_HLINETTP_HELP
{
	Text [ en-US ] = "This is where you create a hyperlink to a Web page, FTP server or Telnet connection." ;
};

String RID_SVXSTR_HYPERDLG_HLMAILTP
{
	Text [ en-US ] = "Mail & News" ;
};
String RID_SVXSTR_HYPERDLG_HLMAILTP_HELP
{
	Text [ en-US ] = "This is where you create a hyperlink to an e-mail address or newsgroup." ;
};

String RID_SVXSTR_HYPERDLG_HLDOCTP
{
	Text [ en-US ] = "Document" ;
};
String RID_SVXSTR_HYPERDLG_HLDOCTP_HELP
{
	Text [ en-US ] = "This is where you create a hyperlink to an existing document or a target within a document." ;
};

String RID_SVXSTR_HYPERDLG_HLDOCNTP
{
	Text [ en-US ] = "New Document" ;
};
String RID_SVXSTR_HYPERDLG_HLDOCNTP_HELP
{
	Text [ en-US ] = "This is where you create a new document to which the new link points." ;
};

String RID_SVXSTR_HYPERDLG_FORM_BUTTON
{
	Text [ en-US ] = "Button" ;
};

String RID_SVXSTR_HYPERDLG_FROM_TEXT
{
	Text [ en-US ] = "Text" ;
};

String RID_SVXSTR_HYPERDLG_QUERYOVERWRITE
{
	Text [ en-US ] = "The file already exists. Overwrite?" ;
};

Image RID_SVXBMP_HLINETTP
{
	ImageBitmap = Bitmap {File = "hlinettp.png" ;} ;
};

Image RID_SVXBMP_HLMAILTP
{
	ImageBitmap = Bitmap {File = "hlmailtp.png" ;} ;
};

Image RID_SVXBMP_HLDOCTP
{
	ImageBitmap = Bitmap {File = "hldoctp.png" ;} ;
};

Image RID_SVXBMP_HLDOCNTP
{
	ImageBitmap = Bitmap {File = "hldocntp.png" ;} ;
};

Image RID_SVXBMP_HLINETTP_H
{
	ImageBitmap = Bitmap {File = "hlinettp_h.png" ;} ;
};

Image RID_SVXBMP_HLMAILTP_H
{
	ImageBitmap = Bitmap {File = "hlmailtp_h.png" ;} ;
};

Image RID_SVXBMP_HLDOCTP_H
{
	ImageBitmap = Bitmap {File = "hldoctp_h.png" ;} ;
};

Image RID_SVXBMP_HLDOCNTP_H
{
	ImageBitmap = Bitmap {File = "hldocntp_h.png" ;} ;
};

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