
/* getalt.c - Show off GetAlt kind and automatic ASL requester feature
 *
 * This is a GUIFront example GUI. To build an example, compile and link this
 * file with Generic.o (also supplied).
 * Everything prefixed with DEMO_ is exported to Generic.o.
 */

#include <libraries/guifront.h>
#include <libraries/asl.h>

/* First, some Gadget ID's */

enum
{
    GID_FONT,
    GID_GETFONT,
    GID_FILE,
    GID_GETFILE,
    GID_DIR,
    GID_GETDIR,
    GID_SCREENMODE,
    GID_GETSCREENMODE,
    GID_OTHER,
    GID_GETOTHER,
    GID_OK,
};

/* Some data and tag items we'll be needing later */

/* First, some general tags for the ASL requesters. These aren't strictly
 * required (the requesters will open without them), but a title-less
 * file requester isn't particulary user friendly.
 */

static const struct TagItem asltags[] =
{
	{ASL_OKText, "Click me!"},
	{ASL_Hail,   "Automatic ASL requester"},
	{TAG_DONE}
};

static const struct TagItem txtags[] =
{
	{GTTX_Border, TRUE},
	{TAG_DONE},
};

static const struct TagItem getfonttags[] =
{
	{ALT_Image, ALTI_GetFont},
	{ALT_AslRequester, TRUE},
	{ALT_AslTags, asltags},
	{TAG_DONE},
};

static const struct TagItem getfiletags[] =
{
	{ALT_Image, ALTI_GetFile},
	{ALT_AslRequester, TRUE},
	{ALT_AslTags, asltags},
	{TAG_DONE},
};

static const struct TagItem getdirtags[] =
{
	{ALT_Image, ALTI_GetDir},
	{ALT_AslRequester, TRUE},
	{ALT_AslTags, asltags},
	{TAG_DONE},
};

static const struct TagItem getscrmodetags[] =
{
	{ALT_Image, ALTI_GetScreenMode},
	{ALT_AslTags, asltags},
	{ALT_AslRequester, TRUE},
	{TAG_DONE},
};

static const struct TagItem getothertags[] =
{
	{ALT_Image, ALTI_GetMisc},
	{ALT_AslTags, asltags},
	{ALT_AslRequester, TRUE},
	{TAG_DONE},
};

/* Now, the GadgetSpec's we'll be needing for this GUI */

static GadgetSpec gadgetspecs[] =
{
    {TEXT_KIND,      25,0,{0,0,0,0, "File:", NULL, GID_FILE, PLACETEXT_LEFT}, txtags, GS_DefaultTags},
    {GETALT_KIND,    0,0,{0,0,0,0, NULL,    NULL, GID_GETFILE, PLACETEXT_IN}, getfiletags, GS_DefaultTags},
    {TEXT_KIND,      25,0,{0,0,0,0, "Font:", NULL, GID_FONT, PLACETEXT_LEFT}, txtags, GS_DefaultTags},
    {GETALT_KIND,    0,0,{0,0,0,0, NULL,    NULL, GID_GETFONT, PLACETEXT_IN}, getfonttags, GS_DefaultTags},
    {TEXT_KIND,      25,0,{0,0,0,0, "Dir:", NULL, GID_DIR, PLACETEXT_LEFT}, txtags, GS_DefaultTags},
    {GETALT_KIND,    0,0,{0,0,0,0, NULL,    NULL, GID_GETDIR, PLACETEXT_IN}, getdirtags, GS_DefaultTags},
    {TEXT_KIND,      25,0,{0,0,0,0, "Screenmode:", NULL, GID_SCREENMODE, PLACETEXT_LEFT}, txtags, GS_DefaultTags},
    {GETALT_KIND,    0,0,{0,0,0,0, NULL,    NULL, GID_GETSCREENMODE, PLACETEXT_IN}, getscrmodetags, GS_DefaultTags},
    {TEXT_KIND,      25,0,{0,0,0,0, "Other:", NULL, GID_OTHER, PLACETEXT_LEFT}, txtags, GS_DefaultTags},
    {GETALT_KIND,    0,0,{0,0,0,0, NULL,    NULL, GID_GETOTHER, PLACETEXT_IN}, getothertags, GS_DefaultTags},
    {BUTTON_KIND,    0,0,{0,0,0,0, " Ok ",  NULL, GID_OK, PLACETEXT_IN}, NULL, GS_DefaultTags | GS_BoldLabel},
};

/* Now, we group all of these GadgetSpecs into an array of pointers, so the
 * layout engine can locate gadgets merely by their Gadget IDs.
 */

GadgetSpec *DEMO_GadgetSpecList[] =
{
    &gadgetspecs[0], &gadgetspecs[1], &gadgetspecs[2], &gadgetspecs[2],
    &gadgetspecs[3], &gadgetspecs[4], &gadgetspecs[5], &gadgetspecs[6],
    &gadgetspecs[7], &gadgetspecs[8], &gadgetspecs[9], &gadgetspecs[10],
    NULL,
};

/* Finally, the layout tag list itself. This is where most of the work is
 * done. This list completely describes how the above gadgets are arranged
 * in groups in the GUI.
 */

ULONG DEMO_LayoutList[] =
{
    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,

    GUIL_VertGroup, 1,
        GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_LabelAlign,

        GUIL_FrameType, GUILFT_Recess,

        GUIL_HorizGroup, 0,
            GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
            GUIL_GadgetSpecID, GID_FILE,
            GUIL_GadgetSpecID, GID_GETFILE,
        TAG_DONE,

        GUIL_HorizGroup, 0,
            GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
            GUIL_GadgetSpecID, GID_DIR,
            GUIL_GadgetSpecID, GID_GETDIR,
        TAG_DONE,

        GUIL_HorizGroup, 0,
            GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
            GUIL_GadgetSpecID, GID_FONT,
            GUIL_GadgetSpecID, GID_GETFONT,
        TAG_DONE,

        GUIL_HorizGroup, 0,
            GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
            GUIL_GadgetSpecID, GID_SCREENMODE,
            GUIL_GadgetSpecID, GID_GETSCREENMODE,
        TAG_DONE,

        GUIL_HorizGroup, 0,
            GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
            GUIL_GadgetSpecID, GID_OTHER,
            GUIL_GadgetSpecID, GID_GETOTHER,
        TAG_DONE,
    TAG_DONE,

    GUIL_HorizGroup, 1,
        GUIL_Flags, GUILF_EqualSize,
        GUIL_GadgetSpecID, GID_OK,
    TAG_DONE,

    TAG_DONE,
};

/* Obligatory version tag */

static const char ver[] = "$VER: GetAlt 1.0 " __AMIGADATE__;

/* Now, some globals used by Generic.o during the call to GF_CreateGUIA() */

int DEMO_InitialOrientation = GUIL_VertGroup;

STRPTR DEMO_WindowTitle = "GetAlt Demo GUI";
STRPTR DEMO_AppID       = "GetAltDemo";

STRPTR DEMO_Version     = "1.0",
       DEMO_LongDesc    = "Demo program - GetAlt and Automatic ASL Requesters",
       DEMO_Author      = "Michael Berg",
       DEMO_Date        = __AMIGADATE__;

BOOL   DEMO_Backfill    = TRUE;
