with Actions;
private with Ada.Containers.Doubly_Linked_Lists;
pragma Warnings( Off, Actions );
pragma Elaborate_All( Actions );
package Widgets.Buttons.Groups is
type Button_Group_Action is new Action with private;
type A_Button_Group_Action is access all Button_Group_Action'Class;
Group_Cleared : constant Action_Id;
Group_Set : constant Action_Id;
type A_Button_Group_Listener is
access procedure( action : A_Button_Group_Action );
type Button_Group is new Object and Button_Listener with private;
type A_Button_Group is access all Button_Group'Class;
function Create_Button_Group return A_Button_Group;
pragma Postcondition( Create_Button_Group'Result /= null );
procedure Add( this : access Button_Group; button : not null A_Button );
procedure Add_Listener( this : access Button_Group;
listener : not null A_Button_Group_Listener );
procedure Clear( this : access Button_Group );
procedure Remove_Listener( this : access Button_Group;
listener : not null A_Button_Group_Listener );
procedure Set_Keep_Selected( this : access Button_Group; keep : Boolean );
procedure Unset( this : access Button_Group;
force : Boolean := False );
procedure Delete( this : in out A_Button_Group );
pragma Postcondition( this = null );
private
package Action_Listeners is new Ada.Containers.Doubly_Linked_Lists( A_Button_Group_Listener, "=" );
use Action_Listeners;
package Button_Collection is new Ada.Containers.Doubly_Linked_Lists( A_Button, "=" );
use Button_Collection;
type Button_Group_Action is new Action with null record;
Group_Cleared : constant Action_Id := To_Action_Id( "button_group.cleared" );
Group_Set : constant Action_Id := To_Action_Id( "button_group.set" );
procedure Delete( this : in out A_Button_Group_Action );
pragma Postcondition( this = null );
type Button_Group is new Object and Button_Listener with
record
buttons : Button_Collection.List;
pressed : A_Button := null;
keep_selected : Boolean := True;
listeners : Action_Listeners.List;
end record;
procedure Delete( this : in out Button_Group );
procedure Dispatch_Action( this : access Button_Group;
id : Action_Id;
source : not null A_Widget );
procedure Handle_Action( this : access Button_Group;
action : A_Button_Action );
function To_String( this : access Button_Group ) return String;
end Widgets.Buttons.Groups;