/**************************************************************
 *
 * 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 --------------------------------------------------------------

#include <svtools/controldims.hrc>
#include "securityoptions.hrc"
#include <cuires.hrc>
#include "helpid.hrc"

ModalDialog RID_SVXDLG_SECURITY_OPTIONS
{
	HelpID = HID_DLG_SECURITY_OPTIONS ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( DLG_WIDTH, ROW_10 ) ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Text [ en-US ] = "Security options and warnings" ;
	FixedLine FL_WARNINGS
	{
		Pos = MAP_APPFONT ( COL_0, ROW_0 ) ;
		Size = MAP_APPFONT ( COL_4-COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Security warnings" ;
	};
	FixedText FI_WARNINGS
	{
		Pos = MAP_APPFONT ( COL_1, ROW_1 ) ;
		Size = MAP_APPFONT ( COL_3-COL_1, 2*RSC_CD_FIXEDLINE_HEIGHT ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "Warn if document contains recorded changes, versions, hidden information or comments:" ;
	};
	FixedImage FI_SAVESENDDOCS
	{
		Pos = MAP_APPFONT ( COL_2 - 7, ROW_2 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_SAVESENDDOCS
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_SAVESENDDOCS" ;
		Pos = MAP_APPFONT ( COL_2, ROW_2 ) ;
		Size = MAP_APPFONT ( CHECKBOX_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "When saving or sending" ;
	};
	FixedImage FI_SIGNDOCS
	{
		Pos = MAP_APPFONT ( COL_2 + CHECKBOX_WIDTH + RSC_SP_CTRL_X - 7, ROW_2 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_SIGNDOCS
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_SIGNDOCS" ;
		Pos = MAP_APPFONT ( COL_2 + CHECKBOX_WIDTH + RSC_SP_CTRL_X, ROW_2 ) ;
		Size = MAP_APPFONT ( CHECKBOX_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "When signing" ;
	};
	FixedImage FI_PRINTDOCS
	{
		Pos = MAP_APPFONT ( COL_2 - 7, ROW_3 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_PRINTDOCS
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_PRINTDOCS" ;
		Pos = MAP_APPFONT ( COL_2, ROW_3 ) ;
		Size = MAP_APPFONT ( CHECKBOX_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "When printing" ;
	};
	FixedImage FI_CREATEPDF
	{
		Pos = MAP_APPFONT ( COL_2 + CHECKBOX_WIDTH + RSC_SP_CTRL_X - 7, ROW_3 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_CREATEPDF
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_CREATEPDF" ;
		Pos = MAP_APPFONT ( COL_2 + CHECKBOX_WIDTH + RSC_SP_CTRL_X, ROW_3 ) ;
		Size = MAP_APPFONT ( CHECKBOX_WIDTH, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "When creating PDF files" ;
	};
	FixedLine FL_OPTIONS
	{
		Pos = MAP_APPFONT ( COL_0, ROW_4 ) ;
		Size = MAP_APPFONT ( COL_4-COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Security options" ;
	};
	FixedImage FI_REMOVEINFO
	{
		Pos = MAP_APPFONT ( COL_1 - 7, ROW_5 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_REMOVEINFO
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_REMOVEINFO" ;
		Pos = MAP_APPFONT ( COL_1, ROW_5 ) ;
		Size = MAP_APPFONT ( COL_3-COL_1, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Remove personal information on saving" ;
	};
	FixedImage FI_RECOMMENDPWD
	{
		Pos = MAP_APPFONT ( COL_1 - 7, ROW_6 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_RECOMMENDPWD
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_RECOMMENDPWD" ;
		Pos = MAP_APPFONT ( COL_1, ROW_6 ) ;
		Size = MAP_APPFONT ( COL_3-COL_1, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Recommend password protection on saving" ;
	};
	FixedImage FI_CTRLHYPERLINK
	{
		Pos = MAP_APPFONT ( COL_1 - 7, ROW_6 + 2 ) ;
		Size = MAP_APPFONT ( 6, 6 ) ;
	};
	CheckBox CB_CTRLHYPERLINK
	{
		HelpID = "cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_CTRLHYPERLINK" ;
		Pos = MAP_APPFONT ( COL_1, ROW_7 ) ;
		Size = MAP_APPFONT ( COL_3-COL_1, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Ctrl-click required to follow hyperlinks" ;
	};
	FixedLine FL_BUTTONS
	{
		Pos = MAP_APPFONT ( 0, ROW_8 ) ;
		Size = MAP_APPFONT ( DLG_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};
	OKButton PB_OK
	{
		Pos = MAP_APPFONT ( COL_A, ROW_9 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton PB_CANCEL
	{
		Pos = MAP_APPFONT ( COL_B, ROW_9 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
	};
	HelpButton PB_HELP
	{
		Pos = MAP_APPFONT ( COL_C, ROW_9 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		TabStop = TRUE ;
	};
};

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