// See FXMathText.cpp for an explanation of the status of this file. // basically it starts off as just a copy of FXText.h but it is being // edited to support maths display within the text window. /* Signature: 43f37681 14-Apr-2006 */ /******************************************************************************** * * * M u l t i - L i ne T e x t W i d g e t * * * ********************************************************************************* * Copyright (C) 1998,2004 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; * * version 2.1 of the License. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXMathText.h,v 1.144 2004/05/05 16:03:37 fox Exp $ * ********************************************************************************/ #ifndef FXMATHTEXT_H #define FXMATHTEXT_H #include "FXText.h" #ifndef FXSCROLLAREA_H #include "FXScrollArea.h" #endif namespace FX { #if 0 // The following are here for clarity, but the REAL definitions are // in FXText.h, and since these are global rather than class-scope // names there is no need to redefine them here. /// Text widget options enum { TEXT_READONLY = 0x00100000, /// Text is NOT editable TEXT_WORDWRAP = 0x00200000, /// Wrap at word breaks TEXT_OVERSTRIKE = 0x00400000, /// Overstrike mode TEXT_FIXEDWRAP = 0x00800000, /// Fixed wrap columns TEXT_NO_TABS = 0x01000000, /// Insert spaces for tabs TEXT_AUTOINDENT = 0x02000000, /// Autoindent TEXT_SHOWACTIVE = 0x04000000, /// Show active line TEXT_COLUMNWRAP = 0x08000000 /// Wrap at given col always }; /// Selection modes enum FXTextSelectionMode { SELECT_CHARS, SELECT_WORDS, SELECT_LINES }; /// Highlight style entry struct FXHiliteStyle { FXColor normalForeColor; /// Normal text foreground color FXColor normalBackColor; /// Normal text background color FXColor selectForeColor; /// Selected text foreground color FXColor selectBackColor; /// Selected text background color FXColor hiliteForeColor; /// Highlight text foreground color FXColor hiliteBackColor; /// Highlight text background color FXColor activeBackColor; /// Active text background color FXuint style; /// Highlight text style }; /** * 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. */ struct FXTextChange { FXint pos; /// Position in buffer FXint ndel; /// Number characters deleted at position FXint nins; /// Number characters inserted at position FXchar *ins; /// Text inserted at position FXchar *del; /// Text deleted at position }; #endif // end of commented out code /// Multiline text widget class FXAPI FXMathText : public FXScrollArea { FXDECLARE(FXMathText) protected: FXchar *buffer; // Text buffer being edited FXchar *sbuffer; // Text style buffer FXint *visrows; // Starts of rows in buffer FXint length; // Length of the actual text in the buffer FXint nvisrows; // Number of visible rows FXint nrows; // Total number of rows FXint gapstart; // Start of the insertion point (the gap) FXint gapend; // End of the insertion point+1 FXint toppos; // Start position of first visible row FXint keeppos; // Position to keep on top visible row FXint toprow; // Row number of first visible row FXint selstartpos; // Start of selection FXint selendpos; // End of selection FXint hilitestartpos; // Hightlight start position FXint hiliteendpos; // Hightlight end position FXint anchorpos; // Anchor position FXint cursorpos; // Cursor position FXint revertpos; // Position of cursor prior to dragging FXint cursorstart; // Cursor row start pos FXint cursorend; // Cursor row end pos FXint cursorrow; // Cursor row FXint cursorcol; // Cursor column indent (not character offset!) FXint prefcol; // Preferred cursor column FXint margintop; // Margins top FXint marginbottom; // Margin bottom FXint marginleft; // Margin left FXint marginright; // Margin right FXint wrapwidth; // Wrap width in pixels FXint wrapcolumns; // Wrap columns FXint tabwidth; // Tab width in pixels FXint tabcolumns; // Tab columns FXint barwidth; // Line number width FXint barcolumns; // Line number columns FXFont *font; // Text font FXColor textColor; // Normal text color FXColor selbackColor; // Select background color FXColor seltextColor; // Select text color FXColor hilitebackColor; // Highlight background color FXColor hilitetextColor; // Highlight text color FXColor activebackColor; // Background color for active line FXColor numberColor; // Line number color FXColor cursorColor; // Cursor color FXColor barColor; // Bar background color FXint textWidth; // Total width of all text FXint textHeight; // Total height of all text FXString searchstring; // String of last search FXuint searchflags; // Flags of last search const FXchar *delimiters; // Delimiters FXchar *clipbuffer; // Clipped text FXint cliplength; // Length of clipped text FXint vrows; // Default visible rows FXint vcols; // Default visible columns FXString help; // Status line help FXString tip; // Tooltip const FXHiliteStyle *hilitestyles; // Style definitions FXuint matchtime; // Match time (ms) FXbool modified; // User has modified text FXuchar mode; // Mode widget is in FXint grabx; // Grab point x FXint graby; // Grab point y protected: FXMathText(); void calcVisRows(FXint s,FXint e); virtual void eraseCursorOverhang(); virtual void drawCursor(FXuint state); virtual FXuint style(FXint row,FXint beg,FXint end,FXint pos) const; virtual void drawBufferText(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style) const; virtual void fillBufferRect(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style) const; virtual void drawTextRow(FXDCWindow& dc,FXint line,FXint left,FXint right) const; virtual void drawContents(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h) const; virtual void drawNumbers(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h) const; FXint posToLine(FXint pos,FXint ln) const; FXbool posVisible(FXint pos) const; void updateRange(FXint beg,FXint end) const; void movegap(FXint pos); void sizegap(FXint sz); void squeezegap(); FXint charWidth(FXchar ch,FXint indent) const; FXint wrap(FXint start) const; FXint countRows(FXint start,FXint end) const; FXint countCols(FXint start,FXint end) const; FXint countLines(FXint start,FXint end) const; FXint measureText(FXint start,FXint end,FXint& wmax,FXint& hmax) const; FXint lineWidth(FXint pos,FXint n) const; FXint getYOfPos(FXint pos) const; FXint getXOfPos(FXint pos) const; FXint changeBeg(FXint pos) const; FXint changeEnd(FXint pos) const; FXint indentFromPos(FXint start,FXint pos) const; FXint posFromIndent(FXint start,FXint indent) const; void mutation(FXint pos,FXint ncins,FXint ncdel,FXint nrins,FXint nrdel); virtual void replace(FXint pos,FXint m,const FXchar *text,FXint n,FXint style); void recompute(); FXint matchForward(FXint pos,FXint end,FXchar l,FXchar r,FXint level) const; FXint matchBackward(FXint pos,FXint beg,FXchar l,FXchar r,FXint level) const; FXint findMatching(FXint pos,FXint beg,FXint end,FXchar ch,FXint level) const; void flashMatching(); void moveContents(FXint x,FXint y); protected: enum { STYLE_MASK = 0x00FF, // Mask color table STYLE_TEXT = 0x0100, // Draw some content STYLE_SELECTED = 0x0200, // Selected STYLE_CONTROL = 0x0400, // Control character STYLE_HILITE = 0x0800, // Highlighted STYLE_ACTIVE = 0x1000 // Active }; enum { MOUSE_NONE, // No mouse operation MOUSE_CHARS, // Selecting characters MOUSE_WORDS, // Selecting words MOUSE_LINES, // Selecting lines MOUSE_SCROLL, // Scrolling MOUSE_DRAG, // Dragging text MOUSE_TRYDRAG // Tentative drag }; public: enum { STYLE_UNDERLINE = 0x0001, /// Underline text STYLE_STRIKEOUT = 0x0002, /// Strike out text STYLE_BOLD = 0x0004 /// Bold text }; private: FXMathText(const FXMathText&); FXMathText& operator=(const FXMathText&); public: long onPaint(FXObject*,FXSelector,void*); long onUpdate(FXObject*,FXSelector,void*); long onFocusIn(FXObject*,FXSelector,void*); long onFocusOut(FXObject*,FXSelector,void*); long onLeftBtnPress(FXObject*,FXSelector,void*); long onLeftBtnRelease(FXObject*,FXSelector,void*); long onMiddleBtnPress(FXObject*,FXSelector,void*); long onMiddleBtnRelease(FXObject*,FXSelector,void*); long onRightBtnPress(FXObject*,FXSelector,void*); long onRightBtnRelease(FXObject*,FXSelector,void*); long onUngrabbed(FXObject*,FXSelector,void*); long onMotion(FXObject*,FXSelector,void*); long onBeginDrag(FXObject*,FXSelector,void*); long onEndDrag(FXObject*,FXSelector,void*); long onDragged(FXObject*,FXSelector,void*); long onDNDEnter(FXObject*,FXSelector,void*); long onDNDLeave(FXObject*,FXSelector,void*); long onDNDMotion(FXObject*,FXSelector,void*); long onDNDDrop(FXObject*,FXSelector,void*); long onDNDRequest(FXObject*,FXSelector,void*); long onSelectionLost(FXObject*,FXSelector,void*); long onSelectionGained(FXObject*,FXSelector,void*); long onSelectionRequest(FXObject*,FXSelector,void* ptr); long onClipboardLost(FXObject*,FXSelector,void*); long onClipboardGained(FXObject*,FXSelector,void*); long onClipboardRequest(FXObject*,FXSelector,void*); long onKeyPress(FXObject*,FXSelector,void*); long onKeyRelease(FXObject*,FXSelector,void*); long onBlink(FXObject*,FXSelector,void*); long onFlash(FXObject*,FXSelector,void*); long onAutoScroll(FXObject*,FXSelector,void*); long onQueryHelp(FXObject*,FXSelector,void*); long onQueryTip(FXObject*,FXSelector,void*); // Control commands long onCmdToggleEditable(FXObject*,FXSelector,void*); long onUpdToggleEditable(FXObject*,FXSelector,void*); long onCmdToggleOverstrike(FXObject*,FXSelector,void*); long onUpdToggleOverstrike(FXObject*,FXSelector,void*); long onCmdCursorRow(FXObject*,FXSelector,void*); long onUpdCursorRow(FXObject*,FXSelector,void*); long onCmdCursorColumn(FXObject*,FXSelector,void*); long onUpdCursorColumn(FXObject*,FXSelector,void*); long onUpdHaveSelection(FXObject*,FXSelector,void*); long onUpdSelectAll(FXObject*,FXSelector,void*); long onCmdSetStringValue(FXObject*,FXSelector,void*); long onCmdGetStringValue(FXObject*,FXSelector,void*); long onCmdSearch(FXObject*,FXSelector,void*); long onCmdReplace(FXObject*,FXSelector,void*); long onCmdSearchNext(FXObject*,FXSelector,void*); long onCmdSearchSel(FXObject*,FXSelector,void*); // Cursor movement long onCmdCursorTop(FXObject*,FXSelector,void*); long onCmdCursorBottom(FXObject*,FXSelector,void*); long onCmdCursorHome(FXObject*,FXSelector,void*); long onCmdCursorEnd(FXObject*,FXSelector,void*); long onCmdCursorRight(FXObject*,FXSelector,void*); long onCmdCursorLeft(FXObject*,FXSelector,void*); long onCmdCursorUp(FXObject*,FXSelector,void*); long onCmdCursorDown(FXObject*,FXSelector,void*); long onCmdCursorWordLeft(FXObject*,FXSelector,void*); long onCmdCursorWordRight(FXObject*,FXSelector,void*); long onCmdCursorWordStart(FXObject*,FXSelector,void*); long onCmdCursorWordEnd(FXObject*,FXSelector,void*); long onCmdCursorPageDown(FXObject*,FXSelector,void*); long onCmdCursorPageUp(FXObject*,FXSelector,void*); long onCmdCursorScreenTop(FXObject*,FXSelector,void*); long onCmdCursorScreenBottom(FXObject*,FXSelector,void*); long onCmdCursorScreenCenter(FXObject*,FXSelector,void*); long onCmdCursorParHome(FXObject*,FXSelector,void*); long onCmdCursorParEnd(FXObject*,FXSelector,void*); long onCmdBlockBeg(FXObject*,FXSelector,void*); long onCmdBlockEnd(FXObject*,FXSelector,void*); long onCmdGotoMatching(FXObject*,FXSelector,void*); long onCmdGotoSelected(FXObject*,FXSelector,void*); long onCmdGotoLine(FXObject*,FXSelector,void*); long onCmdScrollUp(FXObject*,FXSelector,void*); long onCmdScrollDown(FXObject*,FXSelector,void*); // Mark and extend long onCmdMark(FXObject*,FXSelector,void*); long onCmdExtend(FXObject*,FXSelector,void*); // Inserting long onCmdOverstString(FXObject*,FXSelector,void*); long onCmdInsertString(FXObject*,FXSelector,void*); long onCmdInsertNewline(FXObject*,FXSelector,void*); long onCmdInsertTab(FXObject*,FXSelector,void*); // Manipulation Selection long onCmdCutSel(FXObject*,FXSelector,void*); long onCmdCopySel(FXObject*,FXSelector,void*); long onCmdPasteSel(FXObject*,FXSelector,void*); long onCmdDeleteSel(FXObject*,FXSelector,void*); long onCmdChangeCase(FXObject*,FXSelector,void*); long onCmdShiftText(FXObject*,FXSelector,void*); long onCmdPasteMiddle(FXObject*,FXSelector,void*); // Changing Selection long onCmdSelectChar(FXObject*,FXSelector,void*); long onCmdSelectWord(FXObject*,FXSelector,void*); long onCmdSelectLine(FXObject*,FXSelector,void*); long onCmdSelectAll(FXObject*,FXSelector,void*); long onCmdSelectMatching(FXObject*,FXSelector,void*); long onCmdSelectBlock(FXObject*,FXSelector,void*); long onCmdDeselectAll(FXObject*,FXSelector,void*); // Deletion long onCmdBackspace(FXObject*,FXSelector,void*); long onCmdBackspaceWord(FXObject*,FXSelector,void*); long onCmdBackspaceBol(FXObject*,FXSelector,void*); long onCmdDelete(FXObject*,FXSelector,void*); long onCmdDeleteWord(FXObject*,FXSelector,void*); long onCmdDeleteEol(FXObject*,FXSelector,void*); long onCmdDeleteAll(FXObject*,FXSelector,void*); long onCmdDeleteLine(FXObject*,FXSelector,void*); public: static const FXchar textDelimiters[]; public: enum { ID_CURSOR_TOP=FXScrollArea::ID_LAST, 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_WORD_START, ID_CURSOR_WORD_END, 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_DELETE_SEL, ID_PASTE_SEL, ID_PASTE_MIDDLE, 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_ALL, 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_FORW, ID_SEARCH_BACK, 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, ID_LAST }; public: /// Construct multi-line text widget FXMathText(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0, FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2); /// Create server-side resources virtual void create(); /// Detach server-side resources virtual void detach(); /// Perform layout virtual void layout(); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Enable the text widget virtual void enable(); /// Disable the text widget virtual void disable(); /// Need to recalculate size virtual void recalc(); /// Resize this window to the specified width and height virtual void resize(FXint w,FXint h); /// Move and resize this window in the parent's coordinates virtual void position(FXint x,FXint y,FXint w,FXint h); /// Get default width virtual FXint getContentWidth(); /// Get default height virtual FXint getContentHeight(); /// Returns true because a text widget can receive focus #if (FOX_MINOR<=4) virtual FXbool canFocus() const; #else virtual bool canFocus() const; #endif /// Move the focus to this window virtual void setFocus(); /// Remove the focus from this window virtual void killFocus(); /// Change top margin void setMarginTop(FXint pt); /// Return top margin FXint getMarginTop() const { return margintop; } /// Change bottom margin void setMarginBottom(FXint pb); /// Return bottom margin FXint getMarginBottom() const { return marginbottom; } /// Change left margin void setMarginLeft(FXint pl); /// Return left margin FXint getMarginLeft() const { return marginleft; } /// Change right margin void setMarginRight(FXint pr); /// Return right margin FXint getMarginRight() const { return marginright; } /// Return wrap columns FXint getWrapColumns() const { return wrapcolumns; } /// Set wrap columns void setWrapColumns(FXint cols); /// Return tab columns FXint getTabColumns() const { return tabcolumns; } /// Change tab columns void setTabColumns(FXint cols); /// Return number of columns used for line numbers FXint getBarColumns() const { return barcolumns; } /// Change number of columns used for line numbers void setBarColumns(FXint cols); /// Return TRUE if text was modified FXbool isModified() const { return modified; } /// Set modified flag void setModified(FXbool mod=TRUE){ modified=mod; } /// Return TRUE if text is editable FXbool isEditable() const; /// Set editable flag void setEditable(FXbool edit=TRUE); /// Set styled text mode void setStyled(FXbool styled=TRUE); /// Return TRUE if style buffer FXbool isStyled() const { return (sbuffer!=NULL); } /// Change delimiters of words void setDelimiters(const FXchar* delims=textDelimiters){ delimiters=delims; } /// Return word delimiters const FXchar* getDelimiters() const { return delimiters; } /// Change text font void setFont(FXFont* fnt); /// Return text font FXFont* getFont() const { return font; } /// Change text color void setTextColor(FXColor clr); /// Return text color FXColor getTextColor() const { return textColor; } /// Change selected background color void setSelBackColor(FXColor clr); /// Return selected background color FXColor getSelBackColor() const { return selbackColor; } /// Change selected text color void setSelTextColor(FXColor clr); /// Return selected text color FXColor getSelTextColor() const { return seltextColor; } /// Change highlighted text color void setHiliteTextColor(FXColor clr); /// Return highlighted text color FXColor getHiliteTextColor() const { return hilitetextColor; } /// Change highlighted background color void setHiliteBackColor(FXColor clr); /// Return highlighted background color FXColor getHiliteBackColor() const { return hilitebackColor; } /// Change active background color void setActiveBackColor(FXColor clr); /// Return active background color FXColor getActiveBackColor() const { return activebackColor; } /// Change cursor color void setCursorColor(FXColor clr); /// Return cursor color FXColor getCursorColor() const { return cursorColor; } /// Change line number color void setNumberColor(FXColor clr); /// Return line number color FXColor getNumberColor() const { return numberColor; } /// Change bar color void setBarColor(FXColor clr); /// Return bar color FXColor getBarColor() const { return barColor; } /// Set help text void setHelpText(const FXString& text){ help=text; } /// Return help text FXString getHelpText() const { return help; } /// Set the tool tip message for this text widget void setTipText(const FXString& text){ tip=text; } /// Get the tool tip message for this text widget FXString getTipText() const { return tip; } /// Get character at position in text buffer FXint getChar(FXint pos) const; /// Get style at position in style buffer FXint getStyle(FXint pos) const; /// Extract n characters of text from position pos void extractText(FXchar *text,FXint pos,FXint n) const; /// Extract n characters of style info from position pos void extractStyle(FXchar *style,FXint pos,FXint n) const; /// Replace m characters at pos by n characters void replaceText(FXint pos,FXint m,const FXchar *text,FXint n,FXbool notify=FALSE); /// Replace m characters at pos by n characters void replaceStyledText(FXint pos,FXint m,const FXchar *text,FXint n,FXint style=0,FXbool notify=FALSE); /// Append n characters of text at the end of the buffer void appendText(const FXchar *text,FXint n,FXbool notify=FALSE); /// Append n characters of text at the end of the buffer void appendStyledText(const FXchar *text,FXint n,FXint style=0,FXbool notify=FALSE); /// Insert n characters of text at position pos into the buffer void insertText(FXint pos,const FXchar *text,FXint n,FXbool notify=FALSE); /// Insert n characters of text at position pos into the buffer void insertStyledText(FXint pos,const FXchar *text,FXint n,FXint style=0,FXbool notify=FALSE); /// Remove n characters of text at position pos from the buffer void removeText(FXint pos,FXint n,FXbool notify=FALSE); /// Change style of text range void changeStyle(FXint pos,FXint n,FXint style); /// Change style of text range from style-array void changeStyle(FXint pos,FXint n,const FXchar* style); /// Change the text in the buffer to new text void setText(const FXchar* text,FXint n,FXbool notify=FALSE); /// Change the text in the buffer to new text void setStyledText(const FXchar* text,FXint n,FXint style=0,FXbool notify=FALSE); /// Retrieve text into buffer void getText(FXchar* text,FXint n) const; /// Change the text void setText(const FXString& text,FXbool notify=FALSE); /// Change the text void setStyledText(const FXString& text,FXint style=0,FXbool notify=FALSE); /// Return text in the widget FXString getText() const; /// Return length of buffer FXint getLength() const { return length; } /// Shift block of lines from position start up to end by given amount FXint shiftText(FXint start,FXint end,FXint amount,FXbool notify=FALSE); /** * Search for string in text buffer, returning the extent of * the string in beg and end. The search starts from the given * starting 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). * For regular expression searches, capturing parentheses are used if * npar is greater than 1; in this case, the number of entries in the * beg[], end[] arrays must be npar also. If either beg or end or * both are NULL, internal arrays are used. * [This API is still subject to change!!] */ FXbool findText(const FXString& string,FXint* beg=NULL,FXint* end=NULL,FXint start=0,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP|SEARCH_EXACT,FXint npar=1); /// Return TRUE if position pos is selected FXbool isPosSelected(FXint pos) const; /// Return TRUE if position is fully visible FXbool isPosVisible(FXint pos) const; /// Return text position at given visible x,y coordinate FXint getPosAt(FXint x,FXint y) const; /// Return position of begin of line containing position pos FXint lineStart(FXint pos) const; /// Return position of end of line containing position pos FXint lineEnd(FXint pos) const; /// Return start of next line FXint nextLine(FXint pos,FXint nl=1) const; /// Return start of previous line FXint prevLine(FXint pos,FXint nl=1) const; /// Return row start FXint rowStart(FXint pos) const; /// Return row end FXint rowEnd(FXint pos) const; /// Return start of next row FXint nextRow(FXint pos,FXint nr=1) const; /// Return start of previous row FXint prevRow(FXint pos,FXint nr=1) const; /// Return end of previous word FXint leftWord(FXint pos) const; /// Return begin of next word FXint rightWord(FXint pos) const; /// Return begin of word FXint wordStart(FXint pos) const; /// Return end of word FXint wordEnd(FXint pos) const; /// Return validated position FXint validPos(FXint pos) const; /// Make line containing pos the top line void setTopLine(FXint pos); /// Return position of top line FXint getTopLine() const; /// Make line containing pos the bottom line void setBottomLine(FXint pos); /// Return the position of the bottom line FXint getBottomLine() const; /// Make line containing pos the center line void setCenterLine(FXint pos); /// Set the anchor position void setAnchorPos(FXint pos); /// Return the anchor position FXint getAnchorPos() const { return anchorpos; } /// Set the cursor position virtual void setCursorPos(FXint pos,FXbool notify=FALSE); /// Set cursor row void setCursorRow(FXint row,FXbool notify=FALSE); /// Return cursor row FXint getCursorRow() const { return cursorrow; } /// Set cursor column void setCursorColumn(FXint col,FXbool notify=FALSE); /// Return cursor row, i.e. indent position FXint getCursorColumn() const { return cursorcol; } /// Return the cursor position FXint getCursorPos() const { return cursorpos; } /// Return selstartpos FXint getSelStartPos() const { return selstartpos; } /// Return selendpos FXint getSelEndPos() const { return selendpos; } /// Select all text FXbool selectAll(FXbool notify=FALSE); /// Extend the selection from the anchor to the given position virtual FXbool extendSelection(FXint pos,FXTextSelectionMode select=SELECT_CHARS,FXbool notify=FALSE); /// Select len characters starting at given position pos FXbool setSelection(FXint pos,FXint len,FXbool notify=FALSE); /// Unselect the text virtual FXbool killSelection(FXbool notify=FALSE); /// Highlight len characters starting at given position pos FXbool setHighlight(FXint start,FXint len); /// Unhighlight the text FXbool killHighlight(); /// Scroll text to make the given position visible void makePositionVisible(FXint pos); /// Change text widget style void setTextStyle(FXuint style); /// Return text widget style FXuint getTextStyle() const; /// Change number of visible rows void setVisibleRows(FXint rows); /// Return number of visible rows FXint getVisibleRows() const { return vrows; } /// Change number of visible columns void setVisibleColumns(FXint cols); /// Return number of visible columns FXint getVisibleColumns() const { return vcols; } /** * Change brace and parenthesis match highlighting time, in ms. * A match highlight time of 0 disables brace matching. */ void setHiliteMatchTime(FXuint t){ matchtime=t; } /** * Return brace and parenthesis match highlighting time, in ms. */ FXuint getHiliteMatchTime() const { return matchtime; } /// Set highlight styles void setHiliteStyles(const FXHiliteStyle* styles); /// Get highlight styles const FXHiliteStyle* getHiliteStyles() const { return hilitestyles; } /// Save to a stream virtual void save(FXStream& store) const; /// Load from a stream virtual void load(FXStream& store); /// Destructor virtual ~FXMathText(); }; } #endif