1 2@c %start of fragment 3 4@deftp Class <gtk-tree-model> 5Derives from @code{<ginterface>}. 6 7This class defines no direct slots. 8 9@end deftp 10 11@defop Signal <gtk-tree-model> row-changed (arg0@tie{}@code{<gtk-tree-path>}) (arg1@tie{}@code{<gtk-tree-iter>}) 12This signal is emitted when a row in the model has changed. 13 14@end defop 15 16@defop Signal <gtk-tree-model> row-inserted (arg0@tie{}@code{<gtk-tree-path>}) (arg1@tie{}@code{<gtk-tree-iter>}) 17This signal is emitted when a new row has been inserted in the model. 18 19Note that the row may still be empty at this point, since it is a common pattern 20to first insert an empty row, and then fill it with the desired values. 21 22@end defop 23 24@defop Signal <gtk-tree-model> row-has-child-toggled (arg0@tie{}@code{<gtk-tree-path>}) (arg1@tie{}@code{<gtk-tree-iter>}) 25This signal is emitted when a row has gotten the first child row or lost its 26last child row. 27 28@end defop 29 30@defop Signal <gtk-tree-model> row-deleted (arg0@tie{}@code{<gtk-tree-path>}) 31This signal is emitted when a row has been deleted. 32 33Note that no iterator is passed to the signal handler, since the row is already 34deleted. 35 36Implementations of GtkTreeModel must emit row-deleted @emph{before} removing the 37node from its internal data structures. This is because models and views which 38access and monitor this model might have references on the node which need to be 39released in the row-deleted handler. 40 41@end defop 42 43@defop Signal <gtk-tree-model> rows-reordered (arg0@tie{}@code{<gtk-tree-path>}) (arg1@tie{}@code{<gtk-tree-iter>}) (arg2@tie{}@code{<gpointer>}) 44This signal is emitted when the children of a node in the 45@code{<gtk-tree-model>} have been reordered. 46 47Note that this signal is @emph{not} emitted when rows are reordered by DND, 48since this is implemented by removing and then reinserting the row. 49 50@end defop 51 52@deftp Class <gtk-tree-iter> 53Derives from @code{<gboxed>}. 54 55This class defines no direct slots. 56 57@end deftp 58 59@deftp Class <gtk-tree-path> 60Derives from @code{<gboxed>}. 61 62This class defines no direct slots. 63 64@end deftp 65 66@deftp Class <gtk-tree-row-reference> 67Derives from @code{<gboxed>}. 68 69This class defines no direct slots. 70 71@end deftp 72 73@deffn Function gtk-tree-path-new-from-string (path@tie{}@code{mchars}) (path@tie{}@code{mchars}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-path>}) 74Creates a new @code{<gtk-tree-path>} initialized to @var{path}. @var{path} is 75expected to be a colon separated list of numbers. For example, the string 76"10:4:0" would create a path of depth 3 pointing to the 11th child of the root 77node, the 5th child of that 11th child, and the 1st child of that 5th child. If 78an invalid path string is passed in, @samp{@code{#f}} is returned. 79 80@table @var 81@item path 82The string representation of a path. 83 84@item ret 85A newly-created @code{<gtk-tree-path>}, or @samp{@code{#f}} 86 87@end table 88 89@end deffn 90 91@deffn Function gtk-tree-path-append-index (self@tie{}@code{<gtk-tree-path>}) (index@tie{}@code{int}) 92Appends a new index to a path. As a result, the depth of the path is increased. 93 94@table @var 95@item path 96A @code{<gtk-tree-path>}. 97 98@item index 99The index. 100 101@end table 102 103@end deffn 104 105@deffn Function gtk-tree-path-prepend-index (self@tie{}@code{<gtk-tree-path>}) (index@tie{}@code{int}) 106Prepends a new index to a path. As a result, the depth of the path is increased. 107 108@table @var 109@item path 110A @code{<gtk-tree-path>}. 111 112@item index 113The index. 114 115@end table 116 117@end deffn 118 119@deffn Function gtk-tree-path-copy (self@tie{}@code{<gtk-tree-path>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-path>}) 120Creates a new @code{<gtk-tree-path>} as a copy of @var{path}. 121 122@table @var 123@item path 124A @code{<gtk-tree-path>}. 125 126@item ret 127A new @code{<gtk-tree-path>}. 128 129@end table 130 131@end deffn 132 133@deffn Function gtk-tree-row-reference-new (model@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-row-reference>}) 134Creates a row reference based on @var{path}. This reference will keep pointing 135to the node pointed to by @var{path}, so long as it exists. It listens to all 136signals emitted by @var{model}, and updates its path appropriately. If 137@var{path} isn't a valid path in @var{model}, then @samp{@code{#f}} is returned. 138 139@table @var 140@item model 141A @code{<gtk-tree-model>} 142 143@item path 144A valid @code{<gtk-tree-path>} to monitor 145 146@item ret 147A newly allocated @code{<gtk-tree-row-reference>}, or @samp{@code{#f}} 148 149@end table 150 151@end deffn 152 153@deffn Function gtk-tree-row-reference-new-proxy (proxy@tie{}@code{<gobject>}) (model@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-row-reference>}) 154You do not need to use this function. Creates a row reference based on 155@var{path}. This reference will keep pointing to the node pointed to by 156@var{path}, so long as it exists. If @var{path} isn't a valid path in 157@var{model}, then @samp{@code{#f}} is returned. However, unlike references 158created with @code{gtk-tree-row-reference-new}, it does not listen to the model 159for changes. The creator of the row reference must do this explicitly using 160@code{gtk-tree-row-reference-inserted}, @code{gtk-tree-row-reference-deleted}, 161@code{gtk-tree-row-reference-reordered}. 162 163These functions must be called exactly once per proxy when the corresponding 164signal on the model is emitted. This single call updates all row references for 165that proxy. Since built-in GTK+ objects like @code{<gtk-tree-view>} already use 166this mechanism internally, using them as the proxy object will produce 167unpredictable results. Further more, passing the same object as @var{model} and 168@var{proxy} doesn't work for reasons of internal implementation. 169 170This type of row reference is primarily meant by structures that need to 171carefully monitor exactly when a row reference updates itself, and is not 172generally needed by most applications. 173 174@table @var 175@item proxy 176A proxy @code{<gobject>} 177 178@item model 179A @code{<gtk-tree-model>} 180 181@item path 182A valid @code{<gtk-tree-path>} to monitor 183 184@item ret 185A newly allocated @code{<gtk-tree-row-reference>}, or @samp{@code{#f}} 186 187@end table 188 189@end deffn 190 191@deffn Function gtk-tree-row-reference-get-model (self@tie{}@code{<gtk-tree-row-reference>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-model>}) 192Returns the model that the row reference is monitoring. 193 194@table @var 195@item reference 196A @code{<gtk-tree-row-reference>} 197 198@item ret 199the model 200 201@end table 202 203Since 2.8 204 205@end deffn 206 207@deffn Function gtk-tree-row-reference-get-path (self@tie{}@code{<gtk-tree-row-reference>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-path>}) 208Returns a path that the row reference currently points to, or @samp{@code{#f}} 209if the path pointed to is no longer valid. 210 211@table @var 212@item reference 213A @code{<gtk-tree-row-reference>} 214 215@item ret 216A current path, or @samp{@code{#f}}. 217 218@end table 219 220@end deffn 221 222@deffn Function gtk-tree-row-reference-valid (self@tie{}@code{<gtk-tree-row-reference>}) @result{}@tie{} (ret@tie{}@code{bool}) 223Returns @samp{@code{#t}} if the @var{reference} is non-@samp{@code{#f}} and 224refers to a current valid path. 225 226@table @var 227@item reference 228A @code{<gtk-tree-row-reference>}, or @samp{@code{#f}} 229 230@item ret 231@samp{@code{#t}} if @var{reference} points to a valid path. 232 233@end table 234 235@end deffn 236 237@deffn Function gtk-tree-row-reference-inserted (proxy@tie{}@code{<gobject>}) (path@tie{}@code{<gtk-tree-path>}) 238Lets a set of row reference created by @code{gtk-tree-row-reference-new-proxy} 239know that the model emitted the "row_inserted" signal. 240 241@table @var 242@item proxy 243A @code{<gobject>} 244 245@item path 246The row position that was inserted 247 248@end table 249 250@end deffn 251 252@deffn Function gtk-tree-row-reference-deleted (proxy@tie{}@code{<gobject>}) (path@tie{}@code{<gtk-tree-path>}) 253Lets a set of row reference created by @code{gtk-tree-row-reference-new-proxy} 254know that the model emitted the "row_deleted" signal. 255 256@table @var 257@item proxy 258A @code{<gobject>} 259 260@item path 261The path position that was deleted 262 263@end table 264 265@end deffn 266 267@deffn Function gtk-tree-row-reference-reordered (proxy@tie{}@code{<gobject>}) (path@tie{}@code{<gtk-tree-path>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (new_order@tie{}@code{int}) 268Lets a set of row reference created by @code{gtk-tree-row-reference-new-proxy} 269know that the model emitted the "rows_reordered" signal. 270 271@table @var 272@item proxy 273A @code{<gobject>} 274 275@item path 276The parent path of the reordered signal 277 278@item iter 279The iter pointing to the parent of the reordered 280 281@item new-order 282The new order of rows 283 284@end table 285 286@end deffn 287 288@deffn Function gtk-tree-iter-copy (self@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-iter>}) 289Creates a dynamically allocated tree iterator as a copy of @var{iter}. This 290function is not intended for use in applications, because you can just copy the 291structs by value (@samp{GtkTreeIter new_iter = iter;}). You must free this iter 292with @code{gtk-tree-iter-free}. 293 294@table @var 295@item iter 296A @code{<gtk-tree-iter>}. 297 298@item ret 299a newly-allocated copy of @var{iter}. 300 301@end table 302 303@end deffn 304 305@deffn Function gtk-tree-model-get-flags (self@tie{}@code{<gtk-tree-model>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-model-flags>}) 306@deffnx Method get-flags 307Returns a set of flags supported by this interface. The flags are a bitwise 308combination of @code{<gtk-tree-model-flags>}. The flags supported should not 309change during the lifecycle of the @var{tree-model}. 310 311@table @var 312@item tree-model 313A @code{<gtk-tree-model>}. 314 315@item ret 316The flags supported by this interface. 317 318@end table 319 320@end deffn 321 322@deffn Function gtk-tree-model-get-n-columns (self@tie{}@code{<gtk-tree-model>}) @result{}@tie{} (ret@tie{}@code{int}) 323@deffnx Method get-n-columns 324Returns the number of columns supported by @var{tree-model}. 325 326@table @var 327@item tree-model 328A @code{<gtk-tree-model>}. 329 330@item ret 331The number of columns. 332 333@end table 334 335@end deffn 336 337@deffn Function gtk-tree-model-get-column-type (self@tie{}@code{<gtk-tree-model>}) (index@tie{}@code{int}) @result{}@tie{} (ret@tie{}@code{<gtype>}) 338@deffnx Method get-column-type 339Returns the type of the column. 340 341@table @var 342@item tree-model 343A @code{<gtk-tree-model>}. 344 345@item index 346The column index. 347 348@item ret 349The type of the column. 350 351@end table 352 353@end deffn 354 355@deffn Function gtk-tree-model-get-iter (self@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-iter>}) 356@deffnx Method get-iter 357Sets @var{iter} to a valid iterator pointing to @var{path}. 358 359@table @var 360@item tree-model 361A @code{<gtk-tree-model>}. 362 363@item iter 364The uninitialized @code{<gtk-tree-iter>}. 365 366@item path 367The @code{<gtk-tree-path>}. 368 369@item ret 370@samp{@code{#t}}, if @var{iter} was set. 371 372@end table 373 374@end deffn 375 376@deffn Function gtk-tree-model-get-iter-first (self@tie{}@code{<gtk-tree-model>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-iter>}) 377@deffnx Method get-iter-first 378Initializes @var{iter} with the first iterator in the tree (the one at the path 379"0") and returns @samp{@code{#t}}. Returns @samp{@code{#f}} if the tree is 380empty. 381 382@table @var 383@item tree-model 384A @code{<gtk-tree-model>}. 385 386@item iter 387The uninitialized @code{<gtk-tree-iter>}. 388 389@item ret 390@samp{@code{#t}}, if @var{iter} was set. 391 392@end table 393 394@end deffn 395 396@deffn Function gtk-tree-model-get-path (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-path>}) 397@deffnx Method get-path 398Returns a newly-created @code{<gtk-tree-path>} referenced by @var{iter}. This 399path should be freed with @code{gtk-tree-path-free}. 400 401@table @var 402@item tree-model 403A @code{<gtk-tree-model>}. 404 405@item iter 406The @code{<gtk-tree-iter>}. 407 408@item ret 409a newly-created @code{<gtk-tree-path>}. 410 411@end table 412 413@end deffn 414 415@deffn Function gtk-tree-model-get-value (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) (column@tie{}@code{int}) @result{}@tie{} (ret@tie{}@code{scm}) 416@deffnx Method get-value 417Sets initializes and sets @var{value} to that at @var{column}. When done with 418@var{value}, @code{g-value-unset} needs to be called to free any allocated 419memory. 420 421@table @var 422@item tree-model 423A @code{<gtk-tree-model>}. 424 425@item iter 426The @code{<gtk-tree-iter>}. 427 428@item column 429The column to lookup the value at. 430 431@item value 432An empty @code{<gvalue>} to set. 433 434@end table 435 436@end deffn 437 438@deffn Function gtk-tree-model-iter-next (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-iter>}) 439@deffnx Method iter-next 440Sets @var{iter} to point to the node following it at the current level. If there 441is no next @var{iter}, @samp{@code{#f}} is returned and @var{iter} is set to be 442invalid. 443 444@table @var 445@item tree-model 446A @code{<gtk-tree-model>}. 447 448@item iter 449The @code{<gtk-tree-iter>}. 450 451@item ret 452@samp{@code{#t}} if @var{iter} has been changed to the next node. 453 454@end table 455 456@end deffn 457 458@deffn Function gtk-tree-model-iter-children (self@tie{}@code{<gtk-tree-model>}) (parent@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{glist-of}) 459@deffnx Method iter-children 460Sets @var{iter} to point to the first child of @var{parent}. If @var{parent} has 461no children, @samp{@code{#f}} is returned and @var{iter} is set to be invalid. 462@var{parent} will remain a valid node after this function has been called. 463 464If @var{parent} is @samp{@code{#f}} returns the first node, equivalent to 465@samp{gtk_tree_model_get_iter_first (tree_model, iter);} 466 467@table @var 468@item tree-model 469A @code{<gtk-tree-model>}. 470 471@item iter 472The new @code{<gtk-tree-iter>} to be set to the child. 473 474@item parent 475The @code{<gtk-tree-iter>}, or @samp{@code{#f}} 476 477@item ret 478@samp{@code{#t}}, if @var{child} has been set to the first child. 479 480@end table 481 482@end deffn 483 484@deffn Function gtk-tree-model-iter-has-child (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{bool}) 485@deffnx Method iter-has-child 486Returns @samp{@code{#t}} if @var{iter} has children, @samp{@code{#f}} otherwise. 487 488@table @var 489@item tree-model 490A @code{<gtk-tree-model>}. 491 492@item iter 493The @code{<gtk-tree-iter>} to test for children. 494 495@item ret 496@samp{@code{#t}} if @var{iter} has children. 497 498@end table 499 500@end deffn 501 502@deffn Function gtk-tree-model-iter-n-children (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{int}) 503@deffnx Method iter-n-children 504Returns the number of children that @var{iter} has. As a special case, if 505@var{iter} is @samp{@code{#f}}, then the number of toplevel nodes is returned. 506 507@table @var 508@item tree-model 509A @code{<gtk-tree-model>}. 510 511@item iter 512The @code{<gtk-tree-iter>}, or @samp{@code{#f}}. 513 514@item ret 515The number of children of @var{iter}. 516 517@end table 518 519@end deffn 520 521@deffn Function gtk-tree-model-iter-nth-child (self@tie{}@code{<gtk-tree-model>}) (parent@tie{}@code{<gtk-tree-iter>}) (n@tie{}@code{int}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-iter>}) 522@deffnx Method iter-nth-child 523Sets @var{iter} to be the child of @var{parent}, using the given index. The 524first index is 0. If @var{n} is too big, or @var{parent} has no children, 525@var{iter} is set to an invalid iterator and @samp{@code{#f}} is returned. 526@var{parent} will remain a valid node after this function has been called. As a 527special case, if @var{parent} is @samp{@code{#f}}, then the @var{n}th root node 528is set. 529 530@table @var 531@item tree-model 532A @code{<gtk-tree-model>}. 533 534@item iter 535The @code{<gtk-tree-iter>} to set to the nth child. 536 537@item parent 538The @code{<gtk-tree-iter>} to get the child from, or @samp{@code{#f}}. 539 540@item n 541Then index of the desired child. 542 543@item ret 544@samp{@code{#t}}, if @var{parent} has an @var{n}th child. 545 546@end table 547 548@end deffn 549 550@deffn Function gtk-tree-model-iter-parent (self@tie{}@code{<gtk-tree-model>}) (child@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{<gtk-tree-iter>}) 551@deffnx Method iter-parent 552Sets @var{iter} to be the parent of @var{child}. If @var{child} is at the 553toplevel, and doesn't have a parent, then @var{iter} is set to an invalid 554iterator and @samp{@code{#f}} is returned. @var{child} will remain a valid node 555after this function has been called. 556 557@table @var 558@item tree-model 559A @code{<gtk-tree-model>} 560 561@item iter 562The new @code{<gtk-tree-iter>} to set to the parent. 563 564@item child 565The @code{<gtk-tree-iter>}. 566 567@item ret 568@samp{@code{#t}}, if @var{iter} is set to the parent of @var{child}. 569 570@end table 571 572@end deffn 573 574@deffn Function gtk-tree-model-get-string-from-iter (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (ret@tie{}@code{mchars}) 575@deffnx Method get-string-from-iter 576Generates a string representation of the iter. This string is a ':' separated 577list of numbers. For example, "4:10:0:3" would be an acceptable return value for 578this string. 579 580@table @var 581@item tree-model 582A @code{<gtk-tree-model>}. 583 584@item iter 585An @code{<gtk-tree-iter>}. 586 587@item ret 588A newly-allocated string. Must be freed with @code{g-free}. 589 590@end table 591 592Since 2.2 593 594@end deffn 595 596@deffn Function gtk-tree-model-ref-node (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) 597@deffnx Method ref-node 598Lets the tree ref the node. This is an optional method for models to implement. 599To be more specific, models may ignore this call as it exists primarily for 600performance reasons. 601 602This function is primarily meant as a way for views to let caching model know 603when nodes are being displayed (and hence, whether or not to cache that node.) 604For example, a file-system based model would not want to keep the entire 605file-hierarchy in memory, just the sections that are currently being displayed 606by every current view. 607 608A model should be expected to be able to get an iter independent of its reffed 609state. 610 611@table @var 612@item tree-model 613A @code{<gtk-tree-model>}. 614 615@item iter 616The @code{<gtk-tree-iter>}. 617 618@end table 619 620@end deffn 621 622@deffn Function gtk-tree-model-unref-node (self@tie{}@code{<gtk-tree-model>}) (iter@tie{}@code{<gtk-tree-iter>}) 623@deffnx Method unref-node 624Lets the tree unref the node. This is an optional method for models to 625implement. To be more specific, models may ignore this call as it exists 626primarily for performance reasons. 627 628For more information on what this means, see @code{gtk-tree-model-ref-node}. 629Please note that nodes that are deleted are not unreffed. 630 631@table @var 632@item tree-model 633A @code{<gtk-tree-model>}. 634 635@item iter 636The @code{<gtk-tree-iter>}. 637 638@end table 639 640@end deffn 641 642@deffn Function gtk-tree-model-row-changed (self@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) (iter@tie{}@code{<gtk-tree-iter>}) 643@deffnx Method row-changed 644Emits the "row_changed" signal on @var{tree-model}. 645 646@table @var 647@item tree-model 648A @code{<gtk-tree-model>} 649 650@item path 651A @code{<gtk-tree-path>} pointing to the changed row 652 653@item iter 654A valid @code{<gtk-tree-iter>} pointing to the changed row 655 656@end table 657 658@end deffn 659 660@deffn Function gtk-tree-model-row-inserted (self@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) (iter@tie{}@code{<gtk-tree-iter>}) 661@deffnx Method row-inserted 662Emits the "row_inserted" signal on @var{tree-model} 663 664@table @var 665@item tree-model 666A @code{<gtk-tree-model>} 667 668@item path 669A @code{<gtk-tree-path>} pointing to the inserted row 670 671@item iter 672A valid @code{<gtk-tree-iter>} pointing to the inserted row 673 674@end table 675 676@end deffn 677 678@deffn Function gtk-tree-model-row-deleted (self@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) 679@deffnx Method row-deleted 680Emits the "row_deleted" signal on @var{tree-model}. This should be called by 681models after a row has been removed. The location pointed to by @var{path} 682should be the location that the row previously was at. It may not be a valid 683location anymore. 684 685@table @var 686@item tree-model 687A @code{<gtk-tree-model>} 688 689@item path 690A @code{<gtk-tree-path>} pointing to the previous location of the deleted row. 691 692@end table 693 694@end deffn 695 696@deffn Function gtk-tree-model-rows-reordered (self@tie{}@code{<gtk-tree-model>}) (path@tie{}@code{<gtk-tree-path>}) (iter@tie{}@code{<gtk-tree-iter>}) @result{}@tie{} (new_order@tie{}@code{int}) 697@deffnx Method rows-reordered 698Emits the "rows_reordered" signal on @var{tree-model}. This should be called by 699models when their rows have been reordered. 700 701@table @var 702@item tree-model 703A @code{<gtk-tree-model>} 704 705@item path 706A @code{<gtk-tree-path>} pointing to the tree node whose children have been 707reordered 708 709@item iter 710A valid @code{<gtk-tree-iter>} pointing to the node whose children have been 711reordered, or @samp{@code{#f}} if the depth of @var{path} is 0. 712 713@item new-order 714an array of integers mapping the current position of each child to its old 715position before the re-ordering, i.e. @var{new-order}@samp{[newpos] = oldpos}. 716 717@end table 718 719@end deffn 720 721 722@c %end of fragment 723