/**************************************************************
 * 
 * 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 "globals.hrc"
#include "chrdlg.hrc"
#include "chardlg.hrc"
#include "helpid.h"

TabDialog DLG_CHAR
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Text [ en-US ] = "Character" ;
	Moveable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = TP_CHAR_STD ;
				Text [ en-US ] = "Font" ;
				PageResID = TP_CHAR_STD ;
			};
			PageItem
			{
				Identifier = TP_CHAR_EXT ;
				Text [ en-US ] = "Font Effects" ;
				PageResID = TP_CHAR_EXT ;
			};
			PageItem
			{
				Identifier = TP_CHAR_POS ;
				PageResID = TP_CHAR_POS ;
				Text [ en-US ] = "Position";
			};
			PageItem
			{
				Identifier = TP_CHAR_TWOLN ;
				PageResID = TP_CHAR_TWOLN;
				Text [ en-US ] = "Asian Layout";
			};
			PageItem
			{
				Identifier = TP_CHAR_URL ;
				Text [ en-US ] = "Hyperlink" ;
			};
			PageItem
			{
				Identifier = TP_BACKGROUND ;
				Text [ en-US ] = "Background" ;
				PageResID = TP_BACKGROUND ;
			};
		};
	};
};
TabDialog DLG_DRAWCHAR
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Text [ en-US ] = "Font" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = TP_CHAR_STD ;
				Text [ en-US ] = "Font" ;
				PageResID = TP_CHAR_STD ;
			};
		};
	};
};
TabPage TP_CHAR_URL
{
	HelpID = HID_CHAR_URL ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
	Hide = TRUE ;
    FixedLine FL_URL
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Hyperlink" ;
	};
	FixedText FT_URL
	{
		Pos = MAP_APPFONT ( 12 , 17 ) ;
        Size = MAP_APPFONT ( 73 , 8 ) ;
		Text [ en-US ] = "~URL" ;
	};
	Edit ED_URL
	{
	    HelpID = "sw:Edit:TP_CHAR_URL:ED_URL";
        Pos = MAP_APPFONT ( 88 , 15 ) ;
		Size = MAP_APPFONT ( 104 , 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	PushButton PB_URL
	{
	    HelpID = "sw:PushButton:TP_CHAR_URL:PB_URL";
        Pos = MAP_APPFONT ( 198 , 14 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Browse..." ;
	};
	FixedText FT_TEXT
	{
		Pos = MAP_APPFONT ( 12 , 33 ) ;
        Size = MAP_APPFONT ( 73 , 8 ) ;
		Text [ en-US ] = "Te~xt";
	};
	Edit ED_TEXT
	{
	    HelpID = "sw:Edit:TP_CHAR_URL:ED_TEXT";
        Pos = MAP_APPFONT ( 88 , 31 ) ;
		Size = MAP_APPFONT ( 104 , 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	FixedText FT_NAME
	{
		Pos = MAP_APPFONT ( 12 , 49 ) ;
        Size = MAP_APPFONT ( 73 , 8 ) ;
		Text [ en-US ] = "~Name" ;
	};
	Edit ED_NAME
	{
	    HelpID = "sw:Edit:TP_CHAR_URL:ED_NAME";
        Pos = MAP_APPFONT ( 88 , 47 ) ;
		Size = MAP_APPFONT ( 104 , 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Group = TRUE ;
	};
	FixedText FT_TARGET
	{
		Pos = MAP_APPFONT ( 12 , 65 ) ;
        Size = MAP_APPFONT ( 73 , 10 ) ;
		Text [ en-US ] = "~Target frame" ;
	};
	ComboBox LB_TARGET
	{
	    HelpID = "sw:ComboBox:TP_CHAR_URL:LB_TARGET";
        Pos = MAP_APPFONT ( 88 , 63 ) ;
		Size = MAP_APPFONT ( 104 , 60 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
		Group = TRUE ;
	};
	PushButton PB_EVENT
	{
	    HelpID = "sw:PushButton:TP_CHAR_URL:PB_EVENT";
		Pos = MAP_APPFONT ( 12 , 79 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Events..." ;
	};
    FixedLine FL_STYLE
	{
		Pos = MAP_APPFONT ( 6 , 104 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
		Text [ en-US ] = "Character Styles" ;
	};
	FixedText FT_VISITED
	{
		Pos = MAP_APPFONT ( 12 , 116 ) ;
        Size = MAP_APPFONT ( 73 , 8 ) ;
		Text [ en-US ] = "~Visited links" ;
	};
	ListBox LB_VISITED
	{
	    HelpID = "sw:ListBox:TP_CHAR_URL:LB_VISITED";
        Pos = MAP_APPFONT ( 88 , 113 ) ;
		Size = MAP_APPFONT ( 104 , 60 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
		Group = TRUE ;
	};
	FixedText FT_NOT_VISITED
	{
		Pos = MAP_APPFONT ( 12 , 131 ) ;
        Size = MAP_APPFONT ( 73 , 10 ) ;
		Text [ en-US ] = "Unvisited ~links" ;
	};
	ListBox LB_NOT_VISITED
	{
	    HelpID = "sw:ListBox:TP_CHAR_URL:LB_NOT_VISITED";
        Pos = MAP_APPFONT ( 88 , 129 ) ;
		Size = MAP_APPFONT ( 104 , 60 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
		Group = TRUE ;
	};
};









































