home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 3
/
goldfish_volume_3.bin
/
files
/
dev
/
e
/
amigae
/
rkrmsrc
/
workbench
/
appicon.e
next >
Wrap
Text File
|
1995-03-26
|
3KB
|
80 lines
-> appicon.e -- Show use of an AppIcon
OPT OSVERSION=37
MODULE 'icon',
'wb',
'workbench/startup',
'workbench/workbench'
ENUM ERR_NONE, ERR_APPICON, ERR_DOBJ, ERR_LIB, ERR_PORT
RAISE ERR_APPICON IF AddAppIconA()=NIL,
ERR_DOBJ IF GetDefDiskObject()=NIL,
ERR_LIB IF OpenLibrary()=NIL,
ERR_PORT IF CreateMsgPort()=NIL
PROC main() HANDLE
DEF dobj=NIL:PTR TO diskobject, myport=NIL, appicon=NIL,
appmsg:PTR TO appmessage, dropcount=0, x
-> Get the the right version of the Icon Library, initialise iconbase
iconbase:=OpenLibrary('icon.library', 37)
-> Get the the right version of the Workbench Library
workbenchbase:=OpenLibrary('workbench.library', 37)
-> This is the easy way to get some icon imagery
-> Real applications should use custom imagery
dobj:=GetDefDiskObject(WBDISK)
-> The type must be set to NIL for a WBAPPICON
dobj.type:=NIL
-> The CreateMsgPort() function is in Exec version 37 and later only
myport:=CreateMsgPort()
-> Put the AppIcon up on the Workbench window
appicon:=AddAppIconA(0, 0, 'TestAppIcon', myport, NIL, dobj, NIL)
-> For the sake of this example, we allow the AppIcon to be activated
-> only five times.
WriteF('Drop files on the Workbench AppIcon\n')
WriteF('Example exits after 5 drops\n')
WHILE dropcount<5
-> Here's the main event loop where we wait for messages to show up
-> from the AppIcon
WaitPort(myport)
-> Might be more than one message at the port...
WHILE appmsg:=GetMsg(myport)
IF appmsg.numargs=0
-> If numargs is 0 the AppIcon was activated directly
WriteF('User activated the AppIcon.\n')
WriteF('A Help window for the user would be good here\n')
ELSEIF appmsg.numargs>0
-> If numargs is >0 the AppIcon was activated by having one or more
-> icons dropped on top of it
WriteF('User dropped \d icons on the AppIcon\n', appmsg.numargs)
FOR x:=0 TO appmsg.numargs-1
WriteF('#\d name="\s"\n', x+1, appmsg.arglist[x].name)
ENDFOR
ENDIF
-> Let Workbench know we're done with the message
ReplyMsg(appmsg)
ENDWHILE
INC dropcount
ENDWHILE
EXCEPT DO
IF appicon THEN RemoveAppIcon(appicon)
IF myport
-> Clear away any messages that arrived at the last moment
WHILE appmsg:=GetMsg(myport) DO ReplyMsg(appmsg)
DeleteMsgPort(myport)
ENDIF
IF dobj THEN FreeDiskObject(dobj)
IF workbenchbase THEN CloseLibrary(workbenchbase)
IF iconbase THEN CloseLibrary(iconbase)
SELECT exception
CASE ERR_APPICON; WriteF('Error: Could not attach AppIcon to Workbench\n')
CASE ERR_DOBJ; WriteF('Error: Could not get default icon\n')
CASE ERR_LIB; WriteF('Error: Could not open required library\n')
CASE ERR_PORT; WriteF('Error: Could not create port\n')
ENDSELECT
ENDPROC