How to retrieve colors with GtkAda?
I use Glade with GtkAda.
-I can't retrieve the color data in the associate callback (window1_callbacks.adb).
-The Gtk.Color_Chooser.Get_RGBA procedure needs Gtk_Color_Chooser type. And Gtk_Color_Chooser function returns returns GObjet, so we need to convert data from GObject type to Gtk_Color_Chooser type.
And I don' see any function doing this. Thanks Mark
-- Glade_8.adb
-- units from Gtk
with Gtk.Main;
with Glib.Error; use Glib.Error;
with Gtk.Widget; use Gtk.Widget;
with Gtk.Builder; use Gtk.Builder;
with Gtkada.Builder; use Gtkada.Builder;
-- Ada predefined units
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Exceptions;
-- Application specific units
with Window1_Callbacks; use Window1_Callbacks;
procedure Glade_8 is
Builder : Gtkada_Builder;
Error : aliased Glib.Error.GError;
FileName : constant String := "glade_8";
GladeFileName : constant String := FileName & ".glade";
use type Glib.Guint;
begin
-- Appelé dans toutes les applications GtkAda.
-- Arguments ligne de commande sont analysés & retournés à l'application.
Gtk.Main.Init;
-- Etape 1 : créer un Builder
-- & lui donner accès à la fenetre maitre du fichier XML.
Gtk_New (Builder);
if Add_From_File (Gtk_Builder(Builder), GladeFileName, Error'Access) = 0 then
Put_Line ("Error : " & Get_Message (Error));
Error_Free (Error);
return;
end if;
Put_Line (FileName & " : loading of builder OK ");
-- Etape 2 : créer les handlers ("poignées") des events
-- (de façon à préparer les callback).
Register_Handler (Builder, "on_color1_color_set", On_Color1_Color_Set'Access); --Ajout
-- Etape 3 : Do_Connect connecte tous les handlers enregistrés en une fois.
Do_Connect (Builder);
--Put_Line ("Booleen du Switch : " & boolean'Image (On_Switch1_State_Set (Builder)));
-- Etape 4 : Afficher la fenetre avec ses dépendances
Show_All (Gtk_Widget (Get_Object (GTK_Builder (Builder), "window")));
-- Etape 5 : Lancer la boucle infinie.
Gtk.Main.Main;
-- Etape 6 : appeler Unref quand l'application se termine
-- pour libérer la memoire associée au Builder.
Unref (Builder);
Put_Line ("Program " & FileName & " is finished !");
exception
when Error : others =>
Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (Error));
end Glade_8;
-- Glade_8
with Gtkada.Builder; use Gtkada.Builder;
package Window1_Callbacks is
Procedure On_Color1_Color_Set (Builder : access Gtkada_Builder_Record'Class); -- Ajout
end Window1_Callbacks;
-- Glade_8
-- units from Gtk
with Gtk.Label; use Gtk.Label;
with Gtk.Check_Button; use Gtk.Check_Button;
with Gtk.Toggle_Button; use Gtk.Toggle_Button;
with Gtk.Spin_Button; use Gtk.Spin_Button;
with Gtk.Switch; use Gtk.Switch;
with Gtk.Combo_Box; use Gtk.Combo_Box;
with Gtk.GEntry; use Gtk.GEntry;
with Gtk.Color_Button; use Gtk.Color_Button; --Ajout
with Gtk.Color_Chooser; use Gtk.Color_Chooser; --Ajout
with Gtk.Color_Chooser_Dialog; use Gtk.Color_Chooser_Dialog; --Ajout
with Gtk.Color_Chooser_Widget; use Gtk.Color_Chooser_Widget; --Ajout
with Gtk.Color_Selection; use Gtk.Color_Selection; --Ajout
with Gtk.Color_Selection_Dialog; use Gtk.Color_Selection_Dialog; --Ajout
with Gdk.RGBA; use Gdk.RGBA; --Ajout
with Glib; use Glib;
with Ada.Text_IO; use Ada.Text_IO;
package body Window1_Callbacks is
---------------------------------
-- On_Color1_Color_Set -- AJOUT
---------------------------------
procedure On_Color1_Color_Set (Builder : access Gtkada_Builder_Record'Class) is
pragma Unreferenced (Builder);
Color : Gdk_RGBA;
begin
-- void on_color1_color_set(GtkColorButton *c) // To translate from C to Ada.
-- {
-- GdkRGBA color;
-- gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(c), &color); // Récupérer la couleur
-- printf("red %f\n", color, red);
-- printf("green %f\n", color, green);
-- printf("blue %f\n", color, blue);
-- printf("alpha %f\n", color, alpha);
-- }
-- window1_callbacks.adb:189:35: error: "GObject_To_Gtk_Color_Chooser" is undefined
Gtk.Color_Chooser.Get_RGBA (
To_Gtk_Color_Chooser
(Gtk_Color_Chooser (Get_Object (Builder, "color1"))),
Color);
-- put_line ("Red : ", Float'Image (Color.Red));
-- put_line ("Green : ", Float'Image (Color.Green));
-- put_line ("Blue : ", Float'Image (Color.Blue));
-- put_line ("Alpha : ", Float'Image (Color.Alpha));
end On_Color1_Color_Set;
end Window1_Callbacks;
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name Col_1 -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">Ligne-1</col>
</row>
<row>
<col id="0">bbb</col>
</row>
<row>
<col id="0">dddd</col>
</row>
<row>
<col id="0">eeeeeeee</col>
</row>
<row>
<col id="0">ligne-5</col>
</row>
<row>
<col id="0">ligne-6</col>
</row>
</data>
</object>
<object class="GtkWindow" id="window">
<property name="name">window</property>
<property name="width-request">89</property>
<property name="height-request">3</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border-width">0</property>
<property name="window-position">center</property>
<property name="gravity">center</property>
<child>
<object class="GtkFixed" id="fixed1">
<property name="name">fixed1</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButton" id="button1">
<property name="name">button1</property>
<property name="width-request">100</property>
<property name="height-request">80</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes"> Click Me!</property>
<property name="always-show-image">True</property>
<signal name="clicked" handler="on_button1_clicked" swapped="no"/>
<child>
<object class="GtkImage" id="harddisk">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-harddisk</property>
<property name="icon_size">6</property>
</object>
</child>
</object>
<packing>
<property name="x">36</property>
<property name="y">40</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="width-request">200</property>
<property name="height-request">40</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">I am a label hiding here.</property>
<property name="label" translatable="yes">label</property>
<attributes>
<attribute name="font-desc" value="Sans Bold Italic 15"/>
<attribute name="foreground" value="#efef29292929"/>
</attributes>
</object>
<packing>
<property name="x">150</property>
<property name="y">170</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="width-request">200</property>
<property name="height-request">40</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="xpad">0</property>
<property name="ypad">17</property>
<property name="label" translatable="yes">label2</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
</object>
<packing>
<property name="x">150</property>
<property name="y">220</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radio1">
<property name="label" translatable="yes">radio button 1</property>
<property name="width-request">100</property>
<property name="height-request">22</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
<signal name="toggled" handler="on_radio1_toggled" swapped="no"/>
</object>
<packing>
<property name="x">190</property>
<property name="y">30</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radio2">
<property name="label" translatable="yes">radio button 2</property>
<property name="width-request">100</property>
<property name="height-request">22</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
<property name="group">radio1</property>
<signal name="toggled" handler="on_radio2_toggled" swapped="no"/>
</object>
<packing>
<property name="x">190</property>
<property name="y">60</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radio3">
<property name="label" translatable="yes">radio button3</property>
<property name="width-request">100</property>
<property name="height-request">22</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
<property name="group">radio1</property>
<signal name="toggled" handler="on_radio3_toggled" swapped="no"/>
</object>
<packing>
<property name="x">190</property>
<property name="y">90</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="check1">
<property name="label" translatable="yes">check button1</property>
<property name="width-request">100</property>
<property name="height-request">30</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
<signal name="toggled" handler="on_check1_toggled" swapped="no"/>
</object>
<packing>
<property name="x">190</property>
<property name="y">120</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="toggle1">
<property name="label" translatable="yes">toggle button</property>
<property name="width-request">123</property>
<property name="height-request">36</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="toggled" handler="on_toggle1_toggled" swapped="no"/>
</object>
<packing>
<property name="x">25</property>
<property name="y">174</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin1">
<property name="width-request">118</property>
<property name="height-request">34</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-width-chars">2</property>
<property name="adjustment">adjustment1</property>
<property name="wrap">True</property>
<signal name="value-changed" handler="on_spin1_value_changed" swapped="no"/>
</object>
<packing>
<property name="x">25</property>
<property name="y">218</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="switch1">
<property name="use-action-appearance">True</property>
<property name="name">switch</property>
<property name="width-request">100</property>
<property name="height-request">35</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="active">True</property>
<signal name="state-set" handler="on_switch1_state_set" swapped="no"/>
</object>
<packing>
<property name="x">27</property>
<property name="y">284</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="combo1">
<property name="width-request">176</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="model">liststore1</property>
<property name="active">0</property>
<property name="has-entry">True</property>
<property name="entry-text-column">0</property>
<property name="id-column">0</property>
<property name="active-id">0</property>
<signal name="changed" handler="on_combo1_changed" swapped="no"/>
<child internal-child="entry">
<object class="GtkEntry" id="entry1">
<property name="can-focus">False</property>
<signal name="changed" handler="on_gentry1_changed" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="x">38</property>
<property name="y">357</property>
</packing>
</child>
<child>
<object class="GtkColorButton" id="color1">
<property name="width-request">100</property>
<property name="height-request">33</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="color-set" handler="on_color1_color_set" swapped="no"/>
</object>
<packing>
<property name="x">298</property>
<property name="y">303</property>
</packing>
</child>
</object>
</child>
</object>
</interface>