/* AmigaE Intuition IDCMP ghh 2024 */
/* Intuition IDCMP tlacitka mysi + kolecko + dobleclick */
MODULE 'intuition/intuition'
MODULE 'devices/inputevent'
MODULE 'utility/tagitem'
OBJECT casobj /* struktura pro casove udaje k testu dvojkliku */
leftsec
leftmic
midsec
midmic
rightsec
rightmic
ENDOBJECT
PROC main()
DEF win:PTR TO window
DEF class
DEF imess:PTR TO intuimessage
DEF quit
DEF cas
win:= OpenWindowTagList(NIL, /* taglist je v hranatych zavorkach */
[WA_Left, 10, /* pozice X */
WA_Top, 14, /* pozice Y */
WA_Width, 320, /* sirka */
WA_Height, 160, /* vyska */
WA_CloseGadget, TRUE, /* gadget zavreni okna */
WA_DragBar, TRUE, /* okno se da uchopit a pretahnout */
WA_DepthGadget, TRUE, /* gadget prepinani oken vpred-vzad */
WA_SizeBBottom, TRUE, /* dolni lista okna */
WA_SizeGadget, TRUE, /* gadget zmeny velikosti */
WA_RMBTrap, TRUE, /* umozni hlasit zmacknuti praveho tlacitka mysi */
WA_IDCMP, IDCMP_CLOSEWINDOW OR /* okno lze zavrit gadgetem (Intuition IDCMP) */
IDCMP_MOUSEBUTTONS OR /* Intuition bude hlasit akce s mysi */
IDCMP_RAWKEY, /* Intuition bude hlasit akce s klavesnici */
WA_Title, 'IDCMP Doubleclick', /* titulek na liste okna */
WA_MinWidth, 100, /* minimalni sirka okna */
WA_MinHeight, 50, /* minimalni vyska okna */
WA_MaxWidth, -1, /* maximalni sirka -1 = neomezene */
WA_MaxHeight, -1, /* maximalni vyska -1 = neomezene */
WA_Activate, TRUE, /* okno bude aktivni pri spusteni */
TAG_DONE, 0]) /* konec taglistu */
cas:= [0, 0, 0, 0, 0, 0]:casobj /* nastavit pocatecni hodnoty ve strukture casobj */
quit:= FALSE
WHILE quit = FALSE /* smycka bezi dokud neobdrzi pokyn (quit:= TRUE) */
class:= NIL
IF imess:= GetMsg(win.userport) /* prijima zpravu z msg portu okna */
class:= imess.class /* imess.class - podle toho co je nastaveno v WA_IDCMP */
SELECT class /* podle obsahu zpravy se provede akce */
CASE IDCMP_RAWKEY /* akce s klavesnici (a koleckem jako inputevent) */
kolecko(imess) /* funkce co obsluhuje hlaseni kolecka */
CASE IDCMP_MOUSEBUTTONS /* zprava obsahuje akci s mysi */
tlacitka(imess,cas) /* funkce co obsluhuje hlaseni tlacitek */
CASE IDCMP_CLOSEWINDOW /* pokud zprava obsahuje pokyn k zavreni okna */
quit:= TRUE /* tak prerusit smycku */
ENDSELECT
ReplyMsg(imess) /* odesle odpoved na svuj port */
ELSE
WaitPort(win.userport) /* ceka na zpravu z msg portu okna */
ENDIF
ENDWHILE /* konec smycky */
CloseWindow(win) /* zavre okno az se prerusi smycka */
ENDPROC
PROC kolecko(imess:PTR TO intuimessage)
DEF code
code:= imess.code /* kod akce */
SELECT code /* podle kodu se provede akce */
CASE NM_WHEEL_UP /* kolecko roluje nahoru */
WriteF('Kolecko nahoru\n')
CASE NM_WHEEL_DOWN /* kolecko roluje dolu */
WriteF('Kolecko dolu\n')
ENDSELECT
ENDPROC
PROC tlacitka(imess:PTR TO intuimessage, cas:PTR TO casobj)
DEF code
code:= imess.code /* kod akce */
SELECT code /* podle kodu se provede akce */
CASE SELECTDOWN /* leve tlacitko bylo zmacknuto */
WriteF('Leve tlacitko zmacknuto\n')
/* porovna rozdil mezi casem dvojklku */
IF DoubleClick(cas.leftsec, cas.leftmic, imess.seconds, imess.micros)
WriteF('Dvojklik\n')
ELSE
cas.rightsec:= 0
cas.rightmic:= 0
cas.leftsec:= imess.seconds
cas.leftmic:= imess.micros
ENDIF
CASE SELECTUP /* leve tlacitko bylo uvolneno */
WriteF('Leve tlacitko uvolneno\n')
CASE MENUDOWN /* prave tlacitko bylo zmacknuto */
WriteF('Prave tlacitko zmacknuto\n')
IF DoubleClick(cas.rightsec, cas.rightmic, imess.seconds, imess.micros)
WriteF('Dvojklik\n')
ELSE
cas.leftsec:= 0
cas.leftmic:= 0
cas.rightsec:= imess.seconds
cas.rightmic:= imess.micros
ENDIF
CASE MENUUP /* prave tlacitko bylo uvolneno */
WriteF('Prave tlacitko uvolneno\n')
CASE MIDDLEDOWN /* prostredni tlacitko bylo zmacknuto */
WriteF('Prostredni tlacitko zmacknuto\n')
IF DoubleClick(cas.midsec, cas.midmic, imess.seconds, imess.micros)
WriteF('Dvojklik\n')
ELSE
cas.midsec:= 0
cas.midmic:= 0
cas.midsec:= imess.seconds
cas.midmic:= imess.micros
ENDIF
CASE MIDDLEUP /* prostredni tlacitko bylo uvolneno */
WriteF('Prostredni tlacitko uvolneno\n')
ENDSELECT
ENDPROC
|