/*
 * Copyright 2011 Jacek Caban 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             "#msgctxt#home page#Home"
    IDS_TB_PRINT            "Print..."
}

STRINGTABLE
{
    IDS_ADDRESS             "Address"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Internet Browser"
#define WINE_FILENAME_STR "ieframe.dll"
#define WINE_FILEVERSION 8,00,7601,17601
#define WINE_FILEVERSION_STR "8.00.7601.17601"
#define WINE_PRODUCTVERSION 8,00,7601,17601
#define WINE_PRODUCTVERSION_STR "8.00.7601.17601"
#define WINE_EXTRAVALUES VALUE "OLESelfRegister",""

#include "wine/wine_common_ver.rc"

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

/* @makedep: ieframe.rgs */
2 WINE_REGISTRY ieframe.rgs
