/*
**  A demo of triton.library
**  Shows some of the gadgets in triton.
**
**  This demo was translated from GadgetDemo.rexx
**  in the tritonrexx arcive.
**
**  Date: 30-Oct-95     Nils Sjoholm
**
**
*/

#include <libraries/triton.h>
#include <funcs/triton_funcs.h>
#include <funcs/utility_funcs.h>
#include <funcs/exec_funcs.h>
#include <ace/acedef.h>

LIBRARY "exec.library"
LIBRARY "utility.library"
LIBRARY "intuition.library"
LIBRARY "triton.library"

#define CYCLEITEM 3
#define MXITEM 6
#define LISTITEM 7

#define ButtonGadID      1
#define CheckGadID       2
#define ScrollGadID      3
#define ScrollGadTextID  30
#define SlidGadID        4
#define SlidGadTextID    40
#define CycleGadID       5
#define CycleGadTextID   50
#define StringGadID      6
#define EntryGadID       60
#define PassGadID        7
#define MxGadID          8
#define MxGadTextID      80
#define ListGadID        9

DIM STRING theItem(CYCLEITEM)
DIM ADDRESS cycleStrings(CYCLEITEM)

DIM STRING mxItems(MXITEM)
DIM ADDRESS mxStrings(MXITEM)

DIM STRING listitems(LISTITEM)

DECLARE STRUCT TR_Message *trmsg
DECLARE STRUCT TR_App     *app
DECLARE STRUCT TR_Project *myproject
DECLARE STRUCT TagItem *tag, *tritontags, *apptags
DECLARE STRUCT _List      mylist
DECLARE STRUCT Node       theNode

DECLARE FUNCTION NewList(ADDRESS thelist) EXTERNAL

LONGINT slowcount
LONGINT done
LONGINT class
LONGINT id
LONGINT nummer
LONGINT dummy

done = FALSE
   {* Create array of items to be displayed in cycle gadget *}
    FOR i=0 TO CYCLEITEM-1
      READ theItem(i)
      cycleStrings(i) = @theItem(i)
    NEXT
    cycleStrings(CYCLEITEM) = NULL
    DATA "Hello","Moin","Tach"

     FOR i=0 TO MXITEM-1
      READ mxItems(i)
      mxStrings(i) = @mxItems(i)
    NEXT
    mxStrings(MXITEM) = NULL
    DATA "Amiga 500","Amiga 600","Amiga 1200","Amiga 2000","Amiga 3000","Amiga 4000"
                                  
    NewList(myList)
    FOR i=0 TO LISTITEM-1
      theNode = ALLOC(SIZEOF(Node))
      READ listitems(i)
      theNode->ln_Name = @listitems(i)
      AddTail(myList,theNode)
    NEXT
    DATA "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"
  */

SetupApp(apptags)
IF apptags <> NULL THEN
    tag = apptags
    SetAppName("Gadgetdemo for ACE Basic")
    SetAppLongName("Test of gadgets (Triton gadgets) for ACE Basic")
    SetAppInfo("Just a test")
    SetAppVersion("0.01")
    SetAppRelease("1")
    SetAppDate(__DATE__)
    SetAppEnd
END IF
                       
