MuseScore/mscore/qmledit.h

126 lines
3.7 KiB
C
Raw Normal View History

2012-07-02 19:15:37 +02:00
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2002-2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#ifndef __QML_EDIT_H__
#define __QML_EDIT_H__
2012-07-06 14:21:05 +02:00
#include "globals.h"
2013-05-13 18:49:17 +02:00
namespace Ms {
class JSHighlighter;
2012-07-02 19:15:37 +02:00
//---------------------------------------------------------
// QmlEdit
//---------------------------------------------------------
class QmlEdit : public QPlainTextEdit {
Q_OBJECT
QWidget* lineNumberArea;
JSHighlighter* hl;
2012-07-06 14:21:05 +02:00
ScoreState mscoreState;
2012-07-18 14:54:44 +02:00
QString pickBuffer;
2012-07-06 14:21:05 +02:00
virtual void focusInEvent(QFocusEvent*);
virtual void focusOutEvent(QFocusEvent*);
2012-07-18 14:54:44 +02:00
void move(QTextCursor::MoveOperation);
virtual void keyPressEvent(QKeyEvent*);
void tab();
void autoIndent();
2012-07-02 19:15:37 +02:00
private slots:
void updateLineNumberAreaWidth(int);
void highlightCurrentLine();
void updateLineNumberArea(const QRect&, int);
2012-07-06 14:21:05 +02:00
void startOfLine() { move(QTextCursor::StartOfLine); }
void endOfLine() { move(QTextCursor::EndOfLine); }
void upLine() { move(QTextCursor::Up); }
2012-07-18 14:54:44 +02:00
void downLine();
2012-07-06 14:21:05 +02:00
void right() { move(QTextCursor::Right); }
2012-07-18 14:54:44 +02:00
void left() { move(QTextCursor::Left); }
2012-07-06 14:21:05 +02:00
void rightWord() { move(QTextCursor::NextWord); }
2012-07-18 14:54:44 +02:00
void start() { move(QTextCursor::Start); }
void end() { move(QTextCursor::End); }
void leftWord();
void pick();
void put();
void delLine();
void delWord();
2012-07-02 19:15:37 +02:00
protected:
void resizeEvent(QResizeEvent*);
public:
QmlEdit(QWidget* parent = 0);
~QmlEdit();
2012-07-02 19:15:37 +02:00
void lineNumberAreaPaintEvent(QPaintEvent*);
int lineNumberAreaWidth();
enum ColorComponent { Normal, Comment, Number, String, Operator, Identifier,
Keyword, BuiltIn, Marker };
2012-07-02 19:15:37 +02:00
};
//---------------------------------------------------------
// LineNumberArea
//---------------------------------------------------------
class LineNumberArea : public QWidget {
Q_OBJECT
QmlEdit* editor;
QSize sizeHint() const {
return QSize(editor->lineNumberAreaWidth(), 0);
}
void paintEvent(QPaintEvent* event) {
editor->lineNumberAreaPaintEvent(event);
}
public:
LineNumberArea(QmlEdit* parent) : QWidget(parent) { editor = parent; }
};
//---------------------------------------------------------
// JSBlockData
//---------------------------------------------------------
class JSBlockData : public QTextBlockUserData {
public:
QList<int> bracketPositions;
};
//---------------------------------------------------------
// JSHighlighter
//---------------------------------------------------------
class JSHighlighter : public QSyntaxHighlighter {
2012-07-05 14:31:03 +02:00
QSet<QString> m_keywords;
QSet<QString> m_knownIds;
QHash<QmlEdit::ColorComponent, QColor> m_colors;
QString m_markString;
Qt::CaseSensitivity m_markCaseSensitivity;
protected:
void highlightBlock(const QString &text);
public:
JSHighlighter(QTextDocument *parent = 0);
void setColor(QmlEdit::ColorComponent component, const QColor &color);
void mark(const QString &str, Qt::CaseSensitivity caseSensitivity);
QStringList keywords() const;
void setKeywords(const QStringList &keywords);
};
2013-05-13 18:49:17 +02:00
} // namespace Ms
2012-07-02 19:15:37 +02:00
#endif