logo

const class

fwt::RichTextStyle

sys::Obj
  fwt::RichTextStyle
//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   28 Jul 08  Brian Frank  Creation
//

**
** RichText is used to view and edit text styled with
** different fonts and colors.
**
class RichText : Widget
{

  **
  ** Callback when the text is modified.
  **
  |Event| onModify

  **
  ** Backing data model of text document.
  **
  RichTextModel model

  **
  ** Draw a border around the text area.  Default is true.  This
  ** field cannot be changed once the widget is constructed.
  **
  const Bool border := true

  **
  ** False for text fields and true for multi-line text areas.
  ** Default is true.  This field cannot be changed once the widget
  ** is constructed.
  **
  const Bool multiLine := true

  **
  ** True to make wrap the text of a multiLine text widget.
  ** Default is false.  This field cannot be changed once the
  ** widget is constructed.
  **
  const Bool wrap := false

  **
  ** True use a horizontal scrollbar for multiLine text widget.
  ** Default is true.  This field cannot be changed once the
  ** widget is constructed.
  **
  const Bool hscroll := true

  **
  ** True use a vertical scrollbar for multiLine text widget.
  ** Default is true.  This field cannot be changed once the
  ** widget is constructed.
  **
  const Bool vscroll := true

  **
  ** Convenience for 'model.text' (model must be installed).
  **
  Str text
  {
    get { return model.text }
    set { model.text = val }
  }

  **
  ** Default font for text absense explicit styling.
  ** Defaults to null (system default).
  **
  Font font := null { set { @font = val; sync(fontId) } }
  internal static const Str fontId := "font"

}

**************************************************************************
** RichTextModel
**************************************************************************

**
** RichTextModel models the document and styling of a `RichText` document.
**
mixin RichTextModel
{

  **
  ** Get or set the entire text document.
  **
  abstract Str text

  **
  ** Return the number of characters in the content.
  **
  abstract Int charCount()

  **
  ** Return the number of lines.
  **
  abstract Int lineCount()

  **
  ** Return the line at the given zero based line index without delimiters.
  **
  abstract Str line(Int lineIndex)

  **
  ** Return the zero based line index at the given character offset.
  **
  abstract Int lineAtOffset(Int offset)

  **
  ** Return the character offset of the first character of the
  ** given zero based line index.
  **
  abstract Int offsetAtLine(Int lineIndex)

  **
  ** Return the line delimiter that should be used when inserting
  ** new lines. The default is "\n".
  **
  virtual Str lineDelimiter() { return "\n" }

  **
  ** Returns a string representing the content at the given range.
  **
  abstract Str textRange(Int start, Int len)

  **
  ** Replace the text with 'newText' starting at position 'start'
  ** for a length of 'replaceLen'.
  **
  abstract Void replaceTextRange(Int start, Int replaceLen, Str newText)

  **
  ** Return the styled segments for the given zero based line index.
  ** The result is a list of Int/RichTextStyle pairs where the Int
  ** specifies a zero based char offset of the line.
  **
  virtual Obj[] lineStyles(Int lineIndex) { return null }
}

**************************************************************************
** RichTextStyle
**************************************************************************

**
** Defines the font and color styling of a text
** segment in a `RichTextModel`.
**
const class RichTextStyle
{
  ** Foreground color
  const Color fg

  ** Background color or null
  const Color bg

  ** Font of text segment
  const Font font

  /* Waiting for Eclipse 3.4...

  ** Underline style: `underlineNone`, `underlineSingle`,
  **  `underlineDouble`, `underlineError`, underlineSquiggle`
  const Int underline := underlineNone

  static const Int underlineNone     := 0
  static const Int underlineSingle   := 1
  static const Int underlineDouble   := 2
  static const Int underlineError    := 3
  static const Int underlineSquiggle := 4

  ** Underline color
  const Color underlineColor
  */

  override Str toStr()
  {
    s := StrBuf()
    if (fg != null) s.add("fg=$fg")
    if (bg != null) s.add(" bg=$bg")
    if (font != null) s.add(" font=$font")
    return s.toStr.trim
  }
}

More Info

Slots