/*
 * Resources for oleacc
 *
 * Copyright 2008 Nikolay Sivov
 *
 * 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 "oleacc.h"
#include "resource.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    0 "unknown object" /* undocumented */
    ROLE_SYSTEM_TITLEBAR    "title bar"
    ROLE_SYSTEM_MENUBAR     "menu bar"
    ROLE_SYSTEM_SCROLLBAR   "scroll bar"
    ROLE_SYSTEM_GRIP        "grip"
    ROLE_SYSTEM_SOUND       "sound"
    ROLE_SYSTEM_CURSOR      "cursor"
    ROLE_SYSTEM_CARET       "caret"
    ROLE_SYSTEM_ALERT       "alert"
    ROLE_SYSTEM_WINDOW      "window"
    ROLE_SYSTEM_CLIENT      "client"
    ROLE_SYSTEM_MENUPOPUP   "popup menu"
    ROLE_SYSTEM_MENUITEM    "menu item"
    ROLE_SYSTEM_TOOLTIP     "tool tip"
    ROLE_SYSTEM_APPLICATION "application"
    ROLE_SYSTEM_DOCUMENT    "document"
    ROLE_SYSTEM_PANE        "pane"
    ROLE_SYSTEM_CHART       "chart"
    ROLE_SYSTEM_DIALOG      "dialog"
    ROLE_SYSTEM_BORDER      "border"
    ROLE_SYSTEM_GROUPING    "grouping"
    ROLE_SYSTEM_SEPARATOR   "separator"
    ROLE_SYSTEM_TOOLBAR     "tool bar"
    ROLE_SYSTEM_STATUSBAR   "status bar"
    ROLE_SYSTEM_TABLE        "table"
    ROLE_SYSTEM_COLUMNHEADER "column header"
    ROLE_SYSTEM_ROWHEADER    "row header"
    ROLE_SYSTEM_COLUMN       "column"
    ROLE_SYSTEM_ROW          "row"
    ROLE_SYSTEM_CELL         "cell"
    ROLE_SYSTEM_LINK         "link"
    ROLE_SYSTEM_HELPBALLOON  "help balloon"
    ROLE_SYSTEM_CHARACTER    "character"
    ROLE_SYSTEM_LIST         "list"
    ROLE_SYSTEM_LISTITEM     "list item"
    ROLE_SYSTEM_OUTLINE      "outline"
    ROLE_SYSTEM_OUTLINEITEM  "outline item"
    ROLE_SYSTEM_PAGETAB      "page tab"
    ROLE_SYSTEM_PROPERTYPAGE "property page"
    ROLE_SYSTEM_INDICATOR    "indicator"
    ROLE_SYSTEM_GRAPHIC      "graphic"
    ROLE_SYSTEM_STATICTEXT   "static text"
    ROLE_SYSTEM_TEXT         "text"
    ROLE_SYSTEM_PUSHBUTTON   "push button"
    ROLE_SYSTEM_CHECKBUTTON  "check button"
    ROLE_SYSTEM_RADIOBUTTON  "radio button"
    ROLE_SYSTEM_COMBOBOX     "combo box"
    ROLE_SYSTEM_DROPLIST     "drop down"
    ROLE_SYSTEM_PROGRESSBAR  "progress bar"
    ROLE_SYSTEM_DIAL         "dial"
    ROLE_SYSTEM_HOTKEYFIELD  "hot key field"
    ROLE_SYSTEM_SLIDER       "slider"
    ROLE_SYSTEM_SPINBUTTON   "spin box"
    ROLE_SYSTEM_DIAGRAM      "diagram"
    ROLE_SYSTEM_ANIMATION    "animation"
    ROLE_SYSTEM_EQUATION     "equation"
    ROLE_SYSTEM_BUTTONDROPDOWN "drop down button"
    ROLE_SYSTEM_BUTTONMENU   "menu button"
    ROLE_SYSTEM_BUTTONDROPDOWNGRID "grid drop down button"
    ROLE_SYSTEM_WHITESPACE   "white space"
    ROLE_SYSTEM_PAGETABLIST  "page tab list"
    ROLE_SYSTEM_CLOCK        "clock"
    ROLE_SYSTEM_SPLITBUTTON  "split button"
    ROLE_SYSTEM_IPADDRESS    "IP address"
    ROLE_SYSTEM_OUTLINEBUTTON "outline button"

    IDS_STATE_NORMAL            "#msgctxt#object state#normal"
    IDS_STATE_UNAVAILABLE       "#msgctxt#object state#unavailable"
    IDS_STATE_SELECTED          "#msgctxt#object state#selected"
    IDS_STATE_FOCUSED           "#msgctxt#object state#focused"
    IDS_STATE_PRESSED           "#msgctxt#object state#pressed"
    IDS_STATE_CHECKED           "#msgctxt#object state#checked"
    IDS_STATE_MIXED             "#msgctxt#object state#mixed"
    IDS_STATE_READONLY          "#msgctxt#object state#read only"
    IDS_STATE_HOTTRACKED        "#msgctxt#object state#hot tracked"
    IDS_STATE_DEFAULT           "#msgctxt#object state#default"
    IDS_STATE_EXPANDED          "#msgctxt#object state#expanded"
    IDS_STATE_COLLAPSED         "#msgctxt#object state#collapsed"
    IDS_STATE_BUSY              "#msgctxt#object state#busy"
    IDS_STATE_FLOATING          "#msgctxt#object state#floating"
    IDS_STATE_MARQUEED          "#msgctxt#object state#marqueed"
    IDS_STATE_ANIMATED          "#msgctxt#object state#animated"
    IDS_STATE_INVISIBLE         "#msgctxt#object state#invisible"
    IDS_STATE_OFFSCREEN         "#msgctxt#object state#offscreen"
    IDS_STATE_SIZEABLE          "#msgctxt#object state#sizeable"
    IDS_STATE_MOVEABLE          "#msgctxt#object state#moveable"
    IDS_STATE_SELFVOICING       "#msgctxt#object state#self voicing"
    IDS_STATE_FOCUSABLE         "#msgctxt#object state#focusable"
    IDS_STATE_SELECTABLE        "#msgctxt#object state#selectable"
    IDS_STATE_LINKED            "#msgctxt#object state#linked"
    IDS_STATE_TRAVERSED         "#msgctxt#object state#traversed"
    IDS_STATE_MULTISELECTABLE   "#msgctxt#object state#multi selectable"
    IDS_STATE_EXTSELECTABLE     "#msgctxt#object state#extended selectable"
    IDS_STATE_ALERT_LOW         "#msgctxt#object state#alert low"
    IDS_STATE_ALERT_MEDIUM      "#msgctxt#object state#alert medium"
    IDS_STATE_ALERT_HIGH        "#msgctxt#object state#alert high"
    IDS_STATE_PROTECTED         "#msgctxt#object state#protected"
    IDS_STATE_HASPOPUP          "#msgctxt#object state#has popup"
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

#define WINE_FILEDESCRIPTION_STR "Wine OLE Accessibility"
#define WINE_FILENAME_STR "oleacc.dll"
#define WINE_FILEVERSION 7,0,0,0
#define WINE_FILEVERSION_STR "7.0.0.0"
#define WINE_PRODUCTVERSION 6,1,7600,16385
#define WINE_PRODUCTVERSION_STR "6.1.6700.16385"

#include "wine/wine_common_ver.rc"
