FUNCTION identifyclick, event widget_control, event.id, get_uvalue=uval, /no_copy thisEvent = TAG_NAMES(event, /Structure) if thisEvent EQ 'WIDGET_TIMER' then press = 0 ELSE press = event.press ; ; d/0/>1 -------->t/1/0--------->**d/2/0** long click ; -------->d/1/0--------->**t/2/0** click normal ; --------->**d/2/>1**-------->d/3/0----->t/0/0 double click ; -------->t/3/0----->d/0/0 double click type = 'inutile' case 1 OF ; d/0/0 1er remonte thisEvent EQ 'WIDGET_DRAW' AND uval.click EQ 0 AND press EQ 0: ; d/0/>1 1er appuie de la serie thisEvent EQ 'WIDGET_DRAW' AND uval.click EQ 0 AND press ge 1:BEGIN uval.x = [event.x, 0] uval.y = [event.y, 0] uval.press = press uval.click = 1 widget_control, event.id, timer = .3 END ; d/1/0 1er remonte thisEvent EQ 'WIDGET_DRAW' AND uval.click EQ 1 AND press EQ 0:uval.click = 2 ; d/2/0 fin long click thisEvent EQ 'WIDGET_DRAW' AND uval.click EQ 2 AND press EQ 0:BEGIN type = 'long' uval.x = [uval.x[0],event.x] & uval.x = uval.x[sort(uval.x)] uval.y = [uval.y[0],event.y] & uval.y = uval.y[sort(uval.y)] uval.click = 0 uval.press = event.release END ; d/2/>1 thisEvent EQ 'WIDGET_DRAW' AND uval.click EQ 2 AND press ge 1:BEGIN type = 'double' uval.press = press uval.click = 3 END ; d/3/0 remonte et fin de double click thisEvent EQ 'WIDGET_DRAW' AND uval.click EQ 3 AND press EQ 0:uval.click = 0 ; t/0/0 fin de double click thisEvent EQ 'WIDGET_TIMER' AND uval.click EQ 0 AND press EQ 0: ; t/1/0 long click thisEvent EQ 'WIDGET_TIMER' AND uval.click EQ 1 AND press EQ 0:uval.click = 2 ; t/2/0 click normal thisEvent EQ 'WIDGET_TIMER' AND uval.click EQ 2 AND press EQ 0:BEGIN type = 'single' press = uval.press uval.click = 0 END ; t/3/0 fin de double click thisEvent EQ 'WIDGET_TIMER' AND uval.click EQ 3 AND press EQ 0:uval.click = 0 ; cas normalement impossible: ELSE:BEGIN print, thisEvent, uval.click, press print, 'Probleme, cas normalement impossible!' END endcase widget_control, event.id, set_uvalue=uval, /no_copy return, {type:type} end