// This class defines the "official" low-level API.
//
// Copyright (c) 2006
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of QScintilla.
// 
// This copy of QScintilla 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.
// 
// QScintilla 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
// QScintilla; see the file LICENSE.  If not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


#ifndef QEXTSCINTILLABASE_H
#define QEXTSCINTILLABASE_H


#include <qobject.h>
#include <qpoint.h>
#include <qtimer.h>
#include <qwidget.h>

#include <qextscintillaglobal.h>


class ScintillaQt;
class QScrollBar;
class QColor;
class QPainter;
class QPixmap;


//! \brief The QextScintillaBase class implements the Scintilla editor widget
//! and its low-level API.
//!
//! Scintilla (http://www.scintilla.org) is a powerful C++ editor class that
//! supports many features including syntax styling, error indicators, code
//! completion and call tips. It is particularly useful as a programmer's
//! editor.
//!
//! QextScintillaBase is a port to Qt of Scintilla. It implements the standard
//! Scintilla API which consists of a number of messages each taking up to
//! two arguments.
//!
//! See QextScintilla for the implementation of a higher level API that is more
//! consistent with the rest of the Qt toolkit.
class QEXTSCINTILLA_EXPORT QextScintillaBase : public QWidget
{
	Q_OBJECT

public:
	//! The low-level Scintilla API is implemented as a set of messages
	//! each of which takes up to two parameters (\a wParam and \a lParam)
	//! and optionally return a value. This enum defines all the possible
	//! messages.
	//!
	//! \sa SendScintilla()
	enum
	{
		//!
		SCI_START = 2000,

		//!
		SCI_OPTIONAL_START = 3000,

		//!
		SCI_LEXER_START = 4000,

		//! This message appends some text to the end of the document.
		//! \a wParam is the length of the text.
		//! \a lParam is the text to be appended.
		SCI_ADDTEXT = 2001,

		//!
		SCI_ADDSTYLEDTEXT = 2002,

		//!
		SCI_INSERTTEXT = 2003,

		//!
		SCI_CLEARALL = 2004,

		//!
		SCI_CLEARDOCUMENTSTYLE = 2005,

		//!
		SCI_GETLENGTH = 2006,

		//!
		SCI_GETCHARAT = 2007,

		//! This message returns the current position.
		//! 
		//! \sa SCI_SETCURRENTPOS
		SCI_GETCURRENTPOS = 2008,

		//! This message returns the anchor.
		//! 
		//! \sa SCI_SETANCHOR
		SCI_GETANCHOR = 2009,

		//!
		SCI_GETSTYLEAT = 2010,

		//!
		SCI_REDO = 2011,

		//!
		SCI_SETUNDOCOLLECTION = 2012,

		//!
		SCI_SELECTALL = 2013,

		//! This message marks the current state of the text as the
		//! the save point. This is usually done when the text is saved
		//! or loaded.
		//! 
		//! \sa SCN_SAVEPOINTREACHED(), SCN_SAVEPOINTLEFT()
		SCI_SETSAVEPOINT = 2014,

		//!
		SCI_GETSTYLEDTEXT = 2015,

		//!
		SCI_CANREDO = 2016,

		//! This message returns the line that contains a particular
		//! instance of a marker.
		//! \a wParam is the handle of the marker.
		//!
		//! \sa SCI_MARKERADD
		SCI_MARKERLINEFROMHANDLE = 2017,

		//! This message removes a particular instance of a marker.
		//! \a wParam is the handle of the marker.
		//!
		//! \sa SCI_MARKERADD
		SCI_MARKERDELETEHANDLE = 2018,

		//!
		SCI_GETUNDOCOLLECTION = 2019,

		//!
		SCI_GETVIEWWS = 2020,

		//!
		SCI_SETVIEWWS = 2021,

		//!
		SCI_POSITIONFROMPOINT = 2022,

		//!
		SCI_POSITIONFROMPOINTCLOSE = 2023,

		//!
		SCI_GOTOLINE = 2024,

		//! This message clears the current selection and sets the
		//! current position.
		//! \a wParam is the new current position.
		//! 
		//! \sa SCI_SETCURRENTPOS
		SCI_GOTOPOS = 2025,

		//! This message sets the anchor.
		//! \a wParam is the new anchor.
		//! 
		//! \sa SCI_GETANCHOR
		SCI_SETANCHOR = 2026,

		//!
		SCI_GETCURLINE = 2027,

		//! This message returns the character position of the start of
		//! the text that needs to be syntax styled.
		//! 
		//! \sa SCN_STYLENEEDED()
		SCI_GETENDSTYLED = 2028,

		//!
		SCI_CONVERTEOLS = 2029,

		//!
		SCI_GETEOLMODE = 2030,

		//!
		SCI_SETEOLMODE = 2031,

		//!
		SCI_STARTSTYLING = 2032,

		//!
		SCI_SETSTYLING = 2033,

		//!
		SCI_GETBUFFEREDDRAW = 2034,

		//!
		SCI_SETBUFFEREDDRAW = 2035,

		//!
		SCI_SETTABWIDTH = 2036,

		//!
		SCI_GETTABWIDTH = 2121,

		//!
		SCI_SETCODEPAGE = 2037,

		//!
		SCI_SETUSEPALETTE = 2039,

		//! This message sets the symbol used to draw one of 32
		//! markers.  Some markers have pre-defined uses, see the
		//! SC_MARKNUM_* values.
		//! \a wParam is the number of the marker.
		//! \a lParam is the marker symbol and is one of the SC_MARK_*
		//! values.
		//!
		//! \sa SCI_MARKERADD, SCI_MARKERDEFINEPIXMAP
		SCI_MARKERDEFINE = 2040,

		//! This message sets the foreground colour used to draw a
		//! marker.  A colour is represented as a 24 bit value.  The 8
		//! least significant bits correspond to red, the middle 8 bits
		//! correspond to green, and the 8 most significant bits
		//! correspond to blue.  The default value is 0x000000.
		//! \a wParam is the number of the marker.
		//! \a lParam is the colour.
		//!
		//! \sa SCI_MARKERSETBACK
		SCI_MARKERSETFORE = 2041,

		//! This message sets the background colour used to draw a
		//! marker.  A colour is represented as a 24 bit value.  The 8
		//! least significant bits correspond to red, the middle 8 bits
		//! correspond to green, and the 8 most significant bits
		//! correspond to blue.  The default value is 0xffffff.
		//! \a wParam is the number of the marker.
		//! \a lParam is the colour.
		//!
		//! \sa SCI_MARKERSETFORE
		SCI_MARKERSETBACK = 2042,

		//! This message adds a marker to a line.  A handle for the
		//! marker is returned which can be used to track the marker's
		//! position.
		//! \a wParam is the line number.
		//! \a lParam is the number of the marker.
		//!
		//! \sa SCI_MARKERDELETE, SCI_MARKERDELETEALL,
		//! SCI_MARKERDELETEHANDLE
		SCI_MARKERADD = 2043,

		//! This message deletes a marker from a line.
		//! \a wParam is the line number.
		//! \a lParam is the number of the marker.
		//!
		//! \sa SCI_MARKERADD, SCI_MARKERDELETEALL
		SCI_MARKERDELETE = 2044,

		//! This message deletes all occurences of a marker.
		//! \a wParam is the number of the marker.  If \a wParam is -1
		//! then all markers are removed.
		//!
		//! \sa SCI_MARKERADD, SCI_MARKERDELETE
		SCI_MARKERDELETEALL = 2045,

		//! This message returns the 32 bit mask of markers at a line.
		//! \a wParam is the line number.
		SCI_MARKERGET = 2046,

		//! This message looks for the next line to contain at least
		//! one marker contained in a 32 bit mask of markers and
		//! returns the line number.
		//! \a wParam is the line number to start the search from.
		//! \a lParam is the mask of markers to search for.
		//!
		//! \sa SCI_MARKERPREVIOUS
		SCI_MARKERNEXT = 2047,

