forked from ahmidou/SpliceMaya
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFabricSpliceKLSourceCodeWidget.h
93 lines (81 loc) · 2.73 KB
/
FabricSpliceKLSourceCodeWidget.h
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
#ifndef _CREATIONSPLICEKLSOURCECODEWIDGET_H_
#define _CREATIONSPLICEKLSOURCECODEWIDGET_H_
#include <QtGui/QWidget>
#include <QtGui/QPlainTextEdit>
#include <QtGui/QKeyEvent>
#include <QtGui/QPaintEvent>
#include <QtGui/QFont>
#include <QtGui/QFontMetrics>
#include <QtGui/QMenu>
#include "FabricSpliceKLSyntaxHighlighter.h"
#include <FabricSplice.h>
class FabricSpliceKLLineNumberWidget : public QWidget {
public:
FabricSpliceKLLineNumberWidget(QFont font, QWidget * parent);
~FabricSpliceKLLineNumberWidget();
void paintEvent ( QPaintEvent * event );
void setLineOffset(int lineOffset) { mLineOffset = lineOffset; update(); }
private:
QFont mFont;
QFontMetrics * mFontMetrics;
int mLineOffset;
};
class FabricSpliceCodeCompletionMenu : public QMenu {
public:
FabricSpliceCodeCompletionMenu(QFont font, QWidget * parent = NULL);
~FabricSpliceCodeCompletionMenu() {}
void addItem(const std::string & name, const std::string & desc, const std::string & comments);
void setPrefix(const std::string & seq) { mPrefix = seq; setPressedKeySequence(seq); }
void setPressedKeySequence(const std::string & seq) { mPressedKeySequence = seq; }
void clearItems();
void show(QPoint pos);
void update() { if(mShown)show(mPos); }
void hide();
bool shown() { return mShown; }
void keyPressEvent(QKeyEvent *e);
std::string completionSuffix();
private:
struct Item{
QAction * action;
std::string name;
std::string desc;
std::string comments;
};
QFont mFont;
bool mShown;
QPoint mPos;
std::vector<Item> mItems;
std::string mPrefix;
std::string mPressedKeySequence;
};
class FabricSpliceKLPlainTextWidget : public QPlainTextEdit {
public:
FabricSpliceKLPlainTextWidget(QFont font, FabricSpliceKLLineNumberWidget * lineNumbers, QWidget * parent);
~FabricSpliceKLPlainTextWidget();
bool event(QEvent * e);
void keyPressEvent(QKeyEvent *e);
void paintEvent ( QPaintEvent * event );
std::string getStdText();
void setStdText(const std::string & code);
private:
FabricSpliceKLLineNumberWidget * mLineNumbers;
FabricSpliceKLSyntaxHighlighter * mHighlighter;
FabricSpliceCodeCompletionMenu * mCodeCompletionMenu;
int mLastScrollOffset;
};
class FabricSpliceKLSourceCodeWidget : public QWidget {
friend class FabricSpliceKLPlainTextWidget;
public:
FabricSpliceKLSourceCodeWidget(QWidget * parent, int fontSize = 12);
std::string getSourceCode();
void setSourceCode(const std::string & opName, const std::string & code);
void setEnabled(bool enabled);
FabricSplice::KLParser getKLParser() { return mParser; }
void updateKLParser();
private:
FabricSpliceKLLineNumberWidget * mLineNumbers;
FabricSpliceKLPlainTextWidget * mTextEdit;
std::string mOperator;
FabricSplice::KLParser mParser;
};
#endif