/*
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

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
        END
        MENUITEM SEPARATOR
        MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
        MENUITEM "&Rename",                     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_FAVOURITES_ADDTOFAVOURITES
        , GRAYED
        MENUITEM "&Remove Favourite",           ID_FAVOURITES_REMOVEFAVOURITE
        , GRAYED
    END
    POPUP "&Help"
    BEGIN
/*
 *        MENUITEM "&Help Topics",                ID_HELP_HELPTOPICS
 *        MENUITEM SEPARATOR
 */
        MENUITEM "&About Registry Editor",      ID_HELP_ABOUT
    END
END


/*
 * Dialog
 */

IDD_ABOUTBOX DIALOG DISCARDABLE  22, 17, 230, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "System"
BEGIN
    ICON            IDI_REGEDIT,IDI_REGEDIT,14,9,16,16
    LTEXT           "ReactOS regedit Version 1.0",IDC_STATIC,49,10,119,8,
                    SS_NOPREFIX
    LTEXT           "Copyright (C) 2002 ReactOS Team",IDC_STATIC,49,20,119,8
    DEFPUSHBUTTON   "OK",IDOK,195,6,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_FAVOURITES_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_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_FAVOURITES_ADDTOFAVOURITES "Adds keys to the favourites list"
    ID_FAVOURITES_REMOVEFAVOURITE "Removes keys from the favourites 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

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


/*
 * Dialog
 */

IDD_DIALOG1 DIALOG DISCARDABLE  50, 50, 268, 98
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_BORDER
FONT 8, "MS Sans Serif"
BEGIN
END

IDD_DIALOG2 DIALOG DISCARDABLE  0, 0, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,130,7,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,130,24,50,14
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
 */

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