		//! This message looks for the previous line to contain at
		//! least one marker contained in a 32 bit mask of markers and
		//! returns the line number.
		//! \a wParam is the line number to start the search from.
		//! \a lParam is the mask of markers to search for.
		//!
		//! \sa SCI_MARKERNEXT
		SCI_MARKERPREVIOUS = 2048,

		//! This message sets the symbol used to draw one of the 32
		//! markers to a pixmap.  Pixmaps use the SC_MARK_PIXMAP marker
		//! symbol.
		//! \a wParam is the number of the marker.
		//! \a lParam is a pointer to a QPixmap instance.  Note that in
		//! other ports of Scintilla this is a pointer to either raw or
		//! textual XPM image data.
		//!
		//! \sa SCI_MARKERDEFINE
		SCI_MARKERDEFINEPIXMAP = 2049,

		//! This message sets what can be displayed in a margin.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//! \a lParam is the logical or of the SC_MARGIN_* values.
		//!
		//! \sa SCI_GETMARGINTYPEN
		SCI_SETMARGINTYPEN = 2240,

		//! This message returns what can be displayed in a margin.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//!
		//! \sa SCI_SETMARGINTYPEN
		SCI_GETMARGINTYPEN = 2241,

		//! This message sets the width of a margin in pixels.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//! \a lParam is the new margin width.
		//!
		//! \sa SCI_GETMARGINWIDTHN
		SCI_SETMARGINWIDTHN = 2242,

		//! This message returns the width of a margin in pixels.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//!
		//! \sa SCI_SETMARGINWIDTHN
		SCI_GETMARGINWIDTHN = 2243,

		//! This message sets the mask of a margin.  The mask is a 32
		//! value with one bit for each possible marker.  If a bit is
		//! set then the corresponding marker is displayed.  By
		//! default, all markers are displayed.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//! \a lParam is the new margin mask.
		//!
		//! \sa SCI_GETMARGINMASKN, SCI_MARKERDEFINE
		SCI_SETMARGINMASKN = 2244,

		//! This message returns the mask of a margin.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//!
		//! \sa SCI_SETMARGINMASKN
		SCI_GETMARGINMASKN = 2245,

		//! This message sets the sensitivity of a margin to mouse
		//! clicks.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//! \a lParam is non-zero to make the margin sensitive to mouse
		//! clicks. When the mouse is clicked the SCN_MARGINCLICK()
		//! signal is emitted.
		//!
		//! \sa SCI_GETMARGINSENSITIVEN, SCN_MARGINCLICK()
		SCI_SETMARGINSENSITIVEN = 2246,

		//! This message returns the sensitivity of a margin to mouse
		//! clicks.
		//! \a wParam is the number of the margin: 0, 1 or 2.
		//!
		//! \sa SCI_SETMARGINSENSITIVEN, SCN_MARGINCLICK()
		SCI_GETMARGINSENSITIVEN = 2247,

		//!
		SCI_STYLECLEARALL = 2050,

		//!
		SCI_STYLESETFORE = 2051,

		//!
		SCI_STYLESETBACK = 2052,

		//!
		SCI_STYLESETBOLD = 2053,

		//!
		SCI_STYLESETITALIC = 2054,

		//!
		SCI_STYLESETSIZE = 2055,

		//!
		SCI_STYLESETFONT = 2056,

		//!
		SCI_STYLESETEOLFILLED = 2057,

		//!
		SCI_STYLERESETDEFAULT = 2058,

		//!
		SCI_STYLESETUNDERLINE = 2059,

		//!
		SCI_STYLESETCASE = 2060,

		//!
		SCI_STYLESETCHARACTERSET = 2066,

		//!
		SCI_SETSELFORE = 2067,

		//!
		SCI_SETSELBACK = 2068,

		//!
		SCI_SETCARETFORE = 2069,

		//!
		SCI_ASSIGNCMDKEY = 2070,

		//!
		SCI_CLEARCMDKEY = 2071,

		//!
		SCI_CLEARALLCMDKEYS = 2072,

		//!
		SCI_SETSTYLINGEX = 2073,

		//!
		SCI_STYLESETVISIBLE = 2074,

		//!
		SCI_GETCARETPERIOD = 2075,

		//!
		SCI_SETCARETPERIOD = 2076,

		//!
		SCI_SETWORDCHARS = 2077,

		//!
		SCI_BEGINUNDOACTION = 2078,

		//!
		SCI_ENDUNDOACTION = 2079,

		//!
		SCI_INDICSETSTYLE = 2080,

		//!
		SCI_INDICGETSTYLE = 2081,

		//!
		SCI_INDICSETFORE = 2082,

		//!
		SCI_INDICGETFORE = 2083,

		//!
		SCI_SETWHITESPACEFORE = 2084,

		//!
		SCI_SETWHITESPACEBACK = 2085,

		//!
		SCI_SETSTYLEBITS = 2090,

		//!
		SCI_GETSTYLEBITS = 2091,

		//!
		SCI_SETLINESTATE = 2092,

		//!
		SCI_GETLINESTATE = 2093,

		//!
		SCI_GETMAXLINESTATE = 2094,

		//!
		SCI_GETCARETLINEVISIBLE = 2095,

		//!
		SCI_SETCARETLINEVISIBLE = 2096,

		//!
		SCI_GETCARETLINEBACK = 2097,

		//!
		SCI_SETCARETLINEBACK = 2098,

		//!
		SCI_STYLESETCHANGEABLE = 2099,

		//!
		SCI_AUTOCSHOW = 2100,

		//!
		SCI_AUTOCCANCEL = 2101,

		//!
		SCI_AUTOCACTIVE = 2102,

		//!
		SCI_AUTOCPOSSTART = 2103,

		//!
		SCI_AUTOCCOMPLETE = 2104,

		//!
		SCI_AUTOCSTOPS = 2105,

		//!
		SCI_AUTOCSETSEPARATOR = 2106,

		//!
		SCI_AUTOCGETSEPARATOR = 2107,

		//!
		SCI_AUTOCSELECT = 2108,

		//!
		SCI_AUTOCSETCANCELATSTART = 2110,

		//!
		SCI_AUTOCGETCANCELATSTART = 2111,

		//!
		SCI_AUTOCSETFILLUPS = 2112,

		//!
		SCI_AUTOCSETCHOOSESINGLE = 2113,

		//!
		SCI_AUTOCGETCHOOSESINGLE = 2114,

		//!
		SCI_AUTOCSETIGNORECASE = 2115,

		//!
		SCI_AUTOCGETIGNORECASE = 2116,

		//!
		SCI_USERLISTSHOW = 2117,

		//!
		SCI_AUTOCSETAUTOHIDE = 2118,

		//!
		SCI_AUTOCGETAUTOHIDE = 2119,

		//!
		SCI_AUTOCSETDROPRESTOFWORD = 2270,

		//!
		SCI_AUTOCGETDROPRESTOFWORD = 2271,

		//!
		SCI_SETINDENT = 2122,

		//!
		SCI_GETINDENT = 2123,

		//!
		SCI_SETUSETABS = 2124,

		//!
		SCI_GETUSETABS = 2125,

		//!
		SCI_SETLINEINDENTATION = 2126,

		//!
		SCI_GETLINEINDENTATION = 2127,

		//!
		SCI_GETLINEINDENTPOSITION = 2128,

		//!
		SCI_GETCOLUMN = 2129,

		//!
		SCI_SETHSCROLLBAR = 2130,

		//!
		SCI_GETHSCROLLBAR = 2131,

		//!
		SCI_SETINDENTATIONGUIDES = 2132,

		//!
		SCI_GETINDENTATIONGUIDES = 2133,

		//!
		SCI_SETHIGHLIGHTGUIDE = 2134,

		//!
		SCI_GETHIGHLIGHTGUIDE = 2135,

		//!
		SCI_GETLINEENDPOSITION = 2136,

		//!
		SCI_GETCODEPAGE = 2137,

		//!
		SCI_GETCARETFORE = 2138,

