/**************************************************************
 *
 * 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 "misc.hrc"
#include "bookmark.hrc"
#include "cmdid.h"
#include "helpid.h"
ModalDialog DLG_INSERT_BOOKMARK
{
	HelpID = CMD_FN_INSERT_BOOKMARK ;
	OUTPUTSIZE = TRUE ;
	Size = MAP_APPFONT ( 179, 96 ) ;
	Text [ en-US ] = "Insert Bookmark" ;
	MOVEABLE = TRUE ;
	SVLOOK = TRUE ;
	OkButton BT_OK
	{
		DISABLE = TRUE ;
		Pos = MAP_APPFONT ( 123, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TABSTOP = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 123, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TABSTOP = TRUE ;
	};
	ComboBox CB_BOOKMARK
	{
		HelpID = "sw:ComboBox:DLG_INSERT_BOOKMARK:CB_BOOKMARK" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 99, 76 ) ;
		TABSTOP = TRUE ;
		AutoHScroll = TRUE ;
		SORT = TRUE ;
	};
	PushButton BT_DELETE
	{
		HelpID = "sw:PushButton:DLG_INSERT_BOOKMARK:BT_DELETE" ;
		Pos = MAP_APPFONT ( 123, 40 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "~Delete" ;
		TABSTOP = TRUE ;
		DISABLE = TRUE ;
	};
		FixedLine FL_BOOKMARK
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 111, 8 ) ;
		Text [ en-US ] = "Bookmarks" ;
	};
};
String STR_REMOVE_WARNING
{
	Text [ en-US ] = "The following characters are not valid and have been removed: " ;
};

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