/*
 * Regedit resources
 *
 * Copyright 2002 Robert Dickenson
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

/* English Neutral Resources */

LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL

STRINGTABLE DISCARDABLE
BEGIN
    ID_FAVORITES_ADDTOFAVORITES "Adds keys to the favourites list"
    ID_FAVORITES_REMOVEFAVORITE "Removes keys from the favourites list"
END

IDR_REGEDIT_MENU MENU DISCARDABLE
BEGIN
    POPUP "&Registry"
    BEGIN
        MENUITEM "&Import Registry File...",    ID_REGISTRY_IMPORTREGISTRYFILE
        MENUITEM "&Export Registry File...",    ID_REGISTRY_EXPORTREGISTRYFILE
        MENUITEM SEPARATOR
        MENUITEM "&Connect Network Registry...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED
        MENUITEM "&Disconnect Network Registry...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Print\tCtrl+P",              ID_REGISTRY_PRINT, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       ID_REGISTRY_EXIT
    END
    POPUP "&Edit"
    BEGIN
        MENUITEM "&Modify",                     ID_EDIT_MODIFY
        MENUITEM SEPARATOR
        POPUP "&New"
        BEGIN
            MENUITEM "&Key",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&String Value",               ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binary Value",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
            MENUITEM "&Multi String Value",         ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename\tF2",                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Copy Key Name",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Find\tCtrl+F",               ID_EDIT_FIND, GRAYED
        MENUITEM "Find Ne&xt\tF3",              ID_EDIT_FINDNEXT, GRAYED
    END
    POPUP "&View"
    BEGIN
        MENUITEM "Status &Bar",                 ID_VIEW_STATUSBAR
        MENUITEM SEPARATOR
        MENUITEM "Sp&lit",                      ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Refresh\tF5",                ID_VIEW_REFRESH
    END
    POPUP "&Favourites"
    BEGIN
        MENUITEM "&Add to Favourites",          ID_FAVORITES_ADDTOFAVORITES
        MENUITEM "&Remove Favourite",           ID_FAVORITES_REMOVEFAVORITE
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Help Topics\tF1",            ID_HELP_HELPTOPICS
        MENUITEM SEPARATOR
        MENUITEM "&About Registry Editor",      ID_HELP_ABOUT
    END
END

/* US English Resources */

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

/*
 * Menu
 */

IDC_REGEDIT MENU DISCARDABLE
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit",                       ID_REGISTRY_EXIT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About ...",                  ID_HELP_ABOUT
    END
END

IDR_REGEDIT_MENU MENU DISCARDABLE
BEGIN
    POPUP "&Registry"
    BEGIN
        MENUITEM "&Import Registry File...",    ID_REGISTRY_IMPORTREGISTRYFILE
        MENUITEM "&Export Registry File...",    ID_REGISTRY_EXPORTREGISTRYFILE
        MENUITEM SEPARATOR
        MENUITEM "&Connect Network Registry...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED
        MENUITEM "&Disconnect Network Registry...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Print\tCtrl+P",              ID_REGISTRY_PRINT, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       ID_REGISTRY_EXIT
    END
    POPUP "&Edit"
    BEGIN
        MENUITEM "&Modify",                     ID_EDIT_MODIFY
        MENUITEM SEPARATOR
        POPUP "&New"
        BEGIN
            MENUITEM "&Key",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&String Value",               ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binary Value",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
            MENUITEM "&Multi String Value",         ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename\tF2",                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Copy Key Name",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Find\tCtrl+F",               ID_EDIT_FIND, GRAYED
        MENUITEM "Find Ne&xt\tF3",              ID_EDIT_FINDNEXT, GRAYED
    END
    POPUP "&View"
    BEGIN
        MENUITEM "Status &Bar",                 ID_VIEW_STATUSBAR
        MENUITEM SEPARATOR
        MENUITEM "Sp&lit",                      ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Refresh\tF5",                ID_VIEW_REFRESH
    END
    POPUP "&Favorites"
    BEGIN
        MENUITEM "&Add to Favorites",          ID_FAVORITES_ADDTOFAVORITES
        MENUITEM "&Remove Favorite",           ID_FAVORITES_REMOVEFAVORITE
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Help Topics\tF1",            ID_HELP_HELPTOPICS
        MENUITEM SEPARATOR
        MENUITEM "&About Registry Editor",      ID_HELP_ABOUT
    END
END