		//!
		SCI_GETUSEPALETTE = 2139,

		//! This message returns a non-zero value if the document is
		//! read-only.
		//! 
		//! \sa SCI_SETREADONLY
		SCI_GETREADONLY = 2140,

		//! This message sets the current position.
		//! \a wParam is the new current position.
		//! 
		//! \sa SCI_GETCURRENTPOS
		SCI_SETCURRENTPOS = 2141,

		//!
		SCI_SETSELECTIONSTART = 2142,

		//!
		SCI_GETSELECTIONSTART = 2143,

		//!
		SCI_SETSELECTIONEND = 2144,

		//!
		SCI_GETSELECTIONEND = 2145,

		//!
		SCI_SETPRINTMAGNIFICATION = 2146,

		//!
		SCI_GETPRINTMAGNIFICATION = 2147,

		//!
		SCI_SETPRINTCOLOURMODE = 2148,

		//!
		SCI_GETPRINTCOLOURMODE = 2149,

		//!
		SCI_FINDTEXT = 2150,

		//!
		SCI_FORMATRANGE = 2151,

		//!
		SCI_GETFIRSTVISIBLELINE = 2152,

		//!
		SCI_GETLINE = 2153,

		//!
		SCI_GETLINECOUNT = 2154,

		//!
		SCI_SETMARGINLEFT = 2155,

		//!
		SCI_GETMARGINLEFT = 2156,

		//!
		SCI_SETMARGINRIGHT = 2157,

		//!
		SCI_GETMARGINRIGHT = 2158,

		//! This message returns a non-zero value if the document has
		//! been modified.
		SCI_GETMODIFY = 2159,

		//!
		SCI_SETSEL = 2160,

		//!
		SCI_GETSELTEXT = 2161,

		//!
		SCI_GETTEXTRANGE = 2162,

		//!
		SCI_HIDESELECTION = 2163,

		//!
		SCI_POINTXFROMPOSITION = 2164,

		//!
		SCI_POINTYFROMPOSITION = 2165,

		//!
		SCI_LINEFROMPOSITION = 2166,

		//!
		SCI_POSITIONFROMLINE = 2167,

		//!
		SCI_LINESCROLL = 2168,

		//!
		SCI_SCROLLCARET = 2169,

		//!
		SCI_REPLACESEL = 2170,

		//! This message sets the read-only state of the document.
		//! \a wParam is the new read-only state of the document.
		//! 
		//! \sa SCI_GETREADONLY
		SCI_SETREADONLY = 2171,

		//!
		SCI_NULL = 2172,

		//!
		SCI_CANPASTE = 2173,

		//!
		SCI_CANUNDO = 2174,

		//! This message empties the undo buffer.
		SCI_EMPTYUNDOBUFFER = 2175,

		//!
		SCI_UNDO = 2176,

		//!
		SCI_CUT = 2177,

		//!
		SCI_COPY = 2178,

		//!
		SCI_PASTE = 2179,

		//!
		SCI_CLEAR = 2180,

		//! This message sets the text of the document.
		//! \a wParam is unused.
		//! \a lParam is the new text of the document.
		//! 
		//! \sa SCI_GETTEXT
		SCI_SETTEXT = 2181,

		//! This message gets the text of the document.
		//! \a wParam is size of the buffer that the text is copied to.
		//! \a lParam is the address of the buffer that the text is
		//! copied to.
		//! 
		//! \sa SCI_SETTEXT
		SCI_GETTEXT = 2182,

		//! This message returns the length of the document.
		SCI_GETTEXTLENGTH = 2183,

		//!
		SCI_GETDIRECTFUNCTION = 2184,

		//!
		SCI_GETDIRECTPOINTER = 2185,

		//!
		SCI_SETOVERTYPE = 2186,

		//!
		SCI_GETOVERTYPE = 2187,

		//!
		SCI_SETCARETWIDTH = 2188,

		//!
		SCI_GETCARETWIDTH = 2189,

		//!
		SCI_SETTARGETSTART = 2190,

		//!
		SCI_GETTARGETSTART = 2191,

		//!
		SCI_SETTARGETEND = 2192,

		//!
		SCI_GETTARGETEND = 2193,

		//!
		SCI_REPLACETARGET = 2194,

		//!
		SCI_REPLACETARGETRE = 2195,

		//!
		SCI_SEARCHINTARGET = 2197,

		//!
		SCI_SETSEARCHFLAGS = 2198,

		//!
		SCI_GETSEARCHFLAGS = 2199,

		//!
		SCI_CALLTIPSHOW = 2200,

		//!
		SCI_CALLTIPCANCEL = 2201,

		//!
		SCI_CALLTIPACTIVE = 2202,

		//!
		SCI_CALLTIPPOSSTART = 2203,

		//!
		SCI_CALLTIPSETHLT = 2204,

		//!
		SCI_CALLTIPSETBACK = 2205,

		//!
		SCI_CALLTIPSETFORE = 2206,

		//!
		SCI_CALLTIPSETFOREHLT = 2207,

		//!
		SCI_AUTOCSETMAXWIDTH = 2208,

		//!
		SCI_AUTOCGETMAXWIDTH = 2209,

		//!
		SCI_AUTOCSETMAXHEIGHT = 2210,

		//!
		SCI_AUTOCGETMAXHEIGHT = 2211,

		//!
		SCI_CALLTIPUSESTYLE = 2212,

		//!
		SCI_VISIBLEFROMDOCLINE = 2220,

		//!
		SCI_DOCLINEFROMVISIBLE = 2221,

		//!
		SCI_SETFOLDLEVEL = 2222,

		//!
		SCI_GETFOLDLEVEL = 2223,

		//!
		SCI_GETLASTCHILD = 2224,

		//!
		SCI_GETFOLDPARENT = 2225,

		//!
		SCI_SHOWLINES = 2226,

		//!
		SCI_HIDELINES = 2227,

		//!
		SCI_GETLINEVISIBLE = 2228,

		//!
		SCI_SETFOLDEXPANDED = 2229,

		//!
		SCI_GETFOLDEXPANDED = 2230,

		//!
		SCI_TOGGLEFOLD = 2231,

		//!
		SCI_ENSUREVISIBLE = 2232,

		//!
		SCI_SETFOLDFLAGS = 2233,

		//!
		SCI_ENSUREVISIBLEENFORCEPOLICY = 2234,

		//!
		SCI_WRAPCOUNT = 2235,

		//!
		SCI_SETTABINDENTS = 2260,

		//!
		SCI_GETTABINDENTS = 2261,

		//!
		SCI_SETBACKSPACEUNINDENTS = 2262,

		//!
		SCI_GETBACKSPACEUNINDENTS = 2263,

		//!
		SCI_SETMOUSEDWELLTIME = 2264,

		//!
		SCI_GETMOUSEDWELLTIME = 2265,

		//!
		SCI_WORDSTARTPOSITION = 2266,

		//!
		SCI_WORDENDPOSITION = 2267,

		//!
		SCI_SETWRAPMODE = 2268,

		//!
		SCI_GETWRAPMODE = 2269,

		//!
		SCI_SETLAYOUTCACHE = 2272,

		//!
		SCI_GETLAYOUTCACHE = 2273,

		//!
		SCI_SETSCROLLWIDTH = 2274,

		//!
		SCI_GETSCROLLWIDTH = 2275,

		//! This message returns the width of some text when rendered
		//! in a particular style.
		//! \a wParam is the style number and is one of the STYLE_*
		//! values or one of the styles defined by a lexer.
		//! \a lParam is a pointer to the text.
		SCI_TEXTWIDTH = 2276,

		//!
		SCI_SETENDATLASTLINE = 2277,

		//!
		SCI_GETENDATLASTLINE = 2278,

		//!
		SCI_TEXTHEIGHT = 2279,

		//!
		SCI_SETVSCROLLBAR = 2280,

		//!
		SCI_GETVSCROLLBAR = 2281,

		//!
		SCI_APPENDTEXT = 2282,

