File : terminal_interface-curses-mouse.ads
with System;
package Terminal_Interface.Curses.Mouse is
pragma Preelaborate (Terminal_Interface.Curses.Mouse);
type Event_Mask is private;
No_Events : constant Event_Mask;
All_Events : constant Event_Mask;
type Mouse_Button is (Left,
Middle,
Right,
Button4,
Control,
Shift,
Alt);
subtype Real_Buttons is Mouse_Button range Left .. Button4;
subtype Modifier_Keys is Mouse_Button range Control .. Alt;
type Button_State is (Released,
Pressed,
Clicked,
Double_Clicked,
Triple_Clicked);
type Button_States is array (Button_State) of Boolean;
pragma Pack (Button_States);
All_Clicks : constant Button_States := (Clicked .. Triple_Clicked => True,
others => False);
All_States : constant Button_States := (others => True);
type Mouse_Event is private;
function Has_Mouse return Boolean;
procedure Register_Reportable_Event
(Button : Mouse_Button;
State : Button_State;
Mask : in out Event_Mask);
pragma Inline (Register_Reportable_Event);
procedure Register_Reportable_Events
(Button : Mouse_Button;
State : Button_States;
Mask : in out Event_Mask);
function Start_Mouse (Mask : Event_Mask := All_Events)
return Event_Mask;
pragma Inline (Start_Mouse);
procedure End_Mouse (Mask : Event_Mask := No_Events);
pragma Inline (End_Mouse);
function Get_Mouse return Mouse_Event;
pragma Inline (Get_Mouse);
procedure Get_Event (Event : Mouse_Event;
Y : out Line_Position;
X : out Column_Position;
Button : out Mouse_Button;
State : out Button_State);
pragma Inline (Get_Event);
procedure Unget_Mouse (Event : Mouse_Event);
pragma Inline (Unget_Mouse);
function Enclosed_In_Window (Win : Window := Standard_Window;
Event : Mouse_Event) return Boolean;
pragma Inline (Enclosed_In_Window);
function Mouse_Interval (Msec : Natural := 200) return Natural;
pragma Inline (Mouse_Interval);
private
type Event_Mask is new Interfaces.C.unsigned_long;
type Mouse_Event is
record
Id : Integer range Integer (Interfaces.C.short'First) ..
Integer (Interfaces.C.short'Last);
X, Y, Z : Integer range Integer (Interfaces.C.int'First) ..
Integer (Interfaces.C.int'Last);
Bstate : Event_Mask;
end record;
pragma Convention (C, Mouse_Event);
for Mouse_Event use
record
Id at 0 range 0 .. 15;
X at 0 range 32 .. 63;
Y at 0 range 64 .. 95;
Z at 0 range 96 .. 127;
Bstate at 0 range 128 .. 191;
end record;
Generation_Bit_Order : constant System.Bit_Order := System.Low_Order_First;
BUTTON1_RELEASED : constant Event_Mask := 8#00000000001#;
BUTTON1_PRESSED : constant Event_Mask := 8#00000000002#;
BUTTON1_CLICKED : constant Event_Mask := 8#00000000004#;
BUTTON1_DOUBLE_CLICKED : constant Event_Mask := 8#00000000010#;
BUTTON1_TRIPLE_CLICKED : constant Event_Mask := 8#00000000020#;
BUTTON1_RESERVED_EVENT : constant Event_Mask := 8#00000000040#;
BUTTON2_RELEASED : constant Event_Mask := 8#00000000100#;
BUTTON2_PRESSED : constant Event_Mask := 8#00000000200#;
BUTTON2_CLICKED : constant Event_Mask := 8#00000000400#;
BUTTON2_DOUBLE_CLICKED : constant Event_Mask := 8#00000001000#;
BUTTON2_TRIPLE_CLICKED : constant Event_Mask := 8#00000002000#;
BUTTON2_RESERVED_EVENT : constant Event_Mask := 8#00000004000#;
BUTTON3_RELEASED : constant Event_Mask := 8#00000010000#;
BUTTON3_PRESSED : constant Event_Mask := 8#00000020000#;
BUTTON3_CLICKED : constant Event_Mask := 8#00000040000#;
BUTTON3_DOUBLE_CLICKED : constant Event_Mask := 8#00000100000#;
BUTTON3_TRIPLE_CLICKED : constant Event_Mask := 8#00000200000#;
BUTTON3_RESERVED_EVENT : constant Event_Mask := 8#00000400000#;
BUTTON4_RELEASED : constant Event_Mask := 8#00001000000#;
BUTTON4_PRESSED : constant Event_Mask := 8#00002000000#;
BUTTON4_CLICKED : constant Event_Mask := 8#00004000000#;
BUTTON4_DOUBLE_CLICKED : constant Event_Mask := 8#00010000000#;
BUTTON4_TRIPLE_CLICKED : constant Event_Mask := 8#00020000000#;
BUTTON4_RESERVED_EVENT : constant Event_Mask := 8#00040000000#;
BUTTON_CTRL : constant Event_Mask := 8#00100000000#;
BUTTON_SHIFT : constant Event_Mask := 8#00200000000#;
BUTTON_ALT : constant Event_Mask := 8#00400000000#;
REPORT_MOUSE_POSITION : constant Event_Mask := 8#01000000000#;
ALL_MOUSE_EVENTS : constant Event_Mask := 8#00777777777#;
BUTTON1_EVENTS : constant Event_Mask := 8#00000000077#;
BUTTON2_EVENTS : constant Event_Mask := 8#00000007700#;
BUTTON3_EVENTS : constant Event_Mask := 8#00000770000#;
BUTTON4_EVENTS : constant Event_Mask := 8#00077000000#;
No_Events : constant Event_Mask := 0;
All_Events : constant Event_Mask := ALL_MOUSE_EVENTS;
end Terminal_Interface.Curses.Mouse;