/**************************************************************
 * 
 * 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 "fldtdlg.hrc"
#include "helpid.h"
TabPage TP_FLD_DOKINF
{
	HelpID = HID_FLD_DOKINF ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
	FixedText FT_DOKINFTYPE
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
		Size = MAP_APPFONT ( 76 , 8 ) ;
		Text [ en-US ] = "~Type" ;
		Left = TRUE ;
	};
	Control TLB_DOKINFTYPE
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6 , 16 ) ;
		Size = MAP_APPFONT ( 76 , 163 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_DOKINFSELECTION
	{
		Pos = MAP_APPFONT ( 88 , 3 ) ;
		Size = MAP_APPFONT ( 76 , 8 ) ;
		Text [ en-US ] = "S~elect" ;
		Left = TRUE ;
	};
	ListBox LB_DOKINFSELECTION
	{
	    HelpID = "sw:ListBox:TP_FLD_DOKINF:LB_DOKINFSELECTION";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 88 , 16 ) ;
		Size = MAP_APPFONT ( 76 , 163 ) ;
		TabStop = TRUE ;
		StringList [ en-US ] =
		{
			< "Author" ; > ;
			< "Time" ; > ;
			< "Date" ; > ;
			< "Date Time Author" ; > ;
		};
	};
	FixedText FT_DOKINFFORMAT
	{
		Pos = MAP_APPFONT ( 170 , 3 ) ;
		Size = MAP_APPFONT ( 84 , 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "F~ormat" ;
	};
	ListBox LB_DOKINFFORMAT
	{
	    HelpID = "sw:ListBox:TP_FLD_DOKINF:LB_DOKINFFORMAT";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 170 , 16 ) ;
		Size = MAP_APPFONT ( 84 , 148 ) ;
		TabStop = TRUE ;
		AutoHScroll = TRUE ;
	};
	CheckBox CB_DOKINFFIXEDCONTENT
	{
	    HelpID = "sw:CheckBox:TP_FLD_DOKINF:CB_DOKINFFIXEDCONTENT";
		Pos = MAP_APPFONT ( 170 , 170 ) ;
		Size = MAP_APPFONT ( 72 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Fixed content" ;
	};
	Bitmap BMP_DOKINFROOT_OPENED
	{
		File = "plus.bmp" ;
	};
	Bitmap BMP_DOKINFROOT_CLOSED
	{
		File = "minus.bmp" ;
	};
	String STR_DOKINF_INFO
	{
		Text [ en-US ] = "Info" ;
	};
	Text [ en-US ] = "DocInformation" ;
};































