You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tqscintilla/qt/qextscintilla.h

1459 lines
47 KiB

// This module defines the "official" high-level API of the TQt port of
// Scintilla.
//
// Copyright (c) 2006
// Riverbank Computing Limited <info@riverbankcomputing.co.uk>
//
// This file is part of TQScintilla.
//
// This copy of TQScintilla is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option) any
// later version.
//
// TQScintilla is supplied 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 General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// TQScintilla; see the file LICENSE. If not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef TQEXTSCINTILLA_H
#define TQEXTSCINTILLA_H
#include <tqobject.h>
#include <tqguardedptr.h>
#include <qextscintillaglobal.h>
#include <qextscintillabase.h>
#include <qextscintilladocument.h>
class QextScintillaLexer;
class QextScintillaAPIs;
class QextScintillaCommandSet;
//! \brief The QextScintilla class implements a higher level, more TQt-like,
//! API to the Scintilla editor widget.
//!
//! QextScintilla implements methods, signals and slots similar to those found
//! in other TQt editor classes. It also provides a higher level interface to
//! features specific to Scintilla such as syntax styling, call tips,
//! auto-indenting and auto-completion than that provided by QextScintillaBase.
//!
//! The API is modelled on TQTextEdit - a method of the same name should behave
//! in the same way.
class TQEXTSCINTILLA_EXPORT QextScintilla : public QextScintillaBase
{
Q_OBJECT
TQ_OBJECT
public:
//! This enum defines the different auto-indentation styles.
enum {
//! A line is automatically indented to match the previous
//! line.
AiMaintain = 0x01,
//! If the language supported by the current lexer has a
//! specific start of block character (e.g. { in C++), then a
//! line that begins with that character is indented as well as
//! the lines that make up the block. It may be logically ored
//! with AiClosing.
AiOpening = 0x02,
//! If the language supported by the current lexer has a
//! specific end of block character (e.g. } in C++), then a
//! line that begins with that character is indented as well as
//! the lines that make up the block. It may be logically ored
//! with AiOpening.
AiClosing = 0x04
};
//! This enum defines the different sources for auto-completion lists.
enum AutoCompletionSource {
//! The source is the current document.
AcsDocument,
//! The source is any installed APIs.
AcsAPIs,
//! The source is all available sources.
AcsAll
};
//! This enum defines the different brace matching modes. The
//! character pairs {}, [] and () are treated as braces. The Python
//! lexer will also match a : with the end of the corresponding
//! indented block.
enum BraceMatch {
//! Brace matching is disabled.
NoBraceMatch,
//! Brace matching is enabled for a brace immediately before
//! the current position.
StrictBraceMatch,
//! Brace matching is enabled for a brace immediately before or
//! after the current position.
SloppyBraceMatch
};
//! This enum defines the different edge modes for long lines.
enum EdgeMode {
//! Long lines are not marked.
EdgeNone = EDGE_NONE,
//! A vertical line is drawn at the column set by
//! setEdgeColumn(). This is recommended for monospace fonts.
EdgeLine = EDGE_LINE,
//! The background color of characters after the column limit
//! is changed to the color set by setEdgeColor(). This is
//! recommended for proportional fonts.
EdgeBackground = EDGE_BACKGROUND
};
//! This enum defines the different end-of-line modes.
enum EolMode {
//! A carriage return/line feed as used on Windows systems.
EolWindows = SC_EOL_CRLF,
//! A line feed as used on Unix systems.
EolUnix = SC_EOL_LF,
//! A carriage return as used on Mac systems.
EolMac = SC_EOL_CR
};
//! This enum defines the different styles for the folding margin.
enum FoldStyle {
//! Folding is disabled.
NoFoldStyle,
//! Plain folding style using plus and minus symbols.
PlainFoldStyle,
//! Circled folding style using circled plus and minus symbols.
CircledFoldStyle,
//! Boxed folding style using boxed plus and minus symbols.
BoxedFoldStyle,
//! Circled tree style using a flattened tree with circled plus
//! and minus symbols and rounded corners.
CircledTreeFoldStyle,
//! Boxed tree style using a flattened tree with boxed plus and
//! minus symbols and right-angled corners.
BoxedTreeFoldStyle
};
//! This enum defines the different pre-defined marker symbols.
enum MarkerSymbol {
//! A circle.
Circle = SC_MARK_CIRCLE,
//! A rectangle.
Rectangle = SC_MARK_ROUNDRECT,
//! A triangle pointing to the right.
RightTriangle = SC_MARK_ARROW,
//! A smaller rectangle.
SmallRectangle = SC_MARK_SMALLRECT,
//! An arrow pointing to the right.
RightArrow = SC_MARK_SHORTARROW,
//! An invisible marker that allows code to track the movement
//! of lines.
Invisible = SC_MARK_EMPTY,
//! A triangle pointing down.
DownTriangle = SC_MARK_ARROWDOWN,
//! A drawn minus sign.
Minus = SC_MARK_MINUS,
//! A drawn plus sign.
Plus = SC_MARK_PLUS,
//! A vertical line drawn in the background colour.
VerticalLine = SC_MARK_VLINE,
//! A bottom left corner drawn in the background colour.
BottomLeftCorner = SC_MARK_LCORNER,
//! A vertical line with a centre right horizontal line drawn
//! in the background colour.
LeftSideSplitter = SC_MARK_TCORNER,
//! A drawn plus sign in a box.
BoxedPlus = SC_MARK_BOXPLUS,
//! A drawn plus sign in a connected box.
BoxedPlusConnected = SC_MARK_BOXPLUSCONNECTED,
//! A drawn minus sign in a box.
BoxedMinus = SC_MARK_BOXMINUS,
//! A drawn minus sign in a connected box.
BoxedMinusConnected = SC_MARK_BOXMINUSCONNECTED,
//! A rounded bottom left corner drawn in the background
//! colour.
RoundedBottomLeftCorner = SC_MARK_LCORNERCURVE,
//! A vertical line with a centre right curved line drawn in
//! the background colour.
LeftSideRoundedSplitter = SC_MARK_TCORNERCURVE,
//! A drawn plus sign in a circle.
CircledPlus = SC_MARK_CIRCLEPLUS,
//! A drawn plus sign in a connected box.
CircledPlusConnected = SC_MARK_CIRCLEPLUSCONNECTED,
//! A drawn minus sign in a circle.
CircledMinus = SC_MARK_CIRCLEMINUS,
//! A drawn minus sign in a connected circle.
CircledMinusConnected = SC_MARK_CIRCLEMINUSCONNECTED,
//! No symbol is drawn but the line of text is drawn with the
//! same background colour.
Background = SC_MARK_BACKGROUND,
//! Three drawn dots.
ThreeDots = SC_MARK_DOTDOTDOT,
//! Three drawn arrows pointing right.
ThreeRightArrows = SC_MARK_ARROWS
};
//! This enum defines the different whitespace visibility modes. When
//! whitespace is visible spaces are displayed as small centred dots
//! and tabs are displayed as light arrows pointing to the right.
enum WhitespaceVisibility {
//! Whitespace is invisible.
WsInvisible = SCWS_INVISIBLE,
//! Whitespace is always visible.
WsVisible = SCWS_VISIBLEALWAYS,
//! Whitespace is visible after the whitespace used for
//! indentation.
WsVisibleAfterIndent = SCWS_VISIBLEAFTERINDENT
};
//! This enum defines the different line wrap modes.
enum WrapMode {
//! Lines are not wrapped.
WrapNone = SC_WRAP_NONE,
//! Lines are wrapped at word boundaries.
WrapWord = SC_WRAP_WORD,
//! Lines are wrapped at character boundaries.
WrapCharacter = SC_WRAP_CHAR
};
//! This enum defines the different line wrap visual flags.
enum WrapVisualFlag {
//! No wrap flag is displayed.
WrapFlagNone,
//! A wrap flag is displayed by the text.
WrapFlagByText,
//! A wrap flag is displayed by the border.
WrapFlagByBorder
};
//! Construct an empty QextScintilla with parent \a parent, name \a
//! name, and widget flags \a f.
QextScintilla(TQWidget *parent = 0,const char *name = 0,WFlags f = 0);
//! Destroys the QextScintilla instance.
virtual ~QextScintilla();
//! Returns TRUE if auto-completion lists are case sensitive.
//!
//! \sa setAutoCompletionCaseSensitivity()
bool autoCompletionCaseSensitivity();
//! Returns true if auto-completion fill-up characters are enabled.
//!
//! \sa setAutoCompletionFillups(), setAutoCompletionFillupsEnabled()
bool autoCompletionFillupsEnabled();
//! Returns TRUE if the rest of the word to the right of the current
//! cursor is removed when an item from an auto-completion list is
//! selected.
//!
//! \sa setAutoCompletionReplaceWord()
bool autoCompletionReplaceWord();
//! Returns TRUE if the only item in an auto-completion list with a
//! single entry is automatically used and the list not displayed.
//!
//! \sa setAutoCompletionShowSingle()
bool autoCompletionShowSingle();
//! Returns the current source for the auto-completion list when it is
//! being displayed automatically as the user types.
//!
//! \sa setAutoCompletionSource()
AutoCompletionSource autoCompletionSource() const {return acSource;}
//! Returns the current threshold for the automatic display of the
//! auto-completion list as the user types.
//!
//! \sa setAutoCompletionThreshold()
int autoCompletionThreshold() const {return acThresh;}
//! Returns TRUE if auto-indentation is enabled.
//!
//! \sa setAutoIndent()
bool autoIndent() const {return autoInd;}
//! Returns TRUE if the backspace key unindents a line instead of
//! deleting a character. The default is FALSE.
//!
//! \sa setBackspaceUnindents(), tabIndents(), setTabIndents()
bool backspaceUnindents();
//! Mark the beginning of a sequence of actions that can be undone by
//! a single call to undo().
//!
//! \sa endUndoAction(), undo()
void beginUndoAction();
//! Returns the brace matching mode.
//!
//! \sa setBraceMatching()
BraceMatch braceMatching() const {return braceMode;}
//! Returns the maximum number of call tips that are displayed.
//!
//! \sa setCallTipsVisible()
int callTipsVisible() const {return maxCallTips;}
//! Cancel any current auto-completion or user defined list.
void cancelList();
//! Clear all registered images.
//!
//! \sa registerImage()
void clearRegisteredImages();
//! All the lines of the text have their end-of-lines converted to mode
//! \a mode.
//!
//! \sa eolMode(), setEolMode()
void convertEols(EolMode mode);
//! Returns the widget's text (ie. foreground) colour.
//!
//! \sa setColor()
TQColor color() const;
//! Returns the attached document.
//!
//! \sa setDocument()
QextScintillaDocument document() {return doc;}
//! Mark the end of a sequence of actions that can be undone by a
//! single call to undo().
//!
//! \sa beginUndoAction(), undo()
void endUndoAction();
//! Returns the color of the marker used to show that a line has
//! exceeded the length set by setEdgeColumn().
//!
//! \sa setEdgeColor(), \sa setEdgeColumn
TQColor edgeColor();
//! Returns the number of the column after which lines are considered
//! to be long.
//!
//! \sa setEdgeColumn()
int edgeColumn();
//! Returns the edge mode which determines how long lines are marked.
//!
//! \sa setEdgeMode()
EdgeMode edgeMode();
//! Returns the end-of-line mode.
//!
//! \sa setEolMode()
EolMode eolMode();
//! Returns the visibility of end-of-lines.
//!
//! \sa setEolVisibility()
bool eolVisibility();
//! Find the next occurrence of the string \a expr and return TRUE if
//! \a expr was found, otherwise returns FALSE. If \a expr is found it
//! becomes the current selection.
//!
//! If \a re is TRUE then \a expr is interpreted as a regular
//! expression rather than a simple string.
//!
//! If \a cs is TRUE then the search is case sensitive.
//!
//! If \a wo is TRUE then the search looks for whole word matches only,
//! otherwise it searches for any matching text.
//!
//! If \a wrap is TRUE then the search wraps around the end of the
//! text.
//!
//! If \a forward is TRUE (the default) then the search is forward from
//! the starting position to the end of the text, otherwise it is
//! backwards to the beginning of the text.
//!
//! If either \a line or \a index are negative (the default) then the
//! search begins from the current cursor position. Otherwise the
//! search begins at position \a index of line \a line.
//!
//! If \a show is TRUE (the default) then any text found is made
//! visible (ie. it is unfolded).
//!
//! \sa findNext(), replace()
virtual bool findFirst(const TQString &expr,bool re,bool cs,bool wo,
bool wrap,bool forward = TRUE,int line = -1,
int index = -1,bool show = TRUE);
//! Find the next occurence of the string found using findFirst().
//!
//! \sa findFirst(), replace()
virtual bool findNext();
//! Returns the number of the first visible line.
int firstVisibleLine();
//! Returns the current folding style.
//!
//! \sa setFolding()
FoldStyle folding() const {return fold;}
//! Sets \a *line and \a *index to the line and index of the cursor.
//!
//! \sa setCursorPosition()
void getCursorPosition(int *line,int *index);
//! If there is a selection, \a *lineFrom is set to the line number in
//! which the selection begins and \a *lineTo is set to the line number
//! in which the selection ends. (They could be the same.)
//! \a *indexFrom is set to the index at which the selection begins
//! within \a *lineFrom, and \a *indexTo is set to the index at which
//! the selection ends within \a *lineTo. If there is no selection,
//! \a *lineFrom, \a *indexFrom, \a *lineTo and \a *indexTo are all set
//! to -1.
//!
//! \sa setSelection()
void getSelection(int *lineFrom,int *indexFrom,
int *lineTo,int *indexTo);
//! Returns TRUE if some text is selected.
//!
//! \sa selectedText()
bool hasSelectedText() const {return selText;}
//! Returns the number of characters that line \a line is indented by.
//!
//! \sa setIndentation()
int indentation(int line);
//! Returns TRUE if the display of indentation guides is enabled.
//!
//! \sa setIndentationGuides()
bool indentationGuides();
//! Returns TRUE if indentations are created using tabs and spaces,
//! rather than just spaces. The default is TRUE.
//!
//! \sa setIndentationsUseTabs()
bool indentationsUseTabs();
//! Returns the indentation width in characters. The default is 0
//! which means that the value returned by tabWidth() is actually used.
//!
//! \sa setIndentationWidth(), tabWidth()
int indentationWidth();
//! Returns TRUE if a call tip is currently active.
bool isCallTipActive();
//! Returns TRUE if an auto-completion or user defined list is
//! currently active.
bool isListActive();
//! Returns TRUE if the text has been modified.
//!
//! \sa setModified(), modificationChanged()
bool isModified();
//! Returns TRUE if the text edit is read-only.
//!
//! \sa setReadOnly()
bool isReadOnly();
//! Returns TRUE if there is something that can be redone.
//!
//! \sa redo()
bool isRedoAvailable();
//! Returns TRUE if there is something that can be undone.
//!
//! \sa undo()
bool isUndoAvailable();
//! Returns TRUE if text is interpreted as being UTF8 encoded. The
//! default is to interpret the text as Latin1 encoded.
//!
//! \sa setUtf8()
bool isUtf8();
//! Returns the line which is at position \a pos or -1 if there is no
//! line at that position.
int lineAt(const TQPoint &pos);
//! Returns the length of line \a line or -1 if there is no such line.
int lineLength(int line);
//! Returns the number of lines of text.
int lines();
//! Returns the length of the text edit's text.
int length();
//! Returns the current language lexer used to style text. If it is 0 then
//! syntax styling is disabled.
//!
//! \sa setLexer()
QextScintillaLexer *lexer() const;
//! Returns TRUE if line numbers are enabled for margin \a margin.
//!
//! \sa setMarginLineNumbers(), QextScintillaBase::SCI_GETMARGINTYPEN
bool marginLineNumbers(int margin);
//! Returns the marker mask of margin \a margin.
//!
//! \sa setMarginMask(), QextScintillaMarker,
//! QextScintillaBase::SCI_GETMARGINMASKN
int marginMarkerMask(int margin);
//! Returns TRUE if margin \a margin is sensitive to mouse clicks.
//!
//! \sa setMarginSensitivity(), marginClicked(),
//! QextScintillaBase::SCI_GETMARGINTYPEN
bool marginSensitivity(int margin);
//! Returns the width in pixels of margin \a margin.
//!
//! \sa setMarginWidth(), QextScintillaBase::SCI_GETMARGINWIDTHN
int marginWidth(int margin);
//! Define a marker using the symbol \a sym with the marker number
//! \a mnr. If \a mnr is -1 then the marker number is automatically
//! allocated. The marker number is returned or -1 if the marker
//! number was already allocated or too many markers have been defined.
//!
//! Markers are small geometric symbols and character used, for
//! example, to indicate the current line or, in debuggers, to indicate
//! breakpoints. If a margin has a width of 0 then its markers are not
//! drawn, but their background colours affect the background colour of
//! the corresponding line of text.
//!
//! There may be up to 32 markers defined and each line of text has a
//! set of these markers associated with it. Markers are drawn
//! according to their numerical identifier. Markers try to move with
//! their text by tracking where the start of their line moves to. For
//! example, when a line is deleted its markers are added to previous
//! line's markers.
//!
//! Each marker is identified by a marker number. Each instance of a
//! marker is identified by a marker handle.
int markerDefine(MarkerSymbol sym,int mnr = -1);
//! Define a marker using the character \a ch with the marker number
//! \a mnr. If \a mnr is -1 then the marker number is automatically
//! allocated. The marker number is returned or -1 if the marker
//! number was already allocated or too many markers have been defined.
int markerDefine(char ch,int mnr = -1);
//! Define a marker using a copy of the pixmap \a pm with the marker
//! number \a mnr. If \a mnr is -1 then the marker number is
//! automatically allocated. The marker number is returned or -1 if
//! the marker number was already allocated or too many markers have
//! been defined.
int markerDefine(const TQPixmap *pm,int mnr = -1);
//! Add a marker number \a mnr to line number \a linenr. A handle for
//! the marker is returned which can be used to track the marker's
//! position, or -1 if the \a mnr was invalid.
//!
//! \sa markerDelete(), markerDeleteAll(), markerDeleteHandle()
int markerAdd(int linenr,int mnr);
//! Returns the 32 bit mask of marker numbers at line number \a linenr.
//!
//! \sa markerAdd()
unsigned markersAtLine(int linenr);
//! Delete all markers with the marker number \a mnr in the line
//! \a linenr. If \a mnr is -1 then delete all markers from line
//! \a linenr.
//!
//! \sa markerAdd(), markerDeleteAll(), markerDeleteHandle()
void markerDelete(int linenr,int mnr = -1);
//! Delete the all markers with the marker number \a mnr. If \a mnr is
//! -1 then delete all markers.
//!
//! \sa markerAdd(), markerDelete(), markerDeleteHandle()
void markerDeleteAll(int mnr = -1);
//! Delete the the marker instance with the marker handle \a mhandle.
//!
//! \sa markerAdd(), markerDelete(), markerDeleteAll()
void markerDeleteHandle(int mhandle);
//! Return the line number that contains the marker instance with the
//! marker handle \a mhandle.
int markerLine(int mhandle);
//! Return the number of the next line to contain at least one marker
//! from a 32 bit mask of markers. \a linenr is the line number to
//! start the search from. \a mask is the mask of markers to search
//! for.
//!
//! \sa markerFindPrevious()
int markerFindNext(int linenr,unsigned mask);
//! Return the number of the previous line to contain at least one
//! marker from a 32 bit mask of markers. \a linenr is the line number
//! to start the search from. \a mask is the mask of markers to search
//! for.
//!
//! \sa markerFindNext()
int markerFindPrevious(int linenr,unsigned mask);
//! Returns the widget's paper (ie. background) colour.
//!
//! \sa setPaper()
TQColor paper() const;
//! Recolours the document between the \a start and \a end positions.
//! \a start defaults to the start of the document and \a end defaults
//! to the end of the document.
virtual void recolor(int start = 0,int end = -1);
//! Register an image \a pm with ID \a id. Registered images can be
//! displayed in auto-completion lists.
//!
//! \sa clearRegisteredImages(), QextScintillaAPIs
void registerImage(int id,const TQPixmap *pm);
//! Replace the current selection, set by a previous call to
//! findFirst() or findNext(), with \a replaceStr.
//!
//! \sa findFirst(), findNext()
virtual void replace(const TQString &replaceStr);
//! Reset the fold margin colours to their defaults.
//!
//! \sa setFoldMarginColors()
void resetFoldMarginColors();
//! The fold margin may be drawn as a one pixel sized checkerboard
//! pattern of two colours, \a fore and \a back.
//!
//! \sa resetFoldMarginColors()
void setFoldMarginColors(const TQColor &fore,const TQColor &back);
//! Sets the APIs used for auto-completion to \a apis. If \a apis is 0
//! then any existing APIs are removed.
//!
//! \sa autoCompleteFromAPIs(), setCallTipsAPIs()
void setAutoCompletionAPIs(QextScintillaAPIs *apis = 0);
//! A fill-up character is one that, when entered while an
//! auto-completion list is being displayed, causes the currently
//! selected item from the list to be added to the text followed by the
//! fill-up character. \a fillups is the set of fill-up characters.
//! The default is that no fill-up characters are set, although a lexer may
//! set its own. Explicitly setting the fill-up characters using this
//! method automatically enables their use.
//!
//! \sa autoCompletionFillupsEnabled(), setAutoCompletionFillupsEnabled()
void setAutoCompletionFillups(const char *fillups);
//! Enable the use of fill-up characters, either those explicitly set or
//! those set by a lexer. By default, fill-up characters are disabled.
//!
//! \sa autoCompletionFillupsEnabled(), setAutoCompletionFillups()
void setAutoCompletionFillupsEnabled(bool enabled);
//! A start character is one that, when entered, causes the
//! auto-completion list to be displayed. If a language lexer has been
//! set then this is ignored and the lexer defines the start
//! characters. The default is that no start characters are set.
//!
//! \sa setAutoCompletionThreshold()
void setAutoCompletionStartCharacters(const char *start);
//! Sets the APIs used for call tips to \a apis. If \a apis is 0 then
//! then call tips are disabled.
//!
//! \sa setAutoCompletionAPIs()
void setCallTipsAPIs(QextScintillaAPIs *apis = 0);
//! Set the background colour of call tips to \a col. The default is
//! white.
void setCallTipsBackgroundColor(const TQColor &col);
//! Set the foreground colour of call tips to \a col. The default is
//! mid-gray.
void setCallTipsForegroundColor(const TQColor &col);
//! Set the highlighted colour of call tip text to \a col. The default
//! is dark blue.
void setCallTipsHighlightColor(const TQColor &col);
//! Set the maximum number of call tips that are displayed to \a nr.
//! If the maximum number is 0 then all applicable call tips are
//! displayed. If the maximum number is -1 then one call tip will be
//! displayed with up and down arrows that allow the use to scroll
//! through the full list. The default is -1.
//!
//! \sa callTipsVisible()
void setCallTipsVisible(int nr);
//! Attach the document \a document, replacing the currently attached
//! document.
//!
//! \sa document()
void setDocument(const QextScintillaDocument &document);
//! Set the color of the marker used to show that a line has exceeded
//! the length set by setEdgeColumn().
//!
//! \sa edgeColor(), \sa setEdgeColumn
void setEdgeColor(const TQColor &col);
//! Set the number of the column after which lines are considered to be
//! long.
//!
//! \sa edgeColumn()
void setEdgeColumn(int colnr);
//! Set the edge mode which determines how long lines are marked.
//!
//! \sa edgeMode()
void setEdgeMode(EdgeMode mode);
//! Set the default font. This has no effect if a language lexer has been
//! set.
virtual void setFont(const TQFont &f);
//! Set the background colour, including the alpha component, of marker
//! \a mnr to \a col. If \a mnr is -1 then the colour of all markers
//! is set. The default is white.
//!
//! \sa setMarkerForegroundColor()
void setMarkerBackgroundColor(const TQColor &col,int mnr = -1);
//! Set the foreground colour of marker \a mnr to \a col. If \a mnr is
//! -1 then the colour of all markers is set. The default is black.
//!
//! \sa setMarkerBackgroundColor()
void setMarkerForegroundColor(const TQColor &col,int mnr = -1);
//! Set the background colour used to display matched braces to \a col.
//! The default is white.
//!
//! \sa setMatchedBraceForegroundColor()
void setMatchedBraceBackgroundColor(const TQColor &col);
//! Set the foreground colour used to display matched braces to \a col.
//! The default is red.
//!
//! \sa setMatchedBraceBackgroundColor()
void setMatchedBraceForegroundColor(const TQColor &col);
//! Set the background colour used to display unmatched braces to
//! \a col. The default is white.
//!
//! \sa setUnmatchedBraceForegroundColor()
void setUnmatchedBraceBackgroundColor(const TQColor &col);
//! Set the foreground colour used to display unmatched braces to
//! \a col. The default is blue.
//!
//! \sa setUnmatchedBraceBackgroundColor()
void setUnmatchedBraceForegroundColor(const TQColor &col);
//! Set the visual flags displayed when a line is wrapped. \a eflag
//! determines if and where the flag at the end of a line is displayed.
//! \a sflag determines if and where the flag at the start of a line is
//! displayed. \a sindent is the number of characters a wrapped line
//! is indented by. By default no visual flags are displayed.
void setWrapVisualFlags(WrapVisualFlag eflag,
WrapVisualFlag sflag = WrapFlagNone, int sindent = 0);
//! Returns the selected text or an empty string if there is no
//! currently selected text.
//!
//! \sa hasSelectedText()
TQString selectedText();
//! Displays a user defined list which can be interacted with like an
//! auto-completion list. \a id is an identifier for the list which
//! is passed as an argument to the userListActivated() signal and must
//! be at least 1. \a list is the text with which the list is
//! populated.
//!
//! \sa cancelList(), isListActive(), userListActivated()
void showUserList(int id, const TQStringList &list);
//! The standard command set is returned.
QextScintillaCommandSet *standardCommands() const {return stdCmds;}
//! Returns TRUE if the tab key indents a line instead of inserting a
//! tab character. The default is TRUE.
//!
//! \sa setTabIndents(), backspaceUnindents(), setBackspaceUnindents()
bool tabIndents();
//! Returns the tab width in characters. The default is 8.
//!
//! \sa setTabWidth()
int tabWidth();
//! Returns the text edit's text.
//!
//! \sa setText()
TQString text();
//! \overload
//!
//! Returns the text of line \a line.
//!
//! \sa setText()
TQString text(int line);
//! Returns the height in pixels of the text in line number \a linenr.
int textHeight(int linenr);
//! Returns the visibility of whitespace.
//!
//! \sa setWhitespaceVisibility()
WhitespaceVisibility whitespaceVisibility();
//! Returns the line wrap mode.
//!
//! \sa setWrapMode()
WrapMode wrapMode();
public slots:
//! Appends the text \a text to the end of the text edit. Note that
//! the undo/redo history is cleared by this function.
virtual void append(const TQString &text);
//! Display an auto-completion list based on any installed APIs, the
//! current contents of the document and the characters immediately to
//! the left of the cursor.
//!
//! \sa autoCompleteFromAPIs(), autoCompleteFromDocument()
virtual void autoCompleteFromAll();
//! Display an auto-completion list based on any installed APIs and the
//! characters immediately to the left of the cursor.
//!
//! \sa autoCompleteFromAll(), autoCompleteFromDocument(),
//! setAutoCompletionAPIs()
virtual void autoCompleteFromAPIs();
//! Display an auto-completion list based on the current contents of
//! the document and the characters immediately to the left of the
//! cursor.
//!
//! \sa autoCompleteFromAll(), autoCompleteFromAPIs()
virtual void autoCompleteFromDocument();
//! Display a call tip based on the the characters immediately to the
//! left of the cursor.
virtual void callTip();
//! Deletes all the text in the text edit.
virtual void clear();
//! Copies any selected text to the clipboard.
//!
//! \sa copyAvailable(), cut(), paste()
virtual void copy();
//! Copies any selected text to the clipboard and then deletes the
//! text.
//!
//! \sa copy(), paste()
virtual void cut();
//! Ensures that the cursor is visible.
virtual void ensureCursorVisible();
//! Ensures that the line number \a line is visible.
virtual void ensureLineVisible(int line);
//! If any lines are currently folded then they are all unfolded.
//! Otherwise all lines are folded. This has the same effect as
//! clicking in the fold margin with the shift and control keys
//! pressed. If \a children is not set (the default) then only the top
//! level fold points are affected, otherwise the state of all fold
//! points are changed.
virtual void foldAll(bool children = FALSE);
//! If the line \a line is folded then it is unfolded. Otherwise it is
//! folded. This has the same effect as clicking in the fold margin.
virtual void foldLine(int line);
//! Increases the indentation of line \a line by an indentation width.
//!
//! \sa unindent()
virtual void indent(int line);
//! Insert the text \a text at the current position.
virtual void insert(const TQString &text);
//! Insert the text \a text in the line \a line at the position
//! \a index.
virtual void insertAt(const TQString &text,int line,int index);
//! If the cursor is either side of a brace character then move it to
//! the position of the corresponding brace.
virtual void moveToMatchingBrace();
//! Pastes any text from the clipboard into the text edit at the
//! current cursor position.
//!
//! \sa copy(), cut()
virtual void paste();
//! Redo the last change or sequence of changes.
//!
//! \sa isRedoAvailable()
virtual void redo();
//! Removes any selected text.
virtual void removeSelectedText();
//! Resets the background colour of selected text to the default.
//!
//! \sa setSelectionBackgroundColor(), resetSelectionForegroundColor()
virtual void resetSelectionBackgroundColor();
//! Resets the foreground colour of selected text to the default.
//!
//! \sa setSelectionForegroundColor(), resetSelectionBackgroundColor()
virtual void resetSelectionForegroundColor();
//! If \a select is TRUE (the default) then all the text is selected.
//! If \a select is FALSE then any currently selected text is
//! deselected.
virtual void selectAll(bool select = TRUE);
//! If the cursor is either side of a brace character then move it to
//! the position of the corresponding brace and select the text between
//! the braces.
virtual void selectToMatchingBrace();
//! If \a cs is TRUE then auto-completion lists are case sensitive.
//! The default is TRUE.
//!
//! \sa autoCompletionCaseSensitivity()
virtual void setAutoCompletionCaseSensitivity(bool cs);
//! If \a replace is TRUE then when an item from an auto-completion
//! list is selected, the rest of the word to the right of the current
//! cursor is removed. The default is FALSE.
//!
//! \sa autoCompletionReplaceWord()
virtual void setAutoCompletionReplaceWord(bool replace);
//! If \a single is TRUE then when there is only a single entry in an
//! auto-completion list it is automatically used and the list is not
//! displayed. This only has an effect when auto-completion is
//! explicitly requested (using autoCompleteFromAPIs() and
//! autoCompleteFromDocument()) and has no effect when auto-completion
//! is triggered as the user types. The default is FALSE.
//!
//! \sa autoCompletionShowSingle()
virtual void setAutoCompletionShowSingle(bool single);
//! Sets the source for the auto-completion list when it is being
//! displayed automatically as the user types to \a source. The
//! default is AcsDocument.
//!
//! \sa autoCompletionSource()
virtual void setAutoCompletionSource(AutoCompletionSource source);
//! Sets the threshold for the automatic display of the auto-completion
//! list as the user types to \a thresh. The threshold is the number
//! of characters that the user must type before the list is displayed.
//! If the threshold is less than or equal to 0 then the list is
//! disabled. The default is -1.
//!
//! \sa autoCompletionThreshold(), setAutoCompletionStartCharacters()
virtual void setAutoCompletionThreshold(int thresh);
//! If \a autoindent is TRUE then auto-indentation is enabled. The
//! default is FALSE.
//!
//! \sa autoIndent()
virtual void setAutoIndent(bool autoindent);
//! Sets the brace matching mode to \a bm. The default is
//! NoBraceMatching.
//!
//! \sa braceMatching()
virtual void setBraceMatching(BraceMatch bm);
//! If \a deindent is TRUE then the backspace key will unindent a line
//! rather then delete a character.
//!
//! \sa backspaceUnindents(), tabIndents(), setTabIndents()
virtual void setBackspaceUnindents(bool unindent);
//! Sets the foreground colour of the caret to \a col.
virtual void setCaretForegroundColor(const TQColor &col);
//! Sets the background colour, including the alpha component, of the
//! line containing the caret to \a col.
//!
//! \sa setCaretLineVisible()
virtual void setCaretLineBackgroundColor(const TQColor &col);
//! Enables or disables, according to \a enable, the background color
//! of the line containing the caret.
//!
//! \sa setCaretLineBackgroundColor()
virtual void setCaretLineVisible(bool enable);
//! Sets the width of the caret to \a width pixels. A \a width of 0
//! makes the caret invisible.
virtual void setCaretWidth(int width);
//! The widget's text (ie. foreground) colour is set to \a c. This has no
//! effect if a language lexer has been set.
//!
//! \sa color()
virtual void setColor(const TQColor &c);
//! Sets the cursor to the line \a line at the position \a index.
//!
//! \sa getCursorPosition()
virtual void setCursorPosition(int line,int index);
//! Sets the end-of-line mode to \a mode. The default is the
//! platform's natural mode.
//!
//! \sa eolMode()
virtual void setEolMode(EolMode mode);
//! If \a visible is TRUE then end-of-lines are made visible. The
//! default is that they are invisible.
//!
//! \sa eolVisibility()
virtual void setEolVisibility(bool visible);
//! Sets the folding style for margin 2 to \a fold. The default is
//! NoFoldStyle (ie. folding is disabled).
//!
//! \sa folding()
virtual void setFolding(FoldStyle fold);
//! Sets the indentation of line \a to \a indentation characters.
//!
//! \sa indentation()
virtual void setIndentation(int line,int indentation);
//! Enables or disables, according to \a enable, this display of
//! indentation guides.
//!
//! \sa indentationGuides()
virtual void setIndentationGuides(bool enable);
//! Set the background colour of indentation guides to \a col.
//!
//! \sa setIndentationGuidesForegroundColor()
virtual void setIndentationGuidesBackgroundColor(const TQColor &col);
//! Set the foreground colour of indentation guides to \a col.
//!
//! \sa setIndentationGuidesBackgroundColor()
virtual void setIndentationGuidesForegroundColor(const TQColor &col);
//! If \a tabs is TRUE then indentations are created using tabs and
//! spaces, rather than just spaces.
//!
//! \sa indentationsUseTabs()
virtual void setIndentationsUseTabs(bool tabs);
//! Sets the indentation width to \a width characters. If \a width is
//! 0 then the value returned by tabWidth() is used.
//!
//! \sa indentationWidth(), tabWidth()
virtual void setIndentationWidth(int width);
//! Sets the specific language lexer used to style text to \a lexer. If
//! \a lexer is 0 then syntax styling is disabled.
//!
//! \sa lexer()
virtual void setLexer(QextScintillaLexer *lexer = 0);
//! Set the background colour of all margins to \a col. The default is
//! a gray.
//!
//! \sa setMarginsForegroundColor()
virtual void setMarginsBackgroundColor(const TQColor &col);
//! Set the font used in all margins to \a f.
virtual void setMarginsFont(const TQFont &f);
//! Set the foreground colour of all margins to \a col. The default is
//! black.
//!
//! \sa setMarginsBackgroundColor()
virtual void setMarginsForegroundColor(const TQColor &col);
//! Enables or disables, according to \a lnrs, the display of line
//! numbers in margin \a margin.
//!
//! \sa marginLineNumbers(), QextScintillaBase::SCI_SETMARGINTYPEN
virtual void setMarginLineNumbers(int margin,bool lnrs);
//! Sets the marker mask of margin \a margin to \a mask. Only those
//! markers whose bit is set in the mask are displayed in the margin.
//!
//! \sa marginMarkerMask(), QextScintillaMarker,
//! QextScintillaBase::SCI_SETMARGINMASKN
virtual void setMarginMarkerMask(int margin,int mask);
//! Enables or disables, according to \a sens, the sensitivity of
//! margin \a margin to mouse clicks. If the user clicks in a
//! sensitive margin the marginClicked() signal is emitted.
//!
//! \sa marginSensitivity(), marginClicked(),
//! QextScintillaBase::SCI_SETMARGINSENSITIVEN
virtual void setMarginSensitivity(int margin,bool sens);
//! Sets the width of margin \a margin to \a width pixels. If the
//! width of a margin is 0 then it is not displayed.
//!
//! \sa marginWidth(), QextScintillaBase::SCI_SETMARGINWIDTHN
virtual void setMarginWidth(int margin,int width);
//! Sets the width of margin \a margin so that it is wide enough to
//! display \a s in the current margin font.
//!
//! \sa marginWidth(), QextScintillaBase::SCI_SETMARGINWIDTHN
virtual void setMarginWidth(int margin,const TQString &s);
//! Sets the modified state of the text edit to \a m. Note that it is
//! only possible to clear the modified state (where \a m is FALSE).
//! Attempts to set the modified state (where \a m is TRUE) are
//! ignored.
//!
//! \sa isModified(), modificationChanged()
virtual void setModified(bool m);
//! The widget's paper (ie. background) colour is set to \a c. This has no
//! effect if a language lexer has been set.
//!
//! \sa paper()
virtual void setPaper(const TQColor &c);
//! Sets the read-only state of the text edit to \a ro.
//!
//! \sa isReadOnly()
virtual void setReadOnly(bool ro);
//! Sets the selection which starts at position \a indexFrom in line
//! \a lineFrom and ends at position \a indexTo in line \a lineTo. The
//! cursor is moved to the end of the selection.
//!
//! \sa getSelection()
virtual void setSelection(int lineFrom,int indexFrom,
int lineTo,int indexTo);
//! Sets the background colour, including the alpha component, of
//! selected text to \a col.
//!
//! \sa resetSelectionBackgroundColor(), setSelectionForegroundColor()
virtual void setSelectionBackgroundColor(const TQColor &col);
//! Sets the foreground colour of selected text to \a col.
//!
//! \sa resetSelectionForegroundColor(), setSelectionBackgroundColor()
virtual void setSelectionForegroundColor(const TQColor &col);
//! If \a indent is TRUE then the tab key will indent a line rather
//! then insert a tab character.
//!
//! \sa tabIndents(), backspaceUnindents(), setBackspaceUnindents()
virtual void setTabIndents(bool indent);
//! Sets the tab width to \a width characters.
//!
//! \sa tabWidth()
virtual void setTabWidth(int width);
//! Replaces all of the current text with \a text. Note that the
//! undo/redo history is cleared by this function.
//!
//! \sa text()
virtual void setText(const TQString &text);
//! Sets the current text encoding. If \a cp is TRUE then UTF8 is
//! used, otherwise Latin1 is used.
//!
//! \sa isUtf8()
virtual void setUtf8(bool cp);
//! Sets the visibility of whitespace to mode \a mode. The default is
//! that whitespace is invisible.
//!
//! \sa whitespaceVisibility()
virtual void setWhitespaceVisibility(WhitespaceVisibility mode);
//! Sets the line wrap mode to mode \a mode. The default is that lines
//! are not wrapped.
//!
//! \sa wrapMode()
virtual void setWrapMode(WrapMode mode);
//! Undo the last change or sequence of changes.
//!
//! Scintilla has multiple level undo and redo. It will continue to
//! record undoable actions until memory runs out. Sequences of
//! typing or deleting are compressed into single actions to make it
//! easier to undo and redo at a sensible level of detail. Sequences
//! of actions can be combined into actions that are undone as a unit.
//! These sequences occur between calls to beginUndoAction() and
//! endUndoAction(). These sequences can be nested and only the top
//! level sequences are undone as units.
//!
//! \sa beginUndoAction(), endUndoAction(), isUndoAvailable()
virtual void undo();
//! Decreases the indentation of line \a line by an indentation width.
//!
//! \sa indent()
virtual void unindent(int line);
//! Zooms in on the text by by making the base font size \a range
//! points larger and recalculating all font sizes.
//!
//! \sa zoomOut(), zoomTo()
virtual void zoomIn(int range);
//! \overload
//!
//! Zooms in on the text by by making the base font size one point
//! larger and recalculating all font sizes.
virtual void zoomIn();
//! Zooms out on the text by by making the base font size \a range
//! points smaller and recalculating all font sizes.
//!
//! \sa zoomIn(), zoomTo()
virtual void zoomOut(int range);
//! \overload
//!
//! Zooms out on the text by by making the base font size one point
//! larger and recalculating all font sizes.
virtual void zoomOut();
//! Zooms the text by making the base font size \a size points and
//! recalculating all font sizes.
//!
//! \sa zoomIn(), zoomOut()
virtual void zoomTo(int size);
signals:
//! This signal is emitted whenever the cursor position changes.
//! \a line contains the line number and \a pos contains the
//! character position within the line.
void cursorPositionChanged(int line,int pos);
//! This signal is emitted whenever text is selected or de-selected.
//! \a yes is TRUE if text has been selected and FALSE if text has been
//! deselected. If \a yes is TRUE then copy() can be used to copy the
//! selection to the clipboard. If \a yes is FALSE then copy() does
//! nothing.
//!
//! \sa copy(), selectionChanged()
void copyAvailable(bool yes);
//! This signal is emitted whenever the user clicks on a sensitive
//! margin. \a margin is the margin. \a line is the number of the
//! line where the user clicked. \a state is the state of the modifier
//! keys (ShiftButton, ControlButton and AltButton) when the user
//! clicked.
//!
//! \sa marginSensitivity(), setMarginSensitivity()
void marginClicked(int margin,int line,TQt::ButtonState state);
//! This signal is emitted whenever the user attempts to modify
//! read-only text.
//!
//! \sa isReadOnly(), setReadOnly()
void modificationAttempted();
//! This signal is emitted whenever the modification state of the text
//! changes. \a m is TRUE if the text has been modified.
//!
//! \sa isModified(), setModified()
void modificationChanged(bool m);
//! This signal is emitted whenever the selection changes.
//!
//! \sa copyAvailable()
void selectionChanged();
//! This signal is emitted whenever the text in the text edit changes.
void textChanged();
//! This signal is emitted when an item in a user defined list is
//! activated (selected). \a id is the list identifier. \a string is
//! the text of the item.
//!
//! \sa showUserList()
void userListActivated(int id, const TQString &string);
private slots:
void handleCallTipClick(int dir);
void handleCharAdded(int charadded);
void handleMarginClick(int pos,int margin,int modifiers);
void handleModified(int pos,int mtype,const char *text,int len,
int added,int line,int foldNow,int foldPrev);
void handlePropertyChange(const char *prop,const char *val);
void handleSavePointReached();
void handleSavePointLeft();
void handleSelectionChanged(bool yes);
void handleUserListSelection(const char *text, int id);
void handleStyleColorChange(const TQColor &c,int style);
void handleStyleEolFillChange(bool eolfill,int style);
void handleStyleFontChange(const TQFont &f,int style);
void handleStylePaperChange(const TQColor &c,int style);
void handleUpdateUI();
private:
enum IndentState {
isNone,
isKeywordStart,
isBlockStart,
isBlockEnd
};
void maintainIndentation(char ch,long pos);
void autoIndentation(char ch,long pos);
void autoIndentLine(long pos,int line,int indent);
int blockIndent(int line);
IndentState getIndentState(int line);
bool rangeIsWhitespace(long spos,long epos);
int findStyledWord(const char *text,int style,const char *words);
void checkMarker(int &mnr);
long posFromLineIndex(int line,int index);
void lineIndexFromPos(long pos,int *line,int *index);
int currentIndent();
int indentWidth();
bool doFind();
long simpleFind();
void foldClick(int lineClick,int bstate);
void foldChanged(int line,int levelNow,int levelPrev);
void foldExpand(int &line,bool doExpand,bool force = FALSE,
int visLevels = 0,int level = -1);
void setFoldMarker(int marknr,int mark = SC_MARK_EMPTY);
TQString convertText(const char *s);
void setStylesFont(const TQFont &f,int style);
void braceMatch();
bool findMatchingBrace(long &brace,long &other,BraceMatch mode);
long checkBrace(long pos,int brace_style,bool &colonMode);
void gotoMatchingBrace(bool select);
void startAutoCompletion(AutoCompletionSource acs, bool checkThresh,
bool single);
bool isAutoCStartChar(char ch) const;
bool currentCharInWord();
bool isWordChar(char ch) const;
bool ensureRW();
struct FindState
{
FindState() : inProgress(0) {}
bool inProgress;
TQString expr;
bool wrap;
bool forward;
int flags;
long startpos;
long endpos;
bool show;
};
FindState findState;
unsigned allocatedMarkers;
long oldPos;
bool selText;
FoldStyle fold;
bool autoInd;
BraceMatch braceMode;
AutoCompletionSource acSource;
int acThresh;
const char *acStart;
QextScintillaAPIs *acAPIs;
QextScintillaAPIs *ctAPIs;
int maxCallTips;
bool showSingle;
long ctpos;
TQGuardedPtr<QextScintillaLexer> lex;
QextScintillaCommandSet *stdCmds;
QextScintillaDocument doc;
bool modified;
TQColor nl_text_colour;
TQColor nl_paper_colour;
TQFont nl_font;
bool explicit_fillups;
bool fillups_enabled;
TQCString saved_fillups;
#if defined(TQ_DISABLE_COPY)
QextScintilla(const QextScintilla &);
QextScintilla &operator=(const QextScintilla &);
#endif
};
#endif