/**************************************************************
 * 
 * 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 MASKCOLOR	MaskColor = Color { Red=0xFFFF; Green=0x0000; Blue=0xFFFF; };
#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.bmp" ; };
			MASKCOLOR
		};
	};
	Image IMG_BROWSE_HC
	{
		ImageBitmap = Bitmap { File = "browse_hc.bmp" ; };
		MASKCOLOR
	};
	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.bmp" ; };
			MASKCOLOR
		};
	};
	Image IMG_TARGET_HC
	{
		ImageBitmap = Bitmap { File = "target_hc.bmp" ; };
		MASKCOLOR
	};
	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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Events";
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap { File = "script_hc.bmp" ; };
		MASKCOLOR
	};
};

/*************************************************************************
|
| 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.bmp" ; };
			MASKCOLOR
		};

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

	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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Events";
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap { File = "script_hc.bmp" ; };
		MASKCOLOR
	};
};

/*************************************************************************
|
| 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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Open File";
	};
	Image IMG_FILEOPEN_HC
	{
		ImageBitmap = Bitmap { File = "fileopen_hc.bmp" ; };
		MASKCOLOR
	};

	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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Target in Document";
	};
	Image IMG_BROWSE_HC
	{
		ImageBitmap = Bitmap { File = "target_hc.bmp" ; };
		MASKCOLOR
	};

	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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Events";
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap { File = "script_hc.bmp" ; };
		MASKCOLOR
	};
};

/*************************************************************************
|
| 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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Select Path";
	};
	Image IMG_CREATE_HC
	{
		ImageBitmap = Bitmap { File = "newdoc_hc.bmp" ; };
		MASKCOLOR
	};

	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.bmp" ; };
			MASKCOLOR
		};
		Text [ en-US ] = "Events";
	};
	Image IMG_SCRIPT_HC
	{
		ImageBitmap = Bitmap { File = "script_hc.bmp" ; };
		MASKCOLOR
	};
};

/*************************************************************************
|
| 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.bmp" ; };
    MASKCOLOR
};

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

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

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

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

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

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

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


















































































