/**************************************************************
 *
 * 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 "opredlin.hrc"
TabPage RID_SCPAGE_OPREDLINE
{
	HelpId = HID_SCPAGE_OPREDLINE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	FixedText FT_CONTENT
	{
		HelpID = HID_SCPAGE_OPREDLINBE_FT_CONTENT ;
		Pos = MAP_APPFONT ( 12, 15 ) ;
		Size = MAP_APPFONT ( 70, 10 ) ;
		Text [ en-US ] = "Chan~ges" ;
	};
	FixedText FT_REMOVE
	{
		Pos = MAP_APPFONT ( 12, 31 ) ;
		Size = MAP_APPFONT ( 70, 10 ) ;
		Text [ en-US ] = "~Deletions" ;
	};
	FixedText FT_INSERT
	{
		Pos = MAP_APPFONT ( 12, 47 ) ;
		Size = MAP_APPFONT ( 70, 10 ) ;
		Text [ en-US ] = "~Insertions" ;
	};
	FixedText FT_MOVE
	{
		Pos = MAP_APPFONT ( 12, 63 ) ;
		Size = MAP_APPFONT ( 70, 10 ) ;
		Text [ en-US ] = "~Moved entries" ;
	};
	FixedLine GB_COLORCHGS
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Colors for changes" ;
	};
	ListBox CLB_CONTENT
	{
		HelpID = "sc:ListBox:RID_SCPAGE_OPREDLINE:CLB_CONTENT" ;
		Pos = MAP_APPFONT ( 90, 14 ) ;
		Size = MAP_APPFONT ( 120, 86 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	ListBox CLB_REMOVE
	{
		HelpID = "sc:ListBox:RID_SCPAGE_OPREDLINE:CLB_REMOVE" ;
		Pos = MAP_APPFONT ( 90, 30 ) ;
		Size = MAP_APPFONT ( 120, 86 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	ListBox CLB_INSERT
	{
		HelpID = "sc:ListBox:RID_SCPAGE_OPREDLINE:CLB_INSERT" ;
		Pos = MAP_APPFONT ( 90, 46 ) ;
		Size = MAP_APPFONT ( 120, 86 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	ListBox CLB_MOVE
	{
		HelpID = "sc:ListBox:RID_SCPAGE_OPREDLINE:CLB_MOVE" ;
		Pos = MAP_APPFONT ( 90, 62 ) ;
		Size = MAP_APPFONT ( 120, 86 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	String STR_AUTHOR
	{
		Text [ en-US ] = "By author" ;
	};
};

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