Changeset 517
- Timestamp:
- 07/05/08 10:03:45 (2 months ago)
- Files:
-
- trunk/src/build/gtkD.d (modified) (1 diff)
- trunk/src/gtk/CellView.d (modified) (4 diffs)
- trunk/src/gtk/ComboBox.d (modified) (7 diffs)
- trunk/src/gtk/ComboBoxEntry.d (modified) (3 diffs)
- trunk/src/gtk/EntryCompletion.d (modified) (10 diffs)
- trunk/src/gtk/IconView.d (modified) (6 diffs)
- trunk/src/gtk/ListStore.d (modified) (6 diffs)
- trunk/src/gtk/TreeDragSource.d (modified) (3 diffs)
- trunk/src/gtk/TreeIter.d (modified) (5 diffs)
- trunk/src/gtk/TreeModel.d (modified) (4 diffs)
- trunk/src/gtk/TreeModelFilter.d (modified) (7 diffs)
- trunk/src/gtk/TreeModelIF.d (added)
- trunk/src/gtk/TreeModelSort.d (modified) (7 diffs)
- trunk/src/gtk/TreeModelT.d (added)
- trunk/src/gtk/TreePath.d (modified) (3 diffs)
- trunk/src/gtk/TreeRowReference.d (modified) (7 diffs)
- trunk/src/gtk/TreeSelection.d (modified) (4 diffs)
- trunk/src/gtk/TreeStore.d (modified) (5 diffs)
- trunk/src/gtk/TreeView.d (modified) (9 diffs)
- trunk/src/gtk/TreeViewColumn.d (modified) (4 diffs)
- trunk/src/gtk/Widget.d (modified) (1 diff)
- trunk/src/gtkc/gtk.d (modified) (5 diffs)
- trunk/src/gtkc/gtktypes.d (modified) (1 diff)
- trunk/wrap/APILookupGtk.txt (modified) (34 diffs)
- trunk/wrap/utils/GtkDClass.d (modified) (1 diff)
- trunk/wrap/utils/funct.d (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/build/gtkD.d
r508 r517 272 272 private import gtk.TextView; 273 273 private import gtk.TextChildAnchor; 274 private import gtk.TreeModel; 274 private import gtk.TreePath; 275 private import gtk.TreeModelIF; 276 private import gtk.TreeModelT; 275 277 private import gtk.TreeIter; 276 private import gtk.TreePath;277 278 private import gtk.TreeRowReference; 278 279 private import gtk.TreeIterError; 280 private import gtk.TreeModel; 279 281 private import gtk.TreeSelection; 280 282 private import gtk.TreeViewColumn; trunk/src/gtk/CellView.d
r506 r517 48 48 * - glib.Str 49 49 * - gdk.Pixbuf 50 * - gtk.TreeModel 50 * - gtk.TreeModelIF 51 51 * - gtk.TreePath 52 52 * - gdk.Color … … 56 56 * - GdkColor* -> Color 57 57 * - GdkPixbuf* -> Pixbuf 58 * - GtkTreeModel* -> TreeModel 58 * - GtkTreeModel* -> TreeModelIF 59 59 * - GtkTreePath* -> TreePath 60 60 * module aliases: … … 72 72 private import glib.Str; 73 73 private import gdk.Pixbuf; 74 private import gtk.TreeModel ;74 private import gtk.TreeModelIF; 75 75 private import gtk.TreePath; 76 76 private import gdk.Color; … … 202 202 * model = a GtkTreeModel 203 203 */ 204 public void setModel(TreeModel model)204 public void setModel(TreeModelIF model) 205 205 { 206 206 // void gtk_cell_view_set_model (GtkCellView *cell_view, GtkTreeModel *model); 207 gtk_cell_view_set_model(gtkCellView, (model is null) ? null : model.getTreeModel Struct());207 gtk_cell_view_set_model(gtkCellView, (model is null) ? null : model.getTreeModelTStruct()); 208 208 } 209 209 trunk/src/gtk/ComboBox.d
r506 r517 50 50 * - glib.Str 51 51 * - gtk.TreeModel 52 * - gtk.TreeModelIF 52 53 * - gtk.TreeIter 53 54 * - gtk.CellRenderer … … 58 59 * - AtkObject* -> ObjectAtk 59 60 * - GtkTreeIter* -> TreeIter 60 * - GtkTreeModel* -> TreeModel 61 * - GtkTreeModel* -> TreeModelIF 61 62 * module aliases: 62 63 * local aliases: … … 76 77 private import glib.Str; 77 78 private import gtk.TreeModel; 79 private import gtk.TreeModelIF; 78 80 private import gtk.TreeIter; 79 81 private import gtk.CellRenderer; … … 207 209 { 208 210 TreeIter iter = new TreeIter(); 209 TreeModel model = getModel();211 TreeModelIF model = getModel(); 210 212 iter.setModel(model); 211 213 int index = 0; … … 401 403 * model = A GtkTreeModel. 402 404 */ 403 public this (TreeModel model)405 public this (TreeModelIF model) 404 406 { 405 407 // GtkWidget* gtk_combo_box_new_with_model (GtkTreeModel *model); 406 auto p = gtk_combo_box_new_with_model((model is null) ? null : model.getTreeModel Struct());408 auto p = gtk_combo_box_new_with_model((model is null) ? null : model.getTreeModelTStruct()); 407 409 if(p is null) 408 410 { … … 550 552 * Returns: A GtkTreeModel which was passed during construction. 551 553 */ 552 public TreeModel getModel()554 public TreeModelIF getModel() 553 555 { 554 556 // GtkTreeModel* gtk_combo_box_get_model (GtkComboBox *combo_box); … … 572 574 * model = A GtkTreeModel 573 575 */ 574 public void setModel(TreeModel model)576 public void setModel(TreeModelIF model) 575 577 { 576 578 // void gtk_combo_box_set_model (GtkComboBox *combo_box, GtkTreeModel *model); 577 gtk_combo_box_set_model(gtkComboBox, (model is null) ? null : model.getTreeModel Struct());579 gtk_combo_box_set_model(gtkComboBox, (model is null) ? null : model.getTreeModelTStruct()); 578 580 } 579 581 trunk/src/gtk/ComboBoxEntry.d
r506 r517 45 45 * omit signals: 46 46 * imports: 47 * - gtk.TreeModel 47 * - gtk.TreeModelIF 48 48 * - gtk.Adjustment 49 49 * structWrap: 50 50 * - GtkAdjustment* -> Adjustment 51 * - GtkTreeModel* -> TreeModel 51 * - GtkTreeModel* -> TreeModelIF 52 52 * module aliases: 53 53 * local aliases: … … 62 62 63 63 64 private import gtk.TreeModel ;64 private import gtk.TreeModelIF; 65 65 private import gtk.Adjustment; 66 66 … … 175 175 * textColumn = A column in model to get the strings from. 176 176 */ 177 public this (TreeModel model, int textColumn)177 public this (TreeModelIF model, int textColumn) 178 178 { 179 179 // GtkWidget* gtk_combo_box_entry_new_with_model (GtkTreeModel *model, gint text_column); 180 auto p = gtk_combo_box_entry_new_with_model((model is null) ? null : model.getTreeModel Struct(), textColumn);180 auto p = gtk_combo_box_entry_new_with_model((model is null) ? null : model.getTreeModelTStruct(), textColumn); 181 181 if(p is null) 182 182 { trunk/src/gtk/EntryCompletion.d
r506 r517 47 47 * - gtk.Widget 48 48 * - gtk.TreeModel 49 * - gtk.TreeModelIF 49 50 * structWrap: 50 * - GtkTreeModel* -> TreeModel 51 * - GtkTreeModel* -> TreeModelIF 51 52 * - GtkWidget* -> Widget 52 53 * module aliases: … … 67 68 private import gtk.Widget; 68 69 private import gtk.TreeModel; 70 private import gtk.TreeModelIF; 69 71 70 72 … … 174 176 } 175 177 176 gboolean delegate(TreeModel , GtkTreeIter*, EntryCompletion)[] onCursorOnMatchListeners;178 gboolean delegate(TreeModelIF, GtkTreeIter*, EntryCompletion)[] onCursorOnMatchListeners; 177 179 /** 178 180 * Gets emitted when a match from the cursor is on a match … … 182 184 * Since 2.12 183 185 */ 184 void addOnCursorOnMatch(gboolean delegate(TreeModel , GtkTreeIter*, EntryCompletion) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)186 void addOnCursorOnMatch(gboolean delegate(TreeModelIF, GtkTreeIter*, EntryCompletion) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 185 187 { 186 188 if ( !("cursor-on-match" in connectedSignals) ) … … 201 203 bool consumed = false; 202 204 203 foreach ( gboolean delegate(TreeModel , GtkTreeIter*, EntryCompletion) dlg ; entryCompletion.onCursorOnMatchListeners )205 foreach ( gboolean delegate(TreeModelIF, GtkTreeIter*, EntryCompletion) dlg ; entryCompletion.onCursorOnMatchListeners ) 204 206 { 205 207 dlg(new TreeModel(model), iter, entryCompletion); … … 247 249 } 248 250 249 gboolean delegate(TreeModel , GtkTreeIter*, EntryCompletion)[] onMatchSelectedListeners;251 gboolean delegate(TreeModelIF, GtkTreeIter*, EntryCompletion)[] onMatchSelectedListeners; 250 252 /** 251 253 * Gets emitted when a match from the list is selected. … … 255 257 * Since 2.4 256 258 */ 257 void addOnMatchSelected(gboolean delegate(TreeModel , GtkTreeIter*, EntryCompletion) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)259 void addOnMatchSelected(gboolean delegate(TreeModelIF, GtkTreeIter*, EntryCompletion) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 258 260 { 259 261 if ( !("match-selected" in connectedSignals) ) … … 274 276 bool consumed = false; 275 277 276 foreach ( gboolean delegate(TreeModel , GtkTreeIter*, EntryCompletion) dlg ; entryCompletion.onMatchSelectedListeners )278 foreach ( gboolean delegate(TreeModelIF, GtkTreeIter*, EntryCompletion) dlg ; entryCompletion.onMatchSelectedListeners ) 277 279 { 278 280 dlg(new TreeModel(model), iter, entryCompletion); … … 325 327 * model = The GtkTreeModel. 326 328 */ 327 public void setModel(TreeModel model)329 public void setModel(TreeModelIF model) 328 330 { 329 331 // void gtk_entry_completion_set_model (GtkEntryCompletion *completion, GtkTreeModel *model); 330 gtk_entry_completion_set_model(gtkEntryCompletion, (model is null) ? null : model.getTreeModel Struct());332 gtk_entry_completion_set_model(gtkEntryCompletion, (model is null) ? null : model.getTreeModelTStruct()); 331 333 } 332 334 … … 337 339 * Returns: A GtkTreeModel, or NULL if none is currently being used. 338 340 */ 339 public TreeModel getModel()341 public TreeModelIF getModel() 340 342 { 341 343 // GtkTreeModel* gtk_entry_completion_get_model (GtkEntryCompletion *completion); trunk/src/gtk/IconView.d
r506 r517 45 45 * imports: 46 46 * - gtk.TreeModel 47 * - gtk.TreeModelIF 47 48 * - gtk.TreePath 48 49 * - gtk.CellRenderer … … 57 58 * - GtkTooltip* -> Tooltip 58 59 * - GtkTreeIter* -> TreeIter 59 * - GtkTreeModel* -> TreeModel 60 * - GtkTreeModel* -> TreeModelIF 60 61 * - GtkTreePath* -> TreePath 61 62 * module aliases: … … 74 75 75 76 private import gtk.TreeModel; 77 private import gtk.TreeModelIF; 76 78 private import gtk.TreePath; 77 79 private import gtk.CellRenderer; … … 433 435 * model = The model. 434 436 */ 435 public this (TreeModel model)437 public this (TreeModelIF model) 436 438 { 437 439 // GtkWidget* gtk_icon_view_new_with_model (GtkTreeModel *model); 438 auto p = gtk_icon_view_new_with_model((model is null) ? null : model.getTreeModel Struct());440 auto p = gtk_icon_view_new_with_model((model is null) ? null : model.getTreeModelTStruct()); 439 441 if(p is null) 440 442 { … … 455 457 * model = The model. 456 458 */ 457 public void setModel(TreeModel model)459 public void setModel(TreeModelIF model) 458 460 { 459 461 // void gtk_icon_view_set_model (GtkIconView *icon_view, GtkTreeModel *model); 460 gtk_icon_view_set_model(gtkIconView, (model is null) ? null : model.getTreeModel Struct());462 gtk_icon_view_set_model(gtkIconView, (model is null) ? null : model.getTreeModelTStruct()); 461 463 } 462 464 … … 467 469 * Returns: A GtkTreeModel, or NULL if none is currently being used. 468 470 */ 469 public TreeModel getModel()471 public TreeModelIF getModel() 470 472 { 471 473 // GtkTreeModel* gtk_icon_view_get_model (GtkIconView *icon_view); trunk/src/gtk/ListStore.d
r506 r517 34 34 * interface Code: No 35 35 * template for: 36 * extend = GtkTreeModel36 * extend = 37 37 * implements: 38 38 * - BuildableIF 39 * - TreeModelIF 39 40 * prefixes: 40 41 * - gtk_list_store_ … … 54 55 * - gtk.BuildableIF 55 56 * - gtk.BuildableT 57 * - gtk.TreePath 58 * - gtk.TreeModelT 59 * - gtk.TreeModelIF 60 * - gobject.Signals 56 61 * structWrap: 57 62 * - GValue* -> Value … … 77 82 private import gtk.BuildableIF; 78 83 private import gtk.BuildableT; 79 80 81 82 private import gtk.TreeModel; 84 private import gtk.TreePath; 85 private import gtk.TreeModelT; 86 private import gtk.TreeModelIF; 87 private import gobject.Signals; 88 89 90 91 private import gobject.ObjectG; 83 92 84 93 /** … … 200 209 * </object> 201 210 */ 202 public class ListStore : TreeModel, BuildableIF211 public class ListStore : ObjectG, BuildableIF, TreeModelIF 203 212 { 204 213 … … 237 246 return; 238 247 } 239 super(cast(G tkTreeModel*)gtkListStore);248 super(cast(GObject*)gtkListStore); 240 249 this.gtkListStore = gtkListStore; 241 250 } … … 243 252 // add the Buildable capabilities 244 253 mixin BuildableT!(GtkListStore); 254 255 // add the TreeModel capabilities 256 mixin TreeModelT!(GtkListStore); 245 257 246 258 /** trunk/src/gtk/TreeDragSource.d
r480 r517 45 45 * imports: 46 46 * - gtk.TreePath 47 * - gtk.TreeModel 47 * - gtk.TreeModelIF 48 48 * structWrap: 49 * - GtkTreeModel* -> TreeModel 49 * - GtkTreeModel* -> TreeModelIF 50 50 * - GtkTreePath* -> TreePath 51 51 * module aliases: … … 62 62 63 63 private import gtk.TreePath; 64 private import gtk.TreeModel ;64 private import gtk.TreeModelIF; 65 65 66 66 … … 211 211 * Returns: TRUE if the GtkSelectionData had the proper target type to allow us to set a tree row 212 212 */ 213 public static int treeSetRowDragData(GtkSelectionData* selectionData, TreeModel treeModel, TreePath path)213 public static int treeSetRowDragData(GtkSelectionData* selectionData, TreeModelIF treeModel, TreePath path) 214 214 { 215 215 // gboolean gtk_tree_set_row_drag_data (GtkSelectionData *selection_data, GtkTreeModel *tree_model, GtkTreePath *path); 216 return gtk_tree_set_row_drag_data(selectionData, (treeModel is null) ? null : treeModel.getTreeModel Struct(), (path is null) ? null : path.getTreePathStruct());216 return gtk_tree_set_row_drag_data(selectionData, (treeModel is null) ? null : treeModel.getTreeModelTStruct(), (path is null) ? null : path.getTreePathStruct()); 217 217 } 218 218 trunk/src/gtk/TreeIter.d
r480 r517 42 42 * omit code: 43 43 * omit signals: 44 * - row-changed 45 * - row-deleted 46 * - row-has-child-toggled 47 * - row-inserted 48 * - rows-reordered 44 49 * imports: 45 50 * - glib.Str 46 * - gtk.TreeModel 51 * - gtk.TreeModelIF 47 52 * - gtk.TreePath 48 53 * - gtk.TreeIterError 49 * - gobject.Value ;54 * - gobject.Value 50 55 * structWrap: 51 56 * - GtkTreeIter* -> TreeIter 52 * - GtkTreeModel* -> TreeModel53 57 * module aliases: 54 58 * local aliases: … … 66 70 67 71 private import glib.Str; 68 private import gtk.TreeModel ;72 private import gtk.TreeModelIF; 69 73 private import gtk.TreePath; 70 74 private import gtk.TreeIterError; 71 private import gobject.Value; ;75 private import gobject.Value; 72 76 73 77 … … 241 245 * is created from the model. 242 246 */ 243 GtkTreeModel *gtkTreeModel;247 GtkTreeModel* gtkTreeModel; 244 248 245 249 /** */ 246 public void setModel(GtkTreeModel *gtkTreeModel)250 public void setModel(GtkTreeModel* gtkTreeModel) 247 251 { 248 252 this.gtkTreeModel = gtkTreeModel; … … 250 254 251 255 /** */ 252 public void setModel(TreeModel treeModel)253 { 254 this.gtkTreeModel = treeModel.getTreeModel Struct();256 public void setModel(TreeModelIF treeModel) 257 { 258 this.gtkTreeModel = treeModel.getTreeModelTStruct(); 255 259 } 256 260 257 261 /** */ 258 public this(TreeModel treeModel, TreePath treePath)262 public this(TreeModelIF treeModel, TreePath treePath) 259 263 { 260 264 this(); 261 265 setModel(treeModel); 262 266 if ( gtk_tree_model_get_iter_from_string( 263 treeModel.getTreeModel Struct(),267 treeModel.getTreeModelTStruct(), 264 268 getTreeIterStruct(), Str.toStringz(treePath.toString())) ) 265 269 { … … 401 405 } 402 406 403 404 405 406 407 /** 408 */ 409 int[char[]] connectedSignals; 410 411 void delegate(GtkTreePath*, TreeIter, TreeIter)[] onRowChangedListeners; 412 /** 413 * This signal is emitted when a row in the model has changed. 414 */ 415 void addOnRowChanged(void delegate(GtkTreePath*, TreeIter, TreeIter) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 416 { 417 if ( !("row-changed" in connectedSignals) ) 418 { 419 Signals.connectData( 420 getStruct(), 421 "row-changed", 422 cast(GCallback)&callBackRowChanged, 423 cast(void*)this, 424 null, 425 connectFlags); 426 connectedSignals["row-changed"] = 1; 427 } 428 onRowChangedListeners ~= dlg; 429 } 430 extern(C) static void callBackRowChanged(GtkTreeModel* treeModelStruct, GtkTreePath* path, GtkTreeIter* iter, TreeIter treeIter) 431 { 432 bool consumed = false; 433 434 foreach ( void delegate(GtkTreePath*, TreeIter, TreeIter) dlg ; treeIter.onRowChangedListeners ) 435 { 436 dlg(path, new TreeIter(iter), treeIter); 437 } 438 439 return consumed; 440 } 441 442 void delegate(GtkTreePath*, TreeIter)[] onRowDeletedListeners; 443 /** 444 * This signal is emitted when a row has been deleted. 445 * Note that no iterator is passed to the signal handler, 446 * since the row is already deleted. 447 * Implementations of GtkTreeModel must emit row-deleted 448 * before removing the node from its 449 * internal data structures. This is because models and 450 * views which access and monitor this model might have 451 * references on the node which need to be released in the 452 * row-deleted handler. 453 */ 454 void addOnRowDeleted(void delegate(GtkTreePath*, TreeIter) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 455 { 456 if ( !("row-deleted" in connectedSignals) ) 457 { 458 Signals.connectData( 459 getStruct(), 460 "row-deleted", 461 cast(GCallback)&callBackRowDeleted, 462 cast(void*)this, 463 null, 464 connectFlags); 465 connectedSignals["row-deleted"] = 1; 466 } 467 onRowDeletedListeners ~= dlg; 468 } 469 extern(C) static void callBackRowDeleted(GtkTreeModel* treeModelStruct, GtkTreePath* path, TreeIter treeIter) 470 { 471 bool consumed = false; 472 473 foreach ( void delegate(GtkTreePath*, TreeIter) dlg ; treeIter.onRowDeletedListeners ) 474 { 475 dlg(path, treeIter); 476 } 477 478 return consumed; 479 } 480 481 void delegate(GtkTreePath*, TreeIter, TreeIter)[] onRowHasChildToggledListeners; 482 /** 483 * This signal is emitted when a row has gotten the first child row or lost 484 * its last child row. 485 */ 486 void addOnRowHasChildToggled(void delegate(GtkTreePath*, TreeIter, TreeIter) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 487 { 488 if ( !("row-has-child-toggled" in connectedSignals) ) 489 { 490 Signals.connectData( 491 getStruct(), 492 "row-has-child-toggled", 493 cast(GCallback)&callBackRowHasChildToggled, 494 cast(void*)this, 495 null, 496 connectFlags); 497 connectedSignals["row-has-child-toggled"] = 1; 498 } 499 onRowHasChildToggledListeners ~= dlg; 500 } 501 extern(C) static void callBackRowHasChildToggled(GtkTreeModel* treeModelStruct, GtkTreePath* path, GtkTreeIter* iter, TreeIter treeIter) 502 { 503 bool consumed = false; 504 505 foreach ( void delegate(GtkTreePath*, TreeIter, TreeIter) dlg ; treeIter.onRowHasChildToggledListeners ) 506 { 507 dlg(path, new TreeIter(iter), treeIter); 508 } 509 510 return consumed; 511 } 512 513 void delegate(GtkTreePath*, TreeIter, TreeIter)[] onRowInsertedListeners; 514 /** 515 * This signal is emitted when a new row has been inserted in the model. 516 * Note that the row may still be empty at this point, since 517 * it is a common pattern to first insert an empty row, and 518 * then fill it with the desired values. 519 */ 520 void addOnRowInserted(void delegate(GtkTreePath*, TreeIter, TreeIter) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 521 { 522 if ( !("row-inserted" in connectedSignals) ) 523 { 524 Signals.connectData( 525 getStruct(), 526 "row-inserted", 527 cast(GCallback)&callBackRowInserted, 528 cast(void*)this, 529 null, 530 connectFlags); 531 connectedSignals["row-inserted"] = 1; 532 } 533 onRowInsertedListeners ~= dlg; 534 } 535 extern(C) static void callBackRowInserted(GtkTreeModel* treeModelStruct, GtkTreePath* path, GtkTreeIter* iter, TreeIter treeIter) 536 { 537 bool consumed = false; 538 539 foreach ( void delegate(GtkTreePath*, TreeIter, TreeIter) dlg ; treeIter.onRowInsertedListeners ) 540 { 541 dlg(path, new TreeIter(iter), treeIter); 542 } 543 544 return consumed; 545 } 546 547 void delegate(GtkTreePath*, TreeIter, gpointer, TreeIter)[] onRowsReorderedListeners; 548 /** 549 * This signal is emitted when the children of a node in the GtkTreeModel 550 * have been reordered. 551 * Note that this signal is not emitted 552 * when rows are reordered by DND, since this is implemented 553 * by removing and then reinserting the row. 554 * See Also 555 * GtkTreeView, GtkTreeStore, GtkListStore, GtkTreeDnd, GtkTreeSortable 556 * [4] 557 * Here, iter is short for iterator 558 */ 559 void addOnRowsReordered(void delegate(GtkTreePath*, TreeIter, gpointer, TreeIter) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 560 { 561 if ( !("rows-reordered" in connectedSignals) ) 562 { 563 Signals.connectData( 564 getStruct(), 565 "rows-reordered", 566 cast(GCallback)&callBackRowsReordered, 567 cast(void*)this, 568 null, 569 connectFlags); 570 connectedSignals["rows-reordered"] = 1; 571 } 572 onRowsReorderedListeners ~= dlg; 573 } 574 extern(C) static void callBackRowsReordered(GtkTreeModel* treeModelStruct, GtkTreePath* path, GtkTreeIter* iter, gpointer arg3, TreeIter treeIter) 575 { 576 bool consumed = false; 577 578 foreach ( void delegate(GtkTreePath*, TreeIter, gpointer, TreeIter) dlg ; treeIter.onRowsReorderedListeners ) 579 { 580 dlg(path, new TreeIter(iter), arg3, treeIter); 581 } 582 583 return consumed; 584 } 585 407 /** 408 */ 586 409 587 410 /** trunk/src/gtk/TreeModel.d
r506 r517 23 23 /* 24 24 * Conversion parameters: 25 * inFile = GtkTreeModel.html25 * inFile = 26 26 * outPack = gtk 27 27 * outFile = TreeModel 28 * strct = GtkTreeModel28 * strct = 29 29 * realStrct= 30 30 * ctorStrct= … … 32 32 * interf = 33 33 * class Code: Yes 34 * interface Code: Yes34 * interface Code: No 35 35 * template for: 36 * extend = GObject36 * extend = ObjectG 37 37 * implements: 38 * - TreeModelIF 38 39 * prefixes: 39 * - gtk_tree_model_40 40 * omit structs: 41 41 * omit prefixes: 42 * - gtk_tree_row_reference_43 * - gtk_tree_path_44 * - gtk_tree_iter_45 42 * omit code: 46 * - gtk_tree_model_get_iter47 43 * omit signals: 48 44 * imports: 45 * - gobject.ObjectG; 46 * - gtk.TreeModel 49 47 * - glib.Str 50 48 * - gtk.TreeIter 51 49 * - gtk.TreePath 52 50 * - gobject.Value 51 * - gtk.TreeModelT 52 * - gtk.TreeModelIF 53 * - gobject.Signals 53 54 * structWrap: 54 * - GValue* -> Value55 * - GtkTreeIter* -> TreeIter56 * - GtkTreePath* -> TreePath57 55 * module aliases: 58 56 * local aliases: … … 66 64 private import gtkc.gtk; 67 65 68 private import gobject.Signals;69 public import gtkc.gdktypes;70 66 67 private import gobject.ObjectG;; 68 private import gtk.TreeModel; 71 69 private import glib.Str; 72 70 private import gtk.TreeIter; 73 71 private import gtk.TreePath; 74 72 private import gobject.Value; 73 private import gtk.TreeModelT; 74 private import gtk.TreeModelIF; 75 private import gobject.Signals; 75 76 76 77 77 78 78 private import gobject.ObjectG;79 79 80 80 /** 81 * Description82 * The GtkTreeModel interface defines a generic tree interface for use by83 * the GtkTreeView widget. It is an abstract interface, and is designed84 * to be usable with any appropriate data structure. The programmer just85 * has to implement this interface on their own data type for it to be86 * viewable by a GtkTreeView widget.87 * The model is represented as a hierarchical tree of strongly-typed,88 * columned data. In other words, the model can be seen as a tree where89 * every node has different values depending on which column is being90 * queried. The type of data found in a column is determined by using the91 * GType system (ie. G_TYPE_INT, GTK_TYPE_BUTTON, G_TYPE_POINTER, etc.).92 * The types are homogeneous per column across all nodes. It is important93 * to note that this interface only provides a way of examining a model and94 * observing changes. The implementation of each individual model decides95 * how and if changes are made.96 * In order to make life simpler for programmers who do not need to write97 * their own specialized model, two generic models are provided the98 * GtkTreeStore and the GtkListStore. To use these, the developer simply99 * pushes data into these models as necessary. These models provide the100 * data structure as well as all appropriate tree interfaces. As a result,101 * implementing drag and drop, sorting, and storing data is trivial. For102 * the vast majority of trees and lists, these two models are sufficient.103 * Models are accessed on a node/column level of granularity. One can104 * query for the value of a model at a certain node and a certain column105 * on that node. There are two structures used to reference a particular106 * node in a model. They are the GtkTreePath and the GtkTreeIter107 * [4]108 * Most of the interface consists of operations on a GtkTreeIter.109 * A path is essentially a potential node. It is a location on a model110 * that may or may not actually correspond to a node on a specific model.111 * The GtkTreePath struct can be converted into either an array of112 * unsigned integers or a string. The string form is a list of numbers113 * separated by a colon. Each number refers to the offset at that level.114 * Thus, the path 0 refers to the root node and the path115 * 2:4 refers to the fifth child of the third node.116 * By contrast, a GtkTreeIter is a reference to a specific node on a117 * specific model. It is a generic struct with an integer and three118 * generic pointers. These are filled in by the model in a model-specific119 * way. One can convert a path to an iterator by calling120 * gtk_tree_model_get_iter(). These iterators are the primary way of121 * accessing a model and are similar to the iterators used by122 * GtkTextBuffer. They are generally statically allocated on the stack and123 * only used for a short time. The model interface defines a set of124 * operations using them for navigating the model.125 * It is expected that models fill in the iterator with private data. For126 * example, the GtkListStore model, which is internally a simple linked127 * list, stores a list node in one of the pointers. The GtkTreeModelSort128 * stores an array and an offset in two of the pointers. Additionally,129 * there is an integer field. This field is generally filled with a unique130 * stamp per model. This stamp is for catching errors resulting from using131 * invalid iterators with a model.132 * The lifecycle of an iterator can be a little confusing at first.133 * Iterators are expected to always be valid for as long as the model is134 * unchanged (and doesn't emit a signal). The model is considered to own135 * all outstanding iterators and nothing needs to be done to free them from136 * the user's point of view. Additionally, some models guarantee that an137 * iterator is valid for as long as the node it refers to is valid (most138 * notably the GtkTreeStore and GtkListStore). Although generally139 * uninteresting, as one always has to allow for the case where iterators140 * do not persist beyond a signal, some very important performance141 * enhancements were made in the sort model. As a result, the142 * GTK_TREE_MODEL_ITERS_PERSIST flag was added to indicate this behavior.143 * To help show some common operation of a model, some examples are144 * provided. The first example shows three ways of getting the iter at the145 * location 3:2:5. While the first method shown is easier,146 * the second is much more common, as you often get paths from callbacks.147 * Example15.Acquiring a GtkTreeIter148 * /+* Three ways of getting the iter pointing to the location149 * +/150 * {151 * GtkTreePath *path;152 * GtkTreeIter iter;153 * GtkTreeIter parent_iter;154 * /+* get the iterator from a string +/155 * gtk_tree_model_get_iter_from_string (model, iter, "3:2:5");156 * /+* get the iterator from a path +/157 * path = gtk_tree_path_new_from_string ("3:2:5");158 * gtk_tree_model_get_iter (model, iter, path);159 * gtk_tree_path_free (path);160 * /+* walk the tree to find the iterator +/161 * gtk_tree_model_iter_nth_child (model, iter, NULL, 3);162 * parent_iter = iter;163 * gtk_tree_model_iter_nth_child (model, iter, parent_iter, 2);164 * parent_iter = iter;165 * gtk_tree_model_iter_nth_child (model, iter, parent_iter, 5);166 * }167 * This second example shows a quick way of iterating through a list and168 * getting a string and an integer from each row. The169 * populate_model function used below is not shown, as170 * it is specific to the GtkListStore. For information on how to write171 * such a function, see the GtkListStore documentation.172 * Example16.Reading data from a GtkTreeModel173 * enum174 * {175 * STRING_COLUMN,176 * INT_COLUMN,177 * N_COLUMNS178 * };179 * {180 * GtkTreeModel *list_store;181 * GtkTreeIter iter;182 * gboolean valid;183 * gint row_count = 0;184 * /+* make a new list_store +/185 * list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_INT);186 * /+* Fill the list store with data +/187 * populate_model (list_store);188 * /+* Get the first iter in the list +/189 * valid = gtk_tree_model_get_iter_first (list_store, iter);190 * while (valid)191 * {192 * /+* Walk through the list, reading each row +/193 * gchar *str_data;194 * gint int_data;195 * /+* Make sure you terminate calls to gtk_tree_model_get()196 * * with a '-1' value197 * +/198 * gtk_tree_model_get (list_store, iter,199 * STRING_COLUMN, str_data,200 * INT_COLUMN, int_data,201 * -1);202 * /+* Do something with the data +/203 * g_print ("Row %d: (%s,%d)\n", row_count, str_data, int_data);204 * g_free (str_data);205 * row_count ++;206 * valid = gtk_tree_model_iter_next (list_store, iter);207 * }208 * }209 81 */ 210 public class TreeModel : ObjectG 82 public class TreeModel : ObjectG, TreeModelIF 211 83 { 212 84 213 /** the main Gtk struct */ 214 protected GtkTreeModel* gtkTreeModel; 215 216 217 public GtkTreeModel* getTreeModelStruct() 218 { 219 return gtkTreeModel; 220 } 221 85 // Minimal implementation. 86 mixin TreeModelT!(GtkTreeModel); 222 87 223 88 /** the main Gtk struct as a void* */ … … 250 115 251 116 /** 252 * Get the value of a column as a char array.253 * this is the same calling getValue and get the string from the value object254 117 */ 255 string getValueString(TreeIter iter, int column)256 {257 Value value = new Value();258 getValue(iter, column, value);259 return value.getString();260 }261 262 /**263 * Get the value of a column as a char array.264 * this is the same calling getValue and get the int from the value object265 */266 int getValueInt(TreeIter iter, int column)267 {268 Value value = new Value();269 getValue(iter, column, value);270 return value.getInt();271 }272 273 /**274 * Sets iter to a valid iterator pointing to path.275 * Params:276 * iter = The uninitialized GtkTreeIter.277 * path = The GtkTreePath.278 * Returns:279 * TRUE, if iter was set.280 */281 public int getIter(TreeIter iter, TreePath path)282 {283 // gboolean gtk_tree_model_get_iter (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path);284 iter.setModel(this);285 return gtk_tree_model_get_iter(gtkTreeModel, (iter is null) ? null : iter.getTreeIterStruct(), (path is null) ? null : path.getTreePathStruct());286 }287 288 /**289 */290 int[char[]] connectedSignals;291 292 void delegate(TreePath, TreeIter, TreeModel)[] onRowChangedListeners;293 /**294 * This signal is emitted when a row in the model has changed.295 */296 void addOnRowChanged(void delegate(TreePath, TreeIter, TreeModel) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)297 {298 if ( !("row-changed" in connectedSignals) )299 {300 Signals.connectData(301 getStruct(),302 "row-changed",303 cast(GCallback)&callBackRowChanged,304 cast(void*)this,305 null,306 connectFlags);307 connectedSignals["row-changed"] = 1;308 }309 onRowChangedListeners ~= dlg;310 }311 extern(C) static void callBackRowChanged(GtkTreeModel* treeModelStruct, GtkTreePath* path, GtkTreeIter* iter, TreeModel treeModel)312 {313 bool consumed = false;314 315 foreach ( void delegate(TreePath, TreeIter, TreeModel) dlg ; treeModel.onRowChangedListeners )316 {317 dlg(new TreePath(path), new TreeIter(iter), treeModel);318 }319 320 return consumed;321 }322 323 void delegate(TreePath, TreeModel)[] onRowDeletedListeners;324 /**325 * This signal is emitted when a row has been deleted.326 * Note that no iterator is passed to the signal handler,327 * since the row is already deleted.328 * Implementations of GtkTreeModel must emit row-deleted329 * before removing the node from its330 * internal data structures. This is because models and331 * views which access and monitor this model might have332 * references on the node which need to be released in the333 * row-deleted handler.334 */335 void addOnRowDeleted(void delegate(TreePath, TreeModel) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0)336 {337 if ( !("row-deleted" in connectedSignals) )338 {339 Signals.connectData(340 getStruct(),341 "row-deleted",342
