QGCMAVLinkTextEdit.h 2.15 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

// Based on: Syntax highlighting from:
// http://code.google.com/p/fop-miniscribus/
// (GPL v2) thanks!

#ifndef QGCMAVLINKTEXTEDIT_H
#define QGCMAVLINKTEXTEDIT_H

#include <QSyntaxHighlighter>
#include <QTextCharFormat>
#include <QColor>
#include <QDomDocument>
#include <QTextEdit>

//class QGCMAVLinkTextEdit : public QTextEdit
//{
//public:
//    QGCMAVLinkTextEdit();
//};

class XmlHighlighter : public QSyntaxHighlighter
{
public:
    XmlHighlighter(QObject* parent);
    XmlHighlighter(QTextDocument* parent);
    XmlHighlighter(QTextEdit* parent);
    ~XmlHighlighter();

    enum HighlightType
    {
        SyntaxChar,
        ElementName,
        Comment,
        AttributeName,
        AttributeValue,
        Error,
        Other
    };

    void setHighlightColor(HighlightType type, QColor color, bool foreground = true);
    void setHighlightFormat(HighlightType type, QTextCharFormat format);

protected:
    void highlightBlock(const QString& rstrText);
    int  processDefaultText(int i, const QString& rstrText);

private:
    void init();

    QTextCharFormat fmtSyntaxChar;
    QTextCharFormat fmtElementName;
    QTextCharFormat fmtComment;
    QTextCharFormat fmtAttributeName;
    QTextCharFormat fmtAttributeValue;
    QTextCharFormat fmtError;
    QTextCharFormat fmtOther;

    enum ParsingState
    {
        NoState = 0,
        ExpectElementNameOrSlash,
        ExpectElementName,
        ExpectAttributeOrEndOfElement,
        ExpectEqual,
        ExpectAttributeValue
    };

    enum BlockState
    {
        NoBlock = -1,
        InComment,
        InElement
    };

    ParsingState state;
};





class QGCMAVLinkTextEdit : public QTextEdit
{
    Q_OBJECT
    //
public:
    QGCMAVLinkTextEdit( QWidget * parent = 0 );
    bool Conform();
    QDomDocument xml_document();
    inline QString text() const
    {
        return QTextEdit::toPlainText();
    }
    QMenu *createOwnStandardContextMenu();
protected:
    void contextMenuEvent ( QContextMenuEvent * e );
    bool event( QEvent *event );
private:
    XmlHighlighter *highlight;
signals:
public slots:
    bool syntaxcheck();
    void setPlainText( const QString txt );
};

#endif // QGCMAVLINKTEXTEDIT_H