Bonjour à toutes t à tous,
J'aborde gtk et me suis basé sur le header du fichier gtkada-builder.ads :
Je cherche sans trouver un exemple fonctionnel de GtkAda pour mon environnement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 -- <description> -- -- This package provides a high-level API for using Gtk.Builder and -- user interface files produced with the GUI builder glade-3. -- -- Here is how to use this package: -- -- Step 1: create a Builder and add the XML data, just as you would a -- standard Gtk.Builder: -- -- declare -- Builder : Gtkada_Builder; -- Error : GError; -- begin -- Gtk_New (Builder); -- Error := Add_From_File (Builder, Default_Filename); -- -- Step 2: add calls to "Register_Handler" to associate your handlers -- with your callbacks. -- -- Register_Handler -- (Builder => Builder, -- Handler_Name => "my_handler_id", -- Handler => My_Handler'Access); -- -- Where: -- - Builder is your Gtkada_Builder, -- - "my_handler_id" is the name of the handler as specified in -- Glade-3, in the "Handler" column of the "Signals" tab for -- your object, -- - Handler is your Ada subprogram. -- -- You will need one call to "Register_Handler" per handler -- declared in the Glade-3 interface. If there is one or more -- handler declared in Glade-3 which does not have an associated -- call to Register_Handler, an ASSERT_FAILURE will be raised by -- the Gtk main loop. -- -- There are multiple way to call Register_Handler, see below. -- -- Step 3: call Do_Connect. -- -- Step 4: when the application terminates or all Windows described through -- your builder should be closed, call Unref to free memory -- associated with the Builder. --
Je trouve fréquemment des exemples pour des environnements antérieurs et systématiquement cela ne marche pas.
Le problème semble venir de register_handler. Je précise que j'ai obtenu un programme "fonctionnel" ... sans events.
Voici mon prototype pour récupérer l'event d'un bouton. Je me suis perdu dans les pointeurs de procedure et de function : le type de Self est le dernier de mes tests.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Gtk_New(Builder); Ret_Error := Add_From_File(Builder, "test.glade", Error); if Error /= null then Put_Line ("Error"); end if; Register_Handler (Builder => Builder, Handler_Name => "on_button1_clicked", Handler => (On_Button1_Clicked_Cb'Access); Do_Connect(Builder); -- Signal handling loop Gtk.Main.Main;
dans Glade 3, il n'y a pas de user_data dans mon signal .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 procedure On_Button1_Clicked_Cb(Self : Gtkada_Builder_Record);
Que vous faudrait-il pour m'aiguiller dans la bonne direction ?
Partager