/*
 * WineCfg resources
 *
 * Copyright 2002 Jaco Greeff
 * Copyright 2003 Dimitrie O. Paun
 *
 * 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 "config.h"   /* Needed for the PACKAGE_STRING definition */
#include "resource.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

IDR_WINECFG MENU
BEGIN
    POPUP ""
    BEGIN
        MENUITEM "Configure...", IDC_AUDIO_CONFIGURE
    END
END

STRINGTABLE
BEGIN
    IDS_TAB_APPLICATIONS    "Applications"
    IDS_TAB_DLLS            "Libraries"
    IDS_TAB_DRIVES          "Drives"
    IDS_CHOOSE_PATH         "Select the unix target directory, please."
    IDS_HIDE_ADVANCED       "Hide &Advanced"
    IDS_SHOW_ADVANCED       "Show &Advanced"
    IDS_NOTHEME             "(No Theme)"
    IDS_TAB_GRAPHICS        "Graphics"
    IDS_TAB_DESKTOP_INTEGRATION "Desktop Integration"
    IDS_TAB_AUDIO           "Audio"
    IDS_TAB_ABOUT           "About"
    IDS_WINECFG_TITLE       "Wine configuration"
    IDS_WINECFG_TITLE_APP   "Wine configuration for %s"
    IDS_THEMEFILE           "Theme files (*.msstyles; *.theme)"
    IDS_THEMEFILE_SELECT    "Select a theme file"
    IDS_AUDIO_MISSING       "There is no audio driver currently specified in the registry.\n\nA recommended driver has been selected for you.\nYou can use this driver or select another driver if available.\n\nYou must click Apply for the selection to take effect."
    IDS_SHELL_FOLDER        "Folder"
    IDS_LINKS_TO            "Links to"
END

STRINGTABLE
BEGIN
    IDS_DLL_WARNING         "Changing the load order of this library is not recommended.\nAre you sure you want to do this?"
    IDS_DLL_WARNING_CAPTION "Warning: system library"
    IDS_DLL_NATIVE          "native"
    IDS_DLL_BUILTIN         "builtin"
    IDS_DLL_NATIVE_BUILTIN  "native, builtin"
    IDS_DLL_BUILTIN_NATIVE  "builtin, native"
    IDS_DLL_DISABLED        "disabled"
    IDS_DEFAULT_SETTINGS    "Default Settings"
    IDS_EXECUTABLE_FILTER   "Wine Programs (*.exe,*.exe.so)"
    IDS_USE_GLOBAL_SETTINGS "Use global settings"
    IDS_SELECT_EXECUTABLE   "Select an executable file"
END

STRINGTABLE
BEGIN
    IDS_SHADER_MODE_HARDWARE    "Hardware"
    IDS_SHADER_MODE_NONE        "#msgctxt#vertex shader mode#None"
END

STRINGTABLE
BEGIN
    IDS_DRIVE_UNKNOWN           "Autodetect..."
    IDS_DRIVE_FIXED             "Local hard disk"
    IDS_DRIVE_REMOTE            "Network share"
    IDS_DRIVE_REMOVABLE         "Floppy disk"
    IDS_DRIVE_CDROM             "CD-ROM"
    IDS_DRIVE_LETTERS_EXCEEDED  "You cannot add any more drives.\n\nEach drive must have a letter, from A to Z, so you cannot have more than 26."
    IDS_SYSTEM_DRIVE_LABEL      "System drive"
    IDS_CONFIRM_DELETE_C        "Are you sure you want to delete drive C?\n\nMost Windows applications expect drive C to exist, and will die messily if it doesn't. If you proceed remember to recreate it!"
    IDS_COL_DRIVELETTER         "Letter"
    IDS_COL_DRIVEMAPPING        "Drive Mapping"
    IDS_NO_DRIVE_C              "You don't have a drive C. This is not so great.\n\nRemember to click 'Add' in the Drives tab to create one!\n"
END

