1. limited with Game_Views; 
  2.  
  3. private with Ada.Containers.Doubly_Linked_Lists; 
  4.  
  5. package Widgets.Menubars is 
  6.  
  7.     type Menubar is new Widget and Visibility_Listener with private; 
  8.     type A_Menubar is access all Menubar'Class; 
  9.  
  10.     function Create_Menubar( view : not null access Game_Views.Game_View'Class; 
  11.                              id   : String ) return A_Menubar; 
  12.     pragma Precondition( id'Length > 0 ); 
  13.     pragma Postcondition( Create_Menubar'Result /= null ); 
  14.  
  15.     -- Adds a pulldown menu to the menu bar. 
  16.     procedure Add( this : access Menubar; pulldown : in out A_Widget ); 
  17.     pragma Precondition( pulldown /= null ); 
  18.     pragma Postcondition( pulldown = null ); 
  19.  
  20.     -- Notifies the menu bar that a pulldown menu has been hidden. This is 
  21.     -- intended to be called by a Pulldown_Menu when it becomes invisible. 
  22.     procedure Pulldown_Hidden( this : access Menubar; pulldown : not null A_Widget ); 
  23.  
  24. private 
  25.  
  26.     type Menu is 
  27.         record 
  28.             pulldown : A_Widget := null; 
  29.             text     : Unbounded_String; 
  30.             x        : Integer := 0; 
  31.             width    : Integer := 0; 
  32.             hover    : Boolean := False; 
  33.             active   : Boolean := False; 
  34.         end record; 
  35.     type A_Menu is access all Menu; 
  36.  
  37.     procedure Delete( m : in out A_Menu ); 
  38.     pragma Postcondition( m = null ); 
  39.  
  40.     package Menu_Lists is new Ada.Containers.Doubly_Linked_Lists( A_Menu, "=" ); 
  41.     use Menu_Lists; 
  42.  
  43.     ---------------------------------------------------------------------------- 
  44.  
  45.     type Menubar is new Widget and Visibility_Listener with 
  46.         record 
  47.             menus    : Menu_Lists.List; 
  48.             dragging : Boolean := False; 
  49.         end record; 
  50.  
  51.     procedure Construct( this : access Menubar; 
  52.                          view : not null access Game_Views.Game_View'Class; 
  53.                          id   : String ); 
  54.     pragma Precondition( id'Length > 0 ); 
  55.  
  56.     procedure Delete( this : in out Menubar ); 
  57.  
  58.     procedure Draw_Content( this : access Menubar; dc : Drawing_Context ); 
  59.  
  60.     procedure Handle_Action( this   : access Menubar; 
  61.                              action : A_Visibility_Action ); 
  62.  
  63.     procedure Handle_Exit( this : access Menubar ); 
  64.  
  65.     procedure Handle_Mouse_Move( this : access Menubar; 
  66.                                  evt  : not null A_Mouse_Event ); 
  67.  
  68.     procedure Handle_Mouse_Press( this : access Menubar; 
  69.                                   evt  : not null A_Mouse_Button_Event ); 
  70.  
  71.     procedure Handle_Mouse_Release( this : access Menubar; 
  72.                                     evt  : not null A_Mouse_Button_Event ); 
  73.  
  74.     procedure Set_Parent( this : access Menubar; parent : A_Widget ); 
  75.  
  76. end Widgets.Menubars;