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.Grid; 26 27 private import glib.ConstructionException; 28 private import gobject.ObjectG; 29 private import gtk.Container; 30 private import gtk.OrientableIF; 31 private import gtk.OrientableT; 32 private import gtk.Widget; 33 private import gtk.c.functions; 34 public import gtk.c.types; 35 public import gtkc.gtktypes; 36 37 38 /** 39 * GtkGrid is a container which arranges its child widgets in 40 * rows and columns. It is a very similar to #GtkTable and #GtkBox, 41 * but it consistently uses #GtkWidget’s #GtkWidget:margin and #GtkWidget:expand 42 * properties instead of custom child properties, and it fully supports 43 * [height-for-width geometry management][geometry-management]. 44 * 45 * Children are added using gtk_grid_attach(). They can span multiple 46 * rows or columns. It is also possible to add a child next to an 47 * existing child, using gtk_grid_attach_next_to(). The behaviour of 48 * GtkGrid when several children occupy the same grid cell is undefined. 49 * 50 * GtkGrid can be used like a #GtkBox by just using gtk_container_add(), 51 * which will place children next to each other in the direction determined 52 * by the #GtkOrientable:orientation property. 53 * 54 * # CSS nodes 55 * 56 * GtkGrid uses a single CSS node with name grid. 57 */ 58 public class Grid : Container, OrientableIF 59 { 60 /** the main Gtk struct */ 61 protected GtkGrid* gtkGrid; 62 63 /** Get the main Gtk struct */ 64 public GtkGrid* getGridStruct(bool transferOwnership = false) 65 { 66 if (transferOwnership) 67 ownedRef = false; 68 return gtkGrid; 69 } 70 71 /** the main Gtk struct as a void* */ 72 protected override void* getStruct() 73 { 74 return cast(void*)gtkGrid; 75 } 76 77 /** 78 * Sets our main struct and passes it to the parent class. 79 */ 80 public this (GtkGrid* gtkGrid, bool ownedRef = false) 81 { 82 this.gtkGrid = gtkGrid; 83 super(cast(GtkContainer*)gtkGrid, ownedRef); 84 } 85 86 // add the Orientable capabilities 87 mixin OrientableT!(GtkGrid); 88 89 90 /** */ 91 public static GType getType() 92 { 93 return gtk_grid_get_type(); 94 } 95 96 /** 97 * Creates a new grid widget. 98 * 99 * Returns: the new #GtkGrid 100 * 101 * Throws: ConstructionException GTK+ fails to create the object. 102 */ 103 public this() 104 { 105 auto p = gtk_grid_new(); 106 107 if(p is null) 108 { 109 throw new ConstructionException("null returned by new"); 110 } 111 112 this(cast(GtkGrid*) p); 113 } 114 115 /** 116 * Adds a widget to the grid. 117 * 118 * The position of @child is determined by @left and @top. The 119 * number of “cells” that @child will occupy is determined by 120 * @width and @height. 121 * 122 * Params: 123 * child = the widget to add 124 * left = the column number to attach the left side of @child to 125 * top = the row number to attach the top side of @child to 126 * width = the number of columns that @child will span 127 * height = the number of rows that @child will span 128 */ 129 public void attach(Widget child, int left, int top, int width, int height) 130 { 131 gtk_grid_attach(gtkGrid, (child is null) ? null : child.getWidgetStruct(), left, top, width, height); 132 } 133 134 /** 135 * Adds a widget to the grid. 136 * 137 * The widget is placed next to @sibling, on the side determined by 138 * @side. When @sibling is %NULL, the widget is placed in row (for 139 * left or right placement) or column 0 (for top or bottom placement), 140 * at the end indicated by @side. 141 * 142 * Attaching widgets labeled [1], [2], [3] with @sibling == %NULL and 143 * @side == %GTK_POS_LEFT yields a layout of [3][2][1]. 144 * 145 * Params: 146 * child = the widget to add 147 * sibling = the child of @grid that @child will be placed 148 * next to, or %NULL to place @child at the beginning or end 149 * side = the side of @sibling that @child is positioned next to 150 * width = the number of columns that @child will span 151 * height = the number of rows that @child will span 152 */ 153 public void attachNextTo(Widget child, Widget sibling, GtkPositionType side, int width, int height) 154 { 155 gtk_grid_attach_next_to(gtkGrid, (child is null) ? null : child.getWidgetStruct(), (sibling is null) ? null : sibling.getWidgetStruct(), side, width, height); 156 } 157 158 /** 159 * Returns which row defines the global baseline of @grid. 160 * 161 * Returns: the row index defining the global baseline 162 * 163 * Since: 3.10 164 */ 165 public int getBaselineRow() 166 { 167 return gtk_grid_get_baseline_row(gtkGrid); 168 } 169 170 /** 171 * Gets the child of @grid whose area covers the grid 172 * cell whose upper left corner is at @left, @top. 173 * 174 * Params: 175 * left = the left edge of the cell 176 * top = the top edge of the cell 177 * 178 * Returns: the child at the given position, or %NULL 179 * 180 * Since: 3.2 181 */ 182 public Widget getChildAt(int left, int top) 183 { 184 auto p = gtk_grid_get_child_at(gtkGrid, left, top); 185 186 if(p is null) 187 { 188 return null; 189 } 190 191 return ObjectG.getDObject!(Widget)(cast(GtkWidget*) p); 192 } 193 194 /** 195 * Returns whether all columns of @grid have the same width. 196 * 197 * Returns: whether all columns of @grid have the same width. 198 */ 199 public bool getColumnHomogeneous() 200 { 201 return gtk_grid_get_column_homogeneous(gtkGrid) != 0; 202 } 203 204 /** 205 * Returns the amount of space between the columns of @grid. 206 * 207 * Returns: the column spacing of @grid 208 */ 209 public uint getColumnSpacing() 210 { 211 return gtk_grid_get_column_spacing(gtkGrid); 212 } 213 214 /** 215 * Returns the baseline position of @row as set 216 * by gtk_grid_set_row_baseline_position() or the default value 217 * %GTK_BASELINE_POSITION_CENTER. 218 * 219 * Params: 220 * row = a row index 221 * 222 * Returns: the baseline position of @row 223 * 224 * Since: 3.10 225 */ 226 public GtkBaselinePosition getRowBaselinePosition(int row) 227 { 228 return gtk_grid_get_row_baseline_position(gtkGrid, row); 229 } 230 231 /** 232 * Returns whether all rows of @grid have the same height. 233 * 234 * Returns: whether all rows of @grid have the same height. 235 */ 236 public bool getRowHomogeneous() 237 { 238 return gtk_grid_get_row_homogeneous(gtkGrid) != 0; 239 } 240 241 /** 242 * Returns the amount of space between the rows of @grid. 243 * 244 * Returns: the row spacing of @grid 245 */ 246 public uint getRowSpacing() 247 { 248 return gtk_grid_get_row_spacing(gtkGrid); 249 } 250 251 /** 252 * Inserts a column at the specified position. 253 * 254 * Children which are attached at or to the right of this position 255 * are moved one column to the right. Children which span across this 256 * position are grown to span the new column. 257 * 258 * Params: 259 * position = the position to insert the column at 260 * 261 * Since: 3.2 262 */ 263 public void insertColumn(int position) 264 { 265 gtk_grid_insert_column(gtkGrid, position); 266 } 267 268 /** 269 * Inserts a row or column at the specified position. 270 * 271 * The new row or column is placed next to @sibling, on the side 272 * determined by @side. If @side is %GTK_POS_TOP or %GTK_POS_BOTTOM, 273 * a row is inserted. If @side is %GTK_POS_LEFT of %GTK_POS_RIGHT, 274 * a column is inserted. 275 * 276 * Params: 277 * sibling = the child of @grid that the new row or column will be 278 * placed next to 279 * side = the side of @sibling that @child is positioned next to 280 * 281 * Since: 3.2 282 */ 283 public void insertNextTo(Widget sibling, GtkPositionType side) 284 { 285 gtk_grid_insert_next_to(gtkGrid, (sibling is null) ? null : sibling.getWidgetStruct(), side); 286 } 287 288 /** 289 * Inserts a row at the specified position. 290 * 291 * Children which are attached at or below this position 292 * are moved one row down. Children which span across this 293 * position are grown to span the new row. 294 * 295 * Params: 296 * position = the position to insert the row at 297 * 298 * Since: 3.2 299 */ 300 public void insertRow(int position) 301 { 302 gtk_grid_insert_row(gtkGrid, position); 303 } 304 305 /** 306 * Removes a column from the grid. 307 * 308 * Children that are placed in this column are removed, 309 * spanning children that overlap this column have their 310 * width reduced by one, and children after the column 311 * are moved to the left. 312 * 313 * Params: 314 * position = the position of the column to remove 315 * 316 * Since: 3.10 317 */ 318 public void removeColumn(int position) 319 { 320 gtk_grid_remove_column(gtkGrid, position); 321 } 322 323 /** 324 * Removes a row from the grid. 325 * 326 * Children that are placed in this row are removed, 327 * spanning children that overlap this row have their 328 * height reduced by one, and children below the row 329 * are moved up. 330 * 331 * Params: 332 * position = the position of the row to remove 333 * 334 * Since: 3.10 335 */ 336 public void removeRow(int position) 337 { 338 gtk_grid_remove_row(gtkGrid, position); 339 } 340 341 /** 342 * Sets which row defines the global baseline for the entire grid. 343 * Each row in the grid can have its own local baseline, but only 344 * one of those is global, meaning it will be the baseline in the 345 * parent of the @grid. 346 * 347 * Params: 348 * row = the row index 349 * 350 * Since: 3.10 351 */ 352 public void setBaselineRow(int row) 353 { 354 gtk_grid_set_baseline_row(gtkGrid, row); 355 } 356 357 /** 358 * Sets whether all columns of @grid will have the same width. 359 * 360 * Params: 361 * homogeneous = %TRUE to make columns homogeneous 362 */ 363 public void setColumnHomogeneous(bool homogeneous) 364 { 365 gtk_grid_set_column_homogeneous(gtkGrid, homogeneous); 366 } 367 368 /** 369 * Sets the amount of space between columns of @grid. 370 * 371 * Params: 372 * spacing = the amount of space to insert between columns 373 */ 374 public void setColumnSpacing(uint spacing) 375 { 376 gtk_grid_set_column_spacing(gtkGrid, spacing); 377 } 378 379 /** 380 * Sets how the baseline should be positioned on @row of the 381 * grid, in case that row is assigned more space than is requested. 382 * 383 * Params: 384 * row = a row index 385 * pos = a #GtkBaselinePosition 386 * 387 * Since: 3.10 388 */ 389 public void setRowBaselinePosition(int row, GtkBaselinePosition pos) 390 { 391 gtk_grid_set_row_baseline_position(gtkGrid, row, pos); 392 } 393 394 /** 395 * Sets whether all rows of @grid will have the same height. 396 * 397 * Params: 398 * homogeneous = %TRUE to make rows homogeneous 399 */ 400 public void setRowHomogeneous(bool homogeneous) 401 { 402 gtk_grid_set_row_homogeneous(gtkGrid, homogeneous); 403 } 404 405 /** 406 * Sets the amount of space between rows of @grid. 407 * 408 * Params: 409 * spacing = the amount of space to insert between rows 410 */ 411 public void setRowSpacing(uint spacing) 412 { 413 gtk_grid_set_row_spacing(gtkGrid, spacing); 414 } 415 }