		//!
		SCI_GETTWOPHASEDRAW = 2283,

		//!
		SCI_SETTWOPHASEDRAW = 2284,

		//!
		SCI_AUTOCGETTYPESEPARATOR = 2285,

		//!
		SCI_AUTOCSETTYPESEPARATOR = 2286,

		//!
		SCI_TARGETFROMSELECTION = 2287,

		//!
		SCI_LINESJOIN = 2288,

		//!
		SCI_LINESSPLIT = 2289,

		//!
		SCI_SETFOLDMARGINCOLOUR = 2290,

		//!
		SCI_SETFOLDMARGINHICOLOUR = 2291,

		//!
		SCI_LINEDOWN = 2300,

		//!
		SCI_LINEDOWNEXTEND = 2301,

		//!
		SCI_LINEUP = 2302,

		//!
		SCI_LINEUPEXTEND = 2303,

		//!
		SCI_CHARLEFT = 2304,

		//!
		SCI_CHARLEFTEXTEND = 2305,

		//!
		SCI_CHARRIGHT = 2306,

		//!
		SCI_CHARRIGHTEXTEND = 2307,

		//!
		SCI_WORDLEFT = 2308,

		//!
		SCI_WORDLEFTEXTEND = 2309,

		//!
		SCI_WORDRIGHT = 2310,

		//!
		SCI_WORDRIGHTEXTEND = 2311,

		//!
		SCI_HOME = 2312,

		//!
		SCI_HOMEEXTEND = 2313,

		//!
		SCI_LINEEND = 2314,

		//!
		SCI_LINEENDEXTEND = 2315,

		//!
		SCI_DOCUMENTSTART = 2316,

		//!
		SCI_DOCUMENTSTARTEXTEND = 2317,

		//!
		SCI_DOCUMENTEND = 2318,

		//!
		SCI_DOCUMENTENDEXTEND = 2319,

		//!
		SCI_PAGEUP = 2320,

		//!
		SCI_PAGEUPEXTEND = 2321,

		//!
		SCI_PAGEDOWN = 2322,

		//!
		SCI_PAGEDOWNEXTEND = 2323,

		//!
		SCI_EDITTOGGLEOVERTYPE = 2324,

		//!
		SCI_CANCEL = 2325,

		//!
		SCI_DELETEBACK = 2326,

		//!
		SCI_TAB = 2327,

		//!
		SCI_BACKTAB = 2328,

		//!
		SCI_NEWLINE = 2329,

		//!
		SCI_FORMFEED = 2330,

		//!
		SCI_VCHOME = 2331,

		//!
		SCI_VCHOMEEXTEND = 2332,

		//!
		SCI_ZOOMIN = 2333,

		//!
		SCI_ZOOMOUT = 2334,

		//!
		SCI_DELWORDLEFT = 2335,

		//!
		SCI_DELWORDRIGHT = 2336,

		//!
		SCI_LINECUT = 2337,

		//!
		SCI_LINEDELETE = 2338,

		//!
		SCI_LINETRANSPOSE = 2339,

		//!
		SCI_LOWERCASE = 2340,

		//!
		SCI_UPPERCASE = 2341,

		//!
		SCI_LINESCROLLDOWN = 2342,

		//!
		SCI_LINESCROLLUP = 2343,

		//!
		SCI_DELETEBACKNOTLINE = 2344,

		//!
		SCI_HOMEDISPLAY = 2345,

		//!
		SCI_HOMEDISPLAYEXTEND = 2346,

		//!
		SCI_LINEENDDISPLAY = 2347,

		//!
		SCI_LINEENDDISPLAYEXTEND = 2348,

		//!
		SCI_MOVECARETINSIDEVIEW = 2401,

		//!
		SCI_LINELENGTH = 2350,

		//!
		SCI_BRACEHIGHLIGHT = 2351,

		//!
		SCI_BRACEBADLIGHT = 2352,

		//!
		SCI_BRACEMATCH = 2353,

		//!
		SCI_GETVIEWEOL = 2355,

		//!
		SCI_SETVIEWEOL = 2356,

		//!
		SCI_GETDOCPOINTER = 2357,

		//!
		SCI_SETDOCPOINTER = 2358,

		//!
		SCI_SETMODEVENTMASK = 2359,

		//!
		SCI_GETEDGECOLUMN = 2360,

		//!
		SCI_SETEDGECOLUMN = 2361,

		//!
		SCI_GETEDGEMODE = 2362,

		//!
		SCI_SETEDGEMODE = 2363,

		//!
		SCI_GETEDGECOLOUR = 2364,

		//!
		SCI_SETEDGECOLOUR = 2365,

		//!
		SCI_SEARCHANCHOR = 2366,

		//!
		SCI_SEARCHNEXT = 2367,

		//!
		SCI_SEARCHPREV = 2368,

		//!
		SCI_LINESONSCREEN = 2370,

		//!
		SCI_USEPOPUP = 2371,

		//!
		SCI_SELECTIONISRECTANGLE = 2372,

		//!
		SCI_SETZOOM = 2373,

		//!
		SCI_GETZOOM = 2374,

		//!
		SCI_CREATEDOCUMENT = 2375,

		//!
		SCI_ADDREFDOCUMENT = 2376,

		//!
		SCI_RELEASEDOCUMENT = 2377,

		//!
		SCI_GETMODEVENTMASK = 2378,

		//!
		SCI_SETFOCUS = 2380,

		//!
		SCI_GETFOCUS = 2381,

		//!
		SCI_SETSTATUS = 2382,

		//!
		SCI_GETSTATUS = 2383,

		//!
		SCI_SETMOUSEDOWNCAPTURES = 2384,

		//!
		SCI_GETMOUSEDOWNCAPTURES = 2385,

		//!
		SCI_SETCURSOR = 2386,

		//!
		SCI_GETCURSOR = 2387,

		//!
		SCI_SETCONTROLCHARSYMBOL = 2388,

		//!
		SCI_GETCONTROLCHARSYMBOL = 2389,

		//!
		SCI_WORDPARTLEFT = 2390,

		//!
		SCI_WORDPARTLEFTEXTEND = 2391,

		//!
		SCI_WORDPARTRIGHT = 2392,

		//!
		SCI_WORDPARTRIGHTEXTEND = 2393,

		//!
		SCI_SETVISIBLEPOLICY = 2394,

		//!
		SCI_DELLINELEFT = 2395,

		//!
		SCI_DELLINERIGHT = 2396,

		//!
		SCI_SETXOFFSET = 2397,

		//!
		SCI_GETXOFFSET = 2398,

		//!
		SCI_CHOOSECARETX = 2399,

		//!
		SCI_GRABFOCUS = 2400,

		//!
		SCI_SETXCARETPOLICY = 2402,

		//!
		SCI_SETYCARETPOLICY = 2403,

		//!
		SCI_LINEDUPLICATE = 2404,

		//! This message takes a copy of an image and registers it so
		//! that it can be refered to by a unique integer identifier.
		//! \a wParam is the image's identifier.
		//! \a lParam is a pointer to a QPixmap instance.  Note that in
		//! other ports of Scintilla this is a pointer to either raw or
		//! textual XPM image data.
		//!
		//! \sa SCI_CLEARREGISTEREDIMAGES
		SCI_REGISTERIMAGE = 2405,

		//!
		SCI_SETPRINTWRAPMODE = 2406,

		//!
		SCI_GETPRINTWRAPMODE = 2407,

		//! This message de-registers all currently registered images.
		//!
		//! \sa SCI_REGISTERIMAGE
		SCI_CLEARREGISTEREDIMAGES = 2408,

		//!
		SCI_STYLESETHOTSPOT = 2409,

		//!
		SCI_SETHOTSPOTACTIVEFORE = 2410,

		//!
		SCI_SETHOTSPOTACTIVEBACK = 2411,

		//!
		SCI_SETHOTSPOTACTIVEUNDERLINE = 2412,

		//!
		SCI_PARADOWN = 2413,

		//!
		SCI_PARADOWNEXTEND = 2414,