ProjectStart(tritontags,500)
IF tritontags <> NULL THEN
    tag = tritontags                  
    WindowID(1)
    WindowPosition(TRWP_CENTERDISPLAY)
    WindowTitle("Gadgets")
       HorizGroupAC
          Space
          VertGroupA
             Space
             NamedSeparator("Gadget deactivate")
             Space
             Button("_Button",ButtonGadID)
             Space
             HorizGroupSC
                Space
                HorizGroup
                   TextID("_Gadget activ?",CheckGadID)
                   Space
                   CheckBoxCLEFT(CheckGadID)
                EndGroup
                Space
             EndGroup
             SpaceB
             NamedSeparator("Pick value")
             Space
             LineArray
                BeginLine
                   TextID("Sc_roller",ScrollGadID)
                   SetTag(TRAT_Flags,TROF_RIGHTALIGN)
                   Space
                   SetTag(TROB_Scroller,TROF_HORIZ)
                   SetTag(TRSC_Total,40)
                   SetTag(TRSC_Visible,10)
                   SetTag(TRAT_Value,5)
                   SetTag(TRAT_ID,ScrollGadID)
                   Space
                   ClippedTextBoxMW("5",ScrollGadTextID,2)
                EndLine
                Space
                BeginLine
                   TextID("S_lider",SlidGadID)
                   SetTag(TRAT_Flags,TROF_RIGHTALIGN)
                   Space
                   SliderGadget(1,50,25,SlidGadID)
                   Space
                   ClippedTextBoxMW("25",SlidGadTextID,2)
                EndLine
                Space
                BeginLine
                   TextID("C_ycle",CycleGadID)
                   SetTag(TRAT_Flags,TROF_RIGHTALIGN)
                   Space
                   CycleGadget(@cycleStrings,0,CycleGadID)
                   Space
                   ClippedTextBoxMW(CSTR(cycleStrings(0)),CycleGadTextID,5)
                EndLine
             EndArray
             SpaceB
              NamedSeparator("Input some Text")
             Space
             LineArray
                BeginLine
                   TextID("_String",StringGadID)
                   SetTag(TRAT_Flags,TROF_RIGHTALIGN)
                   Space
                   StringGadget("Please change",StringGadID)
                   GetEntryButton(EntryGadID)
                EndLine
                Space
                BeginLine
                   TextID("_Password",PassGadID)
                   SetTag(TRAT_Flags,TROF_RIGHTALIGN)
                   Space
                   PasswordGadget("",PassGadID)
                EndLine
             EndArray
             Space
          EndGroup
          Space
          VertSeparator
          Space
          VertGroupAC
             Space
             NamedSeparatorI("C_hoose",MxGadID)
             Space
             MXGadget(@mxStrings,4,MxGadID)
             Space
             ClippedTextBox(CSTR(mxStrings(4)),MxGadTextID)
             SpaceB
             NamedSeparatorI("D_oubleclick!",ListGadID)
             Space
             ListSS(myList,ListGadID,0,0)
          EndGroup
          Space
       EndGroup
    EndProject
END IF


app = TR_CreateApp(apptags)
IF app <> NULL THEN
    FreeTagItems(apptags)
    myproject = TR_OpenProject(app,tritontags)
    IF myproject <> NULL THEN
        FreeTagItems(tritontags)
        done = FALSE
        WHILE NOT done
            TR_Wait(app,NULL)
            REPEAT
                trmsg = TR_GetMsg(app)
                IF (trmsg->trm_Project = myproject) THEN
                    IF trmsg->trm_Class = TRMS_NEWVALUE THEN
                        id = trmsg->trm_ID
                        CASE
                           id = ScrollGadID : CALL TR_SetAttribute(myproject,ScrollGadTextID,TRAT_Text,MID$(STR$(trmsg->trm_Data),2))
                           id = SlidGadID : CALL TR_SetAttribute(myproject,SlidGadTextID,TRAT_Text,MID$(STR$(trmsg->trm_Data),2))
                           id = CycleGadID : nummer = trmsg->trm_Data : CALL TR_SetAttribute(myproject,CycleGadTextID,TRAT_Text,SADD(CSTR(cycleStrings(nummer))))
                           id = MxGadID : nummer = trmsg->trm_Data : CALL TR_setAttribute(myproject,MxGadTextID,TRAT_Text,SADD(CSTR(mxStrings(nummer))))
                        END CASE
                        IF trmsg->trm_ID = CheckGadID THEN
                            IF trmsg->trm_Data = 1 THEN
                                CALL TR_SetAttribute(myproject,ButtonGadID,TRAT_Disabled,0)
                            ELSE
                                CALL TR_SetAttribute(myproject,ButtonGadID,TRAT_Disabled,1)
                            END IF
                        END IF
                    END IF
                    IF trmsg->trm_Class = TRMS_CLOSEWINDOW THEN
                        CALL TR_LockProject(myproject)
                        dummy = TR_EasyRequest(app, "%3Sure you want to quit?","Yes|No",NULL)
                        CALL TR_UnlockProject(myproject)
                        IF dummy = 1 THEN done = TRUE
                    END IF
                    IF trmsg->trm_Class = TRMS_ACTION THEN
                        id = trmsg->trm_ID
                        CASE
                           id = ButtonGadID : CALL TR_LockProject(myproject) \
                                  : CALL TR_EasyRequest(app,"You clicked BUTTON"+str$(id),"_Aha",NULL) \
                                  : CALL TR_UnlockProject(myproject)
                           id = EntryGadID  : dummy = TR_GetAttribute(myproject,6,TROB_String) \
                                   : CALL TR_LockProject(myproject) \
                                   : CALL TR_EasyRequest(app,"Inhalt in stringgadet" \
                                     + CHR$(10) + CSTR(dummy),"_Aha",NULL) \
                                   : CALL TR_UnlockProject(myproject)
                        END CASE
                    END IF
                END IF
                TR_ReplyMsg(trmsg)
            UNTIL done OR trmsg = NULL
        WEND
    CALL TR_CloseProject(myproject)
    END IF
CALL TR_DeleteApp(app)
END IF
LIBRARY CLOSE
