/*
 * Winetest resources
 *
 * Copyright 2004 Ferenc Wagner
 *
 * 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 <windef.h>
#include <winuser.h>
#include <commctrl.h>

#include "resource.h"

IDD_TAG DIALOG 0, 0, 150, 65
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "No tag supplied"
BEGIN
    CTEXT "Please supply a tag for your report.  You can use letters, digits, dashes and periods."
        IDC_STATIC, 10, 5, 130, 30
    EDITTEXT IDC_TAG, 35, 30, 80, 10, ES_AUTOHSCROLL
    DEFPUSHBUTTON "Start", IDOK, 25, 45, 40, 14
    PUSHBUTTON    "Abort", IDABORT, 85, 45, 40, 14
END

IDD_STATUS DIALOG 0, 0, 160, 150
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "Wine Test Shell"
BEGIN
    LTEXT   "Extracting:",       IDC_ST0,        10,   5, 140, 10
    CONTROL "PB0", IDC_PB0, PROGRESS_CLASS, 0,    5,  15, 150, 10
    LTEXT   "Running:",          IDC_ST1,        10,  30, 140, 10
    CONTROL "PB1", IDC_PB1, PROGRESS_CLASS, 0,    5,  40, 150, 15
    LTEXT   "Network transfer:", IDC_ST2,        10,  60, 140, 10
    CONTROL "PB2", IDC_PB2, PROGRESS_CLASS, 0,    5,  70, 150, 10
                                               
    LTEXT   "Tag:",               IDC_STATIC,    10,  89, 100, 10
    EDITTEXT                      IDC_TAG,       25,  88, 125, 10,
             ES_READONLY
    LTEXT   "Working directory:", IDC_STATIC,    10, 100, 100, 10
    EDITTEXT                      IDC_DIR,       71,  99,  79, 10,
             ES_READONLY | ES_AUTOHSCROLL
    LTEXT   "Output file:",       IDC_STATIC,    10, 111, 100, 10
    EDITTEXT                      IDC_OUT,       46, 110, 104, 10,
             ES_READONLY | ES_AUTOHSCROLL

    DEFPUSHBUTTON "About", IDHELP,               20, 123,  30, 14
    PUSHBUTTON    "Edit",  IDCANCEL,             65, 123,  30, 14,
                   WS_DISABLED
    PUSHBUTTON    "Stop",  IDABORT,             110, 123,  30, 14

    CONTROL "Created", IDC_SB, STATUSCLASSNAME, 0, 0,0,0,0
END

IDD_ABOUT DIALOG 0, 0, 150, 60
STYLE WS_POPUP
CAPTION "About Wine Test Shell"
BEGIN
    CTEXT "This program extracts and runs a series of tests which check Wine's conformance to the Windows API.",
        IDC_STATIC, 10, 5, 130, 30
    DEFPUSHBUTTON "Close", IDCANCEL, 55, 40, 40, 14
END

/* @makedep: wine.ico */
IDI_WINE ICON "wine.ico"

/* list of tests (automatically generated by make_makefiles) */

