[gtkada] Handle signals inside a tagged record

Martin Klaiber martinkl at zedat.fu-berlin.de
Wed Feb 19 16:46:51 CET 2003


Preben Randhol <randhol at pvv.org> wrote:
> Martin Klaiber <martinkl at zedat.fu-berlin.de> wrote on 19/02/2003 (08:45) :

>> Is it possible on this Mailinglist that I attach an *.adb and
>> *.ads-file with the code and you try to compile it? They are
>> together only about 1.7kB.

> yes

Thanks a lot (also to Arno!). I added a small Makefile, but not the
code to call this object within a main program. To simply print out
the content of the GEntry-Object is, of course, only for testing.

Martin
-------------- next part --------------
all:
	gnatmake the_example `gtkada-config`

devel:
	gnatmake -gnataEfo the_example `gtkada-config`
-------------- next part --------------
with Gtk.Window; use Gtk.Window;
with Gtk.GEntry; use Gtk.GEntry;
with Gtk.Button; use Gtk.Button;

Package The_Example is

  type Example_Record is new Gtk_Window_Record with private;

  type Example_Access is access all Example_Record'Class;

  procedure Gtk_New (Example : out Example_Access);
  procedure Initialize (Example : access Example_Record'Class);
  procedure Update (Button : access Gtk_Button_Record'Class; 
                    Example : access Example_Record'Class);

private

  type Example_Record is new Gtk_Window_Record with
    record
      Entry1 : Gtk_GEntry;
    end record;

end The_Example;
-------------- next part --------------
with Ada.Text_IO; use Ada.Text_IO;
with Gtk.Box; use Gtk.Box;
with Gtk.Handlers;

Package Body The_Example is

  package Example_Handler is 
    new Gtk.Handlers.User_Callback (Gtk_Button_Record, Example_Record);

  procedure Gtk_New (Example : out Example_Access) is
  begin
    Example := new Example_Record;
    Initialize (Example);
  end Gtk_New;

  procedure Initialize (Example : access Example_Record'Class) is
    Win : Gtk_Window;
    VBox : Gtk_Box;
    Ok_Button : Gtk_Button;
  begin
    Gtk_New (Win);

    Gtk_New_VBox (VBox, False);
    Add (Win, VBox);

    Gtk_New (Example.Entry1);
    Pack_Start (VBox, Example.Entry1, True, True);

    Gtk_New (Ok_Button, "Update");
    Pack_Start (VBox, Ok_Button, False, False);

    Example_Handler.Connect (
      Ok_Button, "clicked", 
      Example_Handler.To_Marshaller (Update'Access), 
      Update (Ok_Button, Example));

    Show_All (Win);
  end Initialize;

  procedure Update (Button : access Gtk_Button_Record'Class; 
                    Example : access Example_Record'Class) is
  begin
    Put_Line (Get_Text (Example.Entry1));
  end Update;

end The_Example;


More information about the gtkada mailing list