/*
 * HTML Help resources
 *
 * Copyright 2005 James Hawkins
 * Copyright 2011 Owen Rudge 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

STRINGTABLE
BEGIN
    IDS_CONTENTS     "&Contents"
    IDS_INDEX        "I&ndex"
    IDS_SEARCH       "&Search"
    IDS_FAVORITES    "Favor&ites"

    IDS_HIDETABS     "Hide &Tabs"
    IDS_SHOWTABS     "Show &Tabs"
END

STRINGTABLE
BEGIN
    IDTB_EXPAND      "Show"
    IDTB_CONTRACT    "Hide"
    IDTB_STOP        "Stop"
    IDTB_REFRESH     "Refresh"
    IDTB_BACK        "Back"
    IDTB_HOME        "#msgctxt#table of contents#Home"
    IDTB_SYNC        "Sync"
    IDTB_PRINT       "Print"
    IDTB_OPTIONS     "Options"
    IDTB_FORWARD     "Forward"
END

MENU_POPUP MENU
{
    POPUP "" /* Options */
    {
        MENUITEM "", IDTB_EXPAND,
        MENUITEM "S&ync", IDTB_SYNC
        MENUITEM "&Back", IDTB_BACK
        MENUITEM "&Forward", IDTB_FORWARD
        MENUITEM "#msgctxt#table of contents#&Home", IDTB_HOME
        MENUITEM "&Stop", IDTB_STOP
        MENUITEM "&Refresh", IDTB_REFRESH
        MENUITEM "&Print...", IDTB_PRINT
    }
}

MENU_WEBBROWSER MENU
{
    POPUP ""
    {
        MENUITEM "&Back", IDTB_BACK
        MENUITEM "&Forward", IDTB_FORWARD
        MENUITEM SEPARATOR
        MENUITEM "Select &All", MIID_SELECTALL
        MENUITEM SEPARATOR
        MENUITEM "&View Source", MIID_VIEWSOURCE
        MENUITEM SEPARATOR
        MENUITEM "&Print...", IDTB_PRINT
        MENUITEM "&Refresh", IDTB_REFRESH
        MENUITEM SEPARATOR
        MENUITEM "Proper&ties", MIID_PROPERTIES
    }
    POPUP ""
    {
        MENUITEM "Cu&t", MIID_CUT
        MENUITEM "&Copy", MIID_COPY
        MENUITEM "Paste", MIID_PASTE
        MENUITEM "Select &All", MIID_SELECTALL
        MENUITEM "&Print", IDTB_PRINT
    }
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine htmlhelp OCX"
#define WINE_FILENAME_STR "hhctrl.ocx"
#define WINE_FILEVERSION 5,2,3790,2744
#define WINE_FILEVERSION_STR "5.2.3790.2744"
#define WINE_PRODUCTVERSION 5,2,3790,2744
#define WINE_PRODUCTVERSION_STR "5.2.3790.2744"

#include "wine/wine_common_ver.rc"

/* @makedep: hhtoolbar.bmp */
IDB_HHTOOLBAR BITMAP hhtoolbar.bmp

/* @makedep: hhtreeview.bmp */
IDB_HHTREEVIEW BITMAP hhtreeview.bmp