advapi32_test.exe TESTRES "advapi32_test.exe"
advpack_test.exe TESTRES "advpack_test.exe"
browseui_test.exe TESTRES "browseui_test.exe"
cabinet_test.exe TESTRES "cabinet_test.exe"
comcat_test.exe TESTRES "comcat_test.exe"
comctl32_test.exe TESTRES "comctl32_test.exe"
comdlg32_test.exe TESTRES "comdlg32_test.exe"
credui_test.exe TESTRES "credui_test.exe"
crypt32_test.exe TESTRES "crypt32_test.exe"
cryptnet_test.exe TESTRES "cryptnet_test.exe"
d3d8_test.exe TESTRES "d3d8_test.exe"
d3d9_test.exe TESTRES "d3d9_test.exe"
d3drm_test.exe TESTRES "d3drm_test.exe"
d3dx8_test.exe TESTRES "d3dx8_test.exe"
ddraw_test.exe TESTRES "ddraw_test.exe"
dinput_test.exe TESTRES "dinput_test.exe"
dnsapi_test.exe TESTRES "dnsapi_test.exe"
dplayx_test.exe TESTRES "dplayx_test.exe"
dsound_test.exe TESTRES "dsound_test.exe"
gdi32_test.exe TESTRES "gdi32_test.exe"
gdiplus_test.exe TESTRES "gdiplus_test.exe"
hlink_test.exe TESTRES "hlink_test.exe"
imm32_test.exe TESTRES "imm32_test.exe"
inetcomm_test.exe TESTRES "inetcomm_test.exe"
infosoft_test.exe TESTRES "infosoft_test.exe"
iphlpapi_test.exe TESTRES "iphlpapi_test.exe"
itss_test.exe TESTRES "itss_test.exe"
kernel32_test.exe TESTRES "kernel32_test.exe"
localspl_test.exe TESTRES "localspl_test.exe"
localui_test.exe TESTRES "localui_test.exe"
lz32_test.exe TESTRES "lz32_test.exe"
mapi32_test.exe TESTRES "mapi32_test.exe"
mlang_test.exe TESTRES "mlang_test.exe"
msacm32_test.exe TESTRES "msacm32_test.exe"
mscms_test.exe TESTRES "mscms_test.exe"
mshtml_test.exe TESTRES "mshtml_test.exe"
msi_test.exe TESTRES "msi_test.exe"
msvcrt_test.exe TESTRES "msvcrt_test.exe"
msvcrtd_test.exe TESTRES "msvcrtd_test.exe"
msxml3_test.exe TESTRES "msxml3_test.exe"
netapi32_test.exe TESTRES "netapi32_test.exe"
ntdll_test.exe TESTRES "ntdll_test.exe"
ntdsapi_test.exe TESTRES "ntdsapi_test.exe"
ntprint_test.exe TESTRES "ntprint_test.exe"
odbccp32_test.exe TESTRES "odbccp32_test.exe"
ole32_test.exe TESTRES "ole32_test.exe"
oleaut32_test.exe TESTRES "oleaut32_test.exe"
opengl32_test.exe TESTRES "opengl32_test.exe"
pdh_test.exe TESTRES "pdh_test.exe"
psapi_test.exe TESTRES "psapi_test.exe"
qedit_test.exe TESTRES "qedit_test.exe"
qmgr_test.exe TESTRES "qmgr_test.exe"
quartz_test.exe TESTRES "quartz_test.exe"
riched20_test.exe TESTRES "riched20_test.exe"
riched32_test.exe TESTRES "riched32_test.exe"
rpcrt4_test.exe TESTRES "rpcrt4_test.exe"
rsabase_test.exe TESTRES "rsabase_test.exe"
rsaenh_test.exe TESTRES "rsaenh_test.exe"
schannel_test.exe TESTRES "schannel_test.exe"
secur32_test.exe TESTRES "secur32_test.exe"
serialui_test.exe TESTRES "serialui_test.exe"
setupapi_test.exe TESTRES "setupapi_test.exe"
shdocvw_test.exe TESTRES "shdocvw_test.exe"
shell32_test.exe TESTRES "shell32_test.exe"
shlwapi_test.exe TESTRES "shlwapi_test.exe"
snmpapi_test.exe TESTRES "snmpapi_test.exe"
spoolss_test.exe TESTRES "spoolss_test.exe"
urlmon_test.exe TESTRES "urlmon_test.exe"
user32_test.exe TESTRES "user32_test.exe"
usp10_test.exe TESTRES "usp10_test.exe"
uxtheme_test.exe TESTRES "uxtheme_test.exe"
version_test.exe TESTRES "version_test.exe"
wininet_test.exe TESTRES "wininet_test.exe"
winmm_test.exe TESTRES "winmm_test.exe"
winspool.drv_test.exe TESTRES "winspool.drv_test.exe"
wintrust_test.exe TESTRES "wintrust_test.exe"
ws2_32_test.exe TESTRES "ws2_32_test.exe"
