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.TextView; 26 27 private import gdk.Window; 28 private import glib.ConstructionException; 29 private import glib.MemorySlice; 30 private import glib.Str; 31 private import gobject.ObjectG; 32 private import gobject.Signals; 33 private import gtk.Container; 34 private import gtk.ScrollableIF; 35 private import gtk.ScrollableT; 36 private import gtk.TextAttributes; 37 private import gtk.TextBuffer; 38 private import gtk.TextChildAnchor; 39 private import gtk.TextIter; 40 private import gtk.TextMark; 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 pango.PgTabArray; 46 private import std.algorithm; 47 48 49 /** 50 * You may wish to begin by reading the 51 * [text widget conceptual overview][TextWidget] 52 * which gives an overview of all the objects and data 53 * types related to the text widget and how they work together. 54 * 55 * # CSS nodes 56 * 57 * |[<!-- language="plain" --> 58 * textview.view 59 * ├── border.top 60 * ├── border.left 61 * ├── text 62 * │ ╰── [selection] 63 * ├── border.right 64 * ├── border.bottom 65 * ╰── [window.popup] 66 * ]| 67 * 68 * GtkTextView has a main css node with name textview and style class .view, 69 * and subnodes for each of the border windows, and the main text area, 70 * with names border and text, respectively. The border nodes each get 71 * one of the style classes .left, .right, .top or .bottom. 72 * 73 * A node representing the selection will appear below the text node. 74 * 75 * If a context menu is opened, the window node will appear as a subnode 76 * of the main node. 77 */ 78 public class TextView : Container, ScrollableIF 79 { 80 /** the main Gtk struct */ 81 protected GtkTextView* gtkTextView; 82 83 /** Get the main Gtk struct */ 84 public GtkTextView* getTextViewStruct(bool transferOwnership = false) 85 { 86 if (transferOwnership) 87 ownedRef = false; 88 return gtkTextView; 89 } 90 91 /** the main Gtk struct as a void* */ 92 protected override void* getStruct() 93 { 94 return cast(void*)gtkTextView; 95 } 96 97 /** 98 * Sets our main struct and passes it to the parent class. 99 */ 100 public this (GtkTextView* gtkTextView, bool ownedRef = false) 101 { 102 this.gtkTextView = gtkTextView; 103 super(cast(GtkContainer*)gtkTextView, ownedRef); 104 } 105 106 // add the Scrollable capabilities 107 mixin ScrollableT!(GtkTextView); 108 109 /** 110 * Get the text line at the pixel y 111 */ 112 string getLineTextAt(int y) 113 { 114 115 TextIter iter = new TextIter(); 116 int windowX; 117 int windowY; 118 bufferToWindowCoords(TextWindowType.TEXT, 0, y, windowX, windowY); 119 120 gtk_text_view_get_line_at_y(gtkTextView, iter.getTextIterStruct(), y+y-windowY, null); 121 122 TextIter iterEnd = new TextIter(); 123 TextBuffer buffer = getBuffer(); 124 buffer.getIterAtOffset(iterEnd, iter.getOffset()+iter.getCharsInLine()); 125 return buffer.getText(iter, iterEnd, false); 126 } 127 128 /** 129 * Simply appends some on the cursor position 130 * Params: 131 * text = the text to append 132 */ 133 void insertText(string text) 134 { 135 TextBuffer buf = getBuffer(); 136 buf.insertAtCursor(text); 137 } 138 139 /** 140 * Simply appends some text to this view 141 * Params: 142 * text = the text to append 143 */ 144 void appendText(string text, bool ensureVisible=true) 145 { 146 TextBuffer buf = getBuffer(); 147 TextIter iter = new TextIter(); 148 buf.getEndIter(iter); 149 buf.insert(iter, text); 150 if ( ensureVisible ) 151 { 152 double within_margin = 0.0; 153 bool use_align = false; 154 double xalign = 0.0; 155 double yalign = 0.0; 156 scrollToMark(buf.createMark("",iter,true), within_margin, use_align, xalign, yalign); 157 } 158 } 159 160 /** 161 */ 162 163 /** */ 164 public static GType getType() 165 { 166 return gtk_text_view_get_type(); 167 } 168 169 /** 170 * Creates a new #GtkTextView. If you don’t call gtk_text_view_set_buffer() 171 * before using the text view, an empty default buffer will be created 172 * for you. Get the buffer with gtk_text_view_get_buffer(). If you want 173 * to specify your own buffer, consider gtk_text_view_new_with_buffer(). 174 * 175 * Returns: a new #GtkTextView 176 * 177 * Throws: ConstructionException GTK+ fails to create the object. 178 */ 179 public this() 180 { 181 auto p = gtk_text_view_new(); 182 183 if(p is null) 184 { 185 throw new ConstructionException("null returned by new"); 186 } 187 188 this(cast(GtkTextView*) p); 189 } 190 191 /** 192 * Creates a new #GtkTextView widget displaying the buffer 193 * @buffer. One buffer can be shared among many widgets. 194 * @buffer may be %NULL to create a default buffer, in which case 195 * this function is equivalent to gtk_text_view_new(). The 196 * text view adds its own reference count to the buffer; it does not 197 * take over an existing reference. 198 * 199 * Params: 200 * buffer = a #GtkTextBuffer 201 * 202 * Returns: a new #GtkTextView. 203 * 204 * Throws: ConstructionException GTK+ fails to create the object. 205 */ 206 public this(TextBuffer buffer) 207 { 208 auto p = gtk_text_view_new_with_buffer((buffer is null) ? null : buffer.getTextBufferStruct()); 209 210 if(p is null) 211 { 212 throw new ConstructionException("null returned by new_with_buffer"); 213 } 214 215 this(cast(GtkTextView*) p); 216 } 217 218 /** 219 * Adds a child widget in the text buffer, at the given @anchor. 220 * 221 * Params: 222 * child = a #GtkWidget 223 * anchor = a #GtkTextChildAnchor in the #GtkTextBuffer for @text_view 224 */ 225 public void addChildAtAnchor(Widget child, TextChildAnchor anchor) 226 { 227 gtk_text_view_add_child_at_anchor(gtkTextView, (child is null) ? null : child.getWidgetStruct(), (anchor is null) ? null : anchor.getTextChildAnchorStruct()); 228 } 229 230 /** 231 * Adds a child at fixed coordinates in one of the text widget's 232 * windows. 233 * 234 * The window must have nonzero size (see 235 * gtk_text_view_set_border_window_size()). Note that the child 236 * coordinates are given relative to scrolling. When 237 * placing a child in #GTK_TEXT_WINDOW_WIDGET, scrolling is 238 * irrelevant, the child floats above all scrollable areas. But when 239 * placing a child in one of the scrollable windows (border windows or 240 * text window) it will move with the scrolling as needed. 241 * 242 * Params: 243 * child = a #GtkWidget 244 * whichWindow = which window the child should appear in 245 * xpos = X position of child in window coordinates 246 * ypos = Y position of child in window coordinates 247 */ 248 public void addChildInWindow(Widget child, GtkTextWindowType whichWindow, int xpos, int ypos) 249 { 250 gtk_text_view_add_child_in_window(gtkTextView, (child is null) ? null : child.getWidgetStruct(), whichWindow, xpos, ypos); 251 } 252 253 /** 254 * Moves the given @iter backward by one display (wrapped) line. 255 * A display line is different from a paragraph. Paragraphs are 256 * separated by newlines or other paragraph separator characters. 257 * Display lines are created by line-wrapping a paragraph. If 258 * wrapping is turned off, display lines and paragraphs will be the 259 * same. Display lines are divided differently for each view, since 260 * they depend on the view’s width; paragraphs are the same in all 261 * views, since they depend on the contents of the #GtkTextBuffer. 262 * 263 * Params: 264 * iter = a #GtkTextIter 265 * 266 * Returns: %TRUE if @iter was moved and is not on the end iterator 267 */ 268 public bool backwardDisplayLine(TextIter iter) 269 { 270 return gtk_text_view_backward_display_line(gtkTextView, (iter is null) ? null : iter.getTextIterStruct()) != 0; 271 } 272 273 /** 274 * Moves the given @iter backward to the next display line start. 275 * A display line is different from a paragraph. Paragraphs are 276 * separated by newlines or other paragraph separator characters. 277 * Display lines are created by line-wrapping a paragraph. If 278 * wrapping is turned off, display lines and paragraphs will be the 279 * same. Display lines are divided differently for each view, since 280 * they depend on the view’s width; paragraphs are the same in all 281 * views, since they depend on the contents of the #GtkTextBuffer. 282 * 283 * Params: 284 * iter = a #GtkTextIter 285 * 286 * Returns: %TRUE if @iter was moved and is not on the end iterator 287 */ 288 public bool backwardDisplayLineStart(TextIter iter) 289 { 290 return gtk_text_view_backward_display_line_start(gtkTextView, (iter is null) ? null : iter.getTextIterStruct()) != 0; 291 } 292 293 /** 294 * Converts coordinate (@buffer_x, @buffer_y) to coordinates for the window 295 * @win, and stores the result in (@window_x, @window_y). 296 * 297 * Note that you can’t convert coordinates for a nonexisting window (see 298 * gtk_text_view_set_border_window_size()). 299 * 300 * Params: 301 * win = a #GtkTextWindowType, except %GTK_TEXT_WINDOW_PRIVATE 302 * bufferX = buffer x coordinate 303 * bufferY = buffer y coordinate 304 * windowX = window x coordinate return location or %NULL 305 * windowY = window y coordinate return location or %NULL 306 */ 307 public void bufferToWindowCoords(GtkTextWindowType win, int bufferX, int bufferY, out int windowX, out int windowY) 308 { 309 gtk_text_view_buffer_to_window_coords(gtkTextView, win, bufferX, bufferY, &windowX, &windowY); 310 } 311 312 /** 313 * Moves the given @iter forward by one display (wrapped) line. 314 * A display line is different from a paragraph. Paragraphs are 315 * separated by newlines or other paragraph separator characters. 316 * Display lines are created by line-wrapping a paragraph. If 317 * wrapping is turned off, display lines and paragraphs will be the 318 * same. Display lines are divided differently for each view, since 319 * they depend on the view’s width; paragraphs are the same in all 320 * views, since they depend on the contents of the #GtkTextBuffer. 321 * 322 * Params: 323 * iter = a #GtkTextIter 324 * 325 * Returns: %TRUE if @iter was moved and is not on the end iterator 326 */ 327 public bool forwardDisplayLine(TextIter iter) 328 { 329 return gtk_text_view_forward_display_line(gtkTextView, (iter is null) ? null : iter.getTextIterStruct()) != 0; 330 } 331 332 /** 333 * Moves the given @iter forward to the next display line end. 334 * A display line is different from a paragraph. Paragraphs are 335 * separated by newlines or other paragraph separator characters. 336 * Display lines are created by line-wrapping a paragraph. If 337 * wrapping is turned off, display lines and paragraphs will be the 338 * same. Display lines are divided differently for each view, since 339 * they depend on the view’s width; paragraphs are the same in all 340 * views, since they depend on the contents of the #GtkTextBuffer. 341 * 342 * Params: 343 * iter = a #GtkTextIter 344 * 345 * Returns: %TRUE if @iter was moved and is not on the end iterator 346 */ 347 public bool forwardDisplayLineEnd(TextIter iter) 348 { 349 return gtk_text_view_forward_display_line_end(gtkTextView, (iter is null) ? null : iter.getTextIterStruct()) != 0; 350 } 351 352 /** 353 * Returns whether pressing the Tab key inserts a tab characters. 354 * gtk_text_view_set_accepts_tab(). 355 * 356 * Returns: %TRUE if pressing the Tab key inserts a tab character, 357 * %FALSE if pressing the Tab key moves the keyboard focus. 358 * 359 * Since: 2.4 360 */ 361 public bool getAcceptsTab() 362 { 363 return gtk_text_view_get_accepts_tab(gtkTextView) != 0; 364 } 365 366 /** 367 * Gets the width of the specified border window. See 368 * gtk_text_view_set_border_window_size(). 369 * 370 * Params: 371 * type = window to return size from 372 * 373 * Returns: width of window 374 */ 375 public int getBorderWindowSize(GtkTextWindowType type) 376 { 377 return gtk_text_view_get_border_window_size(gtkTextView, type); 378 } 379 380 /** 381 * Gets the bottom margin for text in the @text_view. 382 * 383 * Returns: bottom margin in pixels 384 * 385 * Since: 3.18 386 */ 387 public int getBottomMargin() 388 { 389 return gtk_text_view_get_bottom_margin(gtkTextView); 390 } 391 392 /** 393 * Returns the #GtkTextBuffer being displayed by this text view. 394 * The reference count on the buffer is not incremented; the caller 395 * of this function won’t own a new reference. 396 * 397 * Returns: a #GtkTextBuffer 398 */ 399 public TextBuffer getBuffer() 400 { 401 auto p = gtk_text_view_get_buffer(gtkTextView); 402 403 if(p is null) 404 { 405 return null; 406 } 407 408 return ObjectG.getDObject!(TextBuffer)(cast(GtkTextBuffer*) p); 409 } 410 411 /** 412 * Given an @iter within a text layout, determine the positions of the 413 * strong and weak cursors if the insertion point is at that 414 * iterator. The position of each cursor is stored as a zero-width 415 * rectangle. The strong cursor location is the location where 416 * characters of the directionality equal to the base direction of the 417 * paragraph are inserted. The weak cursor location is the location 418 * where characters of the directionality opposite to the base 419 * direction of the paragraph are inserted. 420 * 421 * If @iter is %NULL, the actual cursor position is used. 422 * 423 * Note that if @iter happens to be the actual cursor position, and 424 * there is currently an IM preedit sequence being entered, the 425 * returned locations will be adjusted to account for the preedit 426 * cursor’s offset within the preedit sequence. 427 * 428 * The rectangle position is in buffer coordinates; use 429 * gtk_text_view_buffer_to_window_coords() to convert these 430 * coordinates to coordinates for one of the windows in the text view. 431 * 432 * Params: 433 * iter = a #GtkTextIter 434 * strong = location to store the strong 435 * cursor position (may be %NULL) 436 * weak = location to store the weak 437 * cursor position (may be %NULL) 438 * 439 * Since: 3.0 440 */ 441 public void getCursorLocations(TextIter iter, out GdkRectangle strong, out GdkRectangle weak) 442 { 443 gtk_text_view_get_cursor_locations(gtkTextView, (iter is null) ? null : iter.getTextIterStruct(), &strong, &weak); 444 } 445 446 /** 447 * Find out whether the cursor should be displayed. 448 * 449 * Returns: whether the insertion mark is visible 450 */ 451 public bool getCursorVisible() 452 { 453 return gtk_text_view_get_cursor_visible(gtkTextView) != 0; 454 } 455 456 /** 457 * Obtains a copy of the default text attributes. These are the 458 * attributes used for text unless a tag overrides them. 459 * You’d typically pass the default attributes in to 460 * gtk_text_iter_get_attributes() in order to get the 461 * attributes in effect at a given text position. 462 * 463 * The return value is a copy owned by the caller of this function, 464 * and should be freed with gtk_text_attributes_unref(). 465 * 466 * Returns: a new #GtkTextAttributes 467 */ 468 public TextAttributes getDefaultAttributes() 469 { 470 auto p = gtk_text_view_get_default_attributes(gtkTextView); 471 472 if(p is null) 473 { 474 return null; 475 } 476 477 return ObjectG.getDObject!(TextAttributes)(cast(GtkTextAttributes*) p, true); 478 } 479 480 /** 481 * Returns the default editability of the #GtkTextView. Tags in the 482 * buffer may override this setting for some ranges of text. 483 * 484 * Returns: whether text is editable by default 485 */ 486 public bool getEditable() 487 { 488 return gtk_text_view_get_editable(gtkTextView) != 0; 489 } 490 491 /** 492 * Gets the default indentation of paragraphs in @text_view. 493 * Tags in the view’s buffer may override the default. 494 * The indentation may be negative. 495 * 496 * Returns: number of pixels of indentation 497 */ 498 public int getIndent() 499 { 500 return gtk_text_view_get_indent(gtkTextView); 501 } 502 503 /** 504 * Gets the value of the #GtkTextView:input-hints property. 505 * 506 * Since: 3.6 507 */ 508 public GtkInputHints getInputHints() 509 { 510 return gtk_text_view_get_input_hints(gtkTextView); 511 } 512 513 /** 514 * Gets the value of the #GtkTextView:input-purpose property. 515 * 516 * Since: 3.6 517 */ 518 public GtkInputPurpose getInputPurpose() 519 { 520 return gtk_text_view_get_input_purpose(gtkTextView); 521 } 522 523 /** 524 * Retrieves the iterator at buffer coordinates @x and @y. Buffer 525 * coordinates are coordinates for the entire buffer, not just the 526 * currently-displayed portion. If you have coordinates from an 527 * event, you have to convert those to buffer coordinates with 528 * gtk_text_view_window_to_buffer_coords(). 529 * 530 * Params: 531 * iter = a #GtkTextIter 532 * x = x position, in buffer coordinates 533 * y = y position, in buffer coordinates 534 * 535 * Returns: %TRUE if the position is over text 536 */ 537 public bool getIterAtLocation(out TextIter iter, int x, int y) 538 { 539 GtkTextIter* outiter = sliceNew!GtkTextIter(); 540 541 auto p = gtk_text_view_get_iter_at_location(gtkTextView, outiter, x, y) != 0; 542 543 iter = ObjectG.getDObject!(TextIter)(outiter, true); 544 545 return p; 546 } 547 548 /** 549 * Retrieves the iterator pointing to the character at buffer 550 * coordinates @x and @y. Buffer coordinates are coordinates for 551 * the entire buffer, not just the currently-displayed portion. 552 * If you have coordinates from an event, you have to convert 553 * those to buffer coordinates with 554 * gtk_text_view_window_to_buffer_coords(). 555 * 556 * Note that this is different from gtk_text_view_get_iter_at_location(), 557 * which returns cursor locations, i.e. positions between 558 * characters. 559 * 560 * Params: 561 * iter = a #GtkTextIter 562 * trailing = if non-%NULL, location to store an integer indicating where 563 * in the grapheme the user clicked. It will either be 564 * zero, or the number of characters in the grapheme. 565 * 0 represents the trailing edge of the grapheme. 566 * x = x position, in buffer coordinates 567 * y = y position, in buffer coordinates 568 * 569 * Returns: %TRUE if the position is over text 570 * 571 * Since: 2.6 572 */ 573 public bool getIterAtPosition(out TextIter iter, out int trailing, int x, int y) 574 { 575 GtkTextIter* outiter = sliceNew!GtkTextIter(); 576 577 auto p = gtk_text_view_get_iter_at_position(gtkTextView, outiter, &trailing, x, y) != 0; 578 579 iter = ObjectG.getDObject!(TextIter)(outiter, true); 580 581 return p; 582 } 583 584 /** 585 * Gets a rectangle which roughly contains the character at @iter. 586 * The rectangle position is in buffer coordinates; use 587 * gtk_text_view_buffer_to_window_coords() to convert these 588 * coordinates to coordinates for one of the windows in the text view. 589 * 590 * Params: 591 * iter = a #GtkTextIter 592 * location = bounds of the character at @iter 593 */ 594 public void getIterLocation(TextIter iter, out GdkRectangle location) 595 { 596 gtk_text_view_get_iter_location(gtkTextView, (iter is null) ? null : iter.getTextIterStruct(), &location); 597 } 598 599 /** 600 * Gets the default justification of paragraphs in @text_view. 601 * Tags in the buffer may override the default. 602 * 603 * Returns: default justification 604 */ 605 public GtkJustification getJustification() 606 { 607 return gtk_text_view_get_justification(gtkTextView); 608 } 609 610 /** 611 * Gets the default left margin size of paragraphs in the @text_view. 612 * Tags in the buffer may override the default. 613 * 614 * Returns: left margin in pixels 615 */ 616 public int getLeftMargin() 617 { 618 return gtk_text_view_get_left_margin(gtkTextView); 619 } 620 621 /** 622 * Gets the #GtkTextIter at the start of the line containing 623 * the coordinate @y. @y is in buffer coordinates, convert from 624 * window coordinates with gtk_text_view_window_to_buffer_coords(). 625 * If non-%NULL, @line_top will be filled with the coordinate of the top 626 * edge of the line. 627 * 628 * Params: 629 * targetIter = a #GtkTextIter 630 * y = a y coordinate 631 * lineTop = return location for top coordinate of the line 632 */ 633 public void getLineAtY(out TextIter targetIter, int y, out int lineTop) 634 { 635 GtkTextIter* outtargetIter = sliceNew!GtkTextIter(); 636 637 gtk_text_view_get_line_at_y(gtkTextView, outtargetIter, y, &lineTop); 638 639 targetIter = ObjectG.getDObject!(TextIter)(outtargetIter, true); 640 } 641 642 /** 643 * Gets the y coordinate of the top of the line containing @iter, 644 * and the height of the line. The coordinate is a buffer coordinate; 645 * convert to window coordinates with gtk_text_view_buffer_to_window_coords(). 646 * 647 * Params: 648 * iter = a #GtkTextIter 649 * y = return location for a y coordinate 650 * height = return location for a height 651 */ 652 public void getLineYrange(TextIter iter, out int y, out int height) 653 { 654 gtk_text_view_get_line_yrange(gtkTextView, (iter is null) ? null : iter.getTextIterStruct(), &y, &height); 655 } 656 657 /** 658 * Gets the value of the #GtkTextView:monospace property. 659 * 660 * Returns: %TRUE if monospace fonts are desired 661 * 662 * Since: 3.16 663 */ 664 public bool getMonospace() 665 { 666 return gtk_text_view_get_monospace(gtkTextView) != 0; 667 } 668 669 /** 670 * Returns whether the #GtkTextView is in overwrite mode or not. 671 * 672 * Returns: whether @text_view is in overwrite mode or not. 673 * 674 * Since: 2.4 675 */ 676 public bool getOverwrite() 677 { 678 return gtk_text_view_get_overwrite(gtkTextView) != 0; 679 } 680 681 /** 682 * Gets the default number of pixels to put above paragraphs. 683 * Adding this function with gtk_text_view_get_pixels_below_lines() 684 * is equal to the line space between each paragraph. 685 * 686 * Returns: default number of pixels above paragraphs 687 */ 688 public int getPixelsAboveLines() 689 { 690 return gtk_text_view_get_pixels_above_lines(gtkTextView); 691 } 692 693 /** 694 * Gets the value set by gtk_text_view_set_pixels_below_lines(). 695 * 696 * The line space is the sum of the value returned by this function and the 697 * value returned by gtk_text_view_get_pixels_above_lines(). 698 * 699 * Returns: default number of blank pixels below paragraphs 700 */ 701 public int getPixelsBelowLines() 702 { 703 return gtk_text_view_get_pixels_below_lines(gtkTextView); 704 } 705 706 /** 707 * Gets the value set by gtk_text_view_set_pixels_inside_wrap(). 708 * 709 * Returns: default number of pixels of blank space between wrapped lines 710 */ 711 public int getPixelsInsideWrap() 712 { 713 return gtk_text_view_get_pixels_inside_wrap(gtkTextView); 714 } 715 716 /** 717 * Gets the default right margin for text in @text_view. Tags 718 * in the buffer may override the default. 719 * 720 * Returns: right margin in pixels 721 */ 722 public int getRightMargin() 723 { 724 return gtk_text_view_get_right_margin(gtkTextView); 725 } 726 727 /** 728 * Gets the default tabs for @text_view. Tags in the buffer may 729 * override the defaults. The returned array will be %NULL if 730 * “standard” (8-space) tabs are used. Free the return value 731 * with pango_tab_array_free(). 732 * 733 * Returns: copy of default tab array, or %NULL if 734 * “standard" tabs are used; must be freed with pango_tab_array_free(). 735 */ 736 public PgTabArray getTabs() 737 { 738 auto p = gtk_text_view_get_tabs(gtkTextView); 739 740 if(p is null) 741 { 742 return null; 743 } 744 745 return ObjectG.getDObject!(PgTabArray)(cast(PangoTabArray*) p, true); 746 } 747 748 /** 749 * Gets the top margin for text in the @text_view. 750 * 751 * Returns: top margin in pixels 752 * 753 * Since: 3.18 754 */ 755 public int getTopMargin() 756 { 757 return gtk_text_view_get_top_margin(gtkTextView); 758 } 759 760 /** 761 * Fills @visible_rect with the currently-visible 762 * region of the buffer, in buffer coordinates. Convert to window coordinates 763 * with gtk_text_view_buffer_to_window_coords(). 764 * 765 * Params: 766 * visibleRect = rectangle to fill 767 */ 768 public void getVisibleRect(out GdkRectangle visibleRect) 769 { 770 gtk_text_view_get_visible_rect(gtkTextView, &visibleRect); 771 } 772 773 /** 774 * Retrieves the #GdkWindow corresponding to an area of the text view; 775 * possible windows include the overall widget window, child windows 776 * on the left, right, top, bottom, and the window that displays the 777 * text buffer. Windows are %NULL and nonexistent if their width or 778 * height is 0, and are nonexistent before the widget has been 779 * realized. 780 * 781 * Params: 782 * win = window to get 783 * 784 * Returns: a #GdkWindow, or %NULL 785 */ 786 public Window getWindow(GtkTextWindowType win) 787 { 788 auto p = gtk_text_view_get_window(gtkTextView, win); 789 790 if(p is null) 791 { 792 return null; 793 } 794 795 return ObjectG.getDObject!(Window)(cast(GdkWindow*) p); 796 } 797 798 /** 799 * Usually used to find out which window an event corresponds to. 800 * 801 * If you connect to an event signal on @text_view, this function 802 * should be called on `event->window` to see which window it was. 803 * 804 * Params: 805 * window = a window type 806 * 807 * Returns: the window type. 808 */ 809 public GtkTextWindowType getWindowType(Window window) 810 { 811 return gtk_text_view_get_window_type(gtkTextView, (window is null) ? null : window.getWindowStruct()); 812 } 813 814 /** 815 * Gets the line wrapping for the view. 816 * 817 * Returns: the line wrap setting 818 */ 819 public GtkWrapMode getWrapMode() 820 { 821 return gtk_text_view_get_wrap_mode(gtkTextView); 822 } 823 824 /** 825 * Allow the #GtkTextView input method to internally handle key press 826 * and release events. If this function returns %TRUE, then no further 827 * processing should be done for this key event. See 828 * gtk_im_context_filter_keypress(). 829 * 830 * Note that you are expected to call this function from your handler 831 * when overriding key event handling. This is needed in the case when 832 * you need to insert your own key handling between the input method 833 * and the default key event handling of the #GtkTextView. 834 * 835 * |[<!-- language="C" --> 836 * static gboolean 837 * gtk_foo_bar_key_press_event (GtkWidget *widget, 838 * GdkEventKey *event) 839 * { 840 * guint keyval; 841 * 842 * gdk_event_get_keyval ((GdkEvent*)event, &keyval); 843 * 844 * if (keyval == GDK_KEY_Return || keyval == GDK_KEY_KP_Enter) 845 * { 846 * if (gtk_text_view_im_context_filter_keypress (GTK_TEXT_VIEW (widget), event)) 847 * return TRUE; 848 * } 849 * 850 * // Do some stuff 851 * 852 * return GTK_WIDGET_CLASS (gtk_foo_bar_parent_class)->key_press_event (widget, event); 853 * } 854 * ]| 855 * 856 * Params: 857 * event = the key event 858 * 859 * Returns: %TRUE if the input method handled the key event. 860 * 861 * Since: 2.22 862 */ 863 public bool imContextFilterKeypress(GdkEventKey* event) 864 { 865 return gtk_text_view_im_context_filter_keypress(gtkTextView, event) != 0; 866 } 867 868 /** 869 * Updates the position of a child, as for gtk_text_view_add_child_in_window(). 870 * 871 * Params: 872 * child = child widget already added to the text view 873 * xpos = new X position in window coordinates 874 * ypos = new Y position in window coordinates 875 */ 876 public void moveChild(Widget child, int xpos, int ypos) 877 { 878 gtk_text_view_move_child(gtkTextView, (child is null) ? null : child.getWidgetStruct(), xpos, ypos); 879 } 880 881 /** 882 * Moves a mark within the buffer so that it's 883 * located within the currently-visible text area. 884 * 885 * Params: 886 * mark = a #GtkTextMark 887 * 888 * Returns: %TRUE if the mark moved (wasn’t already onscreen) 889 */ 890 public bool moveMarkOnscreen(TextMark mark) 891 { 892 return gtk_text_view_move_mark_onscreen(gtkTextView, (mark is null) ? null : mark.getTextMarkStruct()) != 0; 893 } 894 895 /** 896 * Move the iterator a given number of characters visually, treating 897 * it as the strong cursor position. If @count is positive, then the 898 * new strong cursor position will be @count positions to the right of 899 * the old cursor position. If @count is negative then the new strong 900 * cursor position will be @count positions to the left of the old 901 * cursor position. 902 * 903 * In the presence of bi-directional text, the correspondence 904 * between logical and visual order will depend on the direction 905 * of the current run, and there may be jumps when the cursor 906 * is moved off of the end of a run. 907 * 908 * Params: 909 * iter = a #GtkTextIter 910 * count = number of characters to move (negative moves left, 911 * positive moves right) 912 * 913 * Returns: %TRUE if @iter moved and is not on the end iterator 914 */ 915 public bool moveVisually(TextIter iter, int count) 916 { 917 return gtk_text_view_move_visually(gtkTextView, (iter is null) ? null : iter.getTextIterStruct(), count) != 0; 918 } 919 920 /** 921 * Moves the cursor to the currently visible region of the 922 * buffer, it it isn’t there already. 923 * 924 * Returns: %TRUE if the cursor had to be moved. 925 */ 926 public bool placeCursorOnscreen() 927 { 928 return gtk_text_view_place_cursor_onscreen(gtkTextView) != 0; 929 } 930 931 /** 932 * Ensures that the cursor is shown (i.e. not in an 'off' blink 933 * interval) and resets the time that it will stay blinking (or 934 * visible, in case blinking is disabled). 935 * 936 * This function should be called in response to user input 937 * (e.g. from derived classes that override the textview's 938 * #GtkWidget::key-press-event handler). 939 * 940 * Since: 3.20 941 */ 942 public void resetCursorBlink() 943 { 944 gtk_text_view_reset_cursor_blink(gtkTextView); 945 } 946 947 /** 948 * Reset the input method context of the text view if needed. 949 * 950 * This can be necessary in the case where modifying the buffer 951 * would confuse on-going input method behavior. 952 * 953 * Since: 2.22 954 */ 955 public void resetImContext() 956 { 957 gtk_text_view_reset_im_context(gtkTextView); 958 } 959 960 /** 961 * Scrolls @text_view the minimum distance such that @mark is contained 962 * within the visible area of the widget. 963 * 964 * Params: 965 * mark = a mark in the buffer for @text_view 966 */ 967 public void scrollMarkOnscreen(TextMark mark) 968 { 969 gtk_text_view_scroll_mark_onscreen(gtkTextView, (mark is null) ? null : mark.getTextMarkStruct()); 970 } 971 972 /** 973 * Scrolls @text_view so that @iter is on the screen in the position 974 * indicated by @xalign and @yalign. An alignment of 0.0 indicates 975 * left or top, 1.0 indicates right or bottom, 0.5 means center. 976 * If @use_align is %FALSE, the text scrolls the minimal distance to 977 * get the mark onscreen, possibly not scrolling at all. The effective 978 * screen for purposes of this function is reduced by a margin of size 979 * @within_margin. 980 * 981 * Note that this function uses the currently-computed height of the 982 * lines in the text buffer. Line heights are computed in an idle 983 * handler; so this function may not have the desired effect if it’s 984 * called before the height computations. To avoid oddness, consider 985 * using gtk_text_view_scroll_to_mark() which saves a point to be 986 * scrolled to after line validation. 987 * 988 * Params: 989 * iter = a #GtkTextIter 990 * withinMargin = margin as a [0.0,0.5) fraction of screen size 991 * useAlign = whether to use alignment arguments (if %FALSE, 992 * just get the mark onscreen) 993 * xalign = horizontal alignment of mark within visible area 994 * yalign = vertical alignment of mark within visible area 995 * 996 * Returns: %TRUE if scrolling occurred 997 */ 998 public bool scrollToIter(TextIter iter, double withinMargin, bool useAlign, double xalign, double yalign) 999 { 1000 return gtk_text_view_scroll_to_iter(gtkTextView, (iter is null) ? null : iter.getTextIterStruct(), withinMargin, useAlign, xalign, yalign) != 0; 1001 } 1002 1003 /** 1004 * Scrolls @text_view so that @mark is on the screen in the position 1005 * indicated by @xalign and @yalign. An alignment of 0.0 indicates 1006 * left or top, 1.0 indicates right or bottom, 0.5 means center. 1007 * If @use_align is %FALSE, the text scrolls the minimal distance to 1008 * get the mark onscreen, possibly not scrolling at all. The effective 1009 * screen for purposes of this function is reduced by a margin of size 1010 * @within_margin. 1011 * 1012 * Params: 1013 * mark = a #GtkTextMark 1014 * withinMargin = margin as a [0.0,0.5) fraction of screen size 1015 * useAlign = whether to use alignment arguments (if %FALSE, just 1016 * get the mark onscreen) 1017 * xalign = horizontal alignment of mark within visible area 1018 * yalign = vertical alignment of mark within visible area 1019 */ 1020 public void scrollToMark(TextMark mark, double withinMargin, bool useAlign, double xalign, double yalign) 1021 { 1022 gtk_text_view_scroll_to_mark(gtkTextView, (mark is null) ? null : mark.getTextMarkStruct(), withinMargin, useAlign, xalign, yalign); 1023 } 1024 1025 /** 1026 * Sets the behavior of the text widget when the Tab key is pressed. 1027 * If @accepts_tab is %TRUE, a tab character is inserted. If @accepts_tab 1028 * is %FALSE the keyboard focus is moved to the next widget in the focus 1029 * chain. 1030 * 1031 * Params: 1032 * acceptsTab = %TRUE if pressing the Tab key should insert a tab 1033 * character, %FALSE, if pressing the Tab key should move the 1034 * keyboard focus. 1035 * 1036 * Since: 2.4 1037 */ 1038 public void setAcceptsTab(bool acceptsTab) 1039 { 1040 gtk_text_view_set_accepts_tab(gtkTextView, acceptsTab); 1041 } 1042 1043 /** 1044 * Sets the width of %GTK_TEXT_WINDOW_LEFT or %GTK_TEXT_WINDOW_RIGHT, 1045 * or the height of %GTK_TEXT_WINDOW_TOP or %GTK_TEXT_WINDOW_BOTTOM. 1046 * Automatically destroys the corresponding window if the size is set 1047 * to 0, and creates the window if the size is set to non-zero. This 1048 * function can only be used for the “border windows”, and it won’t 1049 * work with %GTK_TEXT_WINDOW_WIDGET, %GTK_TEXT_WINDOW_TEXT, or 1050 * %GTK_TEXT_WINDOW_PRIVATE. 1051 * 1052 * Params: 1053 * type = window to affect 1054 * size = width or height of the window 1055 */ 1056 public void setBorderWindowSize(GtkTextWindowType type, int size) 1057 { 1058 gtk_text_view_set_border_window_size(gtkTextView, type, size); 1059 } 1060 1061 /** 1062 * Sets the bottom margin for text in @text_view. 1063 * 1064 * Note that this function is confusingly named. 1065 * In CSS terms, the value set here is padding. 1066 * 1067 * Params: 1068 * bottomMargin = bottom margin in pixels 1069 * 1070 * Since: 3.18 1071 */ 1072 public void setBottomMargin(int bottomMargin) 1073 { 1074 gtk_text_view_set_bottom_margin(gtkTextView, bottomMargin); 1075 } 1076 1077 /** 1078 * Sets @buffer as the buffer being displayed by @text_view. The previous 1079 * buffer displayed by the text view is unreferenced, and a reference is 1080 * added to @buffer. If you owned a reference to @buffer before passing it 1081 * to this function, you must remove that reference yourself; #GtkTextView 1082 * will not “adopt” it. 1083 * 1084 * Params: 1085 * buffer = a #GtkTextBuffer 1086 */ 1087 public void setBuffer(TextBuffer buffer) 1088 { 1089 gtk_text_view_set_buffer(gtkTextView, (buffer is null) ? null : buffer.getTextBufferStruct()); 1090 } 1091 1092 /** 1093 * Toggles whether the insertion point should be displayed. A buffer with 1094 * no editable text probably shouldn’t have a visible cursor, so you may 1095 * want to turn the cursor off. 1096 * 1097 * Note that this property may be overridden by the 1098 * #GtkSettings:gtk-keynave-use-caret settings. 1099 * 1100 * Params: 1101 * setting = whether to show the insertion cursor 1102 */ 1103 public void setCursorVisible(bool setting) 1104 { 1105 gtk_text_view_set_cursor_visible(gtkTextView, setting); 1106 } 1107 1108 /** 1109 * Sets the default editability of the #GtkTextView. You can override 1110 * this default setting with tags in the buffer, using the “editable” 1111 * attribute of tags. 1112 * 1113 * Params: 1114 * setting = whether it’s editable 1115 */ 1116 public void setEditable(bool setting) 1117 { 1118 gtk_text_view_set_editable(gtkTextView, setting); 1119 } 1120 1121 /** 1122 * Sets the default indentation for paragraphs in @text_view. 1123 * Tags in the buffer may override the default. 1124 * 1125 * Params: 1126 * indent = indentation in pixels 1127 */ 1128 public void setIndent(int indent) 1129 { 1130 gtk_text_view_set_indent(gtkTextView, indent); 1131 } 1132 1133 /** 1134 * Sets the #GtkTextView:input-hints property, which 1135 * allows input methods to fine-tune their behaviour. 1136 * 1137 * Params: 1138 * hints = the hints 1139 * 1140 * Since: 3.6 1141 */ 1142 public void setInputHints(GtkInputHints hints) 1143 { 1144 gtk_text_view_set_input_hints(gtkTextView, hints); 1145 } 1146 1147 /** 1148 * Sets the #GtkTextView:input-purpose property which 1149 * can be used by on-screen keyboards and other input 1150 * methods to adjust their behaviour. 1151 * 1152 * Params: 1153 * purpose = the purpose 1154 * 1155 * Since: 3.6 1156 */ 1157 public void setInputPurpose(GtkInputPurpose purpose) 1158 { 1159 gtk_text_view_set_input_purpose(gtkTextView, purpose); 1160 } 1161 1162 /** 1163 * Sets the default justification of text in @text_view. 1164 * Tags in the view’s buffer may override the default. 1165 * 1166 * Params: 1167 * justification = justification 1168 */ 1169 public void setJustification(GtkJustification justification) 1170 { 1171 gtk_text_view_set_justification(gtkTextView, justification); 1172 } 1173 1174 /** 1175 * Sets the default left margin for text in @text_view. 1176 * Tags in the buffer may override the default. 1177 * 1178 * Note that this function is confusingly named. 1179 * In CSS terms, the value set here is padding. 1180 * 1181 * Params: 1182 * leftMargin = left margin in pixels 1183 */ 1184 public void setLeftMargin(int leftMargin) 1185 { 1186 gtk_text_view_set_left_margin(gtkTextView, leftMargin); 1187 } 1188 1189 /** 1190 * Sets the #GtkTextView:monospace property, which 1191 * indicates that the text view should use monospace 1192 * fonts. 1193 * 1194 * Params: 1195 * monospace = %TRUE to request monospace styling 1196 * 1197 * Since: 3.16 1198 */ 1199 public void setMonospace(bool monospace) 1200 { 1201 gtk_text_view_set_monospace(gtkTextView, monospace); 1202 } 1203 1204 /** 1205 * Changes the #GtkTextView overwrite mode. 1206 * 1207 * Params: 1208 * overwrite = %TRUE to turn on overwrite mode, %FALSE to turn it off 1209 * 1210 * Since: 2.4 1211 */ 1212 public void setOverwrite(bool overwrite) 1213 { 1214 gtk_text_view_set_overwrite(gtkTextView, overwrite); 1215 } 1216 1217 /** 1218 * Sets the default number of blank pixels above paragraphs in @text_view. 1219 * Tags in the buffer for @text_view may override the defaults. 1220 * 1221 * Params: 1222 * pixelsAboveLines = pixels above paragraphs 1223 */ 1224 public void setPixelsAboveLines(int pixelsAboveLines) 1225 { 1226 gtk_text_view_set_pixels_above_lines(gtkTextView, pixelsAboveLines); 1227 } 1228 1229 /** 1230 * Sets the default number of pixels of blank space 1231 * to put below paragraphs in @text_view. May be overridden 1232 * by tags applied to @text_view’s buffer. 1233 * 1234 * Params: 1235 * pixelsBelowLines = pixels below paragraphs 1236 */ 1237 public void setPixelsBelowLines(int pixelsBelowLines) 1238 { 1239 gtk_text_view_set_pixels_below_lines(gtkTextView, pixelsBelowLines); 1240 } 1241 1242 /** 1243 * Sets the default number of pixels of blank space to leave between 1244 * display/wrapped lines within a paragraph. May be overridden by 1245 * tags in @text_view’s buffer. 1246 * 1247 * Params: 1248 * pixelsInsideWrap = default number of pixels between wrapped lines 1249 */ 1250 public void setPixelsInsideWrap(int pixelsInsideWrap) 1251 { 1252 gtk_text_view_set_pixels_inside_wrap(gtkTextView, pixelsInsideWrap); 1253 } 1254 1255 /** 1256 * Sets the default right margin for text in the text view. 1257 * Tags in the buffer may override the default. 1258 * 1259 * Note that this function is confusingly named. 1260 * In CSS terms, the value set here is padding. 1261 * 1262 * Params: 1263 * rightMargin = right margin in pixels 1264 */ 1265 public void setRightMargin(int rightMargin) 1266 { 1267 gtk_text_view_set_right_margin(gtkTextView, rightMargin); 1268 } 1269 1270 /** 1271 * Sets the default tab stops for paragraphs in @text_view. 1272 * Tags in the buffer may override the default. 1273 * 1274 * Params: 1275 * tabs = tabs as a #PangoTabArray 1276 */ 1277 public void setTabs(PgTabArray tabs) 1278 { 1279 gtk_text_view_set_tabs(gtkTextView, (tabs is null) ? null : tabs.getPgTabArrayStruct()); 1280 } 1281 1282 /** 1283 * Sets the top margin for text in @text_view. 1284 * 1285 * Note that this function is confusingly named. 1286 * In CSS terms, the value set here is padding. 1287 * 1288 * Params: 1289 * topMargin = top margin in pixels 1290 * 1291 * Since: 3.18 1292 */ 1293 public void setTopMargin(int topMargin) 1294 { 1295 gtk_text_view_set_top_margin(gtkTextView, topMargin); 1296 } 1297 1298 /** 1299 * Sets the line wrapping for the view. 1300 * 1301 * Params: 1302 * wrapMode = a #GtkWrapMode 1303 */ 1304 public void setWrapMode(GtkWrapMode wrapMode) 1305 { 1306 gtk_text_view_set_wrap_mode(gtkTextView, wrapMode); 1307 } 1308 1309 /** 1310 * Determines whether @iter is at the start of a display line. 1311 * See gtk_text_view_forward_display_line() for an explanation of 1312 * display lines vs. paragraphs. 1313 * 1314 * Params: 1315 * iter = a #GtkTextIter 1316 * 1317 * Returns: %TRUE if @iter begins a wrapped line 1318 */ 1319 public bool startsDisplayLine(TextIter iter) 1320 { 1321 return gtk_text_view_starts_display_line(gtkTextView, (iter is null) ? null : iter.getTextIterStruct()) != 0; 1322 } 1323 1324 /** 1325 * Converts coordinates on the window identified by @win to buffer 1326 * coordinates, storing the result in (@buffer_x,@buffer_y). 1327 * 1328 * Note that you can’t convert coordinates for a nonexisting window (see 1329 * gtk_text_view_set_border_window_size()). 1330 * 1331 * Params: 1332 * win = a #GtkTextWindowType except %GTK_TEXT_WINDOW_PRIVATE 1333 * windowX = window x coordinate 1334 * windowY = window y coordinate 1335 * bufferX = buffer x coordinate return location or %NULL 1336 * bufferY = buffer y coordinate return location or %NULL 1337 */ 1338 public void windowToBufferCoords(GtkTextWindowType win, int windowX, int windowY, out int bufferX, out int bufferY) 1339 { 1340 gtk_text_view_window_to_buffer_coords(gtkTextView, win, windowX, windowY, &bufferX, &bufferY); 1341 } 1342 1343 /** 1344 * The ::backspace signal is a 1345 * [keybinding signal][GtkBindingSignal] 1346 * which gets emitted when the user asks for it. 1347 * 1348 * The default bindings for this signal are 1349 * Backspace and Shift-Backspace. 1350 */ 1351 gulong addOnBackspace(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1352 { 1353 return Signals.connect(this, "backspace", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1354 } 1355 1356 /** 1357 * The ::copy-clipboard signal is a 1358 * [keybinding signal][GtkBindingSignal] 1359 * which gets emitted to copy the selection to the clipboard. 1360 * 1361 * The default bindings for this signal are 1362 * Ctrl-c and Ctrl-Insert. 1363 */ 1364 gulong addOnCopyClipboard(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1365 { 1366 return Signals.connect(this, "copy-clipboard", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1367 } 1368 1369 /** 1370 * The ::cut-clipboard signal is a 1371 * [keybinding signal][GtkBindingSignal] 1372 * which gets emitted to cut the selection to the clipboard. 1373 * 1374 * The default bindings for this signal are 1375 * Ctrl-x and Shift-Delete. 1376 */ 1377 gulong addOnCutClipboard(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1378 { 1379 return Signals.connect(this, "cut-clipboard", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1380 } 1381 1382 /** 1383 * The ::delete-from-cursor signal is a 1384 * [keybinding signal][GtkBindingSignal] 1385 * which gets emitted when the user initiates a text deletion. 1386 * 1387 * If the @type is %GTK_DELETE_CHARS, GTK+ deletes the selection 1388 * if there is one, otherwise it deletes the requested number 1389 * of characters. 1390 * 1391 * The default bindings for this signal are 1392 * Delete for deleting a character, Ctrl-Delete for 1393 * deleting a word and Ctrl-Backspace for deleting a word 1394 * backwords. 1395 * 1396 * Params: 1397 * type = the granularity of the deletion, as a #GtkDeleteType 1398 * count = the number of @type units to delete 1399 */ 1400 gulong addOnDeleteFromCursor(void delegate(GtkDeleteType, int, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1401 { 1402 return Signals.connect(this, "delete-from-cursor", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1403 } 1404 1405 /** 1406 * The ::extend-selection signal is emitted when the selection needs to be 1407 * extended at @location. 1408 * 1409 * Params: 1410 * granularity = the granularity type 1411 * location = the location where to extend the selection 1412 * start = where the selection should start 1413 * end = where the selection should end 1414 * 1415 * Returns: %GDK_EVENT_STOP to stop other handlers from being invoked for the 1416 * event. %GDK_EVENT_PROPAGATE to propagate the event further. 1417 * 1418 * Since: 3.16 1419 */ 1420 gulong addOnExtendSelection(bool delegate(GtkTextExtendSelection, TextIter, TextIter, TextIter, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1421 { 1422 return Signals.connect(this, "extend-selection", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1423 } 1424 1425 /** 1426 * The ::insert-at-cursor signal is a 1427 * [keybinding signal][GtkBindingSignal] 1428 * which gets emitted when the user initiates the insertion of a 1429 * fixed string at the cursor. 1430 * 1431 * This signal has no default bindings. 1432 * 1433 * Params: 1434 * str = the string to insert 1435 */ 1436 gulong addOnInsertAtCursor(void delegate(string, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1437 { 1438 return Signals.connect(this, "insert-at-cursor", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1439 } 1440 1441 /** 1442 * The ::insert-emoji signal is a 1443 * [keybinding signal][GtkBindingSignal] 1444 * which gets emitted to present the Emoji chooser for the @text_view. 1445 * 1446 * The default bindings for this signal are Ctrl-. and Ctrl-; 1447 * 1448 * Since: 3.22.27 1449 */ 1450 gulong addOnInsertEmoji(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1451 { 1452 return Signals.connect(this, "insert-emoji", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1453 } 1454 1455 /** 1456 * The ::move-cursor signal is a 1457 * [keybinding signal][GtkBindingSignal] 1458 * which gets emitted when the user initiates a cursor movement. 1459 * If the cursor is not visible in @text_view, this signal causes 1460 * the viewport to be moved instead. 1461 * 1462 * Applications should not connect to it, but may emit it with 1463 * g_signal_emit_by_name() if they need to control the cursor 1464 * programmatically. 1465 * 1466 * The default bindings for this signal come in two variants, 1467 * the variant with the Shift modifier extends the selection, 1468 * the variant without the Shift modifer does not. 1469 * There are too many key combinations to list them all here. 1470 * - Arrow keys move by individual characters/lines 1471 * - Ctrl-arrow key combinations move by words/paragraphs 1472 * - Home/End keys move to the ends of the buffer 1473 * - PageUp/PageDown keys move vertically by pages 1474 * - Ctrl-PageUp/PageDown keys move horizontally by pages 1475 * 1476 * Params: 1477 * step = the granularity of the move, as a #GtkMovementStep 1478 * count = the number of @step units to move 1479 * extendSelection = %TRUE if the move should extend the selection 1480 */ 1481 gulong addOnMoveCursor(void delegate(GtkMovementStep, int, bool, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1482 { 1483 return Signals.connect(this, "move-cursor", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1484 } 1485 1486 /** 1487 * The ::move-viewport signal is a 1488 * [keybinding signal][GtkBindingSignal] 1489 * which can be bound to key combinations to allow the user 1490 * to move the viewport, i.e. change what part of the text view 1491 * is visible in a containing scrolled window. 1492 * 1493 * There are no default bindings for this signal. 1494 * 1495 * Params: 1496 * step = the granularity of the movement, as a #GtkScrollStep 1497 * count = the number of @step units to move 1498 */ 1499 gulong addOnMoveViewport(void delegate(GtkScrollStep, int, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1500 { 1501 return Signals.connect(this, "move-viewport", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1502 } 1503 1504 /** 1505 * The ::paste-clipboard signal is a 1506 * [keybinding signal][GtkBindingSignal] 1507 * which gets emitted to paste the contents of the clipboard 1508 * into the text view. 1509 * 1510 * The default bindings for this signal are 1511 * Ctrl-v and Shift-Insert. 1512 */ 1513 gulong addOnPasteClipboard(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1514 { 1515 return Signals.connect(this, "paste-clipboard", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1516 } 1517 1518 /** 1519 * The ::populate-popup signal gets emitted before showing the 1520 * context menu of the text view. 1521 * 1522 * If you need to add items to the context menu, connect 1523 * to this signal and append your items to the @popup, which 1524 * will be a #GtkMenu in this case. 1525 * 1526 * If #GtkTextView:populate-all is %TRUE, this signal will 1527 * also be emitted to populate touch popups. In this case, 1528 * @popup will be a different container, e.g. a #GtkToolbar. 1529 * 1530 * The signal handler should not make assumptions about the 1531 * type of @widget, but check whether @popup is a #GtkMenu 1532 * or #GtkToolbar or another kind of container. 1533 * 1534 * Params: 1535 * popup = the container that is being populated 1536 */ 1537 gulong addOnPopulatePopup(void delegate(Widget, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1538 { 1539 return Signals.connect(this, "populate-popup", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1540 } 1541 1542 /** 1543 * If an input method is used, the typed text will not immediately 1544 * be committed to the buffer. So if you are interested in the text, 1545 * connect to this signal. 1546 * 1547 * This signal is only emitted if the text at the given position 1548 * is actually editable. 1549 * 1550 * Params: 1551 * preedit = the current preedit string 1552 * 1553 * Since: 2.20 1554 */ 1555 gulong addOnPreeditChanged(void delegate(string, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1556 { 1557 return Signals.connect(this, "preedit-changed", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1558 } 1559 1560 /** 1561 * The ::select-all signal is a 1562 * [keybinding signal][GtkBindingSignal] 1563 * which gets emitted to select or unselect the complete 1564 * contents of the text view. 1565 * 1566 * The default bindings for this signal are Ctrl-a and Ctrl-/ 1567 * for selecting and Shift-Ctrl-a and Ctrl-\ for unselecting. 1568 * 1569 * Params: 1570 * select = %TRUE to select, %FALSE to unselect 1571 */ 1572 gulong addOnSelectAll(void delegate(bool, TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1573 { 1574 return Signals.connect(this, "select-all", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1575 } 1576 1577 /** 1578 * The ::set-anchor signal is a 1579 * [keybinding signal][GtkBindingSignal] 1580 * which gets emitted when the user initiates setting the "anchor" 1581 * mark. The "anchor" mark gets placed at the same position as the 1582 * "insert" mark. 1583 * 1584 * This signal has no default bindings. 1585 */ 1586 gulong addOnSetAnchor(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1587 { 1588 return Signals.connect(this, "set-anchor", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1589 } 1590 1591 /** 1592 * The ::toggle-cursor-visible signal is a 1593 * [keybinding signal][GtkBindingSignal] 1594 * which gets emitted to toggle the #GtkTextView:cursor-visible 1595 * property. 1596 * 1597 * The default binding for this signal is F7. 1598 */ 1599 gulong addOnToggleCursorVisible(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1600 { 1601 return Signals.connect(this, "toggle-cursor-visible", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1602 } 1603 1604 /** 1605 * The ::toggle-overwrite signal is a 1606 * [keybinding signal][GtkBindingSignal] 1607 * which gets emitted to toggle the overwrite mode of the text view. 1608 * 1609 * The default bindings for this signal is Insert. 1610 */ 1611 gulong addOnToggleOverwrite(void delegate(TextView) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 1612 { 1613 return Signals.connect(this, "toggle-overwrite", dlg, connectFlags ^ ConnectFlags.SWAPPED); 1614 } 1615 }