		//!
		SCI_PARAUP = 2415,

		//!
		SCI_PARAUPEXTEND = 2416,

		//!
		SCI_POSITIONBEFORE = 2417,

		//!
		SCI_POSITIONAFTER = 2418,

		//!
		SCI_COPYRANGE = 2419,

		//!
		SCI_COPYTEXT = 2420,

		//!
		SCI_SETSELECTIONMODE = 2422,

		//!
		SCI_GETSELECTIONMODE = 2423,

		//!
		SCI_GETLINESELSTARTPOSITION = 2424,

		//!
		SCI_GETLINESELENDPOSITION = 2425,

		//!
		SCI_LINEDOWNRECTEXTEND = 2426,

		//!
		SCI_LINEUPRECTEXTEND = 2427,

		//!
		SCI_CHARLEFTRECTEXTEND = 2428,

		//!
		SCI_CHARRIGHTRECTEXTEND = 2429,

		//!
		SCI_HOMERECTEXTEND = 2430,

		//!
		SCI_VCHOMERECTEXTEND = 2431,

		//!
		SCI_LINEENDRECTEXTEND = 2432,

		//!
		SCI_PAGEUPRECTEXTEND = 2433,

		//!
		SCI_PAGEDOWNRECTEXTEND = 2434,

		//!
		SCI_STUTTEREDPAGEUP = 2435,

		//!
		SCI_STUTTEREDPAGEUPEXTEND = 2436,

		//!
		SCI_STUTTEREDPAGEDOWN = 2437,

		//!
		SCI_STUTTEREDPAGEDOWNEXTEND = 2438,

		//!
		SCI_WORDLEFTEND = 2439,

		//!
		SCI_WORDLEFTENDEXTEND = 2440,

		//!
		SCI_WORDRIGHTEND = 2441,

		//!
		SCI_WORDRIGHTENDEXTEND = 2442,

		//!
		SCI_SETWHITESPACECHARS = 2443,

		//!
		SCI_SETCHARSDEFAULT = 2444,

		//!
		SCI_AUTOCGETCURRENT = 2445,

		//!
		SCI_ALLOCATE = 2446,

		//!
		SCI_HOMEWRAP = 2349,

		//!
		SCI_HOMEWRAPEXTEND = 2450,

		//!
		SCI_LINEENDWRAP = 2451,

		//!
		SCI_LINEENDWRAPEXTEND = 2452,

		//!
		SCI_VCHOMEWRAP = 2453,

		//!
		SCI_VCHOMEWRAPEXTEND = 2454,

		//!
		SCI_LINECOPY = 2455,

		//!
		SCI_FINDCOLUMN = 2456,

		//!
		SCI_GETCARETSTICKY = 2457,

		//!
		SCI_SETCARETSTICKY = 2458,

		//!
		SCI_TOGGLECARETSTICKY = 2459,

		//!
		SCI_SETWRAPVISUALFLAGS = 2460,

		//!
		SCI_GETWRAPVISUALFLAGS = 2461,

		//!
		SCI_SETWRAPVISUALFLAGSLOCATION = 2462,

		//!
		SCI_GETWRAPVISUALFLAGSLOCATION = 2463,

		//!
		SCI_SETWRAPSTARTINDENT = 2464,

		//!
		SCI_GETWRAPSTARTINDENT = 2465,

		//!
		SCI_MARKERADDSET = 2466,

		//!
		SCI_SETPASTECONVERTENDINGS = 2467,

		//!
		SCI_GETPASTECONVERTENDINGS = 2468,

		//!
		SCI_SELECTIONDUPLICATE = 2469,

		//!
		SCI_SETCARETLINEBACKALPHA = 2470,

		//!
		SCI_GETCARETLINEBACKALPHA = 2471,

		//!
		SCI_MARKERSETALPHA = 2476,

		//!
		SCI_GETSELALPHA = 2477,

		//!
		SCI_SETSELALPHA = 2478,

		//!
		SCI_STARTRECORD = 3001,

		//!
		SCI_STOPRECORD = 3002,

		//! This message sets the number of the lexer to use for syntax
		//! styling.
		//! \a wParam is the number of the lexer and is one of the
		//! SCLEX_* values.
		SCI_SETLEXER = 4001,

		//! This message returns the number of the lexer being used for
		//! syntax styling.
		SCI_GETLEXER = 4002,

		//!
		SCI_COLOURISE = 4003,

		//!
		SCI_SETPROPERTY = 4004,

		//!
		SCI_SETKEYWORDS = 4005,

		//! This message sets the name of the lexer to use for syntax
		//! styling.
		//! \a wParam is unused.
		//! \a lParam is the name of the lexer.
		SCI_SETLEXERLANGUAGE = 4006,

		//!
		SCI_LOADLEXERLIBRARY = 4007,

		//!
		SCI_GETPROPERTY = 4008,

		//!
		SCI_GETPROPERTYEXPANDED = 4009,

		//!
		SCI_GETPROPERTYINT = 4010,

		//!
		SCI_GETSTYLEBITSNEEDED = 4011
	};

	enum
	{
		SC_ALPHA_TRANSPARENT = 0,
		SC_ALPHA_OPAQUE = 255,
		SC_ALPHA_NOALPHA = 256
	};

	enum
	{
		SC_WRAPVISUALFLAG_NONE = 0x0000,
		SC_WRAPVISUALFLAG_END = 0x0001,
		SC_WRAPVISUALFLAG_START = 0x0002
	};

	enum
	{
		SC_WRAPVISUALFLAGLOC_DEFAULT = 0x0000,
		SC_WRAPVISUALFLAGLOC_END_BY_TEXT = 0x0001,
		SC_WRAPVISUALFLAGLOC_START_BY_TEXT = 0x0002
	};

	//! This enum defines the different selection modes.
	//!
	//! \sa SCI_GETSELECTIONMODE, SCI_SETSELECTIONMODE
	enum
	{
		SC_SEL_STREAM = 0,
		SC_SEL_RECTANGLE = 1,
		SC_SEL_LINES = 2
	};

	enum
	{
		SCWS_INVISIBLE = 0,
		SCWS_VISIBLEALWAYS = 1,
		SCWS_VISIBLEAFTERINDENT = 2
	};

	enum
	{
		SC_EOL_CRLF = 0,
		SC_EOL_CR = 1,
		SC_EOL_LF = 2
	};

	enum
	{
		SC_CP_DBCS = 1,
		SC_CP_UTF8 = 65001
	};

	//! This enum defines the different marker symbols.
	//!
	//! \sa SCI_MARKERDEFINE
	enum
	{
		//! A circle.
		SC_MARK_CIRCLE = 0,

		//! A rectangle.
		SC_MARK_ROUNDRECT = 1,

		//! A triangle pointing to the right.
		SC_MARK_ARROW = 2,

		//! A smaller rectangle.
		SC_MARK_SMALLRECT = 3,

		//! An arrow pointing to the right.
		SC_MARK_SHORTARROW = 4,

		//! An invisible marker that allows code to track the movement
		//! of lines.
		SC_MARK_EMPTY = 5,

		//! A triangle pointing down.
		SC_MARK_ARROWDOWN = 6,

		//! A drawn minus sign.
		SC_MARK_MINUS = 7,

		//! A drawn plus sign.
		SC_MARK_PLUS = 8,

		//! A vertical line drawn in the background colour.
		SC_MARK_VLINE = 9,

		//! A bottom left corner drawn in the background colour.
		SC_MARK_LCORNER = 10,

		//! A vertical line with a centre right horizontal line drawn
		//! in the background colour.
		SC_MARK_TCORNER = 11,

		//! A drawn plus sign in a box.
		SC_MARK_BOXPLUS = 12,

		//! A drawn plus sign in a connected box.
		SC_MARK_BOXPLUSCONNECTED = 13,

		//! A drawn minus sign in a box.
		SC_MARK_BOXMINUS = 14,

		//! A drawn minus sign in a connected box.
		SC_MARK_BOXMINUSCONNECTED = 15,

