Files
qad/qad_widgets/qcodeedit.h

118 lines
3.6 KiB
C++

#ifndef QCODEEDIT_H
#define QCODEEDIT_H
#include <QDebug>
#include <QPlainTextEdit>
#include <QTreeWidget>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
class QCodeEdit: public QWidget
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
Q_PROPERTY(bool showSpaces READ showSpaces WRITE setShowSpaces)
Q_PROPERTY(bool showLineNumbers READ showLineNumbers WRITE setShowLineNumbers)
public:
QCodeEdit(QWidget * parent = 0);
~QCodeEdit();
enum ACClassType {
Keyword,
Function,
Namespace
};
QTextCursor textCursor() const {return textCode->textCursor();}
QTextDocument * document() const {return textCode->document();}
void setTextCursor(const QTextCursor & c) {textCode->setTextCursor(c);}
void centerCursor() {textCode->centerCursor(); updateLines();}
void insertText(const QString & text) {textCode->insertPlainText(text); updateLines();}
void appendText(const QString & text) {textCode->appendPlainText(text); updateLines();}
void setCustomExtraSelection(const QList<QTextEdit::ExtraSelection> & es) {es_custom = es; applyExtraSelection();}
QRect cursorRect() const {return textCode->cursorRect();}
QRect cursorRect(const QTextCursor & cursor) const {return textCode->cursorRect(cursor);}
QString text() const {return textCode->toPlainText();}
bool showSpaces() const {return spaces_;}
bool showLineNumbers() const {return textLines->isVisible();}
QPlainTextEdit * textEdit() const {return textCode;}
void registerAutoCompletitionClass(int id, ACClassType ac_class, const QString & name, const QIcon & icon = QIcon()) {ac_classes[id] = ACClass(id, ac_class, name, icon);}
protected:
typedef QPair<QString, QString> StringsPair;
typedef QPair<int, QList<StringsPair> > ACPair;
typedef QList<ACPair> ACList;
virtual ACList autoCompletitionList(const QStringList & scope, const QString & written) const {return ACList();}
virtual void parse() {}
ACList wordsCompletitionList(const QString & written) const;
static int skipRange(const QString & s, int pos, QChar oc, QChar cc, QChar sc = QChar());
static int skipCWord(const QString & s, int pos);
static bool matchWritten(QString s, QString w);
static QChar pairChar(QChar c);
private:
struct ACClass {
ACClass(int i = -2, ACClassType c = QCodeEdit::Keyword, const QString & n = QString(), const QIcon & ic = QIcon()): id(i), class_(c), name(n), icon(ic) {}
int id;
ACClassType class_;
QString name;
QIcon icon;
};
QPlainTextEdit * textCode, * textLines;
QTreeWidget completer;
QTextEdit::ExtraSelection es_line;
QList<QTextEdit::ExtraSelection> es_selected, es_custom;
QMap<int, ACClass> ac_classes;
int prev_lc, auto_comp_pl, timer;
bool spaces_, _ignore_focus_out, _first;
bool eventFilter(QObject * o, QEvent * e);
void showEvent(QShowEvent * );
void timerEvent(QTimerEvent * );
void applyExtraSelection();
void nextCompletition();
void previousCompletition();
private slots:
void deleteLine();
void copyLineUp();
void copyLineDown();
void moveLineUp();
void moveLineDown();
void indent();
void deindent();
void autoIndent();
void updateLines();
void invokeAutoCompletition(bool force = false);
void commitCompletition();
void textEdit_cursorPositionChanged();
void textEdit_textChanged();
void textEdit_selectionChanged();
public slots:
void setFocus() {textCode->setFocus();}
void setText(const QString & t) {textCode->setPlainText(t);}
void setShowSpaces(bool yes);
void setShowLineNumbers(bool yes) {textLines->setVisible(yes);}
signals:
void textChanged();
void parseRequest();
};
//Q_DECLARE_OPERATORS_FOR_FLAGS(QPIConsole::Formats)
QT_END_NAMESPACE
QT_END_HEADER
#endif // QCODEEDIT_H