IDR_POPUP_MENUS MENU DISCARDABLE
BEGIN
  POPUP ""
  BEGIN
	MENUITEM "&Modify",                     ID_EDIT_MODIFY
	MENUITEM "Modify Binary Data",          ID_EDIT_MODIFY_BIN
	MENUITEM SEPARATOR
	MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
	MENUITEM "&Rename",                     ID_EDIT_RENAME
  END
  POPUP ""
  BEGIN
        POPUP "&New"
        BEGIN
            MENUITEM "&Key",                        ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&String Value",               ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binary Value",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
            MENUITEM "&Multi String Value",         ID_EDIT_NEW_MULTI_STRINGVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename\tF2",                 ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Copy Key Name",              ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Find\tCtrl+F",               ID_EDIT_FIND, GRAYED
  END
END


/*
 * Dialog
 */

IDD_EXPORT_TEMPLATE DIALOG DISCARDABLE  50, 50, 278, 54
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Export registry", IDC_EXPORT_BASE, 6, 6, 266, 42, WS_GROUP
    AUTORADIOBUTTON "&All", IDC_EXPORT_ALL, 12, 15, 244, 12
    AUTORADIOBUTTON "S&elected branch:", IDC_EXPORT_SELECTED, 12, 30, 70, 12
    EDITTEXT IDC_EXPORT_PATH, 82, 30, 184, 12
END

IDD_FIND DIALOG DISCARDABLE  22, 17, 210, 85
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Find"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Find:",IDC_STATIC,5,7,119,8
    EDITTEXT        IDC_VALUE_NAME,40,5,125,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    LTEXT           "Find in:",IDC_STATIC,5, 22, 119, 8
    CHECKBOX        "Keys", IDC_FIND_KEYS, 5, 34, 90, 10, WS_TABSTOP | WS_GROUP | BS_AUTOCHECKBOX
    CHECKBOX        "Value names", IDC_FIND_VALUES, 5, 46, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    CHECKBOX        "Value content", IDC_FIND_CONTENT, 5, 58, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    CHECKBOX        "Whole string only", IDC_FIND_WHOLE, 5, 70, 90, 10, WS_TABSTOP | BS_AUTOCHECKBOX
    DEFPUSHBUTTON   "Find",IDOK,175,5,30,11,WS_GROUP
    PUSHBUTTON      "Close",IDCANCEL,175,22,30,11, WS_GROUP
END

IDD_ADDFAVORITE DIALOG DISCARDABLE  22, 17, 210, 55
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Add Favorite"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK",IDOK,140,40,30,11,WS_GROUP
    PUSHBUTTON      "Cancel",IDCANCEL,175,40,30,11, WS_GROUP
END

IDD_DELFAVORITE DIALOG DISCARDABLE  22, 17, 210, 90
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Remove Favorite"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Name:",IDC_STATIC,5,5,119,8
    LISTBOX         IDC_NAME_LIST,5,15,200,52, WS_BORDER | WS_TABSTOP | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL
    DEFPUSHBUTTON   "OK",IDOK,140,73,30,11,WS_GROUP
    PUSHBUTTON      "Cancel",IDCANCEL,175,73,30,11, WS_GROUP
END

IDD_EDIT_STRING DIALOG DISCARDABLE  22, 17, 210, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Edit String"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK",IDOK,140,60,30,11,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,175,60,30,11,WS_GROUP
END

IDD_EDIT_DWORD DIALOG DISCARDABLE  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Edit DWORD"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,90,8
    EDITTEXT        IDC_VALUE_DATA,5,40,90,12, WS_BORDER | WS_TABSTOP
    GROUPBOX        "Base", IDC_DWORD_BASE, 120, 30, 85, 37, BS_GROUPBOX
    AUTORADIOBUTTON "Hexadecimal", IDC_DWORD_HEX, 130, 40, 60, 10, WS_TABSTOP
    AUTORADIOBUTTON "Decimal", IDC_DWORD_DEC, 130, 52, 60, 10, WS_TABSTOP
    DEFPUSHBUTTON   "OK",IDOK,140,80,30,11,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,175,80,30,11,WS_GROUP
END

IDD_EDIT_BINARY DIALOG DISCARDABLE  22, 17, 210, 100
STYLE DS_MODALFRAME | DS_NOIDLEMSG | WS_CAPTION | WS_SYSMENU
CAPTION "Edit Binary"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,90,8
    CONTROL         "",IDC_VALUE_DATA,"HexEdit",WS_TABSTOP,4,40,160,40
    DEFPUSHBUTTON   "OK",IDOK,140,80,30,11,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,175,80,30,11,WS_GROUP
END

IDD_EDIT_MULTI_STRING DIALOG DISCARDABLE  22, 17, 210, 175
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Edit Multi String"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Value name:",IDC_STATIC,5,5,119,8
    EDITTEXT        IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
    LTEXT           "Value data:",IDC_STATIC,5,30,119,8
    EDITTEXT        IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
    DEFPUSHBUTTON   "OK",IDOK,140,160,30,11,WS_GROUP
    PUSHBUTTON   "Cancel",IDCANCEL,175,160,30,11,WS_GROUP
