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



#define __RSC

#include "secmacrowarnings.hrc"
#include "ids.hrc"

ModalDialog RID_XMLSECDLG_MACROWARN
{
	HelpId = HID_XMLSECDLG_MACROWARN ;
	Size = MAP_APPFONT ( MW_WIDTH, MW_HEIGHT ) ;
	OutputSize = TRUE ;
	Closeable = FALSE ;
	Moveable = TRUE ;
	SVLook = TRUE ;

	Text [ en-US ] = "%PRODUCTNAME - Security Warning" ;

	FixedImage IMG_SYMBOL
	{
		Pos = MAP_APPFONT ( MW_COL_0, MW_ROW_0 ) ;
		Size = MAP_APPFONT ( MW_SYMBOL_WIDTH, MW_SYMBOL_HEIGHT ) ;
	};
	FixedText FI_DOCNAME
	{
		Pos = MAP_APPFONT ( MW_COL_1, MW_ROW_0+RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( MW_COL_4-MW_COL_1, 2*RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Wordbreak = TRUE ;
	};
	FixedText FI_DESCR1A
	{
		Pos = MAP_APPFONT ( MW_COL_1, MW_ROW_1 ) ;
		Size = MAP_APPFONT ( MW_COL_4-MW_COL_1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "The document contains document macros signed by:" ;
	};
	FixedText FI_DESCR1B
	{
		Pos = MAP_APPFONT ( MW_COL_1, MW_ROW_1 ) ;
		Size = MAP_APPFONT ( MW_COL_4-MW_COL_1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Wordbreak = TRUE ;
		Text [ en-US ] = "The document contains document macros." ;
	};
	FixedText FI_SIGNS
	{
		Pos = MAP_APPFONT ( MW_COL_1, MW_ROW_2 ) ;
		Size = MAP_APPFONT ( MW_COL_2-MW_COL_1, MW_ROW_3-MW_ROW_2-RSC_SP_CTRL_DESC_Y ) ;
		Wordbreak = TRUE ;
	};
	PushButton PB_VIEWSIGNS
	{
		HelpID = "uui:PushButton:RID_XMLSECDLG_MACROWARN:PB_VIEWSIGNS" ;
		Pos = MAP_APPFONT ( MW_COL_3, MW_ROW_2 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "View Signatures..." ;
	};
	FixedText FI_DESCR2
	{
		Pos = MAP_APPFONT ( MW_COL_1, MW_ROW_3 ) ;
		Size = MAP_APPFONT ( MW_COL_4-MW_COL_1, 4*RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Wordbreak = TRUE;
		Text [ en-US ] = "Macros may contain viruses. Disabling macros for a document is always safe. If you disable macros you may lose functionality provided by the document macros." ;
	};
	CheckBox CB_ALWAYSTRUST
	{
		HelpID = "uui:CheckBox:RID_XMLSECDLG_MACROWARN:CB_ALWAYSTRUST" ;
		Pos = MAP_APPFONT ( MW_COL_1, MW_ROW_4 ) ;
		Size = MAP_APPFONT ( MW_COL_4-MW_COL_1, RSC_CD_CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Always trust macros from this source" ;
	};
	FixedLine FL_BOTTOM_SEP
	{
		Pos = MAP_APPFONT ( 0, MW_ROW_5 ) ;
		Size = MAP_APPFONT ( MW_WIDTH, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};
	OKButton PB_ENABLE
	{
		Pos = MAP_APPFONT ( DLGS_BOTTOM_OK_X( MW_WIDTH ), MW_ROW_6 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "~Enable Macros" ;
	};
	CancelButton PB_DISABLE
	{
		Pos = MAP_APPFONT ( DLGS_BOTTOM_CANCEL_X( MW_WIDTH ), MW_ROW_6 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		DefButton = TRUE ;
		Text [ en-US ] = "~Disable Macros" ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( DLGS_BOTTOM_HELP_X( MW_WIDTH ), MW_ROW_6 ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
	};
};

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