		//! A rounded bottom left corner drawn in the background
		//! colour.
		SC_MARK_LCORNERCURVE = 16,

		//! A vertical line with a centre right curved line drawn in
		//! the background colour.
		SC_MARK_TCORNERCURVE = 17,

		//! A drawn plus sign in a circle.
		SC_MARK_CIRCLEPLUS = 18,

		//! A drawn plus sign in a connected box.
		SC_MARK_CIRCLEPLUSCONNECTED = 19,

		//! A drawn minus sign in a circle.
		SC_MARK_CIRCLEMINUS = 20,

		//! A drawn minus sign in a connected circle.
		SC_MARK_CIRCLEMINUSCONNECTED = 21,

		//! No symbol is drawn but the line of text is drawn with the
		//! same background colour.
		SC_MARK_BACKGROUND = 22,

		//! Three drawn dots.
		SC_MARK_DOTDOTDOT = 23,

		//! Three drawn arrows pointing right.
		SC_MARK_ARROWS = 24,

		//! An XPM format pixmap.
		SC_MARK_PIXMAP = 25,

		//! A full rectangle.
		SC_MARK_FULLRECT = 26,

		//! Characters can be used as symbols by adding this to the
		//! ASCII value of the character.
		SC_MARK_CHARACTER = 10000
	};

	enum
	{
		SC_MARKNUM_FOLDEREND = 25,
		SC_MARKNUM_FOLDEROPENMID = 26,
		SC_MARKNUM_FOLDERMIDTAIL = 27,
		SC_MARKNUM_FOLDERTAIL = 28,
		SC_MARKNUM_FOLDERSUB = 29,
		SC_MARKNUM_FOLDER = 30,
		SC_MARKNUM_FOLDEROPEN = 31,
		SC_MASK_FOLDERS = 0xfe000000
	};

	//! This enum defines what can be displayed in a margin.
	//!
	//! \sa SCI_GETMARGINTYPEN, SCI_SETMARGINTYPEN
	enum
	{
		//! The margin can display symbols.  Note that all margins can
		//! display symbols.
		SC_MARGIN_SYMBOL = 0,

		//! The margin will display line numbers.
		SC_MARGIN_NUMBER = 1,

		//! The margin's background color will be set to the default
		//! background color.
		SC_MARGIN_BACK = 2,

		//! The margin's background color will be set to the default
		//! foreground color.
		SC_MARGIN_FORE = 3
	};

	enum
	{
		STYLE_DEFAULT = 32,
		STYLE_LINENUMBER = 33,
		STYLE_BRACELIGHT = 34,
		STYLE_BRACEBAD = 35,
		STYLE_CONTROLCHAR = 36,
		STYLE_INDENTGUIDE = 37,
		STYLE_CALLTIP = 38,
		STYLE_LASTPREDEFINED = 39,
		STYLE_MAX = 127
	};

	enum
	{
		SC_CHARSET_ANSI = 0,
		SC_CHARSET_DEFAULT = 1,
		SC_CHARSET_BALTIC = 186,
		SC_CHARSET_CHINESEBIG5 = 136,
		SC_CHARSET_EASTEUROPE = 238,
		SC_CHARSET_GB2312 = 134,
		SC_CHARSET_GREEK = 161,
		SC_CHARSET_HANGUL = 129,
		SC_CHARSET_MAC = 77,
		SC_CHARSET_OEM = 255,
		SC_CHARSET_RUSSIAN = 204,
		SC_CHARSET_SHIFTJIS = 128,
		SC_CHARSET_SYMBOL = 2,
		SC_CHARSET_TURKISH = 162,
		SC_CHARSET_JOHAB = 130,
		SC_CHARSET_HEBREW = 177,
		SC_CHARSET_ARABIC = 178,
		SC_CHARSET_VIETNAMESE = 163,
		SC_CHARSET_THAI = 222,
		SC_CHARSET_8859_15 = 1000
	};

	enum
	{
		SC_CASE_MIXED = 0,
		SC_CASE_UPPER = 1,
		SC_CASE_LOWER = 2
	};

	enum
	{
		INDIC_MAX = 7,
		INDIC_PLAIN = 0,
		INDIC_SQUIGGLE = 1,
		INDIC_TT = 2,
		INDIC_DIAGONAL = 3,
		INDIC_STRIKE = 4,
		INDIC_HIDDEN = 5,
		INDIC_BOX = 6,
		INDIC_ROUNDBOX = 7,
		INDIC0_MASK = 0x20,
		INDIC1_MASK = 0x40,
		INDIC2_MASK = 0x80,
		INDICS_MASK = 0xe0
	};

	enum
	{
		SC_PRINT_NORMAL = 0,
		SC_PRINT_INVERTLIGHT = 1,
		SC_PRINT_BLACKONWHITE = 2,
		SC_PRINT_COLOURONWHITE = 3,
		SC_PRINT_COLOURONWHITEDEFAULTBG = 4
	};

	enum
	{
		SCFIND_WHOLEWORD = 2,
		SCFIND_MATCHCASE = 4,
		SCFIND_WORDSTART = 0x00100000,
		SCFIND_REGEXP = 0x00200000,
		SCFIND_POSIX = 0x00400000
	};

	enum
	{
		SC_FOLDLEVELBASE = 0x00400,
		SC_FOLDLEVELWHITEFLAG = 0x01000,
		SC_FOLDLEVELHEADERFLAG = 0x02000,
		SC_FOLDLEVELBOXHEADERFLAG = 0x04000,
		SC_FOLDLEVELBOXFOOTERFLAG = 0x08000,
		SC_FOLDLEVELCONTRACTED = 0x10000,
		SC_FOLDLEVELUNINDENT = 0x20000,
		SC_FOLDLEVELNUMBERMASK = 0x00fff
	};

	enum
	{
		SC_FOLDFLAG_BOX = 0x0001,
		SC_FOLDFLAG_LINEBEFORE_EXPANDED = 0x0002,
		SC_FOLDFLAG_LINEBEFORE_CONTRACTED = 0x0004,
		SC_FOLDFLAG_LINEAFTER_EXPANDED = 0x0008,
		SC_FOLDFLAG_LINEAFTER_CONTRACTED = 0x0010,
		SC_FOLDFLAG_LEVELNUMBERS = 0x0040
	};

	enum
	{
		SC_TIME_FOREVER = 10000000
	};

	enum
	{
		SC_WRAP_NONE = 0,
		SC_WRAP_WORD = 1,
		SC_WRAP_CHAR = 2
	};

	enum
	{
		SC_CACHE_NONE = 0,
		SC_CACHE_CARET = 1,
		SC_CACHE_PAGE = 2,
		SC_CACHE_DOCUMENT = 3
	};

	enum
	{
		EDGE_NONE = 0,
		EDGE_LINE = 1,
		EDGE_BACKGROUND = 2
	};

	enum
	{
		SC_CURSORNORMAL = -1,
		SC_CURSORWAIT = 4
	};

	enum
	{
		VISIBLE_SLOP = 0x01,
		VISIBLE_STRICT = 0x04
	};

	enum
	{
		CARET_SLOP = 0x01,
		CARET_STRICT = 0x04,
		CARET_JUMPS = 0x10,
		CARET_EVEN = 0x08
	};

	enum
	{
		SC_MOD_INSERTTEXT = 0x1,
		SC_MOD_DELETETEXT = 0x2,
		SC_MOD_CHANGESTYLE = 0x4,
		SC_MOD_CHANGEFOLD = 0x8,
		SC_PERFORMED_USER = 0x10,
		SC_PERFORMED_UNDO = 0x20,
		SC_PERFORMED_REDO = 0x40,
		SC_MULTISTEPUNDOREDO = 0x80,
		SC_LASTSTEPINUNDOREDO = 0x100,
		SC_MOD_CHANGEMARKER = 0x200,
		SC_MOD_BEFOREINSERT = 0x400,
		SC_MOD_BEFOREDELETE = 0x800,
		SC_MULTILINEUNDOREDO = 0x1000,
		SC_MODEVENTMASKALL = 0x1fff
	};

