1. package Widgets.Scrollbars is 
  2.  
  3.     type Scrollbar is abstract new Widget and Resize_Listener with private; 
  4.  
  5.     procedure Calculate_Button( this : access Scrollbar; min, max : out Integer ) is abstract; 
  6.  
  7.     procedure Set_Client( this : not null access Scrollbar'Class; client : A_Widget ); 
  8.  
  9.     ---------------------------------------------------------------------------- 
  10.  
  11.     type H_Scrollbar is new Scrollbar with private; 
  12.     type A_H_Scrollbar is access all H_Scrollbar'Class; 
  13.  
  14.     function Create_H_Scrollbar( view : not null access Game_Views.Game_View'Class; 
  15.                                  id   : String ) return A_H_Scrollbar; 
  16.     pragma Precondition( id'Length > 0 ); 
  17.     pragma Postcondition( Create_H_Scrollbar'Result /= null ); 
  18.  
  19.     ---------------------------------------------------------------------------- 
  20.  
  21.     type V_Scrollbar is new Scrollbar with private; 
  22.     type A_V_Scrollbar is access all V_Scrollbar'Class; 
  23.  
  24.     function Create_V_Scrollbar( view : not null access Game_Views.Game_View'Class; 
  25.                                  id   : String ) return A_V_Scrollbar; 
  26.     pragma Precondition( id'Length > 0 ); 
  27.     pragma Postcondition( Create_V_Scrollbar'Result /= null ); 
  28.  
  29. private 
  30.  
  31.     type Scrollbar is abstract new Widget and Resize_Listener with 
  32.         record 
  33.             client : A_Widget := null;      -- widget to scroll 
  34.             pageUp,                         -- true when paging up 
  35.             pageDown,                       -- true when paging down 
  36.             dragging : Boolean := False;    -- true when button is dragged 
  37.             dragPos  : Integer := 0; 
  38.         end record; 
  39.  
  40.     procedure Construct( this : access Scrollbar; 
  41.                          view : not null access Game_Views.Game_View'Class; 
  42.                          id   : String ); 
  43.     pragma Precondition( id'Length > 0 ); 
  44.  
  45.     procedure Delete( this : in out Scrollbar ); 
  46.  
  47.     procedure Handle_Action( this   : access Scrollbar; 
  48.                              action : A_Resize_Action ); 
  49.  
  50.     procedure Handle_Mouse_Release( this : access Scrollbar; 
  51.                                     evt  : not null A_Mouse_Button_Event ); 
  52.  
  53.     ---------------------------------------------------------------------------- 
  54.  
  55.     type H_Scrollbar is new Scrollbar with null record; 
  56.  
  57.     procedure Calculate_Button( this : access H_Scrollbar; min, max : out Integer ); 
  58.  
  59.     procedure Draw_Content( this : access H_Scrollbar; dc : Drawing_Context ); 
  60.  
  61.     procedure Handle_Mouse_Held( this : access H_Scrollbar; 
  62.                                  evt  : not null A_Mouse_Button_Event ); 
  63.  
  64.     procedure Handle_Mouse_Move( this : access H_Scrollbar; 
  65.                                  evt  : not null A_Mouse_Event ); 
  66.  
  67.     procedure Handle_Mouse_Press( this : access H_Scrollbar; 
  68.                                   evt  : not null A_Mouse_Button_Event ); 
  69.  
  70.     ---------------------------------------------------------------------------- 
  71.  
  72.     type V_Scrollbar is new Scrollbar with null record; 
  73.  
  74.     procedure Calculate_Button( this : access V_Scrollbar; min, max : out Integer ); 
  75.  
  76.     procedure Draw_Content( this : access V_Scrollbar; dc : Drawing_Context ); 
  77.  
  78.     procedure Handle_Mouse_Held( this : access V_Scrollbar; 
  79.                                  evt  : not null A_Mouse_Button_Event ); 
  80.  
  81.     procedure Handle_Mouse_Move( this : access V_Scrollbar; 
  82.                                  evt  : not null A_Mouse_Event ); 
  83.  
  84.     procedure Handle_Mouse_Press( this : access V_Scrollbar; 
  85.                                   evt  : not null A_Mouse_Button_Event ); 
  86.  
  87. end Widgets.Scrollbars;