/* Resources for the common dialog unit test suite.
 *
 * Copyright 2008 CodeWeavers, Aric Stewart
 *
 * 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"

TEMPLATE1 DIALOG LOADONCALL MOVEABLE DISCARDABLE 5, 43, 227, 215
STYLE WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg"
{
    LTEXT           "Path:",-1,28,4,36,8
    LTEXT           "Text1",-1,4,16,20,40
    LTEXT           "Selected:",-1,32,49,40,8
    EDITTEXT        55,74,47,200,12,ES_AUTOHSCROLL
    LTEXT           "Text2",-1,232,20,65,8
    LTEXT           "",-1,28,16,204,31
    EDITTEXT        56,65,2,200,12,ES_AUTOHSCROLL
}

/* Used by the resize file dialog tests.
 * Keep this template small or get failures
 * resizing on small desk tops.
 * This will work with 640x480 pixels
 */
TEMPLATE_SZ DIALOG LOADONCALL MOVEABLE DISCARDABLE 5, 43, 300, 40
STYLE WS_CHILD | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg"
{
    LTEXT           "Path:",-1,28,4,36,8
    LTEXT           "Text1",-1,4,16,20,40
    LTEXT           "Text2",-1,232,20,65,8
    LTEXT           "",-1,28,16,204,31
    EDITTEXT        56,65,2,200,12,ES_AUTOHSCROLL
}

/* note: the test program will modify coordinates and nr of controls in this template */
TEMPLATE_STC32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 11111, 0, 316, 76
STYLE WS_CHILD | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg"
{
        LTEXT   "",  1119, 22222, 0, 204, 76
        PUSHBUTTON "TEST", -1, 12345, 0, 20, 20
}