	enum
	{
		SCK_DOWN = 300,
		SCK_UP = 301,
		SCK_LEFT = 302,
		SCK_RIGHT = 303,
		SCK_HOME = 304,
		SCK_END = 305,
		SCK_PRIOR = 306,
		SCK_NEXT = 307,
		SCK_DELETE = 308,
		SCK_INSERT = 309,
		SCK_ESCAPE = 7,
		SCK_BACK = 8,
		SCK_TAB = 9,
		SCK_RETURN = 13,
		SCK_ADD = 310,
		SCK_SUBTRACT = 311,
		SCK_DIVIDE = 312
	};

	//! This enum defines the different modifier keys.
	enum
	{
		//! No modifier key.
		SCMOD_NORM = 0,

		//! Shift key.
		SCMOD_SHIFT = 1,

		//! Control key.
		SCMOD_CTRL = 2,

		//! Alt key.
		SCMOD_ALT = 4
	};

	//! This enum defines the different language lexers.
	//!
	//! \sa SCI_GETLEXER, SCI_SETLEXER
	enum
	{
		//! No lexer is selected and the SCN_STYLENEEDED signal is
		//! emitted so that the application can style the text as
		//! needed.  This is the default.
		SCLEX_CONTAINER = 0,

		//! Select the null lexer that does no syntax styling.
		SCLEX_NULL = 1,

		//! Select the Python lexer.
		SCLEX_PYTHON = 2,

		//! Select the C++ lexer.
		SCLEX_CPP = 3,

		//! Select the HTML lexer.
		SCLEX_HTML = 4,

		//! Select the XML lexer.
		SCLEX_XML = 5,

		//! Select the Perl lexer.
		SCLEX_PERL = 6,

		//! Select the SQL lexer.
		SCLEX_SQL = 7,

		//! Select the Visual Basic lexer.
		SCLEX_VB = 8,

		//! Select the lexer for properties style files.
		SCLEX_PROPERTIES = 9,

		//! Select the lexer for error list style files.
		SCLEX_ERRORLIST = 10,

		//! Select the Makefile lexer.
		SCLEX_MAKEFILE = 11,

		//! Select the Windows batch file lexer.
		SCLEX_BATCH = 12,

		//! Select the LaTex lexer.
		SCLEX_LATEX = 14,

		//! Select the Lua lexer.
		SCLEX_LUA = 15,

		//! Select the lexer for diff output.
		SCLEX_DIFF = 16,

		//! Select the lexer for Apache configuration files.
		SCLEX_CONF = 17,

		//! Select the Pascal lexer.
		SCLEX_PASCAL = 18,

		//! Select the Avenue lexer.
		SCLEX_AVE = 19,

		//! Select the Ada lexer.
		SCLEX_ADA = 20,

		//! Select the Lisp lexer.
		SCLEX_LISP = 21,

		//! Select the Ruby lexer.
		SCLEX_RUBY = 22,

		//! Select the Eiffel lexer.
		SCLEX_EIFFEL = 23,

		//! Select the Eiffel lexer folding at keywords.
		SCLEX_EIFFELKW = 24,

		//! Select the Tcl lexer.
		SCLEX_TCL = 25,

		//! Select the lexer for nnCron files.
		SCLEX_NNCRONTAB = 26,

		//! Select the Bullant lexer.
		SCLEX_BULLANT = 27,

		//! Select the VBScript lexer.
		SCLEX_VBSCRIPT = 28,

		//! Select the ASP lexer.
		SCLEX_ASP = SCLEX_HTML,

		//! Select the PHP lexer.
		SCLEX_PHP = SCLEX_HTML,

		//! Select the Baan lexer.
		SCLEX_BAAN = 31,

		//! Select the Matlab lexer.
		SCLEX_MATLAB = 32,

		//! Select the Scriptol lexer.
		SCLEX_SCRIPTOL = 33,

		//! Select the assembler lexer.
		SCLEX_ASM = 34,

		//! Select the C++ lexer with case insensitive keywords.
		SCLEX_CPPNOCASE = 35,

		//! Select the FORTRAN lexer.
		SCLEX_FORTRAN = 36,

		//! Select the FORTRAN77 lexer.
		SCLEX_F77 = 37,

		//! Select the CSS lexer.
		SCLEX_CSS = 38,

		//! Select the POV lexer.
		SCLEX_POV = 39,

		//! Select the Basser Lout typesetting language lexer.
		SCLEX_LOUT = 40,

		//! Select the EScript lexer.
		SCLEX_ESCRIPT = 41,

		//! Select the PostScript lexer.
		SCLEX_PS = 42,

		//! Select the NSIS lexer.
		SCLEX_NSIS = 43,

		//! Select the MMIX assembly language lexer.
		SCLEX_MMIXAL = 44,

		//! Select the Clarion lexer.
		SCLEX_CLW = 45,

		//! Select the Clarion lexer with case insensitive keywords.
		SCLEX_CLWNOCASE = 46,

		//! Select the MPT text log file lexer.
		SCLEX_LOT = 47,

		//! Select the YAML lexer.
		SCLEX_YAML = 48,

		//! Select the TeX lexer.
		SCLEX_TEX = 49,

		//! Select the Metapost lexer.
		SCLEX_METAPOST = 50,

		//! Select the PowerBASIC lexer.
		SCLEX_POWERBASIC = 51,

		//! Select the Forth lexer.
		SCLEX_FORTH = 52,

		//! Select the Erlang lexer.
		SCLEX_ERLANG = 53,

		//! Select the Octave lexer.
		SCLEX_OCTAVE = 54,

		//! Select the MS SQL lexer.
		SCLEX_MSSQL = 55,

		//! Select the Verilog lexer.
		SCLEX_VERILOG = 56,

		//! Select the KIX-Scripts lexer.
		SCLEX_KIX = 57,

		//! Select the Gui4Cli lexer.
		SCLEX_GUI4CLI = 58,

		//! Select the Specman E lexer.
		SCLEX_SPECMAN = 59,

		//! Select the AutoIt3 lexer.
		SCLEX_AU3 = 60,

		//! Select the APDL lexer.
		SCLEX_APDL = 61,

		//! Select the Bash lexer.
		SCLEX_BASH = 62,

		//! Select the ASN.1 lexer.
		SCLEX_ASN1 = 63,

		//! Select the VHDL lexer.
		SCLEX_VHDL = 64,

		//! Select the Caml lexer.
		SCLEX_CAML = 65,

		//! Select the BlitzBasic lexer.
		SCLEX_BLITZBASIC = 66,

		//! Select the PureBasic lexer.
		SCLEX_PUREBASIC = 67,

		//! Select the Haskell lexer.
		SCLEX_HASKELL = 68,

		//! Select the PHPScript lexer.
		SCLEX_PHPSCRIPT = 69,

		//! Select the TADS3 lexer.
		SCLEX_TADS3 = 70,

		//! Select the REBOL lexer.
		SCLEX_REBOL = 71,

		//! Select the Smalltalk lexer.
		SCLEX_SMALLTALK = 72,

		//! Select the FlagShip lexer.
		SCLEX_FLAGSHIP = 73,

		//! Select the Csound lexer.
		SCLEX_CSOUND = 74,

		//! Select the FreeBasic lexer.
		SCLEX_FREEBASIC = 75,

		//! Select the InnoSetup lexer.
		SCLEX_INNOSETUP = 76,

		//! Select the Opal lexer.
		SCLEX_OPAL = 77,

		//! Select the Spice lexer.
		SCLEX_SPICE = 78
	};

	//! Construct an empty QextScintillaBase with parent \a parent, name
	//! \a name, and widget flags \a f.
	QextScintillaBase(QWidget *parent = 0,const char *name = 0,
			  WFlags f = 0);

	//! Destroys the QextScintillaBase instance.
	virtual ~QextScintillaBase();

