/*
 * 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_CLASS, 0,    5,  15, 150, 10
    LTEXT   "Running:",          IDC_ST1,        10,  30, 140, 10
    CONTROL "PB1", IDC_PB1, PROGRESS_CLASS, 0,    5,  40, 150, 10
    LTEXT   "Network transfer:", IDC_ST2,        10,  55, 140, 10
    CONTROL "PB2", IDC_PB2, PROGRESS_CLASS, 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, 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: winetest.ico */
IDI_WINE ICON "winetest.ico"
