feat(editor): click on stack trace to go to line in script
This commit is contained in:
parent
fcf4343509
commit
41c5b74527
5 changed files with 19 additions and 5 deletions
|
@ -610,19 +610,23 @@ ScriptDocument* MainWindow::findScriptWindow(std::shared_ptr<Script> script) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::openScriptDocument(std::shared_ptr<Script> script) {
|
void MainWindow::openScriptDocument(std::shared_ptr<Script> script, int line) {
|
||||||
// Document already exists, don't open it
|
// Document already exists, don't open it
|
||||||
ScriptDocument* doc = findScriptWindow(script);
|
ScriptDocument* doc = findScriptWindow(script);
|
||||||
if (doc != nullptr) {
|
if (doc != nullptr) {
|
||||||
ui->mdiArea->setActiveSubWindow(doc);
|
ui->mdiArea->setActiveSubWindow(doc);
|
||||||
|
doc->setFocus();
|
||||||
|
if (line > -1) doc->moveCursor(line);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
doc = new ScriptDocument(script);
|
doc = new ScriptDocument(script);
|
||||||
doc->setAttribute(Qt::WA_DeleteOnClose, true);
|
doc->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
|
if (line > -1) doc->moveCursor(line);
|
||||||
ui->mdiArea->addSubWindow(doc);
|
ui->mdiArea->addSubWindow(doc);
|
||||||
ui->mdiArea->setActiveSubWindow(doc);
|
ui->mdiArea->setActiveSubWindow(doc);
|
||||||
doc->showMaximized();
|
doc->showMaximized();
|
||||||
|
doc->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::closeScriptDocument(std::shared_ptr<Script> script) {
|
void MainWindow::closeScriptDocument(std::shared_ptr<Script> script) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ public:
|
||||||
GridSnappingMode snappingMode;
|
GridSnappingMode snappingMode;
|
||||||
bool editSoundEffects = true;
|
bool editSoundEffects = true;
|
||||||
|
|
||||||
void openScriptDocument(std::shared_ptr<Script>);
|
void openScriptDocument(std::shared_ptr<Script>, int line = -1);
|
||||||
void closeScriptDocument(std::shared_ptr<Script>);
|
void closeScriptDocument(std::shared_ptr<Script>);
|
||||||
|
|
||||||
void openFile(std::string path);
|
void openFile(std::string path);
|
||||||
|
|
|
@ -60,7 +60,7 @@ void OutputTextView::handleLog(Logger::LogLevel logLevel, std::string message, L
|
||||||
stackTraceScripts[id] = source.script;
|
stackTraceScripts[id] = source.script;
|
||||||
|
|
||||||
format.setAnchor(true);
|
format.setAnchor(true);
|
||||||
format.setAnchorHref(QString::number(id));
|
format.setAnchorHref(QString::number(id) + ":" + QString::number(source.line));
|
||||||
}
|
}
|
||||||
|
|
||||||
cursor.insertText(message.c_str(), format);
|
cursor.insertText(message.c_str(), format);
|
||||||
|
@ -72,11 +72,13 @@ void OutputTextView::mousePressEvent(QMouseEvent *e) {
|
||||||
QString anchor = anchorAt(e->pos());
|
QString anchor = anchorAt(e->pos());
|
||||||
if (anchor == "" || e->modifiers() & Qt::AltModifier) return QTextEdit::mousePressEvent(e);
|
if (anchor == "" || e->modifiers() & Qt::AltModifier) return QTextEdit::mousePressEvent(e);
|
||||||
|
|
||||||
auto script = stackTraceScripts[anchor.toInt()];
|
int idx = anchor.indexOf(":");
|
||||||
|
int id = anchor.mid(0, idx).toInt(), line = anchor.mid(idx+1).toInt();
|
||||||
|
auto script = stackTraceScripts[id];
|
||||||
if (script.expired()) return QTextEdit::mousePressEvent(e);
|
if (script.expired()) return QTextEdit::mousePressEvent(e);
|
||||||
|
|
||||||
MainWindow* mainWnd = dynamic_cast<MainWindow*>(window());
|
MainWindow* mainWnd = dynamic_cast<MainWindow*>(window());
|
||||||
mainWnd->openScriptDocument(script.lock());
|
mainWnd->openScriptDocument(script.lock(), line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutputTextView::mouseReleaseEvent(QMouseEvent *e) {
|
void OutputTextView::mouseReleaseEvent(QMouseEvent *e) {
|
||||||
|
|
|
@ -179,6 +179,13 @@ ScriptDocument::ScriptDocument(std::shared_ptr<Script> script, QWidget* parent):
|
||||||
ScriptDocument::~ScriptDocument() {
|
ScriptDocument::~ScriptDocument() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptDocument::moveCursor(int line) {
|
||||||
|
if (line == -1) return;
|
||||||
|
|
||||||
|
int lineLength = scintilla->lineLength(line-1);
|
||||||
|
scintilla->setCursorPosition(line-1, lineLength-1);
|
||||||
|
}
|
||||||
|
|
||||||
QsciAPIs* makeApis(QsciLexer* lexer) {
|
QsciAPIs* makeApis(QsciLexer* lexer) {
|
||||||
QsciAPIs* apis = new QsciAPIs(lexer);
|
QsciAPIs* apis = new QsciAPIs(lexer);
|
||||||
|
|
||||||
|
|
|
@ -17,4 +17,5 @@ public:
|
||||||
~ScriptDocument() override;
|
~ScriptDocument() override;
|
||||||
|
|
||||||
inline std::shared_ptr<Script> getScript() { return script; }
|
inline std::shared_ptr<Script> getScript() { return script; }
|
||||||
|
void moveCursor(int line);
|
||||||
};
|
};
|
Loading…
Add table
Reference in a new issue