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


#ifndef UUI_IDS_HRC
#include <ids.hrc>
#endif
#ifndef UUI_SSLWARN_HRC
#include <sslwarndlg.hrc>
#endif

ModalDialog DLG_UUI_SSLWARN
{
    HelpId = HID_DLG_SSLWARN_UUI;
    Border = TRUE ;
    Moveable = TRUE ;
    OutputSize = TRUE ;
    SVLook = TRUE ;
    Size = MAP_APPFONT( DLG_WIDTH, DLG_HEIGHT );

    Text [ en-US ] = "Security Warning: ";

    FixedText FT_LABEL_1
    {
        Pos = MAP_APPFONT( DLG_TEXT_START_X, RSC_SP_DLG_INNERBORDER_TOP );
        Size = MAP_APPFONT( 195, DLG_TEXT_1_HEIGHT );

        Text [ en-US ] = "No Text";

        Border = FALSE;
        WordBreak = TRUE;
    };

    PushButton PB_VIEW__CERTIFICATE
    {
        HelpID = "uui:PushButton:DLG_UUI_SSLWARN:PB_VIEW__CERTIFICATE";
        Pos = MAP_APPFONT( DLG_CTLBTN_CERT_START_X, DLG_CTLBTN_START_Y );
        Size = MAP_APPFONT( DLG_CTLBTN_CERT_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );

        Text [ en-US ] = "View Certificate";

    };

    CancelButton PB_CANCEL
    {
        Pos = MAP_APPFONT( DLG_CTLBTN_CANCEL_START_X, DLG_CTLBTN_START_Y );
        Size = MAP_APPFONT( DLG_CTLBTN_CANCEL_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );

        Text [ en-US ] = "Cancel Connection";

    };

    PushButton PB_OK
    {
        HelpID = "uui:PushButton:DLG_UUI_SSLWARN:PB_OK";
        Pos = MAP_APPFONT( DLG_CTLBTN_OK_START_X, DLG_CTLBTN_START_Y );
        Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );

        Text [ en-US ] = "Continue";

    };

    FixedImage IMG_WARN
    {
        Pos = MAP_APPFONT( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP );
        Size = MAP_APPFONT( DLG_WARMIMG_WIDTH , DLG_WARMIMG_HEIGHT );

        Fixed = Image
        {
            /* ImageBitmap = Bitmap { File = "certificate_40x56.png"; }; */
            MaskColor = Color{Red=0xffff;Green=0x0000;Blue=0xffff;};
        };

    };

    FixedLine FL_LINE
    {
        Pos = MAP_APPFONT( 0, DLG_CTLBTN_START_Y - RSC_SP_FLGR_INNERBORDER_TOP -  RSC_CD_FIXEDLINE_HEIGHT );
        Size = MAP_APPFONT( DLG_WIDTH,  RSC_CD_FIXEDLINE_HEIGHT );
    };
};

