Skip to content

Commit b17054b

Browse files
committed
Merge branch 'topic/combo_cell_renderer' into 'master'
Add an example of how to use a Combo_Cell_Renderer See merge request eng/ide/gtkada!9
2 parents 0a40640 + 8060f26 commit b17054b

File tree

2 files changed

+48
-9
lines changed

2 files changed

+48
-9
lines changed

.gitlab-ci.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ build:
77
- cpu:8
88
- mem:16
99
stage: build
10-
script:
11-
- . ~/.aws_container_credentials
12-
- export PATH=/it/e3/bin:$PATH
10+
interruptible: true
11+
rules:
12+
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
13+
- if: $CI_PIPELINE_SOURCE == 'pipeline'
1314

14-
# Tell the anod sandbox to use our repository
15-
- cd /it/wave
16-
- anod vcs --add-repo gtkada $CI_PROJECT_DIR
15+
script:
16+
- generic_anod_ci
17+
- . /tmp/ci_env.sh
1718

1819
# Build
1920
- anod build gtkada

testgtk/create_tree_view.adb

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ with Glib.Values; use Glib.Values;
2929
with Gtk; use Gtk;
3030
with Gtk.Enums; use Gtk.Enums;
3131
with Gtk.Scrolled_Window; use Gtk.Scrolled_Window;
32+
with Gtk.Cell_Renderer_Combo; use Gtk.Cell_Renderer_Combo;
3233
with Gtk.Cell_Renderer_Text; use Gtk.Cell_Renderer_Text;
3334
with Gtk.Cell_Renderer_Toggle; use Gtk.Cell_Renderer_Toggle;
35+
with Gtk.List_Store; use Gtk.List_Store;
3436
with Gtk.Tree_View; use Gtk.Tree_View;
3537
with Gtk.Tree_Model; use Gtk.Tree_Model;
3638
with 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

Comments
 (0)