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;
|
||||
}
|
||||
|
||||
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
|
||||
ScriptDocument* doc = findScriptWindow(script);
|
||||
if (doc != nullptr) {
|
||||
ui->mdiArea->setActiveSubWindow(doc);
|
||||
doc->setFocus();
|
||||
if (line > -1) doc->moveCursor(line);
|
||||
return;
|
||||
}
|
||||
|
||||
doc = new ScriptDocument(script);
|
||||
doc->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
if (line > -1) doc->moveCursor(line);
|
||||
ui->mdiArea->addSubWindow(doc);
|
||||
ui->mdiArea->setActiveSubWindow(doc);
|
||||
doc->showMaximized();
|
||||
doc->setFocus();
|
||||
}
|
||||
|
||||
void MainWindow::closeScriptDocument(std::shared_ptr<Script> script) {
|
||||
|
|
|
@ -58,7 +58,7 @@ public:
|
|||
GridSnappingMode snappingMode;
|
||||
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 openFile(std::string path);
|
||||
|
|
|
@ -60,7 +60,7 @@ void OutputTextView::handleLog(Logger::LogLevel logLevel, std::string message, L
|
|||
stackTraceScripts[id] = source.script;
|
||||
|
||||
format.setAnchor(true);
|
||||
format.setAnchorHref(QString::number(id));
|
||||
format.setAnchorHref(QString::number(id) + ":" + QString::number(source.line));
|
||||
}
|
||||
|
||||
cursor.insertText(message.c_str(), format);
|
||||
|
@ -72,11 +72,13 @@ void OutputTextView::mousePressEvent(QMouseEvent *e) {
|
|||
QString anchor = anchorAt(e->pos());
|
||||
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);
|
||||
|
||||
MainWindow* mainWnd = dynamic_cast<MainWindow*>(window());
|
||||
mainWnd->openScriptDocument(script.lock());
|
||||
mainWnd->openScriptDocument(script.lock(), line);
|
||||
}
|
||||
|
||||
void OutputTextView::mouseReleaseEvent(QMouseEvent *e) {
|
||||
|
|
|
@ -179,6 +179,13 @@ ScriptDocument::ScriptDocument(std::shared_ptr<Script> script, QWidget* parent):
|
|||
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* apis = new QsciAPIs(lexer);
|
||||
|
||||
|
|
|
@ -17,4 +17,5 @@ public:
|
|||
~ScriptDocument() override;
|
||||
|
||||
inline std::shared_ptr<Script> getScript() { return script; }
|
||||
void moveCursor(int line);
|
||||
};
|
Loading…
Add table
Reference in a new issue