/*
 * 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"

#pragma makedep po

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"
}

STRINGTABLE
{
    IDS_FINDINGRESOURCE     "Searching for %s"
    IDS_BEGINDOWNLOADDATA   "Start downloading %s"
    IDS_ENDDOWNLOADDATA     "Downloading %s"
    IDS_SENDINGREQUEST      "Asking for %s"
}


IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70
STYLE DS_MODALFRAME | WS_CAPTION
CAPTION "Open URL"
FONT 8, "MS Shell Dlg"
{
    LTEXT "Specify the URL you wish to open in Internet Explorer",-1, 35,5,160,25
    LTEXT "Open:", -1, 5, 32, 30, 15
    EDITTEXT IDC_BROWSE_OPEN_URL, 35, 30, 160, 13
    DEFPUSHBUTTON "OK", IDOK, 90, 50, 50, 14
    PUSHBUTTON "Cancel", IDCANCEL, 145, 50, 50, 14
}

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
