// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
#include "WinVersRes.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "#include ""WinVersRes.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
    "LANGUAGE 9, 1\r\n"
    "#pragma code_page(1252)\r\n"
    "#include ""afxres.rc""     // Standard components\r\n"
    "#endif\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION MASTER_PROD_VERS
 PRODUCTVERSION MASTER_PROD_VERS
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", MASTER_COMPANY_NAME
            VALUE "FileDescription", "Bonjour Resource Module"
            VALUE "FileVersion", MASTER_PROD_VERS_STR
            VALUE "InternalName", "ControlPanelLocalized.dll"
            VALUE "LegalCopyright", MASTER_LEGAL_COPYRIGHT
            VALUE "OriginalFilename", "ControlPanelLocalized.dll"
            VALUE "ProductName", MASTER_PROD_NAME
            VALUE "ProductVersion", MASTER_PROD_VERS_STR
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDR_APPLET_PAGE1 DIALOGEX 0, 0, 262, 140
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Registration"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    LTEXT           "Hostname:",IDC_STATIC,13,22,35,8
    EDITTEXT        IDC_HOSTNAME,55,20,184,12,ES_AUTOHSCROLL
    LTEXT           "User:",IDC_STATIC,13,38,35,8
    EDITTEXT        IDC_USERNAME,55,36,184,12,ES_AUTOHSCROLL
    LTEXT           "Password:",IDC_STATIC,13,54,35,8
    EDITTEXT        IDC_PASSWORD,55,52,184,12,ES_PASSWORD | ES_AUTOHSCROLL
    CONTROL         "Advertise services in this domain using Bonjour",IDC_ADVERTISE_SERVICES,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,55,80,199,8
END

IDR_APPLET_PAGE3 DIALOGEX 0, 0, 262, 140
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Browsing"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    LTEXT           "Choose which domains to browse using wide-area Bonjour",
                    -1,7,16,248,12
    CONTROL         "",IDC_BROWSE_LIST,"SysListView32",LVS_REPORT | 
                    LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | 
                    WS_TABSTOP,7,37,248,57
    PUSHBUTTON      "Add",IDC_ADD_BROWSE_DOMAIN,152,100,50,14
    PUSHBUTTON      "Remove",IDC_REMOVE_BROWSE_DOMAIN,205,100,50,14
END

IDR_APPLET_PAGE5 DIALOGEX 0, 0, 262, 140
STYLE DS_SETFONT | WS_CHILD | WS_CAPTION
CAPTION "Services"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    CONTROL         "Advertise shared folders using Bonjour",IDC_ADVERTISE_SMB,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,19,199,8
    CONTROL         "Enable Wake on Demand",IDC_POWER_MANAGEMENT,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,34,199,8
END

IDR_POWER_MANAGEMENT_WARNING DIALOGEX 0, 0, 230, 95
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | 
    WS_SYSMENU
CAPTION "Power Management"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,173,74,50,14
    LTEXT           "When 'Wake On Demand' is enabled, you may hear your computer wake up occasionally.",
					IDC_STATIC,50,12,175,26
    LTEXT           "This informs other devices that your computer is still available on the network.",
                    IDC_STATIC,50,38,175,26
    ICON            IDI_ENERGY_SAVER,IDC_ENERGY_SAVER,2,10,64,64,SS_REALSIZEIMAGE
END

IDR_ADD_BROWSE_DOMAIN DIALOGEX 0, 0, 230, 95
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | 
    WS_SYSMENU
CAPTION "Add Browse Domain"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,117,74,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,173,74,50,14
    COMBOBOX        IDC_COMBO1,35,42,188,100,CBS_DROPDOWN | CBS_SORT | 
                    WS_VSCROLL | WS_TABSTOP
    LTEXT           "Domain:",IDC_STATIC,7,43,27,8
    LTEXT           "The following domain will be added to your list of Bonjour browse domains.",
                    IDC_STATIC,7,15,216,16
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
    IDR_APPLET_PAGE1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 255
        TOPMARGIN, 7
        BOTTOMMARGIN, 133
    END

    IDR_APPLET_PAGE2, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 255
        TOPMARGIN, 7
        BOTTOMMARGIN, 133
    END

    IDR_SECRET, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 244
        TOPMARGIN, 7
        BOTTOMMARGIN, 83
    END

    IDR_APPLET_PAGE3, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 255
        TOPMARGIN, 7
        BOTTOMMARGIN, 133
    END

	IDR_POWER_MANAGEMENT_WARNING, DIALOG
	BEGIN
		LEFTMARGIN, 7
		RIGHTMARGIN, 223
		TOPMARGIN, 7,
		BOTTOMMARGIN, 88
	END

    IDR_ADD_BROWSE_DOMAIN, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 223
        TOPMARGIN, 7
        BOTTOMMARGIN, 88
    END
END
#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// String Table
//

STRINGTABLE 
BEGIN
    IDR_APPLET              "Bonjour"
	IDS_APPLET_NAME			"Bonjour"
    IDS_APPLET_DESCRIPTION  "Bonjour"
	IDS_APPLET_TOOLTIP		"Change Bonjour settings for this computer."
END

#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#pragma code_page(1252)
#include "afxres.rc"     // Standard components
#endif

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

