/**************************************************************
 *
 * 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_MASTERPASSWORDDLG_HRC
#include <masterpassworddlg.hrc>
#endif

ModalDialog DLG_UUI_MASTERPASSWORD
{
	HelpId = HID_DLG_MASTERPASSWORD_UUI ;
	Border = TRUE ;
	Moveable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 175, 66 ) ;
	FixedText FT_MASTERPASSWORD
	{
		Pos = MAP_APPFONT ( 3, 4 ) ;
		Size = MAP_APPFONT ( 169, 9 ) ;
		Text [ en-US ] = "Enter password" ;
	};
	Edit ED_MASTERPASSWORD
	{
		HelpID = "uui:Edit:DLG_UUI_MASTERPASSWORD:ED_MASTERPASSWORD" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 3, 17 ) ;
		Size = MAP_APPFONT ( 169, 13 ) ;
		PassWord = TRUE ;
	};
	FixedLine FL_FIXED_LINE
	{
		Pos = MAP_APPFONT ( 0, 35 ) ;
		Size = MAP_APPFONT ( 175, 6 ) ;
	};

	OKButton BTN_MASTERPASSWORD_OK
	{
		Pos = MAP_APPFONT ( 65, 45 ) ;
		Size = MAP_APPFONT ( 51, 13 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_MASTERPASSWORD_CANCEL
	{
		Pos = MAP_APPFONT ( 120, 45 ) ;
		Size = MAP_APPFONT ( 51, 13 ) ;
	};
	HelpButton BTN_MASTERPASSWORD_HELP
	{
		Pos = MAP_APPFONT ( 5, 45 ) ;
		Size = MAP_APPFONT ( 51, 13 ) ;
	};
	Text [ en-US ] = "Enter Master Password" ;
};

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