limited with Game_Views;
private with Ada.Containers.Doubly_Linked_Lists;
package Widgets.Menubars is
type Menubar is new Widget and Visibility_Listener with private;
type A_Menubar is access all Menubar'Class;
function Create_Menubar( view : not null access Game_Views.Game_View'Class;
id : String ) return A_Menubar;
pragma Precondition( id'Length > 0 );
pragma Postcondition( Create_Menubar'Result /= null );
procedure Add( this : access Menubar; pulldown : in out A_Widget );
pragma Precondition( pulldown /= null );
pragma Postcondition( pulldown = null );
procedure Pulldown_Hidden( this : access Menubar; pulldown : not null A_Widget );
private
type Menu is
record
pulldown : A_Widget := null;
text : Unbounded_String;
x : Integer := 0;
width : Integer := 0;
hover : Boolean := False;
active : Boolean := False;
end record;
type A_Menu is access all Menu;
procedure Delete( m : in out A_Menu );
pragma Postcondition( m = null );
package Menu_Lists is new Ada.Containers.Doubly_Linked_Lists( A_Menu, "=" );
use Menu_Lists;
type Menubar is new Widget and Visibility_Listener with
record
menus : Menu_Lists.List;
dragging : Boolean := False;
end record;
procedure Construct( this : access Menubar;
view : not null access Game_Views.Game_View'Class;
id : String );
pragma Precondition( id'Length > 0 );
procedure Delete( this : in out Menubar );
procedure Draw_Content( this : access Menubar; dc : Drawing_Context );
procedure Handle_Action( this : access Menubar;
action : A_Visibility_Action );
procedure Handle_Exit( this : access Menubar );
procedure Handle_Mouse_Move( this : access Menubar;
evt : not null A_Mouse_Event );
procedure Handle_Mouse_Press( this : access Menubar;
evt : not null A_Mouse_Button_Event );
procedure Handle_Mouse_Release( this : access Menubar;
evt : not null A_Mouse_Button_Event );
procedure Set_Parent( this : access Menubar; parent : A_Widget );
end Widgets.Menubars;