/*
 * Copyright 2004 Mike McCormack for CodeWeavers
 *
 * 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

IDR_BROWSE_MAIN_MENU MENU
{
    POPUP "&File"
    {
        POPUP "&New"
        {
            MENUITEM "&Window",                 ID_BROWSE_NEW_WINDOW
        }
        MENUITEM "&Open...",                    ID_BROWSE_OPEN
        MENUITEM "&Save",                       ID_BROWSE_SAVE
        MENUITEM "Save &as...",                 ID_BROWSE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "Print &format...",            ID_BROWSE_PRINT_FORMAT
        MENUITEM "Pr&int...",                   ID_BROWSE_PRINT
        MENUITEM "Print previe&w...",           ID_BROWSE_PRINT_PREVIEW
        MENUITEM SEPARATOR
        MENUITEM "&Properties...",              ID_BROWSE_PROPERTIES
        MENUITEM "&Close",                      ID_BROWSE_QUIT
    }
    POPUP "&View"
    {
        POPUP "&Toolbars"
        {
            MENUITEM "&Standard bar",           ID_BROWSE_BAR_STD
            MENUITEM "&Address bar",            ID_BROWSE_BAR_ADDR
        }
    }
    POPUP "&Favorites"
    {
        MENUITEM "&Add to Favorites...",        ID_BROWSE_ADDFAV
        MENUITEM SEPARATOR
    }
    POPUP "&Help"
    {
        MENUITEM "&About Internet Explorer...", ID_BROWSE_ABOUT
    }
}

STRINGTABLE
{
    IDS_TB_BACK             "Back"
    IDS_TB_FORWARD          "Forward"
    IDS_TB_STOP             "Stop"
    IDS_TB_REFRESH          "Refresh"
    IDS_TB_HOME             "Home"
    IDS_TB_PRINT            "Print"
}

STRINGTABLE
{
    IDS_ADDRESS             "Address"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine core dll"
#define WINE_FILENAME_STR "shdocvw.dll"
#define WINE_FILEVERSION 6,0,2900,2180
#define WINE_FILEVERSION_STR "6.0.2900.2180"
#define WINE_PRODUCTVERSION 6,0,2900,2180
#define WINE_PRODUCTVERSION_STR "6.0.2900.2180"
#define WINE_EXTRAVALUES VALUE "OLESelfRegister",""

#include "wine/wine_common_ver.rc"

/* @makedep: shdocvw_v1.tlb */
1 TYPELIB shdocvw_v1.tlb

/* @makedep: shdocvw.inf */
REGINST REGINST shdocvw.inf

/* @makedep: ietoolbar.bmp */
IDB_IETOOLBAR BITMAP ietoolbar.bmp
