/*
 * OleView resources
 *
 * Copyright 2006 Piotr Caban
 *
 * 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
 */

#include "resource.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

IDM_MENU MENU
{
    POPUP "&File"
    {
        MENUITEM "&Bind to file...",    IDM_BIND
        MENUITEM "&View TypeLib...",    IDM_TYPELIB
        MENUITEM SEPARATOR
        MENUITEM "&System Configuration",       IDM_SYSCONF
        MENUITEM "&Run the Registry Editor",    IDM_REGEDIT
        MENUITEM SEPARATOR
        MENUITEM "E&xit",    IDM_EXIT
    }
    POPUP "&Object"
    {
        POPUP "&CoCreateInstance Flag"
        {
            MENUITEM "CLSCTX_&INPROC_SERVER",    IDM_FLAG_INSERV,CHECKED
            MENUITEM "CLSCTX_INPROC_&HANDLER",    IDM_FLAG_INHANDL
            MENUITEM "CLSCTX_&LOCAL_SERVER",        IDM_FLAG_LOCSERV,CHECKED
            MENUITEM "CLSCTX_&REMOTE_SERVER",    IDM_FLAG_REMSERV
        }
        MENUITEM SEPARATOR
        MENUITEM "View &Type information",    IDM_TYPEINFO, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "Create &Instance",    IDM_CREATEINST, GRAYED
        MENUITEM "Create Instance &On...",    IDM_CREATEINSTON, GRAYED
        MENUITEM "&Release Instance",    IDM_RELEASEINST, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "Copy C&LSID to clipboard",    IDM_COPYCLSID, GRAYED
        MENUITEM "Copy &HTML object Tag to clipboard", IDM_HTMLTAG, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&View",       IDM_VIEW, GRAYED
    }
    POPUP "&View"
    {
        MENUITEM "&Expert mode",    IDM_EXPERT,CHECKED
        MENUITEM SEPARATOR
        MENUITEM "&Hidden component categories",    IDM_HIDDEN, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Toolbar",    IDM_TOOLBAR,CHECKED
        MENUITEM "&Status Bar",    IDM_STATUSBAR,CHECKED
        MENUITEM SEPARATOR
        MENUITEM "&Refresh\tF5",    IDM_REFRESH
    }
    POPUP "&Help"
    {
        MENUITEM "&About OleView",    IDM_ABOUT
    }
}

IDM_TYPELIB MENU
{
    POPUP "&File"
    {
        MENUITEM "&Save as...",    IDM_SAVEAS
        MENUITEM "&Close",  IDM_CLOSE
    }
    POPUP "&View"
    {
        MENUITEM "&Group by type kind", IDM_GROUP
        MENUITEM SEPARATOR
        MENUITEM "&Toolbar",    IDM_TOOLBAR
        MENUITEM "&Status Bar", IDM_STATUSBAR,CHECKED
    }
}

STRINGTABLE
{
    IDS_APPNAME            "OleView"
    IDS_APPTITLE           "OleView"
    IDS_READY              "Ready"
    IDS_ABOUT              "OleView - OLE/COM Object Viewer"
    IDS_ABOUTVER           "version 1.0"
    IDS_TYPELIBTITLE       "ITypeLib viewer"
    IDS_OPEN               "Open"
    IDS_OPEN_FILTER_TYPELIB "TypeLib files (*.tlb;*.olb;*.dll;*.ocx;*.exe)"
    IDS_OPEN_FILTER_ALL     "All files (*.*)"

    IDM_BIND,              "Bind to file via a File Moniker"
    IDM_TYPELIB,           "Open a TypeLib file and view the contents"
    IDM_SYSCONF,           "Change machine wide Distributed COM settings"
    IDM_REGEDIT,           "Run the Wine registry editor"
    IDM_EXIT,              "Quit the application. Prompts to save changes"
    IDM_CREATEINST,        "Create an instance of the selected object"
    IDM_CREATEINSTON,      "Create an instance of the selected object on a specific machine"
    IDM_RELEASEINST,       "Release the currently selected object instance"
    IDM_COPYCLSID,         "Copy the GUID of the currently selected item to the clipboard"
    IDM_VIEW,              "Display the viewer for the selected item"
    IDM_FLAG_INSERV,       "Use CLSCTX_INPROC_SERVER when calling CoGetClassObject"
    IDM_FLAG_INHANDL,      "Use CLSCTX_INPROC_HANDLER when calling CoGetClassObject"
    IDM_FLAG_LOCSERV,      "Use CLSCTX_LOCAL_SERVER when calling CoGetClassObject"
    IDM_FLAG_REMSERV,      "Use CLSCTX_REMOTE_SERVER when calling CoGetClassObject"
    IDM_EXPERT,            "Toggle between expert and novice display mode"
    IDM_HIDDEN,            "Toggle the display of component categories that are not meant to be visible"
    IDM_TOOLBAR,           "Show or hide the toolbar"
    IDM_STATUSBAR,         "Show or hide the status bar"
    IDM_REFRESH,           "Refresh all lists"
    IDM_ABOUT,             "Display program information, version number and copyright"

    IDM_SAVEAS,            "Save as an .IDL or .H file"
    IDM_CLOSE,             "Close window"
    IDM_GROUP,             "Group typeinfos by kind"

    IDS_TREE_OC,           "ObjectClasses"
    IDS_TREE_GBCC,         "Grouped by Component Category"
    IDS_TREE_O1O,          "OLE 1.0 Objects"
    IDS_TREE_CLO,          "COM Library Objects"
    IDS_TREE_AO,           "All Objects"
    IDS_TREE_AID,          "Application IDs"
    IDS_TREE_TL,           "Type Libraries"
    IDS_TL_VER,            "ver."
    IDS_TREE_I,            "Interfaces"

    IDS_TAB_REG,           "Registry"
    IDS_TAB_IMPL,          "Implementation"
    IDS_TAB_ACTIV,         "Activation"

    IDS_CGCOFAIL,          "CoGetClassObject failed."
    IDS_ERROR_UNKN,        "Unknown error"
    IDS_TRUE,              "True"
    IDS_FALSE,             "False"
    IDS_BYTES,             "bytes"

    IDS_ERROR_LOADTYPELIB, "LoadTypeLib( %s ) failed ($%x)"
    IDS_INHERITINTERFACES, "Inherited Interfaces"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

IDA_OLEVIEW ACCELERATORS
{
    VK_F5, IDM_REFRESH, VIRTKEY
}

/* @makedep: toolbar.bmp */
IDB_TOOLBAR BITMAP toolbar.bmp
