Definitely ok with that. Feel free to change formatting or names to fit your standards as well. I was going for overly descriptive.
On Wed, Jun 10, 2015 at 8:24 PM, Rabbi David Botton <[email protected]> wrote: > Thanks for example :) Perhaps a good thing to add to the docs directory, > example of multiple event listeners. Ok with that? > > On Tue, Jun 9, 2015 at 8:48 AM Jeremiah Breeden < > [email protected]> wrote: > >> Managed to gen something up. Didn't put any comments in it, so if it >> isn't self explanatory, then just ask. I don't use this particular >> implementation (I have some generic packages that I use to keep code down), >> but I wanted to make something representative. I tested this in one of my >> Gnoga playing projects. The big thing is Handle_On_Click gives you the >> containing view type which allows you to modify other controls using the on >> click from the button. You can also pass the on click event to other >> parent views who may want to modify their own layouts based on that button >> event. You would just need to add a public Add_On_Click_Listener (or >> whatever name) procedure to Listener_View.View_Type (or whatever view you >> create) and have it call the button's Add_On_Click_Listener procedure. >> >> Button_For_Listeners is the extended class for Gnoga's Button_Type >> Listener_View is just a test view type that would contain a Button among >> other controls. >> >> button_for_listeners.ads >> >> ----------------------------------------------------------------------------------------------------------------------------------- >> with Gnoga.Gui.Element.Common; >> with Ada.Containers.Vectors; >> >> package Button_For_Listeners is >> >> type Listener_Type is limited interface; >> >> type Button_Type is new Gnoga.Gui.Element.Common.Button_Type with >> private; >> >> procedure Add_On_Click_Listener >> (Self : in out Button_Type; >> Listener : not null access Listener_Type'Class); >> >> procedure Handle_On_Click(Listener : in out Listener_Type; >> Source : in out Button_Type'Class) is >> abstract; >> >> >> private >> type Listener_Class_Access is access all Listener_Type'Class; >> package Vectors is new >> Ada.Containers.Vectors(Natural,Listener_Class_Access); >> >> type Button_Type is new Gnoga.Gui.Element.Common.Button_Type with >> record >> On_Click_Listeners : Vectors.Vector; >> end record; >> >> end Button_For_Listeners; >> >> >> >> button_for_listeners.adb >> >> ----------------------------------------------------------------------------------------------------------------------------------- >> with Gnoga.Gui.Base; >> >> package body Button_For_Listeners is >> >> procedure Gnoga_On_Click(Object : in out >> Gnoga.Gui.Base.Base_Type'Class) is >> Cursor : Vectors.Cursor := >> Button_Type(Object).On_Click_Listeners.First; >> begin >> while Vectors.Has_Element(Cursor) loop >> Vectors.Element(Cursor).Handle_On_Click(Button_Type(Object)); >> Cursor := Vectors.Next(Cursor); >> end loop; >> end Gnoga_On_Click; >> >> procedure Add_On_Click_Listener >> (Self : in out Button_Type; >> Listener : not null access Listener_Type'Class) is >> begin >> Self.On_Click_Listeners.Append(Listener); >> Self.On_Click_Handler(Gnoga_On_Click'Access); >> end Add_On_Click_Listener; >> >> end Button_For_Listeners; >> >> >> >> >> listener_view.ads >> >> ----------------------------------------------------------------------------------------------------------------------------------- >> with Gnoga.Gui.View; >> with Gnoga.Gui.Base; >> with Button_For_Listeners; >> >> package Listener_View is >> package Buttons renames Button_For_Listeners; >> >> type View_Type is new Gnoga.Gui.View.View_Type >> and Buttons.Listener_Type with private; >> >> overriding >> procedure Create >> (Self : in out View_Type; >> Parent : in out Gnoga.Gui.Base.Base_Type'Class; >> ID : in String := ""); >> >> private >> type Self_Ref_Type(Ref : access Buttons.Listener_Type'Class) >> is limited null record; >> >> type View_Type is new Gnoga.Gui.View.View_Type >> and Buttons.Listener_Type with record >> Button : Buttons.Button_Type; >> Self_Reference : Self_Ref_Type(View_Type'Access); >> end record; >> >> overriding >> procedure Handle_On_Click(Listener : in out View_Type; >> Source : in out Buttons.Button_Type'Class); >> >> end Listener_View; >> >> >> >> listener_view.adb >> >> ----------------------------------------------------------------------------------------------------------------------------------- >> package body Listener_View is >> procedure Create(Self : in out View_Type; >> Parent : in out Gnoga.Gui.Base.Base_Type'Class; >> ID : in String := "") is >> begin >> Gnoga.Gui.View.View_Type(Self).Create(Parent); >> Self.Button.Create(Self,"Test Button"); >> Self.Button.Add_On_Click_Listener(Self.Self_Reference.Ref); >> end Create; >> >> Test_Count : Natural := 0; >> >> overriding >> procedure Handle_On_Click(Listener : in out View_Type; >> Source : in out Buttons.Button_Type'Class) >> is >> begin >> Listener.Button.Text("Testing: " & Integer'Image(Test_Count)); >> Test_Count := Test_Count + 1; >> end Handle_On_Click; >> >> end Listener_View; >> >> >> >> On Sat, Jun 6, 2015 at 3:55 PM, Jeremiah Breeden < >> [email protected]> wrote: >> >>> I could provide some example code, but I would want to pretty it up at >>> least a bit. >>> >>> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Gnoga-list mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/gnoga-list >> > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Gnoga-list mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/gnoga-list > >
------------------------------------------------------------------------------
_______________________________________________ Gnoga-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/gnoga-list
