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

TabDialog RID_XMLSECDLG_CERTVIEWER
{
	HelpID = HID_XMLSEC_DLG_CERTVIEWER ;
	Size = MAP_APPFONT ( TD_WIDTH, TD_HEIGHT ) ;
	OutputSize = TRUE ;
	Closeable = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;

	Text [ en-US ] = "View Certificate" ;
	TabControl 1
	{
		Pos = MAP_APPFONT ( TD_SP_INNERBORDER_LEFT, TD_SP_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( TP_WIDTH, TP_HEIGHT+RIDDER_HEIGHT ) ;
		SVLook = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = RID_XMLSECTP_GENERAL ;
				Text [ en-US ] = "General" ;
			};
			PageItem
			{
				Identifier = RID_XMLSECTP_DETAILS ;
				Text [ en-US ] = "Details" ;
			};
			PageItem
			{
				Identifier = RID_XMLSECTP_CERTPATH ;
				Text [ en-US ] = "Certification Path" ;
			};
		};
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( CV_COL_A, CV_ROW_A ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		DefButton = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( CV_COL_C, CV_ROW_A ) ;
		Size = MAP_APPFONT ( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ) ;
	};
};

TabPage RID_XMLSECTP_GENERAL
{
	HelpId = HID_XMLSEC_TP_GENERAL ;
	Size = MAP_APPFONT ( TP_WIDTH, TP_HEIGHT ) ;
	OutputSize = TRUE ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Window WIN_FRAME
	{
		SVLook = TRUE ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( CV_COL_0, CV_ROW_0 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, CV_CONT_HEIGHT ) ;
	};
	FixedImage IMG_CERT
	{
		Pos = MAP_APPFONT ( CW_COL_0, CW_ROW_0 ) ;
		Size = MAP_APPFONT ( IMG1_WIDTH, IMG1_HEIGHT ) ;
		Fixed = Image
		{
			ImageBitmap = Bitmap { File = "certificate_40x56.png"; } ;
		};
	};
	FixedText FI_CERTINFO
	{
		Pos = MAP_APPFONT ( CW_COL_3, CW_ROW_1 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_3, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = " Certificate Information" ;
	};
	FixedLine FL_SEP1
	{
		Pos = MAP_APPFONT ( CW_COL_0, CW_ROW_3 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};
	FixedText FI_HINTNOTTRUST
	{
		Pos = MAP_APPFONT ( CW_COL_1, CW_ROW_4 ) ;
		Size = MAP_APPFONT ( CW_COL_5a-CW_COL_1, CW_ROW_4a-CW_ROW_4 ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "This certificate is intended for the following purpose(s):" ;
	};
	FixedLine FL_SEP2
	{
		Pos = MAP_APPFONT ( CW_COL_0, CW_ROW_5 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_0, RSC_CD_FIXEDLINE_HEIGHT ) ;
	};
	FixedText FI_ISSTOLABEL
	{
		Pos = MAP_APPFONT ( CW_COL_1, CW_ROW_6 ) ;
		Size = MAP_APPFONT ( CW_COL_4-CW_COL_1-1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Issued to:" ;
	};
	FixedText FI_ISSTO
	{
		Pos = MAP_APPFONT ( CW_COL_4, CW_ROW_6 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_4, RSC_CD_FIXEDTEXT_HEIGHT ) ;
	};
	FixedText FI_ISSBYLABEL
	{
		Pos = MAP_APPFONT ( CW_COL_1, CW_ROW_7 ) ;
		Size = MAP_APPFONT ( CW_COL_4-CW_COL_1-1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Issued by:" ;
	};
	FixedText FI_ISSBY
	{
		Pos = MAP_APPFONT ( CW_COL_4, CW_ROW_7 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_4, RSC_CD_FIXEDTEXT_HEIGHT ) ;
	};
	FixedText FI_VALIDDATE
	{
		Pos = MAP_APPFONT ( CW_COL_1, CW_ROW_8 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_1-1, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Valid from %SDATE% to %EDATE%" ;
	};
	FixedImage IMG_KEY
	{
		Pos = MAP_APPFONT ( CW_COL_0, CW_ROW_9 ) ;
		Size = MAP_APPFONT ( IMG2_WIDTH, IMG2_HEIGHT ) ;
		Fixed = Image
		{
			ImageBitmap = Bitmap { File = "key_12.png"; } ;
		};
	};
	FixedText FI_CORRPRIVKEY
	{
		Pos = MAP_APPFONT ( CW_COL_1a, CW_ROW_10 ) ;
		Size = MAP_APPFONT ( CW_COL_5-CW_COL_1a, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "You have a private key that corresponds to this certificate." ;
	};
	String STR_CERTIFICATE_NOT_VALIDATED
	{
		Text [ en-US ] = "The certificate could not be validated." ;
	};
	Image IMG_STATE_NOT_VALIDATED
	{
		ImageBitmap = Bitmap { File = "notcertificate_40x56.png"; } ;
	};
	Image IMG_STATE_CERIFICATED_HC
	{
		ImageBitmap = Bitmap { File = "certificate_40x56_h.png"; } ;
	};
	Image IMG_STATE_NOT_VALIDATED_HC
	{
		ImageBitmap = Bitmap { File = "notcertificate_40x56_h.png"; } ;
	};
	Image IMG_KEY_HC
	{
		ImageBitmap = Bitmap { File = "key_12_h.png"; } ;
	};
};

TabPage RID_XMLSECTP_DETAILS
{
	HelpId = HID_XMLSEC_TP_DETAILS ;
	Size = MAP_APPFONT ( TP_WIDTH, TP_HEIGHT ) ;
	OutputSize = TRUE ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Control LB_ELEMENTS
	{
		HelpId = HID_XMLSEC_CTRL_ELEMENTS ;
		Pos = MAP_APPFONT ( CV_COL_0, CV_ROW_0 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, CV_ROW_1-CV_ROW_0 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
	};
	String STR_HEADERBAR
	{
		Text [ en-US ] = "Field\tValue" ;
	};
	MultiLineEdit ML_ELEMENT
	{
		HelpID = "xmlsecurity:MultiLineEdit:RID_XMLSECTP_DETAILS:ML_ELEMENT" ;
		Pos = MAP_APPFONT ( CV_COL_0, CV_ROW_2 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, CV_ROW_3-CV_ROW_2 ) ;
		ReadOnly = TRUE ;
		Border = TRUE ;
		VSCROLL = TRUE ;
	};
	String STR_VERSION
	{
		Text [ en-US ] = "Version" ;
	};
	String STR_SERIALNUM
	{
		Text [ en-US ] = "Serial Number" ;
	};
	String STR_SIGALGORITHM
	{
		Text [ en-US ] = "Signature Algorithm" ;
	};
	String STR_ISSUER
	{
		Text [ en-US ] = "Issuer" ;
	};
	String STR_ISSUER_ID
	{
		Text [ en-US ] = "Issuer Unique ID" ;
	};
	String STR_VALIDFROM
	{
		Text [ en-US ] = "Valid From" ;
	};
	String STR_VALIDTO
	{
		Text [ en-US ] = "Valid to" ;
	};
	String STR_SUBJECT
	{
		Text [ en-US ] = "Subject" ;
	};
	String STR_SUBJECT_ID
	{
		Text [ en-US ] = "Subject Unique ID" ;
	};
	String STR_SUBJECT_PUBKEY_ALGO
	{
		Text [ en-US ] = "Subject Algorithm" ;
	};
	String STR_SUBJECT_PUBKEY_VAL
	{
		Text [ en-US ] = "Public Key" ;
	};
	String STR_SIGNATURE_ALGO
	{
		Text [ en-US ] = "Signature Algorithm" ;
	};
	String STR_THUMBPRINT_SHA1
	{
		Text [ en-US ] = "Thumbprint SHA1" ;
	};
	String STR_THUMBPRINT_MD5
	{
		Text [ en-US ] = "Thumbprint MD5" ;
	};
};

TabPage RID_XMLSECTP_CERTPATH
{
	HelpId = HID_XMLSEC_TP_CERTPATH ;
	Size = MAP_APPFONT ( TP_WIDTH, TP_HEIGHT ) ;
	OutputSize = TRUE ;
	Hide = TRUE ;
	SVLook = TRUE ;
	FixedText FT_CERTPATH
	{
		Pos = MAP_APPFONT ( CV_COL_0, CVP_ROW_0 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Certification path" ;
	};
	Control LB_SIGNATURES
	{
		HelpId = HID_XMLSEC_CTRL_VIEWSIGNATURES ;
		Pos = MAP_APPFONT ( CV_COL_0, CVP_ROW_1 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, REST_HEIGHT/3*2 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
	};
	PushButton BTN_VIEWCERT
	{
		HelpID = "xmlsecurity:PushButton:RID_XMLSECTP_CERTPATH:BTN_VIEWCERT" ;
		Pos = MAP_APPFONT ( CV_COL_1-(CV_COL_B-CV_COL_A), CVP_ROW_2 ) ;
		Size = MAP_APPFONT ( CV_COL_B-CV_COL_A, RSC_CD_PUSHBUTTON_HEIGHT ) ;
		Text [ en-US ] = "View Certificate..." ;
	};
	FixedText FT_CERTSTATUS
	{
		Pos = MAP_APPFONT ( CV_COL_0, CVP_ROW_3 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, RSC_CD_FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Certification status" ;
	};
	MultiLineEdit ML_CERTSTATUS
	{
		HelpID = "xmlsecurity:MultiLineEdit:RID_XMLSECTP_CERTPATH:ML_CERTSTATUS" ;
		Pos = MAP_APPFONT ( CV_COL_0, CVP_ROW_4 ) ;
		Size = MAP_APPFONT ( CV_CONT_WIDTH, REST_HEIGHT/3 ) ;
		ReadOnly = TRUE ;
		Border = TRUE ;
	};
	Image IMG_CERT_SMALL
	{
		ImageBitmap = Bitmap { File = "certificate_16.png"; } ;
	};
	Image IMG_CERT_SMALL_HC
	{
		ImageBitmap = Bitmap { File = "certificate_16_h.png"; } ;
	};
	Image IMG_CERT_NOTVALIDATED_SMALL
	{
		ImageBitmap = Bitmap { File = "notcertificate_16.png"; } ;
	};
	Image IMG_CERT_NOTVALIDATED_SMALL_HC
	{
		ImageBitmap = Bitmap { File = "notcertificate_16_h.png"; } ;
	};
	String STR_PATH_CERT_OK
	{
		Text [ en-US ] = "The certificate is OK." ;
	};
	String STR_PATH_CERT_NOT_VALIDATED
	{
		Text [ en-US ] = "The certificate could not be validated." ;
	};
};

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