Skip to content
Snippets Groups Projects
FXText.rb 18 KiB
Newer Older
module Fox
  #
  # Highlight style entry
  #
  class FXHiliteStyle
    # Normal text foreground color {FXColor}
    # Normal text background color {FXColor}
    # Selected text foreground color {FXColor}
    # Selected text background color {FXColor}
    # Highlight text foreground color {FXColor}
    # Highlight text background color {FXColor}
    # Active text background color {FXColor}

    # Highlight text style [Integer]
  end

  #
  # Text mutation callback data passed with the SEL_INSERTED,
  # SEL_REPLACED, and SEL_DELETED messages; both old and new
  # text is available on behalf of the undo system as well as
  # syntax highlighting.
  #
  class FXTextChange
    # Position in buffer [Integer]
    attr_accessor :pos
    # Number of characters deleted at _pos_ [Integer]
    attr_accessor :ndel
    # Number of characters inserted at _pos_ [Integer]
    attr_accessor :nins
    # Text inserted at _pos_ [String]
    attr_accessor :ins
    # Text deleted at _pos_ [String]
    attr_accessor :del
  end

  #
  # The text widget supports editing of multiple lines of text.
  # An optional style table can provide text coloring based on
  # the contents of an optional parallel style buffer, which is
  # maintained as text is edited.  In a typical scenario, the
  # contents of the style buffer is either directly written when
  # the text is added to the widget, or is continually modified
  # by editing the text via syntax-based highlighting engine which
  # colors the text based on syntactical patterns.
  #
  # === Events
  #
  # The following messages are sent by FXText to its target:
  #
  # +SEL_KEYPRESS+::  sent when a key is pressed; the message data is an FXEvent instance.
  # +SEL_KEYRELEASE+::  sent when a key is released; the message data is an FXEvent instance.
  # +SEL_LEFTBUTTONPRESS+:: sent when the left mouse button goes down; the message data is an FXEvent instance.
  # +SEL_LEFTBUTTONRELEASE+:: sent when the left mouse button goes up; the message data is an FXEvent instance.
  # +SEL_MIDDLEBUTTONPRESS+:: sent when the middle mouse button goes down; the message data is an FXEvent instance.
  # +SEL_MIDDLEBUTTONRELEASE+:: sent when the middle mouse button goes up; the message data is an FXEvent instance.
  # +SEL_RIGHTBUTTONPRESS+:: sent when the right mouse button goes down; the message data is an FXEvent instance.
  # +SEL_RIGHTBUTTONRELEASE+:: sent when the right mouse button goes up; the message data is an FXEvent instance.
  # +SEL_INSERTED+::
  #   sent after text is inserted into the text buffer; the message data
  #   is a reference to an FXTextChange instance.
  # +SEL_DELETED+::
  #   sent after text is removed from the text buffer; the message data is
  #   a reference to an FXTextChange instance.
  # +SEL_REPLACED+::
  #   sent after some text is replaced in the text buffer; the message data is
  #   a reference to an FXTextChange instance.
  # +SEL_CHANGED+::
  #   sent when the contents of the text buffer change in any way;
  #   the message data is an integer indicating the cursor position.
  # +SEL_SELECTED+::
  #   sent after text is selected; the message data is a two-element array
  #   indicating the starting position of the selected text and the number
  #   of characters selected.
  # +SEL_DESELECTED+::
  #   sent before text is deselected; the message data is a two-element array
  #   indicating the starting position of the deselected text and the number
  #   of characters deselected.
  #
  # === Text widget options
  #
  # +TEXT_READONLY+:: Text is _not_ editable
  # +TEXT_WORDWRAP+:: Wrap at word breaks
  # +TEXT_OVERSTRIKE+:: Overstrike mode
  # +TEXT_FIXEDWRAP+:: Fixed wrap columns
  # +TEXT_NO_TABS+:: Insert spaces for tabs
  # +TEXT_AUTOINDENT+:: Autoindent
  # +TEXT_SHOWACTIVE+:: Show active line
  # +TEXT_AUTOSCROLL+:: Logging mode, keeping last line visible
  #
  # === Selection modes
  #
  # +SELECT_CHARS+
  # +SELECT_WORDS+
  # +SELECT_LINES+
  #
  # === Text styles
  #
  # +STYLE_UNDERLINE+::  underline text
  # +STYLE_STRIKEOUT+::  strike out text
  # +STYLE_BOLD_+::   bold text
  #
  # === Message identifiers
  #
  # +ID_CURSOR_TOP+::
  # +ID_CURSOR_BOTTOM+::
  # +ID_CURSOR_HOME+::
  # +ID_CURSOR_END+::
  # +ID_CURSOR_RIGHT+::
  # +ID_CURSOR_LEFT+::
  # +ID_CURSOR_UP+::
  # +ID_CURSOR_DOWN+::
  # +ID_CURSOR_WORD_LEFT+::
  # +ID_CURSOR_WORD_RIGHT+::
  # +ID_CURSOR_PAGEDOWN+::
  # +ID_CURSOR_PAGEUP+::
  # +ID_CURSOR_SCRNTOP+::
  # +ID_CURSOR_SCRNBTM+::
  # +ID_CURSOR_SCRNCTR+::
  # +ID_CURSOR_PAR_HOME+::
  # +ID_CURSOR_PAR_END+::
  # +ID_SCROLL_UP+::
  # +ID_SCROLL_DOWN+::
  # +ID_MARK+::
  # +ID_EXTEND+::
  # +ID_OVERST_STRING+::
  # +ID_INSERT_STRING+::
  # +ID_INSERT_NEWLINE+::
  # +ID_INSERT_TAB+::
  # +ID_CUT_SEL+::
  # +ID_COPY_SEL+::
  # +ID_PASTE_SEL+::
  # +ID_DELETE_SEL+::
  # +ID_SELECT_CHAR+::
  # +ID_SELECT_WORD+::
  # +ID_SELECT_LINE+::
  # +ID_SELECT_ALL+::
  # +ID_SELECT_MATCHING+::
  # +ID_SELECT_BRACE+::
  # +ID_SELECT_BRACK+::
  # +ID_SELECT_PAREN+::
  # +ID_SELECT_ANG+::
  # +ID_DESELECT_ALL+::
  # +ID_BACKSPACE+::
  # +ID_BACKSPACE_WORD+::
  # +ID_BACKSPACE_BOL+::
  # +ID_DELETE+::
  # +ID_DELETE_WORD+::
  # +ID_DELETE_EOL+::
  # +ID_DELETE_LINE+::
  # +ID_TOGGLE_EDITABLE+::
  # +ID_TOGGLE_OVERSTRIKE+::
  # +ID_CURSOR_ROW+::
  # +ID_CURSOR_COLUMN+::
  # +ID_CLEAN_INDENT+::
  # +ID_SHIFT_LEFT+::
  # +ID_SHIFT_RIGHT+::
  # +ID_SHIFT_TABLEFT+::
  # +ID_SHIFT_TABRIGHT+::
  # +ID_UPPER_CASE+::
  # +ID_LOWER_CASE+::
  # +ID_GOTO_MATCHING+::
  # +ID_GOTO_SELECTED+::
  # +ID_GOTO_LINE+::
  # +ID_SEARCH_FORW_SEL+::
  # +ID_SEARCH_BACK_SEL+::
  # +ID_SEARCH+::
  # +ID_REPLACE+::
  # +ID_LEFT_BRACE+::
  # +ID_LEFT_BRACK+::
  # +ID_LEFT_PAREN+::
  # +ID_LEFT_ANG+::
  # +ID_RIGHT_BRACE+::
  # +ID_RIGHT_BRACK+::
  # +ID_RIGHT_PAREN+::
  # +ID_RIGHT_ANG+::
  # +ID_BLINK+::
  # +ID_FLASH+::

  class FXText < FXScrollArea
    # Top margin [Integer]

    # Bottom margin [Integer]

    # Left margin [Integer]

    # Right margin [Integer]

    # Wrap columns [Integer]

    # Tab columns [Integer]

    # Number of columns used for line numbers [Integer]

    # Indicates whether text is modified [Boolean]

    # Indicates whether text is editable [Boolean]

    # Indicates whether text is styled [Boolean]

    # Word delimiters [String]
    # Text font {FXFont}
    # Text color {FXColor}
    # Selected text background color {FXColor}
    # Selected text color {FXColor}
    # Highlight text color {FXColor}
    # Highlight text background color {FXColor}
    # Active background color {FXColor}
    # Cursor color {FXColor}
    # Line number color {FXColor}
    # Bar color {FXColor}

    # Status line help text [String]

    # Tool tip message [String]

    # The text buffer [String]

    # The length of the text buffer [Integer]

    # Anchor position [Integer]

    # Cursor row [Integer]

    # Cursor column [Integer]

    # Cursor position [Integer]

    # Selection start position [Integer]

    # Selection end position [Integer]

    # Text widget style [Integer]

    # Number of visible rows [Integer]

    # Number of visible columns [Integer]

    #
    # Brace and parenthesis match highlighting time, in milliseconds [Integer].
    # A _hiliteMatchTime_ of 0 disables brace matching.
    #

    # Array of hilite styles [an Array of FXHiliteStyle instances]

    #
    # Return an initialized FXText instance.
    #
    # ==== Parameters:
    #
    # +p+:: the parent window for this text widget {FXComposite}
    # +target+:: the message target, if any, for this text widget {FXObject}
    # +selector+:: the message identifier for this text widget [Integer]
    # +opts+:: text options [Integer]
    # +x+:: initial x-position [Integer]
    # +y+:: initial y-position [Integer]
    # +width+:: initial width [Integer]
    # +height+:: initial height [Integer]
    #
    def initialize(p, target=nil, selector=0, opts=0, x=0, y=0, width=0, height=0, padLeft=3, padRight=3, padTop=2, padBottom=2) # :yields: theText
    end
    # Return the text buffer's value
    def to_s; text; end
    # Return +true+ if text was modified
    def modified? ; end
    # Return +true+ if text is editable
    def editable? ; end
    # Set overstrike mode to +true+ or +false+.
    def overstrike=(os); end
    # Return +true+ if overstrike mode is activated.
    def overstrike? ; end

    # Return +true+ if styled text
    def styled? ; end

    # Get character at position _pos_ in text buffer
    def getByte(pos); end
    # Get wide character at position _pos_.
    def getChar(pos); end

    # Get length of wide character at position _pos_.
    def getCharLen(pos); end

    # Get style at position _pos_ in style buffer
    def getStyle(pos); end

    # Extract _n_ bytes of text from position _pos_ in the text buffer
    def extractText(pos, n); end
    # Extract _n_ bytes of style info from position _pos_ in the style buffer
    def extractStyle(pos, n); end

    # Replace the _m_ characters at _pos_ with _text_.
    # If _notify_ is +true+, a +SEL_DELETED+ message is sent to the text
    # widget's message target before the old text is removed, and a
    # +SEL_INSERTED+ and +SEL_CHANGED+ message is sent after the new
    # text is inserted.
    def replaceText(pos, m, text, notify=false); end
    # Replace the _m_ characters at _pos_ with _text_.
    # If _notify_ is +true+, a +SEL_DELETED+ message is sent to the text
    # widget's message target before the old text is removed, and a
    # +SEL_INSERTED+ and +SEL_CHANGED+ message is sent after the new
    # text is inserted.
    def replaceStyledText(pos, m, text, style=0, notify=false); end
    # Append _text_ to the end of the text buffer.
    # If _notify_ is +true+, +SEL_INSERTED+ and +SEL_CHANGED+ messages
    # are sent to the text widget's message target after the new text is
    # added.
    def appendText(text, notify=false); end
    # Append _text_ to the end of the text buffer.
    # If _notify_ is +true+, +SEL_INSERTED+ and +SEL_CHANGED+ messages
    # are sent to the text widget's message target after the new text is
    # added.
    def appendStyledText(text, style=0, notify=false); end
    # Insert _text_ at position _pos_ in the text buffer.
    # If _notify_ is +true+, +SEL_INSERTED+ and +SEL_CHANGED+ messages
    # are sent to the text widget's message target after the new text is
    # inserted.
    def insertText(pos, text, notify=false); end
    # Insert _text_ at position _pos_ in the text buffer.
    # If _notify_ is +true+, +SEL_INSERTED+ and +SEL_CHANGED+ messages
    # are sent to the text widget's message target after the new text is
    # inserted.
    def insertStyledText(pos, text, style=0, notify=false); end

    # Remove _n_ characters of text at position _pos_ in the buffer
    # If _notify_ is +true+, a +SEL_DELETED+ message is sent to the
    # text widget's message target before the text is removed and a
    # +SEL_CHANGED+ message is sent after the change occurs.
    def removeText(pos, n, notify=false); end
    # Change the style of _n_ characters at position _pos_ in the text
    # buffer to _style_. Here, _style_ is  an integer index into the
    # style table, indicating the new style for all the affected characters;
    def changeStyle(pos, n, style); end
    # Change the style of text range at position _pos_ in the text
    # buffer to _style_. Here, _style_ an array of bytes indicating
    # the new style.
    def changeStyle(pos, style); end

    # Change the text
    # If _notify_ is +true+, +SEL_INSERTED+ and +SEL_CHANGED+ messages
    # are sent to the text widget's message target after the new text is
    # set.
    def setText(text, notify=false); end
    # Change the text in the buffer to new text
    # If _notify_ is +true+, +SEL_INSERTED+ and +SEL_CHANGED+ messages
    # are sent to the text widget's message target after the new text is
    # set.
    def setStyledText(text, style=0, notify=false); end
    # Shift block of lines from position _startPos_ up to _endPos_ by given _amount_.
    # If _notify_ is +true+, a +SEL_DELETED+ message is sent to the text
    # widget's message target before the old text is removed, and a
    # +SEL_INSERTED+ and +SEL_CHANGED+ message is sent after the new
    # text is inserted.
    def shiftText(startPos, endPos, amount, notify=false); end

    #
    # Search for _string_ in text buffer, and return the extent of
    # the string as a two-element array of arrays.
    # The first array contains the beginning index (or indices)
    # and the second array contains the ending index (or indices).
    # The search starts from the given
    # _start_ position, scans forward (+SEARCH_FORWARD+) or backward
    # (+SEARCH_BACKWARD+), and wraps around if +SEARCH_WRAP+ has been
    # specified.  The search type is either a plain search (+SEARCH_EXACT+),
    # case insensitive search (+SEARCH_IGNORECASE+), or regular expression
    # search (+SEARCH_REGEX+).
    #
    def findText(string, start=0, flags=SEARCH_FORWARD|SEARCH_WRAP|SEARCH_EXACT); end

    # Return +true+ if position _pos_ is selected
    def positionSelected?(pos); end
    # Return +true+ if position _pos_ is fully visible
    def positionVisible?(pos); end
    # Return text position at given visible (_x_, _y_) coordinate
    def getPosAt(x, y); end
    # Count number of rows; _start_ should be on a row start

    # Count number of columns; _start_ should be on a row start

    # Count number of newlines

    # Return position of beginning of line containing position _pos_
    def lineStart(pos); end
    # Return position of end of line containing position _pos_
    def lineEnd(pos); end
    # Return start of next line
    def nextLine(pos, nl=1); end
    # Return start of previous line
    def prevLine(pos, nl=1); end
    # Return row start
    def rowStart(pos); end
    # Return row end
    def rowEnd(pos); end

    # Return start of next row
    def nextRow(pos, nr=1); end
    # Return start of previous row
    def prevRow(pos, nr=1); end
    # Return end of previous word
    def leftWord(pos); end
    # Return begin of next word
    def rightWord(pos); end
    # Return begin of word
    def wordStart(pos); end
    # Return end of word
    def wordEnd(pos); end
    # Return validated UTF8 character start position
    def validPos(pos); end

    # Retreat to the previous valid UTF8 character start
    def dec(pos); end
    # Advance to the next valid UTF8 character start
    def inc(pos); end

    # Make line containing _pos_ the top line
    def setTopLine(pos); end
    # Return position of top line
    def getTopLine(); end
    # Make line containing _pos_ the bottom line
    def setBottomLine(pos); end
    # Return the position of the bottom line
    def getBottomLine(); end
    # Make line containing _pos_ the center line
    def setCenterLine(pos); end

    # Set cursor row.
    # If _notify_ is +true+, a +SEL_CHANGED+ message is sent to the text
    # widget's message target after the change occurs.
    def setCursorRow(row, notify=false); end
    # Set cursor column.
    # If _notify_ is +true+, a +SEL_CHANGED+ message is sent to the text
    # widget's message target after the change occurs.
    def setCursorCol(col, notify=false); end

    # Set cursor position.
    # If _notify_ is +true+, a +SEL_CHANGED+ message is sent to the text
    # widget's message target after the change occurs.
    def setCursorPos(pos, notify=false); end

    # Select all text.
    # If _notify_ is +true+, a +SEL_DESELECTED+ message is sent to the text
    # widget's message target before any previously selected text is
    # deselected, then a +SEL_SELECTED+ message is sent after the new text
    # is selected.
    def selectAll(notify=false); end
    # Select _len_ characters starting at position _pos_.
    # If _notify_ is +true+, a +SEL_DESELECTED+ message is sent to the text
    # widget's message target before any previously selected text is
    # deselected, then a +SEL_SELECTED+ message is sent after the new text
    # is selected.
    def setSelection(pos, len, notify=false); end
    # Extend selection to _pos_.
    # If _notify_ is +true+, a +SEL_DESELECTED+ message is sent to the text
    # widget's message target before any previously selected text is
    # deselected, then a +SEL_SELECTED+ message is sent after the new text
    # is selected.
    def extendSelection(pos, textSelectionMode=SELECT_CHARS, notify=false); end
    # Kill the selection.
    # If _notify_ is +true+, a +SEL_DESELECTED+ message is sent to the text
    # widget's message target before the text is deselected.
    def killSelection(notify=false); end

    # Highlight _len_ characters starting at position _pos_
    def setHighlight(pos, len); end
    # Unhighlight the text
    def killHighlight(); end
    # Scroll text to make the given position visible
    def makePositionVisible(pos); end
    # Return number of rows in buffer.
    def numRows; end
  end
end