/**************************************************************
 *
 * 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 "dialogs.hrc"
#include "helpids.hrc"
#include "digitalsignaturesdialog.hrc"

ModalDialog RID_XMLSECDLG_DIGSIG
{
	HelpId = HID_XMLSEC_DLG_DIGSIG ;
	Size = MAP_APPFONT ( 249, 191 ) ;
	OutputSize = TRUE ;
	Closeable = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;

	Text [ en-US ] = "Digital Signatures" ;

	FixedText FT_HINT_DOC
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "The following have signed the document content:" ;
	};
	FixedText FT_HINT_BASIC
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "The following have signed the document macro:" ;
	};
	FixedText FT_HINT_PACK
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "The following have signed this package:" ;
	};
	Control LB_SIGNATURES
	{
		HelpId = HID_XMLSEC_CTRL_SIGNATURESDLG ;
		Pos = MAP_APPFONT ( 6, 14 ) ;
		Size = MAP_APPFONT ( 237, 109 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
	};
	String STR_HEADERBAR
	{
		Text [ en-US ] = "\tSigned by\tDigital ID issued by\tDate" ;
	};
	String STR_VALID_SIGNATURE
	{
		Text [ en-US ] = "Valid signature" ;
	};
	String STR_NO_INFO_TO_VERIFY
	{
		Text [ en-US ] = "Certificate could not be validated" ;
	};
	String STR_INVALID_SIGNATURE
	{
		Text [ en-US ] = "The signatures in this document are invalid" ;
	};

	FixedImage IMG_STATE_VALID
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 33, 22 ) ;
		Fixed = Image
		{
			ImageBitmap = Bitmap { File = "signet_11x16.png"; } ;
		};
	};
	FixedText FI_STATE_VALID
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "The signatures in this document are valid" ;
	};
	FixedText FI_STATE_OLDSIGNATURE
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "Not all parts of the document are signed" ;
	};
	FixedImage IMG_STATE_BROKEN
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 33, 22 ) ;
		Fixed = Image
		{
			ImageBitmap = Bitmap { File = "caution_11x16.png"; } ;
		};
	};
	FixedText FI_STATE_BROKEN
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
		Text [ en-US ] = "The signatures in this document are invalid" ;
	};
	FixedImage IMG_STATE_NOTVALIDATED
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 33, 22 ) ;
		Fixed = Image
		{
			ImageBitmap = Bitmap { File = "notcertificate_11x16.png"; } ;
		};
	};
	FixedText FI_STATE_NOTVALIDATED
	{
		Pos = MAP_APPFONT ( 6, 127 ) ;
		Size = MAP_APPFONT ( 222, 8 ) ;
		Hide = TRUE ;
	};
	PushButton BTN_VIEWCERT
	{
		HelpID = "xmlsecurity:PushButton:RID_XMLSECDLG_DIGSIG:BTN_VIEWCERT" ;
		Pos = MAP_APPFONT ( 6, 142 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		Text [ en-US ] = "View Certificate..." ;
	};
	PushButton BTN_ADDCERT
	{
		HelpID = "xmlsecurity:PushButton:RID_XMLSECDLG_DIGSIG:BTN_ADDCERT" ;
		Pos = MAP_APPFONT ( 87, 142 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		Text [ en-US ] = "Sign Document..." ;
	};
	PushButton BTN_REMOVECERT
	{
		HelpID = "xmlsecurity:PushButton:RID_XMLSECDLG_DIGSIG:BTN_REMOVECERT" ;
		Pos = MAP_APPFONT ( 168, 142 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		Text [ en-US ] = "Remove" ;
	};
	FixedLine FL_BOTTOM_SEP
	{
		Pos = MAP_APPFONT ( 0, 160 ) ;
		Size = MAP_APPFONT ( 249, 8 ) ;
	};
	OKButton BTN_OK
	{
		DefButton = TRUE;
		Pos = MAP_APPFONT ( 193, 171 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Close" ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 6, 171 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	Image IMG_STATE_VALID_HC
	{
		ImageBitmap = Bitmap { File = "signet_11x16_h.png"; } ;
	};
	Image IMG_STATE_BROKEN_HC
	{
		ImageBitmap = Bitmap { File = "caution_11x16_h.png"; } ;
	};
	Image IMG_STATE_NOTVALIDATED_HC
	{
		ImageBitmap = Bitmap { File = "notcertificate_11x16_h.png"; } ;
	};
};


ErrorBox RID_XMLSECDLG_OLD_ODF_FORMAT
{
	Buttons = WB_OK ;
	DefButton = WB_DEF_OK ;
	Message [ en-US ] = "This document contains signatures in ODF 1.1 format. Signing documents in %PRODUCTNAME %PRODUCTVERSION requires ODF 1.2 format version. Thus no signatures can be added or removed to this document.\n\nSave document in ODF 1.2 format and add all desired signatures again." ;
};


QueryBox MSG_XMLSECDLG_QUERY_REMOVEDOCSIGNBEFORESIGN
{
	Buttons = WB_YES_NO ;
	DefButton = WB_DEF_NO ;
	Message [ en-US ] = "Adding or removing a macro signature will remove all document signatures.\nDo you really want to continue?" ;
};

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