@@ -29,8 +29,10 @@ with Glib.Values; use Glib.Values;
2929with Gtk ; use Gtk;
3030with Gtk.Enums ; use Gtk.Enums;
3131with Gtk.Scrolled_Window ; use Gtk.Scrolled_Window;
32+ with Gtk.Cell_Renderer_Combo ; use Gtk.Cell_Renderer_Combo;
3233with Gtk.Cell_Renderer_Text ; use Gtk.Cell_Renderer_Text;
3334with Gtk.Cell_Renderer_Toggle ; use Gtk.Cell_Renderer_Toggle;
35+ with Gtk.List_Store ; use Gtk.List_Store;
3436with Gtk.Tree_View ; use Gtk.Tree_View;
3537with Gtk.Tree_Model ; use Gtk.Tree_Model;
3638with Gtk.Tree_Selection ; use Gtk.Tree_Selection;
@@ -51,6 +53,8 @@ package body Create_Tree_View is
5153 Active_Column : constant := 3 ;
5254 Foreground_Column : constant := 4 ;
5355 Font_Column : constant := 5 ;
56+ Combo_Model_Column : constant := 6 ;
57+ Combo_Column_Column : constant := 7 ;
5458
5559 Base_Font, Small_Font : Pango_Font_Description;
5660
@@ -155,10 +159,22 @@ package body Create_Tree_View is
155159 Example1 : constant Boolean := True;
156160
157161 Iter : Gtk_Tree_Iter;
158- Values : GValue_Array (Text_Column .. Font_Column);
162+ Values : GValue_Array (Text_Column .. Combo_Column_Column);
163+
164+ Combo_Model : Gtk_List_Store;
165+ Combo_Iter : Gtk_Tree_Iter;
159166 begin
160167 Append (Model, Iter, Parent);
161168
169+ -- Create a Tree_Store to contain the combo box values for this
170+ -- row.
171+ Gtk_New (Combo_Model, (0 => GType_String));
172+ for Index in 1 .. Text'Length loop
173+ Append (Combo_Model, Combo_Iter);
174+ Set (Combo_Model, Combo_Iter, 0 ,
175+ Text (Text'First .. Text'Last + 1 - Index));
176+ end loop ;
177+
162178 if Example1 then
163179 -- First approach: set an GValue_Array. This requires more code, but
164180 -- is more efficient in practice since gtk+ does not have to traverse
@@ -178,6 +194,11 @@ package body Create_Tree_View is
178194 (Values (Font_Column), Base_Font);
179195 end if ;
180196
197+ Init (Values (Combo_Model_Column), Gtk.List_Store.Get_Type);
198+ Set_Object (Values (Combo_Model_Column), GObject (Combo_Model));
199+
200+ Init_Set_Int (Values (Combo_Column_Column), 0 );
201+
181202 Model.Set (Iter, Values);
182203
183204 else
@@ -193,6 +214,9 @@ package body Create_Tree_View is
193214 else
194215 Set (Model, Iter, Foreground_Column, " black" );
195216 end if ;
217+
218+ Set (Model, Iter, Combo_Model_Column, GObject (Combo_Model));
219+ Set (Model, Iter, Combo_Column_Column, 0 );
196220 end if ;
197221
198222 return Iter;
@@ -247,6 +271,8 @@ package body Create_Tree_View is
247271 Toggle_Render : Gtk_Cell_Renderer_Toggle;
248272 Parent, Iter : Gtk_Tree_Iter;
249273 Value : Glib.Values.GValue;
274+
275+ Combo : Gtk_Cell_Renderer_Combo;
250276 pragma Unreferenced (Num);
251277 pragma Warnings (Off, Iter);
252278
@@ -264,7 +290,9 @@ package body Create_Tree_View is
264290 Editable_Column => GType_Boolean,
265291 Active_Column => GType_Boolean,
266292 Foreground_Column => GType_String,
267- Font_Column => Pango.Font.Get_Type));
293+ Font_Column => Pango.Font.Get_Type,
294+ Combo_Model_Column => Gtk.List_Store.Get_Type,
295+ Combo_Column_Column => GType_Int));
268296
269297 -- Create the view: it shows two columns, the first contains some text,
270298 -- the second contains a toggle button. In each column, a renderer is
@@ -281,6 +309,7 @@ package body Create_Tree_View is
281309
282310 Gtk_New (Text_Render);
283311 Gtk_New (Toggle_Render);
312+ Gtk_New (Combo);
284313
285314 Gtk_New (Col);
286315 Col.Set_Resizable (True);
@@ -291,7 +320,6 @@ package body Create_Tree_View is
291320 -- Set_Sizing (Col, Tree_View_Column_Autosize);
292321 Add_Attribute (Col, Text_Render, " text" , Text_Column);
293322 Add_Attribute (Col, Text_Render, " strikethrough" , Strike_Column);
294- Add_Attribute (Col, Text_Render, " editable" , Editable_Column);
295323 Add_Attribute (Col, Text_Render, " foreground" , Foreground_Column);
296324 Add_Attribute (Col, Text_Render, " font-desc" , Font_Column);
297325
@@ -304,6 +332,16 @@ package body Create_Tree_View is
304332 Add_Attribute (Col, Toggle_Render, " active" , Active_Column);
305333 Add_Attribute (Col, Toggle_Render, " activatable" , Editable_Column);
306334
335+ Gtk_New (Col);
336+ Col.Set_Resizable (True);
337+ Set_Sort_Column_Id (Col, -1 ); -- unsortable
338+ Num := Append_Column (Tree, Col);
339+ Set_Title (Col, " Third column" );
340+ Pack_Start (Col, Combo, False);
341+ Add_Attribute (Col, Combo, " editable" , Editable_Column);
342+ Add_Attribute (Col, Combo, " model" , Combo_Model_Column);
343+ Add_Attribute (Col, Combo, " text-column" , Combo_Column_Column);
344+
307345 Base_Font := From_String (" sans 16px" );
308346 Small_Font := From_String (" sans 12px" );
309347
0 commit comments