/**************************************************************
 *
 * 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_LOGINDLG_HRC
#include "logindlg.hrc"
#endif

ModalDialog DLG_UUI_LOGIN
{
	HelpId = HID_DLG_LOGIN ;
	Border = TRUE ;
	Moveable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 177, 247 ) ;
    Text [ en-US ] = "Authentication Required" ;

    FixedText FT_LOGIN_ERROR
    {
        Pos = MAP_APPFONT ( 6, 6 ) ;
        Size = MAP_APPFONT ( 165, 8 ) ;
        Text [ en-US ] = "Message from server:" ;
    };

    FixedText FT_INFO_LOGIN_ERROR
	{
        Pos = MAP_APPFONT ( 6, 14 ) ;
        Size = MAP_APPFONT ( 165, 3 * 8 ) ;
		WordBreak = TRUE ;
	};

    FixedLine FL_LOGIN_1
    {
        Pos = MAP_APPFONT ( 6, 41 ) ;
        Size = MAP_APPFONT ( 165, 8 ) ;
    };

    FixedText FT_INFO_LOGIN_REQUEST
	{
        Pos = MAP_APPFONT ( 6, 52 ) ;
        Size = MAP_APPFONT ( 165, 2*8 ) ;
		WordBreak = TRUE ;
        Text [ en-US ] = "Enter user name and password for: \n%1" ;
	};

    String STR_LOGIN_REALM
    {
        Text [ en-US ] = "Enter user name and password for: \n\"%2\" on %1" ;
    };

    FixedLine FL_LOGIN_2
    {
        Pos = MAP_APPFONT ( 6, 71 ) ;
        Size = MAP_APPFONT ( 165, 8 ) ;
    };

    FixedText FT_LOGIN_PATH
	{
        Pos = MAP_APPFONT ( 6, 84 ) ;
        Size = MAP_APPFONT ( 112, 8 ) ;
		Text [ en-US ] = "~Path" ;
	};

    Edit ED_LOGIN_PATH
	{
	    HelpId = HID_LOGIN_DLG_PATH ;
		Border = TRUE ;
        Pos = MAP_APPFONT ( 6, 95 ) ;
        Size = MAP_APPFONT ( 112, 12 ) ;
	};
	PushButton BTN_LOGIN_PATH
	{
	    HelpId = HID_LOGIN_DLG_BROWSE ;
        Pos = MAP_APPFONT ( 121, 94 ) ;
        Size = MAP_APPFONT ( 50, 14 ) ;
        Text = "~Browse..." ;
	};

    FixedText FT_LOGIN_USERNAME
	{
        Pos = MAP_APPFONT ( 6, 110 ) ;
        Size = MAP_APPFONT ( 165, 8 ) ;
		Text [ en-US ] = "~User name" ;
	};

    Edit ED_LOGIN_USERNAME
    {
	    HelpId = HID_LOGIN_DLG_USER_NAME ;
        Border = TRUE ;
        Pos = MAP_APPFONT ( 6, 121 ) ;
        Size = MAP_APPFONT ( 165, 12 ) ;
    };

    FixedText FT_LOGIN_PASSWORD
	{
        Pos = MAP_APPFONT ( 6, 136 ) ;
        Size = MAP_APPFONT ( 165, 8 ) ;
		Text [ en-US ] = "Pass~word" ;
	};

    Edit ED_LOGIN_PASSWORD
	{
	    HelpId = HID_LOGIN_DLG_PASSWORD ;
		Border = TRUE ;
        Pos = MAP_APPFONT ( 6, 147 ) ;
        Size = MAP_APPFONT ( 165, 12 ) ;
		PassWord = TRUE ;
	};

    FixedText FT_LOGIN_ACCOUNT
	{
        Pos = MAP_APPFONT ( 6, 162 ) ;
        Size = MAP_APPFONT ( 165, 8 ) ;
		Text [ en-US ] = "A~ccount" ;
	};

    Edit ED_LOGIN_ACCOUNT
	{
	    HelpId = HID_LOGIN_DLG_ACCOUNT ;
		Border = TRUE ;
        Pos = MAP_APPFONT ( 6, 173 ) ;
        Size = MAP_APPFONT ( 165, 12 ) ;
		PassWord = TRUE ;
	};

    CheckBox CB_LOGIN_SAVEPASSWORD
	{
	    HelpId = HID_LOGIN_DLG_REMEMBER_PASSWORD ;
        Pos = MAP_APPFONT ( 6, 190 ) ;
        Size = MAP_APPFONT ( 165, 10 ) ;
        Text [ en-US ] = "~Remember password" ;
	};

	CheckBox CB_LOGIN_USESYSCREDS
	{
	    HelpId = HID_LOGIN_DLG_USE_SYSTEM_CREDENTIALS ;
        Pos = MAP_APPFONT ( 6, 203 ) ;
        Size = MAP_APPFONT ( 165, 10 ) ;
        Text [ en-US ] = "~Use system credentials" ;
	};

    FixedLine FL_BUTTONS
    {
        Pos = MAP_APPFONT ( 0, 216 ) ;
        Size = MAP_APPFONT ( 177, 8 ) ;
    };

	HelpButton BTN_LOGIN_HELP
	{
		Pos = MAP_APPFONT ( 6, 227 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};

	OKButton BTN_LOGIN_OK
	{
		Pos = MAP_APPFONT ( 66, 227 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		DefButton = TRUE ;
	};

	CancelButton BTN_LOGIN_CANCEL
	{
		Pos = MAP_APPFONT ( 121, 227 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
};

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