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.CellRendererToggle; 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.CellRenderer; 32 private import gtkc.gtk; 33 public import gtkc.gtktypes; 34 private import std.algorithm; 35 36 37 /** 38 * #GtkCellRendererToggle renders a toggle button in a cell. The 39 * button is drawn as a radio or a checkbutton, depending on the 40 * #GtkCellRendererToggle:radio property. 41 * When activated, it emits the #GtkCellRendererToggle::toggled signal. 42 */ 43 public class CellRendererToggle : CellRenderer 44 { 45 /** the main Gtk struct */ 46 protected GtkCellRendererToggle* gtkCellRendererToggle; 47 48 /** Get the main Gtk struct */ 49 public GtkCellRendererToggle* getCellRendererToggleStruct(bool transferOwnership = false) 50 { 51 if (transferOwnership) 52 ownedRef = false; 53 return gtkCellRendererToggle; 54 } 55 56 /** the main Gtk struct as a void* */ 57 protected override void* getStruct() 58 { 59 return cast(void*)gtkCellRendererToggle; 60 } 61 62 protected override void setStruct(GObject* obj) 63 { 64 gtkCellRendererToggle = cast(GtkCellRendererToggle*)obj; 65 super.setStruct(obj); 66 } 67 68 /** 69 * Sets our main struct and passes it to the parent class. 70 */ 71 public this (GtkCellRendererToggle* gtkCellRendererToggle, bool ownedRef = false) 72 { 73 this.gtkCellRendererToggle = gtkCellRendererToggle; 74 super(cast(GtkCellRenderer*)gtkCellRendererToggle, ownedRef); 75 } 76 77 78 /** */ 79 public static GType getType() 80 { 81 return gtk_cell_renderer_toggle_get_type(); 82 } 83 84 /** 85 * Creates a new #GtkCellRendererToggle. Adjust rendering 86 * parameters using object properties. Object properties can be set 87 * globally (with g_object_set()). Also, with #GtkTreeViewColumn, you 88 * can bind a property to a value in a #GtkTreeModel. For example, you 89 * can bind the “active” property on the cell renderer to a boolean value 90 * in the model, thus causing the check button to reflect the state of 91 * the model. 92 * 93 * Returns: the new cell renderer 94 * 95 * Throws: ConstructionException GTK+ fails to create the object. 96 */ 97 public this() 98 { 99 auto p = gtk_cell_renderer_toggle_new(); 100 101 if(p is null) 102 { 103 throw new ConstructionException("null returned by new"); 104 } 105 106 this(cast(GtkCellRendererToggle*) p); 107 } 108 109 /** 110 * Returns whether the cell renderer is activatable. See 111 * gtk_cell_renderer_toggle_set_activatable(). 112 * 113 * Returns: %TRUE if the cell renderer is activatable. 114 * 115 * Since: 2.18 116 */ 117 public bool getActivatable() 118 { 119 return gtk_cell_renderer_toggle_get_activatable(gtkCellRendererToggle) != 0; 120 } 121 122 /** 123 * Returns whether the cell renderer is active. See 124 * gtk_cell_renderer_toggle_set_active(). 125 * 126 * Returns: %TRUE if the cell renderer is active. 127 */ 128 public bool getActive() 129 { 130 return gtk_cell_renderer_toggle_get_active(gtkCellRendererToggle) != 0; 131 } 132 133 /** 134 * Returns whether we’re rendering radio toggles rather than checkboxes. 135 * 136 * Returns: %TRUE if we’re rendering radio toggles rather than checkboxes 137 */ 138 public bool getRadio() 139 { 140 return gtk_cell_renderer_toggle_get_radio(gtkCellRendererToggle) != 0; 141 } 142 143 /** 144 * Makes the cell renderer activatable. 145 * 146 * Params: 147 * setting = the value to set. 148 * 149 * Since: 2.18 150 */ 151 public void setActivatable(bool setting) 152 { 153 gtk_cell_renderer_toggle_set_activatable(gtkCellRendererToggle, setting); 154 } 155 156 /** 157 * Activates or deactivates a cell renderer. 158 * 159 * Params: 160 * setting = the value to set. 161 */ 162 public void setActive(bool setting) 163 { 164 gtk_cell_renderer_toggle_set_active(gtkCellRendererToggle, setting); 165 } 166 167 /** 168 * If @radio is %TRUE, the cell renderer renders a radio toggle 169 * (i.e. a toggle in a group of mutually-exclusive toggles). 170 * If %FALSE, it renders a check toggle (a standalone boolean option). 171 * This can be set globally for the cell renderer, or changed just 172 * before rendering each cell in the model (for #GtkTreeView, you set 173 * up a per-row setting using #GtkTreeViewColumn to associate model 174 * columns with cell renderer properties). 175 * 176 * Params: 177 * radio = %TRUE to make the toggle look like a radio button 178 */ 179 public void setRadio(bool radio) 180 { 181 gtk_cell_renderer_toggle_set_radio(gtkCellRendererToggle, radio); 182 } 183 184 protected class OnToggledDelegateWrapper 185 { 186 static OnToggledDelegateWrapper[] listeners; 187 void delegate(string, CellRendererToggle) dlg; 188 gulong handlerId; 189 190 this(void delegate(string, CellRendererToggle) dlg) 191 { 192 this.dlg = dlg; 193 this.listeners ~= this; 194 } 195 196 void remove(OnToggledDelegateWrapper source) 197 { 198 foreach(index, wrapper; listeners) 199 { 200 if (wrapper.handlerId == source.handlerId) 201 { 202 listeners[index] = null; 203 listeners = std.algorithm.remove(listeners, index); 204 break; 205 } 206 } 207 } 208 } 209 210 /** 211 * The ::toggled signal is emitted when the cell is toggled. 212 * 213 * It is the responsibility of the application to update the model 214 * with the correct value to store at @path. Often this is simply the 215 * opposite of the value currently stored at @path. 216 * 217 * Params: 218 * path = string representation of #GtkTreePath describing the 219 * event location 220 */ 221 gulong addOnToggled(void delegate(string, CellRendererToggle) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 222 { 223 auto wrapper = new OnToggledDelegateWrapper(dlg); 224 wrapper.handlerId = Signals.connectData( 225 this, 226 "toggled", 227 cast(GCallback)&callBackToggled, 228 cast(void*)wrapper, 229 cast(GClosureNotify)&callBackToggledDestroy, 230 connectFlags); 231 return wrapper.handlerId; 232 } 233 234 extern(C) static void callBackToggled(GtkCellRendererToggle* cellrenderertoggleStruct, char* path, OnToggledDelegateWrapper wrapper) 235 { 236 wrapper.dlg(Str.toString(path), wrapper.outer); 237 } 238 239 extern(C) static void callBackToggledDestroy(OnToggledDelegateWrapper wrapper, GClosure* closure) 240 { 241 wrapper.remove(wrapper); 242 } 243 }