STRINGTABLE
BEGIN
    IDS_ACCEL_FULL              "Full"
    IDS_ACCEL_STANDARD          "Standard"
    IDS_ACCEL_BASIC             "Basic"
    IDS_ACCEL_EMULATION         "Emulation"
    IDS_DRIVER_ALSA             "ALSA Driver"
    IDS_DRIVER_OSS              "OSS Driver"
    IDS_DRIVER_COREAUDIO        "CoreAudio Driver"
    IDS_OPEN_DRIVER_ERROR       "Couldn't open %s!"
    IDS_SOUNDDRIVERS            "Sound Drivers"
    IDS_DEVICES_WAVEOUT         "Wave Out Devices"
    IDS_DEVICES_WAVEIN          "Wave In Devices"
    IDS_DEVICES_MIDIOUT         "MIDI Out Devices"
    IDS_DEVICES_MIDIIN          "MIDI In Devices"
    IDS_DEVICES_AUX             "Aux Devices"
    IDS_DEVICES_MIXER           "Mixer Devices"
    IDS_UNAVAILABLE_DRIVER      "Found driver in registry that is not available!\n\nRemove '%s' from registry?"
    IDS_WARNING                 "Warning"
END

STRINGTABLE
BEGIN
    IDC_SYSPARAMS_BUTTON            "Controls Background"
    IDC_SYSPARAMS_BUTTON_TEXT       "Controls Text"
    IDC_SYSPARAMS_DESKTOP           "#msgctxt#display name#Desktop"
    IDC_SYSPARAMS_MENU              "Menu Background"
    IDC_SYSPARAMS_MENU_TEXT         "Menu Text"
    IDC_SYSPARAMS_SCROLLBAR         "Scrollbar"
    IDC_SYSPARAMS_SELECTION         "Selection Background"
    IDC_SYSPARAMS_SELECTION_TEXT    "Selection Text"
    IDC_SYSPARAMS_TOOLTIP           "ToolTip Background"
    IDC_SYSPARAMS_TOOLTIP_TEXT      "ToolTip Text"
    IDC_SYSPARAMS_WINDOW            "Window Background"
    IDC_SYSPARAMS_WINDOW_TEXT       "Window Text"
    IDC_SYSPARAMS_ACTIVE_TITLE      "Active Title Bar"
    IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Active Title Text"
    IDC_SYSPARAMS_INACTIVE_TITLE    "Inactive Title Bar"
    IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Inactive Title Text"
    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
    IDC_SYSPARAMS_APPWORKSPACE      "Application Workspace"
    IDC_SYSPARAMS_WINDOW_FRAME      "Window Frame"
    IDC_SYSPARAMS_ACTIVE_BORDER     "Active Border"
    IDC_SYSPARAMS_INACTIVE_BORDER   "Inactive Border"
    IDC_SYSPARAMS_BUTTON_SHADOW     "Controls Shadow"
    IDC_SYSPARAMS_GRAY_TEXT         "Gray Text"
    IDC_SYSPARAMS_BUTTON_HILIGHT    "Controls Highlight"
    IDC_SYSPARAMS_BUTTON_DARK_SHADOW "Controls Dark Shadow"
    IDC_SYSPARAMS_BUTTON_LIGHT      "Controls Light"
    IDC_SYSPARAMS_BUTTON_ALTERNATE  "Controls Alternate Background"
    IDC_SYSPARAMS_HOT_TRACKING      "Hot Tracked Item"
    IDC_SYSPARAMS_ACTIVE_TITLE_GRADIENT "Active Title Bar Gradient"
    IDC_SYSPARAMS_INACTIVE_TITLE_GRADIENT "Inactive Title Bar Gradient"
    IDC_SYSPARAMS_MENU_HILIGHT      "Menu Highlight"
    IDC_SYSPARAMS_MENUBAR           "Menu Bar"
END

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: winecfg.ico */
IDI_WINECFG ICON winecfg.ico

/* @makedep: logo.ico */
IDI_LOGO ICON logo.ico

/* @makedep: idb_checkbox.bmp */
IDB_CHECKBOX BITMAP idb_checkbox.bmp

/* @makedep: idw_testsound.wav */
IDW_TESTSOUND WAVE idw_testsound.wav