END

/*
 * String Table
 */

STRINGTABLE DISCARDABLE
BEGIN
    IDS_LIST_COLUMN_NAME    "Name"
    IDS_LIST_COLUMN_TYPE    "Type"
    IDS_LIST_COLUMN_DATA    "Data"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_APP_TITLE           "Registry Editor"
    IDC_REGEDIT             "REGEDIT"
    IDC_REGEDIT_FRAME       "REGEDIT_FRAME"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_REGISTRY_MENU        "Contains commands for working with the whole registry"
    ID_EDIT_MENU            "Contains commands for editing values or keys"
    ID_VIEW_MENU            "Contains commands for customising the registry window"
    ID_FAVORITES_MENU       "Contains commands for accessing frequently used keys"
    ID_HELP_MENU            "Contains commands for displaying help and information about registry editor"
    ID_EDIT_NEW_MENU        "Contains commands for creating new keys or values"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_EDIT_MODIFY          "Modifies the value's data"
    ID_EDIT_NEW_KEY         "Adds a new key"
    ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
    ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
    ID_EDIT_NEW_DWORDVALUE  "Adds a new double word value"
    ID_EDIT_NEW_MULTI_STRINGVALUE "Adds a new multi string value"
    ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
    ID_REGISTRY_EXPORTREGISTRYFILE
                            "Exports all or part of the registry to a text file"
    ID_REGISTRY_CONNECTNETWORKREGISTRY
                            "Connects to a remote computer's registry"
    ID_REGISTRY_DISCONNECTNETWORKREGISTRY
                            "Disconnects from a remote computer's registry"
    ID_REGISTRY_PRINT       "Prints all or part of the registry"
/*    ID_HELP_HELPTOPICS      "Opens registry editor help" */
    ID_HELP_ABOUT           "Displays program information, version number and copyright"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_REGISTRY_EXIT        "Quits the registry editor"
    ID_FAVORITES_ADDTOFAVORITES "Adds keys to the favorites list"
    ID_FAVORITES_REMOVEFAVORITE "Removes keys from the favorites list"
    ID_VIEW_STATUSBAR       "Shows or hides the status bar"
    ID_VIEW_SPLIT           "Change position of split between two panes"
    ID_VIEW_REFRESH         "Refreshes the window"
    ID_EDIT_DELETE          "Deletes the selection"
    ID_EDIT_RENAME          "Renames the selection"
    ID_EDIT_COPYKEYNAME     "Copies the name of the selected key to the clipboard"
    ID_EDIT_FIND            "Finds a text string in a key, value or data"
    ID_EDIT_FINDNEXT        "Finds next occurrence of text specified in previous search"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_ERROR		    "Error"
    IDS_BAD_KEY		    "Can't query key '%s'"
    IDS_BAD_VALUE           "Can't query value '%s'"
    IDS_UNSUPPORTED_TYPE    "Can't edit keys of this type (%ld)"
    IDS_TOO_BIG_VALUE       "Value is too big (%ld)"
    IDS_DELETE_BOX_TITLE    "Confirm Value Delete"
    IDS_DELETE_BOX_TEXT     "Are you sure you want to delete value '%s'?"
    IDS_NEWKEY              "New Key #%d"
    IDS_NEWVALUE            "New Value #%d"
    IDS_NOTFOUND            "Search string '%s' not found"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_FILEDIALOG_IMPORT_TITLE   "Import Registry File"
    IDS_FILEDIALOG_EXPORT_TITLE   "Export Registry File"
    IDS_FILEDIALOG_FILTER         "Registration Files\0*.reg\0Win9x/NT4 Registration Files (REGEDIT4)\0*.reg\0All Files (*.*)\0*.*\0\0"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_REGISTRY_ROOT_NAME           "My Computer"
    IDS_REGISTRY_DEFAULT_VALUE       "(Default)"
    IDS_REGISTRY_VALUE_NOT_SET       "(value not set)"
    IDS_REGISTRY_VALUE_CANT_DISPLAY  "(cannot display value)"
    IDS_REGISTRY_UNKNOWN_TYPE        "(unknown %d)"
END

/*****************************************************************/

/*
 * TEXTINCLUDE
 */

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END



/*
 * String Table
 */

/*
 *STRINGTABLE DISCARDABLE
 *BEGIN
 *    ID_HELP_HELPTOPICS      "Opens Registry Editor Help."
 *    ID_HELP_ABOUT           "Displays program information, version number, and copyright."
 *END
 */

/*****************************************************************/
