1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gtk.TreeViewColumn;
26 
27 private import glib.ConstructionException;
28 private import glib.Str;
29 private import gobject.ObjectG;
30 private import gobject.Signals;
31 private import gtk.BuildableIF;
32 private import gtk.BuildableT;
33 private import gtk.Button;
34 private import gtk.CellArea;
35 private import gtk.CellLayoutIF;
36 private import gtk.CellLayoutT;
37 private import gtk.CellRenderer;
38 private import gtk.TreeIter;
39 private import gtk.TreeModelIF;
40 private import gtk.TreeView;
41 private import gtk.Widget;
42 private import gtk.c.functions;
43 public  import gtk.c.types;
44 public  import gtkc.gtktypes;
45 private import std.algorithm;
46 
47 
48 /**
49  * The GtkTreeViewColumn object represents a visible column in a #GtkTreeView widget.
50  * It allows to set properties of the column header, and functions as a holding pen for
51  * the cell renderers which determine how the data in the column is displayed.
52  * 
53  * Please refer to the [tree widget conceptual overview][TreeWidget]
54  * for an overview of all the objects and data types related to the tree widget and how
55  * they work together.
56  */
57 public class TreeViewColumn : ObjectG, BuildableIF, CellLayoutIF
58 {
59 	/** the main Gtk struct */
60 	protected GtkTreeViewColumn* gtkTreeViewColumn;
61 
62 	/** Get the main Gtk struct */
63 	public GtkTreeViewColumn* getTreeViewColumnStruct(bool transferOwnership = false)
64 	{
65 		if (transferOwnership)
66 			ownedRef = false;
67 		return gtkTreeViewColumn;
68 	}
69 
70 	/** the main Gtk struct as a void* */
71 	protected override void* getStruct()
72 	{
73 		return cast(void*)gtkTreeViewColumn;
74 	}
75 
76 	/**
77 	 * Sets our main struct and passes it to the parent class.
78 	 */
79 	public this (GtkTreeViewColumn* gtkTreeViewColumn, bool ownedRef = false)
80 	{
81 		this.gtkTreeViewColumn = gtkTreeViewColumn;
82 		super(cast(GObject*)gtkTreeViewColumn, ownedRef);
83 	}
84 
85 	// add the Buildable capabilities
86 	mixin BuildableT!(GtkTreeViewColumn);
87 
88 	// add the CellLayout capabilities
89 	mixin CellLayoutT!(GtkTreeViewColumn);
90 
91 	/**
92 	 * Creates a new Tree view column
93 	 * Params:
94 	 *  header = th column header text
95 	 *  renderer = the rederer for the column cells
96 	 *  type = the type of data to be displayed (shouldn't this be on the renderer?)
97 	 *  column = the column number
98 	 * Throws: ConstructionException GTK+ fails to create the object.
99 	 */
100 	this(string header, CellRenderer renderer, string type, int column)
101 	{
102 		auto p = gtk_tree_view_column_new_with_attributes(
103 			Str.toStringz(header),
104 			renderer.getCellRendererStruct(),
105 			Str.toStringz(type),
106 			column,
107 			null);
108 
109 		if(p is null)
110 		{
111 			throw new ConstructionException("null returned by gtk_tree_view_column_new_with_attributes");
112 		}
113 
114 		this(p);
115 	}
116 
117 	/**
118 	 * Returns the button used in the treeview column header
119 	 * Returns: The button for the column header. [transfer none] Since 3.0
120 	 */
121 	public Button getButton()
122 	{
123 		// GtkWidget * gtk_tree_view_column_get_button (GtkTreeViewColumn *tree_column);
124 		auto p = gtk_tree_view_column_get_button(gtkTreeViewColumn);
125 		if(p is null)
126 		{
127 			return null;
128 		}
129 		return ObjectG.getDObject!(Button)(cast(GtkButton*) p);
130 	}
131 
132 	/**
133 	 * Returns the GtkTreeView wherein tree_column has been inserted.
134 	 * If column is currently not inserted in any tree view, NULL is
135 	 * returned.
136 	 * Since 2.12
137 	 * Returns: The tree view wherein column has been inserted if any, NULL otherwise. [transfer none]
138 	 */
139 	public TreeView getTreeView()
140 	{
141 		// GtkWidget * gtk_tree_view_column_get_tree_view (GtkTreeViewColumn *tree_column);
142 		auto p = gtk_tree_view_column_get_tree_view(gtkTreeViewColumn);
143 		if(p is null)
144 		{
145 			return null;
146 		}
147 		return ObjectG.getDObject!(TreeView)(cast(GtkTreeView*) p);
148 	}
149 
150 	/**
151 	 */
152 
153 	/** */
154 	public static GType getType()
155 	{
156 		return gtk_tree_view_column_get_type();
157 	}
158 
159 	/**
160 	 * Creates a new #GtkTreeViewColumn.
161 	 *
162 	 * Returns: A newly created #GtkTreeViewColumn.
163 	 *
164 	 * Throws: ConstructionException GTK+ fails to create the object.
165 	 */
166 	public this()
167 	{
168 		auto p = gtk_tree_view_column_new();
169 
170 		if(p is null)
171 		{
172 			throw new ConstructionException("null returned by new");
173 		}
174 
175 		this(cast(GtkTreeViewColumn*) p);
176 	}
177 
178 	/**
179 	 * Creates a new #GtkTreeViewColumn using @area to render its cells.
180 	 *
181 	 * Params:
182 	 *     area = the #GtkCellArea that the newly created column should use to layout cells.
183 	 *
184 	 * Returns: A newly created #GtkTreeViewColumn.
185 	 *
186 	 * Since: 3.0
187 	 *
188 	 * Throws: ConstructionException GTK+ fails to create the object.
189 	 */
190 	public this(CellArea area)
191 	{
192 		auto p = gtk_tree_view_column_new_with_area((area is null) ? null : area.getCellAreaStruct());
193 
194 		if(p is null)
195 		{
196 			throw new ConstructionException("null returned by new_with_area");
197 		}
198 
199 		this(cast(GtkTreeViewColumn*) p);
200 	}
201 
202 	/**
203 	 * Obtains the horizontal position and size of a cell in a column. If the
204 	 * cell is not found in the column, @start_pos and @width are not changed and
205 	 * %FALSE is returned.
206 	 *
207 	 * Params:
208 	 *     cellRenderer = a #GtkCellRenderer
209 	 *     xOffset = return location for the horizontal
210 	 *         position of @cell within @tree_column, may be %NULL
211 	 *     width = return location for the width of @cell,
212 	 *         may be %NULL
213 	 *
214 	 * Returns: %TRUE if @cell belongs to @tree_column.
215 	 */
216 	public bool cellGetPosition(CellRenderer cellRenderer, out int xOffset, out int width)
217 	{
218 		return gtk_tree_view_column_cell_get_position(gtkTreeViewColumn, (cellRenderer is null) ? null : cellRenderer.getCellRendererStruct(), &xOffset, &width) != 0;
219 	}
220 
221 	/**
222 	 * Obtains the width and height needed to render the column.  This is used
223 	 * primarily by the #GtkTreeView.
224 	 *
225 	 * Params:
226 	 *     cellArea = The area a cell in the column will be allocated, or %NULL
227 	 *     xOffset = location to return x offset of a cell relative to @cell_area, or %NULL
228 	 *     yOffset = location to return y offset of a cell relative to @cell_area, or %NULL
229 	 *     width = location to return width needed to render a cell, or %NULL
230 	 *     height = location to return height needed to render a cell, or %NULL
231 	 */
232 	public void cellGetSize(GdkRectangle* cellArea, out int xOffset, out int yOffset, out int width, out int height)
233 	{
234 		gtk_tree_view_column_cell_get_size(gtkTreeViewColumn, cellArea, &xOffset, &yOffset, &width, &height);
235 	}
236 
237 	/**
238 	 * Returns %TRUE if any of the cells packed into the @tree_column are visible.
239 	 * For this to be meaningful, you must first initialize the cells with
240 	 * gtk_tree_view_column_cell_set_cell_data()
241 	 *
242 	 * Returns: %TRUE, if any of the cells packed into the @tree_column are currently visible
243 	 */
244 	public bool cellIsVisible()
245 	{
246 		return gtk_tree_view_column_cell_is_visible(gtkTreeViewColumn) != 0;
247 	}
248 
249 	/**
250 	 * Sets the cell renderer based on the @tree_model and @iter.  That is, for
251 	 * every attribute mapping in @tree_column, it will get a value from the set
252 	 * column on the @iter, and use that value to set the attribute on the cell
253 	 * renderer.  This is used primarily by the #GtkTreeView.
254 	 *
255 	 * Params:
256 	 *     treeModel = The #GtkTreeModel to to get the cell renderers attributes from.
257 	 *     iter = The #GtkTreeIter to to get the cell renderer’s attributes from.
258 	 *     isExpander = %TRUE, if the row has children
259 	 *     isExpanded = %TRUE, if the row has visible children
260 	 */
261 	public void cellSetCellData(TreeModelIF treeModel, TreeIter iter, bool isExpander, bool isExpanded)
262 	{
263 		gtk_tree_view_column_cell_set_cell_data(gtkTreeViewColumn, (treeModel is null) ? null : treeModel.getTreeModelStruct(), (iter is null) ? null : iter.getTreeIterStruct(), isExpander, isExpanded);
264 	}
265 
266 	/**
267 	 * Emits the “clicked” signal on the column.  This function will only work if
268 	 * @tree_column is clickable.
269 	 */
270 	public void clicked()
271 	{
272 		gtk_tree_view_column_clicked(gtkTreeViewColumn);
273 	}
274 
275 	/**
276 	 * Sets the current keyboard focus to be at @cell, if the column contains
277 	 * 2 or more editable and activatable cells.
278 	 *
279 	 * Params:
280 	 *     cell = A #GtkCellRenderer
281 	 *
282 	 * Since: 2.2
283 	 */
284 	public void focusCell(CellRenderer cell)
285 	{
286 		gtk_tree_view_column_focus_cell(gtkTreeViewColumn, (cell is null) ? null : cell.getCellRendererStruct());
287 	}
288 
289 	/**
290 	 * Returns the current x alignment of @tree_column.  This value can range
291 	 * between 0.0 and 1.0.
292 	 *
293 	 * Returns: The current alignent of @tree_column.
294 	 */
295 	public float getAlignment()
296 	{
297 		return gtk_tree_view_column_get_alignment(gtkTreeViewColumn);
298 	}
299 
300 	/**
301 	 * Returns %TRUE if the user can click on the header for the column.
302 	 *
303 	 * Returns: %TRUE if user can click the column header.
304 	 */
305 	public bool getClickable()
306 	{
307 		return gtk_tree_view_column_get_clickable(gtkTreeViewColumn) != 0;
308 	}
309 
310 	/**
311 	 * Returns %TRUE if the column expands to fill available space.
312 	 *
313 	 * Returns: %TRUE if the column expands to fill available space.
314 	 *
315 	 * Since: 2.4
316 	 */
317 	public bool getExpand()
318 	{
319 		return gtk_tree_view_column_get_expand(gtkTreeViewColumn) != 0;
320 	}
321 
322 	/**
323 	 * Gets the fixed width of the column.  This may not be the actual displayed
324 	 * width of the column; for that, use gtk_tree_view_column_get_width().
325 	 *
326 	 * Returns: The fixed width of the column.
327 	 */
328 	public int getFixedWidth()
329 	{
330 		return gtk_tree_view_column_get_fixed_width(gtkTreeViewColumn);
331 	}
332 
333 	/**
334 	 * Returns the maximum width in pixels of the @tree_column, or -1 if no maximum
335 	 * width is set.
336 	 *
337 	 * Returns: The maximum width of the @tree_column.
338 	 */
339 	public int getMaxWidth()
340 	{
341 		return gtk_tree_view_column_get_max_width(gtkTreeViewColumn);
342 	}
343 
344 	/**
345 	 * Returns the minimum width in pixels of the @tree_column, or -1 if no minimum
346 	 * width is set.
347 	 *
348 	 * Returns: The minimum width of the @tree_column.
349 	 */
350 	public int getMinWidth()
351 	{
352 		return gtk_tree_view_column_get_min_width(gtkTreeViewColumn);
353 	}
354 
355 	/**
356 	 * Returns %TRUE if the @tree_column can be reordered by the user.
357 	 *
358 	 * Returns: %TRUE if the @tree_column can be reordered by the user.
359 	 */
360 	public bool getReorderable()
361 	{
362 		return gtk_tree_view_column_get_reorderable(gtkTreeViewColumn) != 0;
363 	}
364 
365 	/**
366 	 * Returns %TRUE if the @tree_column can be resized by the end user.
367 	 *
368 	 * Returns: %TRUE, if the @tree_column can be resized.
369 	 */
370 	public bool getResizable()
371 	{
372 		return gtk_tree_view_column_get_resizable(gtkTreeViewColumn) != 0;
373 	}
374 
375 	/**
376 	 * Returns the current type of @tree_column.
377 	 *
378 	 * Returns: The type of @tree_column.
379 	 */
380 	public GtkTreeViewColumnSizing getSizing()
381 	{
382 		return gtk_tree_view_column_get_sizing(gtkTreeViewColumn);
383 	}
384 
385 	/**
386 	 * Gets the logical @sort_column_id that the model sorts on when this
387 	 * column is selected for sorting.
388 	 * See gtk_tree_view_column_set_sort_column_id().
389 	 *
390 	 * Returns: the current @sort_column_id for this column, or -1 if
391 	 *     this column can’t be used for sorting.
392 	 */
393 	public int getSortColumnId()
394 	{
395 		return gtk_tree_view_column_get_sort_column_id(gtkTreeViewColumn);
396 	}
397 
398 	/**
399 	 * Gets the value set by gtk_tree_view_column_set_sort_indicator().
400 	 *
401 	 * Returns: whether the sort indicator arrow is displayed
402 	 */
403 	public bool getSortIndicator()
404 	{
405 		return gtk_tree_view_column_get_sort_indicator(gtkTreeViewColumn) != 0;
406 	}
407 
408 	/**
409 	 * Gets the value set by gtk_tree_view_column_set_sort_order().
410 	 *
411 	 * Returns: the sort order the sort indicator is indicating
412 	 */
413 	public GtkSortType getSortOrder()
414 	{
415 		return gtk_tree_view_column_get_sort_order(gtkTreeViewColumn);
416 	}
417 
418 	/**
419 	 * Returns the spacing of @tree_column.
420 	 *
421 	 * Returns: the spacing of @tree_column.
422 	 */
423 	public int getSpacing()
424 	{
425 		return gtk_tree_view_column_get_spacing(gtkTreeViewColumn);
426 	}
427 
428 	/**
429 	 * Returns the title of the widget.
430 	 *
431 	 * Returns: the title of the column. This string should not be
432 	 *     modified or freed.
433 	 */
434 	public string getTitle()
435 	{
436 		return Str.toString(gtk_tree_view_column_get_title(gtkTreeViewColumn));
437 	}
438 
439 	/**
440 	 * Returns %TRUE if @tree_column is visible.
441 	 *
442 	 * Returns: whether the column is visible or not.  If it is visible, then
443 	 *     the tree will show the column.
444 	 */
445 	public bool getVisible()
446 	{
447 		return gtk_tree_view_column_get_visible(gtkTreeViewColumn) != 0;
448 	}
449 
450 	/**
451 	 * Returns the #GtkWidget in the button on the column header.
452 	 * If a custom widget has not been set then %NULL is returned.
453 	 *
454 	 * Returns: The #GtkWidget in the column
455 	 *     header, or %NULL
456 	 */
457 	public Widget getWidget()
458 	{
459 		auto p = gtk_tree_view_column_get_widget(gtkTreeViewColumn);
460 
461 		if(p is null)
462 		{
463 			return null;
464 		}
465 
466 		return ObjectG.getDObject!(Widget)(cast(GtkWidget*) p);
467 	}
468 
469 	/**
470 	 * Returns the current size of @tree_column in pixels.
471 	 *
472 	 * Returns: The current width of @tree_column.
473 	 */
474 	public int getWidth()
475 	{
476 		return gtk_tree_view_column_get_width(gtkTreeViewColumn);
477 	}
478 
479 	/**
480 	 * Returns the current X offset of @tree_column in pixels.
481 	 *
482 	 * Returns: The current X offset of @tree_column.
483 	 *
484 	 * Since: 3.2
485 	 */
486 	public int getXOffset()
487 	{
488 		return gtk_tree_view_column_get_x_offset(gtkTreeViewColumn);
489 	}
490 
491 	/**
492 	 * Flags the column, and the cell renderers added to this column, to have
493 	 * their sizes renegotiated.
494 	 *
495 	 * Since: 2.8
496 	 */
497 	public void queueResize()
498 	{
499 		gtk_tree_view_column_queue_resize(gtkTreeViewColumn);
500 	}
501 
502 	/**
503 	 * Sets the alignment of the title or custom widget inside the column header.
504 	 * The alignment determines its location inside the button -- 0.0 for left, 0.5
505 	 * for center, 1.0 for right.
506 	 *
507 	 * Params:
508 	 *     xalign = The alignment, which is between [0.0 and 1.0] inclusive.
509 	 */
510 	public void setAlignment(float xalign)
511 	{
512 		gtk_tree_view_column_set_alignment(gtkTreeViewColumn, xalign);
513 	}
514 
515 	/**
516 	 * Sets the #GtkTreeCellDataFunc to use for the column.  This
517 	 * function is used instead of the standard attributes mapping for
518 	 * setting the column value, and should set the value of @tree_column's
519 	 * cell renderer as appropriate.  @func may be %NULL to remove an
520 	 * older one.
521 	 *
522 	 * Params:
523 	 *     cellRenderer = A #GtkCellRenderer
524 	 *     func = The #GtkTreeCellDataFunc to use.
525 	 *     funcData = The user data for @func.
526 	 *     destroy = The destroy notification for @func_data
527 	 */
528 	public void setCellDataFunc(CellRenderer cellRenderer, GtkTreeCellDataFunc func, void* funcData, GDestroyNotify destroy)
529 	{
530 		gtk_tree_view_column_set_cell_data_func(gtkTreeViewColumn, (cellRenderer is null) ? null : cellRenderer.getCellRendererStruct(), func, funcData, destroy);
531 	}
532 
533 	/**
534 	 * Sets the header to be active if @clickable is %TRUE.  When the header is
535 	 * active, then it can take keyboard focus, and can be clicked.
536 	 *
537 	 * Params:
538 	 *     clickable = %TRUE if the header is active.
539 	 */
540 	public void setClickable(bool clickable)
541 	{
542 		gtk_tree_view_column_set_clickable(gtkTreeViewColumn, clickable);
543 	}
544 
545 	/**
546 	 * Sets the column to take available extra space.  This space is shared equally
547 	 * amongst all columns that have the expand set to %TRUE.  If no column has this
548 	 * option set, then the last column gets all extra space.  By default, every
549 	 * column is created with this %FALSE.
550 	 *
551 	 * Along with “fixed-width”, the “expand” property changes when the column is
552 	 * resized by the user.
553 	 *
554 	 * Params:
555 	 *     expand = %TRUE if the column should expand to fill available space.
556 	 *
557 	 * Since: 2.4
558 	 */
559 	public void setExpand(bool expand)
560 	{
561 		gtk_tree_view_column_set_expand(gtkTreeViewColumn, expand);
562 	}
563 
564 	/**
565 	 * If @fixed_width is not -1, sets the fixed width of @tree_column; otherwise
566 	 * unsets it.  The effective value of @fixed_width is clamped between the
567 	 * minimum and maximum width of the column; however, the value stored in the
568 	 * “fixed-width” property is not clamped.  If the column sizing is
569 	 * #GTK_TREE_VIEW_COLUMN_GROW_ONLY or #GTK_TREE_VIEW_COLUMN_AUTOSIZE, setting
570 	 * a fixed width overrides the automatically calculated width.  Note that
571 	 * @fixed_width is only a hint to GTK+; the width actually allocated to the
572 	 * column may be greater or less than requested.
573 	 *
574 	 * Along with “expand”, the “fixed-width” property changes when the column is
575 	 * resized by the user.
576 	 *
577 	 * Params:
578 	 *     fixedWidth = The new fixed width, in pixels, or -1.
579 	 */
580 	public void setFixedWidth(int fixedWidth)
581 	{
582 		gtk_tree_view_column_set_fixed_width(gtkTreeViewColumn, fixedWidth);
583 	}
584 
585 	/**
586 	 * Sets the maximum width of the @tree_column.  If @max_width is -1, then the
587 	 * maximum width is unset.  Note, the column can actually be wider than max
588 	 * width if it’s the last column in a view.  In this case, the column expands to
589 	 * fill any extra space.
590 	 *
591 	 * Params:
592 	 *     maxWidth = The maximum width of the column in pixels, or -1.
593 	 */
594 	public void setMaxWidth(int maxWidth)
595 	{
596 		gtk_tree_view_column_set_max_width(gtkTreeViewColumn, maxWidth);
597 	}
598 
599 	/**
600 	 * Sets the minimum width of the @tree_column.  If @min_width is -1, then the
601 	 * minimum width is unset.
602 	 *
603 	 * Params:
604 	 *     minWidth = The minimum width of the column in pixels, or -1.
605 	 */
606 	public void setMinWidth(int minWidth)
607 	{
608 		gtk_tree_view_column_set_min_width(gtkTreeViewColumn, minWidth);
609 	}
610 
611 	/**
612 	 * If @reorderable is %TRUE, then the column can be reordered by the end user
613 	 * dragging the header.
614 	 *
615 	 * Params:
616 	 *     reorderable = %TRUE, if the column can be reordered.
617 	 */
618 	public void setReorderable(bool reorderable)
619 	{
620 		gtk_tree_view_column_set_reorderable(gtkTreeViewColumn, reorderable);
621 	}
622 
623 	/**
624 	 * If @resizable is %TRUE, then the user can explicitly resize the column by
625 	 * grabbing the outer edge of the column button.  If resizable is %TRUE and
626 	 * sizing mode of the column is #GTK_TREE_VIEW_COLUMN_AUTOSIZE, then the sizing
627 	 * mode is changed to #GTK_TREE_VIEW_COLUMN_GROW_ONLY.
628 	 *
629 	 * Params:
630 	 *     resizable = %TRUE, if the column can be resized
631 	 */
632 	public void setResizable(bool resizable)
633 	{
634 		gtk_tree_view_column_set_resizable(gtkTreeViewColumn, resizable);
635 	}
636 
637 	/**
638 	 * Sets the growth behavior of @tree_column to @type.
639 	 *
640 	 * Params:
641 	 *     type = The #GtkTreeViewColumnSizing.
642 	 */
643 	public void setSizing(GtkTreeViewColumnSizing type)
644 	{
645 		gtk_tree_view_column_set_sizing(gtkTreeViewColumn, type);
646 	}
647 
648 	/**
649 	 * Sets the logical @sort_column_id that this column sorts on when this column
650 	 * is selected for sorting.  Doing so makes the column header clickable.
651 	 *
652 	 * Params:
653 	 *     sortColumnId = The @sort_column_id of the model to sort on.
654 	 */
655 	public void setSortColumnId(int sortColumnId)
656 	{
657 		gtk_tree_view_column_set_sort_column_id(gtkTreeViewColumn, sortColumnId);
658 	}
659 
660 	/**
661 	 * Call this function with a @setting of %TRUE to display an arrow in
662 	 * the header button indicating the column is sorted. Call
663 	 * gtk_tree_view_column_set_sort_order() to change the direction of
664 	 * the arrow.
665 	 *
666 	 * Params:
667 	 *     setting = %TRUE to display an indicator that the column is sorted
668 	 */
669 	public void setSortIndicator(bool setting)
670 	{
671 		gtk_tree_view_column_set_sort_indicator(gtkTreeViewColumn, setting);
672 	}
673 
674 	/**
675 	 * Changes the appearance of the sort indicator.
676 	 *
677 	 * This does not actually sort the model.  Use
678 	 * gtk_tree_view_column_set_sort_column_id() if you want automatic sorting
679 	 * support.  This function is primarily for custom sorting behavior, and should
680 	 * be used in conjunction with gtk_tree_sortable_set_sort_column_id() to do
681 	 * that. For custom models, the mechanism will vary.
682 	 *
683 	 * The sort indicator changes direction to indicate normal sort or reverse sort.
684 	 * Note that you must have the sort indicator enabled to see anything when
685 	 * calling this function; see gtk_tree_view_column_set_sort_indicator().
686 	 *
687 	 * Params:
688 	 *     order = sort order that the sort indicator should indicate
689 	 */
690 	public void setSortOrder(GtkSortType order)
691 	{
692 		gtk_tree_view_column_set_sort_order(gtkTreeViewColumn, order);
693 	}
694 
695 	/**
696 	 * Sets the spacing field of @tree_column, which is the number of pixels to
697 	 * place between cell renderers packed into it.
698 	 *
699 	 * Params:
700 	 *     spacing = distance between cell renderers in pixels.
701 	 */
702 	public void setSpacing(int spacing)
703 	{
704 		gtk_tree_view_column_set_spacing(gtkTreeViewColumn, spacing);
705 	}
706 
707 	/**
708 	 * Sets the title of the @tree_column.  If a custom widget has been set, then
709 	 * this value is ignored.
710 	 *
711 	 * Params:
712 	 *     title = The title of the @tree_column.
713 	 */
714 	public void setTitle(string title)
715 	{
716 		gtk_tree_view_column_set_title(gtkTreeViewColumn, Str.toStringz(title));
717 	}
718 
719 	/**
720 	 * Sets the visibility of @tree_column.
721 	 *
722 	 * Params:
723 	 *     visible = %TRUE if the @tree_column is visible.
724 	 */
725 	public void setVisible(bool visible)
726 	{
727 		gtk_tree_view_column_set_visible(gtkTreeViewColumn, visible);
728 	}
729 
730 	/**
731 	 * Sets the widget in the header to be @widget.  If widget is %NULL, then the
732 	 * header button is set with a #GtkLabel set to the title of @tree_column.
733 	 *
734 	 * Params:
735 	 *     widget = A child #GtkWidget, or %NULL.
736 	 */
737 	public void setWidget(Widget widget)
738 	{
739 		gtk_tree_view_column_set_widget(gtkTreeViewColumn, (widget is null) ? null : widget.getWidgetStruct());
740 	}
741 
742 	/** */
743 	gulong addOnClicked(void delegate(TreeViewColumn) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)
744 	{
745 		return Signals.connect(this, "clicked", dlg, connectFlags ^ ConnectFlags.SWAPPED);
746 	}
747 }