/*
 * 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_EMAIL DIALOG 0, 0, 150, 65
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "No email supplied"
BEGIN
    CTEXT "Please supply an email address to enable developers to contact you about your report."
        IDC_STATIC, 10, 5, 130, 30
    EDITTEXT IDC_EMAIL, 10, 30, 130, 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_CLASSA, 0,   5,  15, 150, 10
    LTEXT   "Running:",          IDC_ST1,        10,  30, 140, 10
    CONTROL "PB1", IDC_PB1, PROGRESS_CLASSA, 0,   5,  40, 150, 10
    LTEXT   "Network transfer:", IDC_ST2,        10,  55, 140, 10
    CONTROL "PB2", IDC_PB2, PROGRESS_CLASSA, 0,   5,  65, 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, STATUSCLASSNAMEA, 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: winetest.ico */
IDI_WINE ICON "winetest.ico"
