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

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

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
