ClassAct/AmigaE/ClickTabExample.e

160 lines
4.5 KiB
Plaintext

/* ClickTabExample.e - Ported to E by Eric Sauvageau. */
OPT PREPROCESS
MODULE 'tools/constructors', 'tools/boopsi'
MODULE 'exec/types','exec/memory','dos/dos','dos/dosextens','exec/lists',
'exec/nodes','intuition','graphics','intuition/intuition',
'intuition/gadgetclass','intuition/imageclass',
'intuition/intuitionbase','intuition/classusr',
'intuition/gadgetclass','intuition/cghooks','intuition/icclass',
'intuition/classes','intuition/sghooks','graphics/gfxbase',
'graphics/text','graphics/gfxmacros','utility/tagitem','utility/hooks'
MODULE 'clicktab','gadgets/clicktab','window','classes/window','layout',
'gadgets/layout', 'other/classact_macros'
DEF listitems:PTR TO mlh
CONST ID_CLICKTAB =1
PROC clickTabNodes(list:PTR TO lh, labels:PTR TO LONG)
DEF node=NIL, i=0
newlist(list)
WHILE labels[i]
IF (node := AllocClickTabNodeA([TNA_TEXT, labels[i],
TNA_NUMBER, i,
TNA_ENABLED, TRUE,
TNA_SPACING, 6,
TAG_DONE]))
AddTail(list,node)
ENDIF
INC i
ENDWHILE
ENDPROC
PROC freeClickTabNodes(list:PTR TO lh)
DEF node:PTR TO ln, nextnode:PTR TO ln
node:= list.head
WHILE (nextnode = node.succ)
FreeClickTabNode(node)
node := nextnode
ENDWHILE
END list -> Optional, the E cleanup code would do it for us anyway.
ENDPROC
PROC main()
DEF win=NIL:PTR TO window, tab_object=NIL:PTR TO object, win_object=NIL:PTR TO object
DEF wait, signal, result, done = FALSE, code, tmpres,tmpres2
DEF names:PTR TO LONG
names:=['Tab_1','Tab_2','Tab_3','Tab_4',NIL]
-> Open the classes
windowbase := OpenLibrary('window.class',0)
layoutbase := OpenLibrary('gadgets/layout.gadget',0)
clicktabbase := OpenLibrary('gadgets/clicktab.gadget',0)
IF (windowbase AND layoutbase AND clicktabbase)
clickTabNodes(NEW listitems, names)
/* Create the window object. */
win_object := WindowObject,
WA_SCREENTITLE, 'ClassAct Copyright 1995, Phantom Development LLC.',
WA_TITLE, 'ClassAct clicktab.gadget Example',
WA_SIZEGADGET, TRUE,
WA_LEFT, 40,
WA_TOP, 30,
WA_DEPTHGADGET, TRUE,
WA_DRAGBAR, TRUE,
WA_CLOSEGADGET, TRUE,
WA_ACTIVATE, TRUE,
WA_SMARTREFRESH, TRUE,
WINDOW_PARENTGROUP, VLayoutObject,
LAYOUT_SPACEOUTER, TRUE,
LAYOUT_DEFERLAYOUT, TRUE,
LAYOUT_ADDCHILD, tab_object := ClickTabObject,
GA_ID, ID_CLICKTAB,
CLICKTAB_LABELS, listitems,
CLICKTAB_CURRENT, 0,
End,
End,
End
-> Object creation sucessful?
IF win_object
-> Open the window.
IF (win := CA_OpenWindow(win_object))
-> Obtain the window wait signal mask.
GetAttr( WINDOW_SIGMASK, win_object, {signal})
-> Input Event Loop
WHILE done = FALSE
wait:= Wait(signal OR SIGBREAKF_CTRL_C)
IF (wait AND SIGBREAKF_CTRL_C)
done := TRUE
ELSE
WHILE (result := domethod(win_object, [WM_HANDLEINPUT,{code}])) <> WMHI_LASTMSG
tmpres := (result AND WMHI_CLASSMASK)
SELECT tmpres
CASE WMHI_CLOSEWINDOW
done := TRUE
CASE WMHI_GADGETUP
tmpres2 := (result AND WMHI_GADGETMASK)
SELECT tmpres2
CASE ID_CLICKTAB ; NOP
NOP
ENDSELECT
ENDSELECT
ENDWHILE
ENDIF
ENDWHILE
ENDIF
/* Disposing of the window object will
* also close the window if it is
* already opened and it will dispose of
* all objects attached to it.
*/
DisposeObject(win_object)
ENDIF
ENDIF
freeClickTabNodes(listitems)
/* Close the classes. */
IF clicktabbase THEN CloseLibrary(clicktabbase)
IF layoutbase THEN CloseLibrary(layoutbase)
IF windowbase THEN CloseLibrary(windowbase)
ENDPROC