comp.lang.ada
 help / color / mirror / Atom feed
From: "ldries46" <bertus.dries@planet.nl>
Subject: Re: Filling a listsore  real time
Date: Mon, 10 Feb 2014 10:41:03 +0100
Date: 2014-02-10T10:41:03+01:00	[thread overview]
Message-ID: <52f89f1a$0$7148$703f8584@news.kpn.nl> (raw)
In-Reply-To: <1h25bpkw2iqp0.1je0swr7ficvt.dlg@40tude.net>

Thanks for the solution. Because I have only single characters in the rows
I used the following code
The column in defining the liststore was set to gchar

Clear(CH_List); -- starting with an empty liststore
n1 := 0;
for nn in 1 .. max loop
   if not Grid(x_vak, y_vak).impossible(n1. ) then
      ch := CHARACTER'Val(Symbols(n1 ,Set));
      Init(G_Char, GType_Char);
      Set_Char (G_Char, gchar(ch));
      append(CH_List, CH_Iter);
      Set_Value (CH_List, CH_Iter, 0, G_Char);
      Unset (G_Char);
   end if;
   n1 := n1 + 1;
end loop;

I expected the result to be a list of characters, instead I got a list of 
ASCII values (exactly the values I had in Symbols(n1 ,Set)) so I know the 
values are at the correct location but the are not presented as I would 
like.
I read the type of the column just before the Clear statement and just after 
and found them both correct (12 = GType_Char).

I think I still haven't got everything correct.

L. Dries


"Dmitry A. Kazakov"  schreef in bericht 
news:1h25bpkw2iqp0.1je0swr7ficvt.dlg@40tude.net...

On Sun, 9 Feb 2014 16:13:03 +0100, ldries46 wrote:

> In my program I want a combobox with a liststore that is every time the
> dialog in which it is called has a different  number of of iters and 
> another
> value within the iter. In this case the iters are from an array of
> characters.
> It looks like the Routine Set_Value  or Set_Char is not correct working
> because I checked the input for Set_Char gchar(ch) gives me the correct
> Character. append also works correct, I get the correct number of items 
> but
> the items should be 1, 2, 3, 4, 5, 6, 7, 8, 9 and they are 0, 0, 0, 0, 0, 
> 0,
> 0, 0, 0, 0
>
> n1 := 0;
> for nn in 1 .. max loop
>    if not Grid(x_vak, y_vak).impossible(n1) then
>       ch := CHARACTER'Val(Symbols(n1 ,Set));
>       Set_Char(G_char, gchar(ch));
>       append(CH_List, CH_Iter);
>       Set_Value(CH_List, CH_Iter, 0, G_char);
>    end if;
>    n1 := n1 + 1;
> end loop;
>
> Can anyone tell me what I am doing wrong.

Set_Value needs a GValue. A GValue object must be initialized, set and
finally unset. E.g. a string with GValue:

   Text : GValue;
   Row : Gtk_Tree_Iter;
   Column : GInt := 0;
begin
   Init (Text, GType_String); -- Initialize value as a string
   Set_String (Text, "Hello"); -- Set value into Text
   Store.Append (Row); -- Add a new row to the list store
   Store.Set_Value (Row, Column, Text); -- Set a cell in the store's row
   Unset (Text); -- Free memory allocated for value

Which can be done in a simpler way without Set_Value. Gtk_List_Store_Record
has a ready-to-use operation for setting strings:

   Row : Gtk_Tree_Iter;
   Column : GInt := 0;
begin
   Store.Append (Row); -- Add new row to the store
   Store.Set (Row, Column, "Hello"); -- Set cell in the row

Caution. This seems broken in GtkAda 3.4. AFAIK it causes memory
corruption.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de 



  reply	other threads:[~2014-02-10  9:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-09 15:13 Filling a listsore real time ldries46
2014-02-09 17:16 ` Dmitry A. Kazakov
2014-02-10  9:41   ` ldries46 [this message]
2014-02-10 10:28     ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox