// This is the SIP interface definition for QextScintilla.
//
// Copyright (c) 2007
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of PyQt.
// 
// This copy of PyQt 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.
// 
// PyQt 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
// PyQt; see the file LICENSE.  If not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


// The documentation is in the main documentation file because SIP isn't clever
// enough to handle the resulting %Timeline complexity.


class QextScintilla : QextScintillaBase
{
%TypeHeaderCode
#include <qextscintilla.h>
%End

public:
	enum {
		AiMaintain,
		AiOpening,
		AiClosing
	};

	enum AutoCompletionSource {
		AcsDocument,
		AcsAPIs,
%If (QScintilla_1_7 -)
		AcsAll,
%End
	};

	enum BraceMatch {
		NoBraceMatch,
		StrictBraceMatch,
		SloppyBraceMatch
	};

%If (QScintilla_1_4 -)
	enum EdgeMode {
		EdgeNone,
		EdgeLine,
		EdgeBackground
	};
%End

	enum EolMode {
		EolWindows,
		EolUnix,
		EolMac
	};

	enum FoldStyle {
		NoFoldStyle,
		PlainFoldStyle,
		CircledFoldStyle,
		BoxedFoldStyle,
		CircledTreeFoldStyle,
		BoxedTreeFoldStyle
	};

	enum MarkerSymbol {
		Circle,
		Rectangle,
		RightTriangle,
		SmallRectangle,
		RightArrow,
		Invisible,
		DownTriangle,
		Minus,
		Plus,
		VerticalLine,
		BottomLeftCorner,
		LeftSideSplitter,
		BoxedPlus,
		BoxedPlusConnected,
		BoxedMinus,
		BoxedMinusConnected,
		RoundedBottomLeftCorner,
		LeftSideRoundedSplitter,
		CircledPlus,
		CircledPlusConnected,
		CircledMinus,
		CircledMinusConnected,
		Background,
		ThreeDots,
		ThreeRightArrows
	};

	enum WhitespaceVisibility {
		WsInvisible,
		WsVisible,
		WsVisibleAfterIndent
	};

	enum WrapMode {
		WrapNone,
		WrapWord,
%If (QScintilla_1_7 -)
		WrapCharacter,
%End
	};

%If (QScintilla_1_7 -)
	enum WrapVisualFlag {
		WrapFlagNone,
		WrapFlagByText,
		WrapFlagByBorder,
	};
%End

	QextScintilla(QWidget * /TransferThis/ = 0,const char * = 0,
		      WFlags = 0);

	bool autoCompletionCaseSensitivity();
%If (QScintilla_1_7 -)
	bool autoCompletionFillupsEnabled();
%End
	bool autoCompletionReplaceWord();
	bool autoCompletionShowSingle();
	AutoCompletionSource autoCompletionSource() const;
	int autoCompletionThreshold() const;
	bool autoIndent() const;
	bool backspaceUnindents();
	void beginUndoAction();
	BraceMatch braceMatching() const;
	int callTipsVisible() const;
%If (QScintilla_1_7 -)
	void cancelList();
%End
	void clearRegisteredImages();
	void convertEols(EolMode);
%If (QScintilla_1_3 -)
	QextScintillaDocument document();
%End
	void endUndoAction();

%If (QScintilla_1_4 -)
	QColor edgeColor();
	int edgeColumn();
	EdgeMode edgeMode();
%End

	EolMode eolMode();
	bool eolVisibility();

%If (QScintilla_1_7 -)
	QColor color() const;
	QColor paper() const;
%End

%If (QScintilla_1_6 -)
	virtual bool findFirst(const QString &,bool,bool,bool,bool,bool = 1,
			       int = -1,int = -1,bool = 1);
%End
%If (- QScintilla_1_6)
	virtual bool findFirst(const QString &,bool,bool,bool,bool,bool = 1,
			       int = -1,int = -1);
%End
	virtual bool findNext();

%If (QScintilla_1_7 -)
	int firstVisibleLine();
%End

	FoldStyle folding() const;

	void getCursorPosition(int *,int *);
	void getSelection(int *,int *,int *,int *);
	bool hasSelectedText();

	int indentation(int);
	bool indentationGuides();
	bool indentationsUseTabs();
	int indentationWidth();

%If (QScintilla_1_7 -)
	bool isCallTipActive();
	bool isListActive();
%End
	bool isModified();
	bool isReadOnly();
	bool isRedoAvailable();
	bool isUndoAvailable();
	bool isUtf8();
	int lineAt(const QPoint &);
	int lineLength(int);
	int lines();
	int length();
%If (QScintilla_1_7 -)
	QextScintillaLexer *lexer() const;
%End

	bool marginLineNumbers(int);
	int marginMarkerMask(int);
	bool marginSensitivity(int);
	int marginWidth(int);

	int markerDefine(MarkerSymbol,int = -1);
	int markerDefine(char,int = -1);
	int markerDefine(const QPixmap *,int = -1);
	int markerAdd(int,int);
	unsigned markersAtLine(int);
	void markerDelete(int,int = -1);
	void markerDeleteAll(int = -1);
	void markerDeleteHandle(int);
	int markerLine(int);
	int markerFindNext(int,unsigned);
	int markerFindPrevious(int,unsigned);
%If (QScintilla_1_3 -)
	virtual void recolor(int = 0,int = -1);
%End
	void registerImage(int,const QPixmap *);
	virtual void replace(const QString &);
	void resetFoldMarginColors();
	void setFoldMarginColors(const QColor &,const QColor &);

	void setAutoCompletionAPIs(QextScintillaAPIs * = 0);
	void setAutoCompletionFillups(const char *);
%If (QScintilla_1_7 -)
	void setAutoCompletionFillupsEnabled(bool);
	void setAutoCompletionStartCharacters(const char *);
%End

	void setCallTipsAPIs(QextScintillaAPIs * = 0);
	void setCallTipsBackgroundColor(const QColor &);
	void setCallTipsForegroundColor(const QColor &);
	void setCallTipsHighlightColor(const QColor &);
	void setCallTipsVisible(int);

%If (QScintilla_1_3 -)
	void setDocument(const QextScintillaDocument &);
%End

%If (QScintilla_1_4 -)
	void setEdgeColor(const QColor &);
	void setEdgeColumn(int);
	void setEdgeMode(EdgeMode);
%End

%If (QScintilla_1_7 -)
	virtual void setFont(const QFont &);
%End

	void setMarkerBackgroundColor(const QColor &,int = -1);
	void setMarkerForegroundColor(const QColor &,int = -1);

	void setMatchedBraceBackgroundColor(const QColor &);
	void setMatchedBraceForegroundColor(const QColor &);
	void setUnmatchedBraceBackgroundColor(const QColor &);
	void setUnmatchedBraceForegroundColor(const QColor &);

%If (QScintilla_1_7 -)
	void setWrapVisualFlags(WrapVisualFlag,
		WrapVisualFlag = QextScintilla::WrapFlagNone, int = 0);
%End

	QString selectedText();
%If (QScintilla_1_7 -)
	void showUserList(int, const QStringList &);
%End
	QextScintillaCommandSet *standardCommands() const;
	bool tabIndents();
	int tabWidth();
	QString text();
	QString text(int);
%If (QScintilla_1_7 -)
	int textHeight(int);
%End
	WhitespaceVisibility whitespaceVisibility();
%If (QScintilla_1_4 -)
	WrapMode wrapMode();
%End

public slots:
	virtual void append(const QString &);
%If (QScintilla_1_7 -)
	virtual void autoCompleteFromAll();
%End
	virtual void autoCompleteFromAPIs();
	virtual void autoCompleteFromDocument();
	virtual void callTip();
	virtual void clear();
	virtual void copy();
	virtual void cut();

	virtual void ensureCursorVisible();
	virtual void ensureLineVisible(int);
%If (QScintilla_1_7 -)
	virtual void foldAll(bool = 0);
%End
%If (- QScintilla_1_7)
	virtual void foldAll();
%End
	virtual void foldLine(int);
	virtual void indent(int);
%If (QScintilla_1_4 -)
	virtual void insert(const QString &);
%End
	virtual void insertAt(const QString &,int,int);
	virtual void moveToMatchingBrace();
	virtual void paste();
	virtual void redo();
	virtual void removeSelectedText();
%If (QScintilla_1_4 -)
	virtual void resetSelectionBackgroundColor();
	virtual void resetSelectionForegroundColor();
%End
	virtual void selectAll(bool = 1);
	virtual void selectToMatchingBrace();

	virtual void setAutoCompletionCaseSensitivity(bool);
	virtual void setAutoCompletionReplaceWord(bool);
	virtual void setAutoCompletionShowSingle(bool);
	virtual void setAutoCompletionSource(AutoCompletionSource);
	virtual void setAutoCompletionThreshold(int);
	virtual void setAutoIndent(bool);
	virtual void setBraceMatching(BraceMatch);
	virtual void setBackspaceUnindents(bool);
%If (QScintilla_1_3 -)
	virtual void setCaretForegroundColor(const QColor &);
	virtual void setCaretLineBackgroundColor(const QColor &);
	virtual void setCaretLineVisible(bool);
	virtual void setCaretWidth(int);
%End
%If (QScintilla_1_7 -)
	virtual void setColor(const QColor &);
%End
	virtual void setCursorPosition(int,int);
	virtual void setEolMode(EolMode);
	virtual void setEolVisibility(bool);
	virtual void setFolding(FoldStyle);

	virtual void setIndentation(int,int);
	virtual void setIndentationGuides(bool);
	virtual void setIndentationGuidesBackgroundColor(const QColor &);
	virtual void setIndentationGuidesForegroundColor(const QColor &);
	virtual void setIndentationsUseTabs(bool);
	virtual void setIndentationWidth(int);

	virtual void setLexer(QextScintillaLexer * = 0);

	virtual void setMarginsBackgroundColor(const QColor &);
	virtual void setMarginsFont(const QFont &);
	virtual void setMarginsForegroundColor(const QColor &);

	virtual void setMarginLineNumbers(int,bool);
	virtual void setMarginMarkerMask(int,int);
	virtual void setMarginSensitivity(int,bool);
	virtual void setMarginWidth(int,int);
	virtual void setMarginWidth(int,const QString &);

	virtual void setModified(bool);
%If (QScintilla_1_7 -)
	virtual void setPaper(const QColor &);
%End
	virtual void setReadOnly(bool);
	virtual void setSelection(int,int,int,int);
%If (QScintilla_1_3 -)
	virtual void setSelectionBackgroundColor(const QColor &);
	virtual void setSelectionForegroundColor(const QColor &);
%End
	virtual void setTabIndents(bool);
	virtual void setTabWidth(int);
	virtual void setText(const QString &);
	virtual void setUtf8(bool);
	virtual void setWhitespaceVisibility(WhitespaceVisibility);
%If (QScintilla_1_4 -)
	virtual void setWrapMode(WrapMode);
%End

	virtual void undo();
	virtual void unindent(int);

	virtual void zoomIn(int);
	virtual void zoomIn();
	virtual void zoomOut(int);
	virtual void zoomOut();
	virtual void zoomTo(int);

signals:
	void cursorPositionChanged(int,int);
	void copyAvailable(bool);
	void marginClicked(int,int,Qt::ButtonState);
	void modificationAttempted();
	void modificationChanged(bool);
	void selectionChanged();
	void textChanged();
%If (QScintilla_1_7 -)
	void userListActivated(int, const QString &);
%End

private:
	QextScintilla(const QextScintilla &);

};
