1. with Scrollables;                       use Scrollables; 
  2.  
  3. package Widgets.Palettes is 
  4.  
  5.     type Palette is abstract new Widget and Scrollable with private; 
  6.     type A_Palette is access all Palette'Class; 
  7.  
  8.     function Get_Item_Count( this : access Palette ) return Natural is abstract; 
  9.  
  10.     procedure Get_Item_Details( this   : access Palette; 
  11.                                 row, 
  12.                                 col    : Natural; 
  13.                                 bmp    : out A_Bitmap; 
  14.                                 border : out Color_Type ) is abstract; 
  15.  
  16.     procedure Set_Columns( this : access Palette; columns : Natural ); 
  17.  
  18.     procedure Set_Icon_Size( this : access Palette; width, height : Positive ); 
  19.  
  20. private 
  21.  
  22.     type Palette is abstract new Widget and Scrollable with 
  23.         record 
  24.             columns      : Natural := 1; 
  25.             iconHeight, 
  26.             iconWidth    : Positive := 16; 
  27.             highlightRow, 
  28.             highlightCol : Integer := 0; 
  29.             selectedItem : Integer := 0; 
  30.         end record; 
  31.  
  32.     procedure Construct( this : access Palette; 
  33.                          view : not null access Game_Views.Game_View'Class; 
  34.                          id   : String ); 
  35.     pragma Precondition( id'Length > 0 ); 
  36.  
  37.     procedure Draw_Content( this : access Palette; dc : Drawing_Context ); 
  38.  
  39.     function Get_Min_Height( this : access Palette ) return Natural; 
  40.  
  41.     function Get_Min_Width( this : access Palette ) return Natural; 
  42.  
  43.     function Get_Scroll_Inc_X( this : access Palette ) return Integer; 
  44.  
  45.     function Get_Scroll_Inc_Y( this : access Palette ) return Integer; 
  46.  
  47.     procedure Get_Selected( this : not null access Palette'Class; 
  48.                             row, 
  49.                             col  : out Natural ); 
  50.  
  51.     procedure Handle_Exit( this : access Palette ); 
  52.  
  53.     procedure Handle_Mouse_Move( this : access Palette; 
  54.                                  evt  : not null A_Mouse_Event ); 
  55.  
  56. end Widgets.Palettes;