Deutsch   English   Français   Italiano  
<878rzpx3ce.fsf@samuel>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder6.news.weretis.net!feeder8.news.weretis.net!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Newsgroups: fr.comp.lang.ada
Subject: Re: Les Callback en Ada
Date: Tue, 21 Sep 2021 19:09:37 +0200
Organization: A noiseless patient Spider
Lines: 111
Message-ID: <878rzpx3ce.fsf@samuel>
References: <e0c35ed1-c15f-419f-a724-07a3c3bf5d2an@googlegroups.com>
	<shv0d7$1sv$1@dont-email.me>
	<ba295165-4f5f-46da-aa73-dc8fddc0703bn@googlegroups.com>
	<2d7ae0f0-603d-405b-ae05-df8ec6de9cecn@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: reader02.eternal-september.org; posting-host="597fd1af5b5dfb3b12ca05a752557333";
	logging-data="24515"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18HP+0wDYTrOL86EwiHJSsk"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
Cancel-Lock: sha1:zhnfOG2NqadJRvrpU1U4yUj2L0o=
	sha1:9f9LNiqU1SX9HSUDDlw5mDpsM7M=
Bytes: 4485

Danielle Mandi Mayagha <dmandimayagha@gmail.com> writes:
> package Callback is new gtk.handlers.user_callback (gtk_widget_record, P_=
fichier.T_Type);
>
> use Callback;
>
> Procedure Stop_Program ( emetteur : access gtk_widget_record;
>                                                 object : out P_fichier.T_=
Type );
>

Cette proc=C3=A9dure n'ob=C3=A9it pas au type Gtk.Handlers.User_Callback.Ha=
ndler:

type Handler is access procedure
  (Widget : access Widget_Type'Class; -- OK
   Params : Glib.Values.GValues; -- ignor=C3=A9
   User_Data : User_Type); -- pas OK, tu as dit "out P_Fichier.T_Type"

=C3=80 mon avis tu peux simplifier ton programme.  Tu n'as pas besoin d'un
type User_Data.  Si tu veux ouvrir un fichier, tu peux cr=C3=A9er le dialog=
ue
comme variable locale dans ta proc=C3=A9dure:

package body P is
  procedure On_File_Open (Button : Gtk.Button.Gtk_Button) is
    Dialog : Gtk_File_Chooser_Dialog;
  begin
    Gtk_New (Dialog);
    if Dialog.Run then
      -- OK, proceed with the file selected
    else
      -- user cancelled the dialog
    end if;
  end On_File_Open;
end P;

procedure Main is
  Window : Gtk_Window;
  Button : Gtk_Button;
begin
  Init;
  Gtk_New (Window);
  Window.Set_Default_Size (600,400);
  Gtk_New (Button, "ouvrir le fichier");
  Window.Add (Button);
  Button.On_Clicked (Call =3D> P.On_File_Open'Access);
  Window.Show_All;
  Main;
end Main;

Maintenant, si tu veux r=C3=A9cup=C3=A9rer le nom du fichier et le stocker =
dans
une variable non locale, je te conseille de faire une extension de type
pour ta *fen=C3=AAtre*:

package Main_Window is
   type Record_T is new Gtk.Window.Gtk_Window_Record with private;
   type T is access all Record_T'Class;
   procedure Gtk_New (Window : out T);
private
   type Record_T is new Gtk.Window.Gtk_Window_Record with record
      File_Name : Gtk.Label.Gtk_Label;
   end record;
end Main_Window;

package body Main_Window is
   procedure On_File_Open (Self : access Glib.Object.GObject_Record'Class) =
is
      -- Conformant with Gtk.Button.Cb_GObject_Void
      Window : T :=3D T (Self);
      Dialog : Gtk_File_Chooser_Dialog;
   begin
      Gtk_New (Dialog);
      if Dialog.Run then
         -- OK, proceed with the file selected
         Window.Label.Set_Text (Dialog.Get_Filename);
      else
         -- user cancelled the dialog
         Window.Label.Set_Text ("");
      end if;
   end On_File_Open;

   procedure Gtk_New (Window : out T) is
      Button : Gtk.Button.Gtk_Button;
   begin
      Gtk.Window.Gtk_New (Window);
      Window.Set_Default_Size (600,400);
      Gtk_New (Button, "ouvrir le fichier");
      Window.Add (Button);
      Button.On_Clicked (Call =3D> On_File_Open'Access, Slot =3D> Window);
      -- On_File_Open will receive the specified Window, not the button, as=
 its Self parameter
      Gtk_New (Window.Label, "");
      Window.Add (Label);
      Window.Show_All;
   end Gtk_New;
end Main_Window;

procedure Main is
  Window : Main_Window.T;
begin
  Gtk.Main.Init;
  Main_Window.Gtk_New (Window);
  Gtk.Main.Main;
end Main;

--=20
Ludovic Brenta.
The senior support staff transitions our supportive and/or market-based tra=
nsformation process round-the-clock.=20