	//! Returns a pointer to a QextScintillaBase instance, or 0 if there
	//! isn't one.  This can be used by the higher level API to send
	//! messages that aren't associated with a particular instance.
	static QextScintillaBase *pool();

	//! Send the Scintilla message \a msg with the optional parameters \a
	//! wParam and \a lParam.
	long SendScintilla(unsigned int msg,unsigned long wParam = 0,
			   long lParam = 0);

	//! \overload
	long SendScintilla(unsigned int msg,unsigned long wParam,
			   const char *lParam)
	{
		return SendScintilla(msg,wParam,reinterpret_cast<long>(lParam));
	}

	//! \overload
	long SendScintilla(unsigned int msg,const char *lParam)
	{
		return SendScintilla(msg,0UL,reinterpret_cast<long>(lParam));
	}

	//! \overload
	long SendScintilla(unsigned int msg,const char *wParam,
			   const char *lParam)
	{
		return SendScintilla(msg,reinterpret_cast<unsigned long>(wParam),reinterpret_cast<long>(lParam));
	}

	//! \overload
	long SendScintilla(unsigned int msg, long wParam)
	{
		return SendScintilla(msg, static_cast<unsigned long>(wParam), 0L);
	}

	//! \overload
	long SendScintilla(unsigned int msg, int wParam)
	{
		return SendScintilla(msg, static_cast<unsigned long>(wParam), 0L);
	}

	//! \overload
	long SendScintilla(unsigned int msg,long cpMin,long cpMax,
			   char *lpstrText);

	//! \overload
	long SendScintilla(unsigned int msg,unsigned long wParam,
			   const QColor &col);

	//! \overload
	long SendScintilla(unsigned int msg,const QColor &col);

	//! \overload
	long SendScintilla(unsigned int msg,unsigned long wParam,QPainter *hdc,
			   const QRect &rc,long cpMin,long cpMax);

	//! \overload
	long SendScintilla(unsigned int msg,unsigned long wParam,
			   const QPixmap *lParam)
	{
		return SendScintilla(msg,wParam,reinterpret_cast<long>(lParam));
	}

	//! Returns the recommended size of the widget.
	virtual QSize sizeHint() const;

	//! Returns the viewport widget.  This is the widget that actually
	//! contains the text.
	QWidget *viewport() const;

signals:
	//! This signal is emitted when text is selected or de-selected.
	//! \a yes is TRUE if text has been selected and FALSE if text has been
	//! deselected.
	void QSCN_SELCHANGED(bool yes);

	//! This signal is emitted when the user selects an item in an
	//! auto-completion list.  It is emitted before the selection is
	//! inserted.  The insertion can be cancelled by sending an
	//! SCI_AUTOCANCEL message from a connected slot.
	//! \a position is the start position of the word being completed.
	//! \a selection is the text of the selection.
	void SCN_AUTOCSELECTION(const char *selection,int position);

	//! This signal is emitted when the document has changed for any
	//! reason.
	void SCEN_CHANGE();

	//! This signal ir emitted when the user clicks on a calltip.
	//! \a position is 1 if the user clicked on the up arrow, 2 if the user
	//! clicked on the down arrow, and 0 if the user clicked elsewhere.
	void SCN_CALLTIPCLICK(int direction);

	//! This signal is emitted whenever the user enters an ordinary
	//! character into the text. \a charadded is the character. It can be
	//! used to decide to display a call tip or an auto-completion list.
	void SCN_CHARADDED(int charadded);

	//!
	void SCN_DOUBLECLICK();

	//!
	void SCN_DWELLEND(int,int,int);

	//!
	void SCN_DWELLSTART(int,int,int);

	//! This signal is emitted when the user clicks on text in a style
	//! with the hotspot attribute set.
	//! \a position is the position in the text where the click occured.
	//! \a modifiers is the logical or of the modifier keys that were
	//! pressed when the user clicked.
	void SCN_HOTSPOTCLICK(int position,int modifiers);

	//! This signal is emitted when the user double clicks on text in a
	//! style with the hotspot attribute set.
	//! \a position is the position in the text where the double click
	//! occured.
	//! \a modifiers is the logical or of the modifier keys that were
	//! pressed when the user double clicked.
	void SCN_HOTSPOTDOUBLECLICK(int position,int modifiers);

	//! This signal is emitted when a recordable editor command has been
	//! executed.
	void SCN_MACRORECORD(unsigned int,unsigned long,long);

	//! This signal is emitted when the user clicks on a sensitive margin.
	//! \a position is the position of the start of the line against which
	//! the user clicked.
	//! \a modifiers is the logical or of the modifier keys that were
	//! pressed when the user clicked.
	//! \a margin is the number of the margin the user clicked in: 0, 1 or
	//! 2.
	//! 
	//! \sa SCI_GETMARGINSENSITIVEN, SCI_SETMARGINSENSITIVEN
	void SCN_MARGINCLICK(int position,int modifiers,int margin);

	//!
	void SCN_MODIFIED(int,int,const char *,int,int,int,int,int);

	//! This signal is emitted when the user attempts to modify read-only
	//! text.
	void SCN_MODIFYATTEMPTRO();

	//!
	void SCN_NEEDSHOWN(int,int);

	//! This signal is emitted when painting has been completed.  It is
	//! useful to trigger some other change but to have the paint be done
	//! first to appear more reponsive to the user.
	void SCN_PAINTED();

	//! This signal is emitted when the current state of the text no longer
	//! corresponds to the state of the text at the save point.
	//! 
	//! \sa SCI_SETSAVEPOINT, SCN_SAVEPOINTREACHED()
	void SCN_SAVEPOINTLEFT();

	//! This signal is emitted when the current state of the text
	//! corresponds to the state of the text at the save point. This allows
	//! feedback to be given to the user as to whether the text has been
	//! modified since it was last saved.
	//! 
	//! \sa SCI_SETSAVEPOINT, SCN_SAVEPOINTLEFT()
	void SCN_SAVEPOINTREACHED();

	//! This signal is emitted when a range of text needs to be syntax
	//! styled. The range is from the value returned by the
	//! SCI_GETENDSTYLED message and \a position.  It is only emitted if
	//! the currently selected lexer is SCNLEX_CONTAINER.
	//!
	//! \sa SCI_COLOURISE, SCI_GETENDSTYLED
	void SCN_STYLENEEDED(int position);

	//!
	void SCN_UPDATEUI();

	//!
	void SCN_USERLISTSELECTION(const char *,int);

	//!
	void SCN_ZOOM();

protected:
	//! Re-implemented to filter certain events.
	bool eventFilter(QObject *o,QEvent *e);

	//! Re-implemented to handle the key presses for the widget.
	virtual void keyPressEvent(QKeyEvent *ke);

	//! Re-implemented to tell Scintilla it has the focus.
	virtual void focusInEvent(QFocusEvent *);

	//! Re-implemented to tell Scintilla it has lost the focus.
	virtual void focusOutEvent(QFocusEvent *);

	//! Re-implemented to allow tabs to be entered as text.
	virtual bool focusNextPrevChild(bool);

	//! Start a drag operation.
	virtual void startDrag();

private slots:
	void handleTimer();
	void handleVSb(int value);
	void handleHSb(int value);
	void handlePopUp(int cmd);
	void handleSelection();

private:
	friend class ScintillaQt;

	void mousePress(QMouseEvent *me);
	void mouseRelease(QMouseEvent *me);
	void mouseDoubleClick(QMouseEvent *me);
	void mouseMove(QMouseEvent *me);
	void mouseWheel(QWheelEvent *we);
	void contextMenu(QContextMenuEvent *cme);

	ScintillaQt *sci;
	QPoint triple_click_at;
	QTimer triple_click;
	QScrollBar *vsb;
	QScrollBar *hsb;
	QWidget *txtarea;

#if defined(Q_DISABLE_COPY)
	QextScintillaBase(const QextScintillaBase &);
	QextScintillaBase &operator=(const QextScintillaBase &);
#endif
};

#endif
