160 lines
4.5 KiB
Plaintext
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
|
|
|