From b619eaefe65076872d189ebf62fe13de7f3494bb Mon Sep 17 00:00:00 2001 From: Anthony Rabine Date: Thu, 25 May 2023 16:55:11 +0200 Subject: [PATCH] Working pack! fix VM, new icons... --- software/chip32/chip32_vm.c | 20 +-- software/chip32/chip32_vm.h | 2 +- story-editor/assets/check-mark.png | Bin 0 -> 23826 bytes story-editor/assets/home.png | Bin 0 -> 29421 bytes story-editor/assets/left.png | Bin 0 -> 7181 bytes story-editor/assets/pause-button.png | Bin 0 -> 43707 bytes story-editor/assets/right.png | Bin 0 -> 7218 bytes story-editor/nodeeditor | 2 +- story-editor/scripts/media.asm | 11 +- story-editor/src/code_editor.cpp | 56 ++++++- story-editor/src/code_editor.h | 20 ++- story-editor/src/main_window.cpp | 210 +++++++++++++++--------- story-editor/src/main_window.h | 8 +- story-editor/src/media_node_model.cpp | 40 ++++- story-editor/src/media_node_model.h | 9 +- story-editor/src/ost-editor.qrc | 5 + story-editor/src/ost-hmi.ui | 197 +++++++++++++++------- story-editor/src/osthmi_dock.cpp | 2 + story-editor/src/osthmi_dock.h | 2 + story-editor/src/script_editor_dock.cpp | 7 + story-editor/src/script_editor_dock.h | 5 + story-editor/src/story_graph_model.cpp | 3 +- 22 files changed, 424 insertions(+), 175 deletions(-) create mode 100644 story-editor/assets/check-mark.png create mode 100644 story-editor/assets/home.png create mode 100644 story-editor/assets/left.png create mode 100644 story-editor/assets/pause-button.png create mode 100644 story-editor/assets/right.png diff --git a/software/chip32/chip32_vm.c b/software/chip32/chip32_vm.c index ef2aabc..4d08d68 100644 --- a/software/chip32/chip32_vm.c +++ b/software/chip32/chip32_vm.c @@ -193,22 +193,22 @@ chip32_result_t chip32_step(chip32_ctx_t *ctx) const uint8_t reg = _NEXT_BYTE; _CHECK_REGISTER_VALID(reg) ctx->registers[PC] = ctx->registers[reg] - 1; - // save all temporary registers on stack - ctx->registers[SP] -= 4*10; // reserve memory - // fill memory - for (int i = 0; i < 10; i++) { - leu32_put(&ctx->ram.mem[ctx->registers[SP] + i*4], ctx->registers[T0 + i]); - } +// // save all temporary registers on stack +// ctx->registers[SP] -= 4*10; // reserve memory +// // fill memory +// for (int i = 0; i < 10; i++) { +// leu32_put(&ctx->ram.mem[ctx->registers[SP] + i*4], ctx->registers[T0 + i]); +// } break; } case OP_RET: { ctx->registers[PC] = ctx->registers[RA] - 1; // restore all temporary registers on stack - for (int i = 0; i < 10; i++) { - ctx->registers[T0 + i] = leu32_get(&ctx->ram.mem[ctx->registers[SP] + i*4]); - } - ctx->registers[SP] += 4*10; // free memory +// for (int i = 0; i < 10; i++) { +// ctx->registers[T0 + i] = leu32_get(&ctx->ram.mem[ctx->registers[SP] + i*4]); +// } +// ctx->registers[SP] += 4*10; // free memory break; } case OP_STORE: diff --git a/software/chip32/chip32_vm.h b/software/chip32/chip32_vm.h index cc97d77..54e6abc 100644 --- a/software/chip32/chip32_vm.h +++ b/software/chip32/chip32_vm.h @@ -108,7 +108,7 @@ typedef enum R7, R8, R9, - // Temporaties are automatically saved on stack across a call + // Temporaries are automatically saved on stack across a call T0, T1, T2, diff --git a/story-editor/assets/check-mark.png b/story-editor/assets/check-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..9a25900bcf7af08743b730d717bd272896934544 GIT binary patch literal 23826 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

e(m;-G?#4zc~#2Ed>=#gwI`>@YZTS!~NfAD|@C; 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%0A8I@5kS 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 XYg^4b96{i(DM4=()a6TGn}+@m&#Gew literal 0 HcmV?d00001 diff --git a/story-editor/assets/left.png b/story-editor/assets/left.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd799bed9a0c85439bd1e2cc3d4717668047a32 GIT binary patch literal 7181 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 GuKqu~cdVoU literal 0 HcmV?d00001 diff --git a/story-editor/assets/pause-button.png b/story-editor/assets/pause-button.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa3e3c9d05d7ba0b065bcab708c1714ab4ca6eb GIT binary patch literal 43707 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

}&~d!t2MLc$Gk@rDUv!C%cjth55=$cu|e13^cC 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

;oY zshigt&SpHP=su?l=Smn+AQl{p?kn}J9aLiOGqtaf0d4m-&TH;eE*(HUSIWo`!1b^VzZS-oRND{?=(!NaguMJ7@dXFS|(2yjj>OB#8)>?U{ z04FB4uPNP{@zIw({i1Iz%UXP$3(xC!(Y4*C(fQ-_lgW2+V-|bURHzy!9A3Y^8NC*W zqkVGPIt?g$cVNqun)xQ30)t}+7UsdbiXI>o?97oALNM&zs~yYtdRhqZq$JQYirC`= zu{colE%h@iW-kl0UE|8_x9FOEjawMGi$e;hENIqnQ)loe#t#yFwl&OXlmu4OPcZ>s zs^$iTk>c~lO*`23de9nCoi-A^iyK(Y7GZFvZg+`CX^!(YqF{Wx4#ZL^Cb?Uz4JOj- z6*l|;3A&s_@D5i%2f*)?XiIxo;sAfZ#Ax9mMkuR5ip5Usk@{!i=FhJtaVp1X3~9ep z@EBHoxt;pR*%!8#UU!E*M(242L(ss?D*+=9A2yj8*3QhWEE=1|td`ug```bl#EGzN anT5N*Y8J3ZTr8Gz59ykm$v=JN?*9Sd5V02k literal 0 HcmV?d00001 diff --git a/story-editor/nodeeditor b/story-editor/nodeeditor index e1c9ee8..d5250cd 160000 --- a/story-editor/nodeeditor +++ b/story-editor/nodeeditor @@ -1 +1 @@ -Subproject commit e1c9ee891129e24c5703d5044509faabd8725923 +Subproject commit d5250cd445a6fa2177075603f1ca5580c3498c8e diff --git a/story-editor/scripts/media.asm b/story-editor/scripts/media.asm index 112e139..0dff347 100644 --- a/story-editor/scripts/media.asm +++ b/story-editor/scripts/media.asm @@ -9,25 +9,24 @@ ; t2: increment 4 ; t3: current media address ; t4: where to jump when OK button is pressed + ; t5: address of the "choice" array + mov t5, r0 ; we save R0 .media_loop_start: - load t0, @r0, 4 ; Le premier élément est le nombre de choix possibles, t0 = 3 (exemple) + load t0, @t5, 4 ; Le premier élément est le nombre de choix possibles, t0 = 3 (exemple) lcons t1, 1 lcons t2, 4 - mov t3, r0 + mov t3, t5 .media_loop: add t3, t2 ; @++ - ; --------- We call a media transition node - push r0 ; save r0 - load r0, @t3, 4 ; r0 = content in ram at address in T4 + load r0, @t3, 4 ; r0 = content in ram at address in T3 call r0 ; call subroutine ; Return argument in R0: the address of the node to call whe OK is pressed ; save it in t4 mov t4, r0 - pop r0 ; wait for event (OK or wheel) syscall 2 diff --git a/story-editor/src/code_editor.cpp b/story-editor/src/code_editor.cpp index 77c45c6..e83ecbe 100644 --- a/story-editor/src/code_editor.cpp +++ b/story-editor/src/code_editor.cpp @@ -4,8 +4,6 @@ #include #include -//![constructor] - CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent) { lineNumberArea = new LineNumberArea(this); @@ -14,6 +12,8 @@ CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent) connect(this, &CodeEditor::updateRequest, this, &CodeEditor::updateLineNumberArea); connect(this, &CodeEditor::cursorPositionChanged, this, &CodeEditor::highlightCurrentLine); + connect(lineNumberArea, &LineNumberArea::sigLineNumberAreaClicked, this, &CodeEditor::sigLineNumberAreaClicked); + setTabStopDistance(QFontMetricsF(font()).horizontalAdvance(' ') * 4); updateLineNumberAreaWidth(0); @@ -100,6 +100,14 @@ void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) painter.setPen(Qt::black); painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(), Qt::AlignRight, number); + + if (m_breakpoints.contains(blockNumber +1)) + { + QRectF rectangle(0, top, fontMetrics().height(), fontMetrics().height()); + painter.setPen(Qt::red); + painter.setBrush(QBrush(Qt::red)); + painter.drawEllipse(rectangle); + } } block = block.next(); @@ -109,4 +117,46 @@ void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) } } -//![extraAreaPaintEvent_2] + +int CodeEditor::ComputeLine(const QPointF &p) +{ + int line = -1; + + QTextBlock block = firstVisibleBlock(); + + while (block.isValid()) + { + int top = qRound(blockBoundingGeometry(block).top()); + int bottom = top + qRound(blockBoundingRect(block).height()); + + if ((p.y() >= top) && (p.y() <= bottom)) + { + line = block.blockNumber() + 1; + break; + } + + block = block.next(); + } + + return line; +} + +void CodeEditor::SetBreakPoints(const std::set &bkp) +{ + m_breakpoints = bkp; + update(); +} + + +void LineNumberArea::mouseReleaseEvent(QMouseEvent *event) { + if (event->button() == Qt::LeftButton) + { + QPointF p = event->position(); + int line = codeEditor->ComputeLine(p); +// qDebug() << "Clicked line: " << line; + if (line >= 0) + { + emit sigLineNumberAreaClicked(line); + } + } +} diff --git a/story-editor/src/code_editor.h b/story-editor/src/code_editor.h index e851b85..d3a920d 100644 --- a/story-editor/src/code_editor.h +++ b/story-editor/src/code_editor.h @@ -2,6 +2,7 @@ #define CODEEDITOR_H #include +#include QT_BEGIN_NAMESPACE class QPaintEvent; @@ -12,7 +13,6 @@ QT_END_NAMESPACE class LineNumberArea; -//![codeeditordefinition] class CodeEditor : public QPlainTextEdit { @@ -24,6 +24,12 @@ public: void lineNumberAreaPaintEvent(QPaintEvent *event); int lineNumberAreaWidth(); + int ComputeLine(const QPointF &p); + void SetBreakPoints(const std::set & bkp); + +signals: + void sigLineNumberAreaClicked(int line); + protected: void resizeEvent(QResizeEvent *event) override; @@ -33,14 +39,15 @@ private slots: void updateLineNumberArea(const QRect &rect, int dy); private: - QWidget *lineNumberArea; + LineNumberArea *lineNumberArea; + std::set m_breakpoints; }; -//![codeeditordefinition] -//![extraarea] class LineNumberArea : public QWidget { + Q_OBJECT + public: LineNumberArea(CodeEditor *editor) : QWidget(editor), codeEditor(editor) {} @@ -50,6 +57,11 @@ public: return QSize(codeEditor->lineNumberAreaWidth(), 0); } + void mouseReleaseEvent(QMouseEvent *event) override; + +signals: + void sigLineNumberAreaClicked(int line); + protected: void paintEvent(QPaintEvent *event) override { diff --git a/story-editor/src/main_window.cpp b/story-editor/src/main_window.cpp index 7e53a8d..d164da1 100644 --- a/story-editor/src/main_window.cpp +++ b/story-editor/src/main_window.cpp @@ -70,8 +70,6 @@ MainWindow::MainWindow() addToolBar(Qt::LeftToolBarArea, m_toolbar); m_toolbar->setVisible(true); - connect(m_toolbar, &ToolBar::sigDefaultDocksPosition, this, &MainWindow::slotDefaultDocksPosition); - createStatusBar(); m_logDock = new LogDock(); @@ -82,10 +80,6 @@ MainWindow::MainWindow() addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, m_ostHmiDock); m_toolbar->AddDockToMenu(m_ostHmiDock->toggleViewAction(), m_ostHmiDock); - connect(m_ostHmiDock, &OstHmiDock::sigOkButton, [&]() { - QCoreApplication::postEvent(this, new VmEvent(VmEvent::evOkButton)); - }); - m_resourcesDock = new ResourcesDock(m_project, m_resourceModel); addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, m_resourcesDock); m_toolbar->AddDockToMenu(m_resourcesDock->toggleViewAction(), m_resourcesDock); @@ -98,18 +92,6 @@ MainWindow::MainWindow() addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, m_vmDock); m_toolbar->AddDockToMenu(m_vmDock->toggleViewAction(), m_vmDock); - connect(m_vmDock, &VmDock::sigCompile, [&]() { - // m_scriptEditorDock->setScript(m_project.BuildResources()); - }); - - connect(m_vmDock, &VmDock::sigStepInstruction, [&]() { - QCoreApplication::postEvent(this, new VmEvent(VmEvent::evStep)); - }); - - connect(m_vmDock, &VmDock::sigBuild, [&]() { - BuildScript(); - }); - m_ramView = new MemoryViewDock("RamViewDock", "RAM"); addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, m_ramView); m_toolbar->AddDockToMenu(m_ramView->toggleViewAction(), m_ramView); @@ -125,6 +107,71 @@ MainWindow::MainWindow() m_chooseFileUi.setupUi(m_chooseFileDialog); m_chooseFileDialog->close(); + m_newProjectDialog = new NewProjectDialog(this); + m_newProjectDialog->hide(); + + // TODO: merge both + m_model.registerNode("MediaNode"); + m_model.addModel("MediaNode", "Story Teller"); + + // Prepare run timer + m_runTimer = new QTimer(this); + m_runTimer->setSingleShot(true); + + // VM Initialize + m_chip32_ctx.stack_size = 512; + + m_chip32_ctx.rom.mem = m_rom_data; + m_chip32_ctx.rom.addr = 0; + m_chip32_ctx.rom.size = sizeof(m_rom_data); + + m_chip32_ctx.ram.mem = m_ram_data; + m_chip32_ctx.ram.addr = sizeof(m_rom_data); + m_chip32_ctx.ram.size = sizeof(m_ram_data); + + Callback::func = std::bind(&MainWindow::Syscall, this, std::placeholders::_1); + m_chip32_ctx.syscall = static_cast(Callback::callback); + + // Install event handler now that everything is initialized + Callback::func = std::bind(&MainWindow::MessageOutput, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); + auto cb = static_cast(Callback::callback); + + qInstallMessageHandler(cb); + + readSettings(); // restore all windows preferences + qDebug() << "Settings location: " << m_settings.fileName(); + qDebug() << "Welcome to StoryTeller Editor"; + + CloseProject(); + RefreshProjectInformation(); + + // =================================== CONNECTIONS =================================== + connect(m_toolbar, &ToolBar::sigDefaultDocksPosition, this, &MainWindow::slotDefaultDocksPosition); + + connect(m_ostHmiDock, &OstHmiDock::sigOkButton, [&]() { + QCoreApplication::postEvent(this, new VmEvent(VmEvent::evOkButton)); + }); + + connect(m_ostHmiDock, &OstHmiDock::sigLeftButton, [&]() { + QCoreApplication::postEvent(this, new VmEvent(VmEvent::evLeftButton)); + }); + + connect(m_ostHmiDock, &OstHmiDock::sigRightButton, [&]() { + QCoreApplication::postEvent(this, new VmEvent(VmEvent::evRightButton)); + }); + + connect(m_vmDock, &VmDock::sigCompile, [&]() { + // m_scriptEditorDock->setScript(m_project.BuildResources()); + }); + + connect(m_vmDock, &VmDock::sigStepInstruction, [&]() { + QCoreApplication::postEvent(this, new VmEvent(VmEvent::evStep)); + }); + + connect(m_vmDock, &VmDock::sigBuild, [&]() { + BuildScript(); + }); + connect(&m_model, &StoryGraphModel::sigChooseFile, [&](NodeId id, const QString &type) { m_chooseFileUi.tableView->setModel(&m_resourcesDock->getModel()); m_chooseFileDialog->exec(); @@ -145,33 +192,6 @@ MainWindow::MainWindow() } }); - m_newProjectDialog = new NewProjectDialog(this); - m_newProjectDialog->hide(); - - // TODO: merge both - m_model.registerNode("MediaNode"); - m_model.addModel("MediaNode", "Story Teller"); - -// m_project.Load("packs/BE8949F60D854F54828419A1BDAED36A/pack.json"); - -// DisplayNode(m_project.m_tree, QtNodes::InvalidNodeId); - - // VM Initialize - - m_chip32_ctx.stack_size = 512; - - m_chip32_ctx.rom.mem = m_rom_data; - m_chip32_ctx.rom.addr = 0; - m_chip32_ctx.rom.size = sizeof(m_rom_data); - - m_chip32_ctx.ram.mem = m_ram_data; - m_chip32_ctx.ram.addr = sizeof(m_rom_data); - m_chip32_ctx.ram.size = sizeof(m_ram_data); - - - Callback::func = std::bind(&MainWindow::Syscall, this, std::placeholders::_1); - m_chip32_ctx.syscall = static_cast(Callback::callback); - connect(m_toolbar, &ToolBar::sigNew, this, [&]() { NewProject(); }); @@ -181,7 +201,7 @@ MainWindow::MainWindow() }); connect(m_toolbar, &ToolBar::sigOpen, this, [&]() { - OpenProjectDialog(); + OpenProjectDialog(); }); connect(m_toolbar, &ToolBar::sigClose, this, [&]() { @@ -201,26 +221,15 @@ MainWindow::MainWindow() BuildAndRun(); }); - // Install event handler now that everythin is initialized - Callback::func = std::bind(&MainWindow::MessageOutput, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - auto cb = static_cast(Callback::callback); - - - qInstallMessageHandler(cb); - - readSettings(); // restore all windows preferences - qDebug() << "Settings location: " << m_settings.fileName(); - qDebug() << "Welcome to StoryTeller Editor"; - - CloseProject(); - RefreshProjectInformation(); - - // Prepare run timer - m_runTimer = new QTimer(this); - m_runTimer->setSingleShot(true); connect(m_runTimer, &QTimer::timeout, this, [&]() { if (m_dbg.run_result == VM_OK) { + if (m_dbg.m_breakpoints.contains(m_dbg.line + 1)) + { + qDebug() << "Breakpoint on line: " << (m_dbg.line + 1); + m_dbg.free_run = false; + return; + } stepInstruction(); } @@ -231,7 +240,7 @@ MainWindow::MainWindow() } else if (m_dbg.run_result == VM_FINISHED) { - m_dbg.running = false; + m_dbg.free_run = false; } else if (m_dbg.run_result == VM_WAIT_EVENT) { @@ -240,12 +249,29 @@ MainWindow::MainWindow() }); connect(&m_model, &StoryGraphModel::sigAudioStopped, this, [&]() { + QCoreApplication::postEvent(this, new VmEvent(VmEvent::evAudioFinished)); + }); - if ((m_dbg.run_result == VM_WAIT_EVENT) && (m_dbg.running)) + connect(m_scriptEditorDock, &ScriptEditorDock::sigLineNumberAreaClicked, this, [&](int line) { + + // On cherche si une instruction existe à cette ligne + std::vector::const_iterator ptr = m_assembler.Begin(); + for (; ptr != m_assembler.End(); ++ptr) { - m_dbg.run_result = VM_OK; - // Continue execution of node - m_runTimer->start(100); + if ((ptr->line == line) && ptr->isRomCode()) + { + if (m_dbg.m_breakpoints.contains(line)) + { + m_dbg.m_breakpoints.erase(line); + } + else + { + m_dbg.m_breakpoints.insert(line); + } + + m_scriptEditorDock->SetBreakPoints(m_dbg.m_breakpoints); + break; + } } }); @@ -273,7 +299,7 @@ void MainWindow::BuildAndRun() // 4. Run the VM code! if (m_dbg.run_result == VM_OK) { - m_dbg.running = true; + m_dbg.free_run = true; m_runTimer->start(100); } } @@ -433,7 +459,7 @@ void MainWindow::highlightNextLine() else { // Not found - qDebug() << "Reached end or instruction not found: " << m_dbg.line; + qDebug() << "Reached end or instruction not found line: " << m_dbg.line; } } @@ -458,6 +484,25 @@ QString MainWindow::GetFileNameFromMemory(uint32_t addr) return QString(strBuf); } +void MainWindow::EventFinished(uint32_t replyEvent) +{ + if (m_dbg.run_result == VM_WAIT_EVENT) + { + // Result event is in R0 + m_chip32_ctx.registers[R0] = replyEvent; + m_dbg.run_result = VM_OK; + + if (m_dbg.free_run) + { + m_runTimer->start(100); + } + else + { + stepInstruction(); + } + } +} + bool MainWindow::event(QEvent *event) { if (event->type() == VmEvent::evStep) @@ -473,16 +518,19 @@ bool MainWindow::event(QEvent *event) } else if (event->type() == VmEvent::evOkButton) { - VmEvent *myEvent = static_cast(event); - - if (m_dbg.run_result == VM_WAIT_EVENT) - { - // Result event is in R1 - m_chip32_ctx.registers[R1] = 0x01; - m_dbg.run_result = VM_OK; - m_runTimer->start(100); - } - + EventFinished(0x01); + } + else if (event->type() == VmEvent::evLeftButton) + { + EventFinished(0x02); + } + else if (event->type() == VmEvent::evRightButton) + { + EventFinished(0x04); + } + else if (event->type() == VmEvent::evAudioFinished) + { + EventFinished(0x08); } // false means it should be send to target also. as in , we dont remove it. @@ -547,7 +595,7 @@ void MainWindow::stepInstruction() void MainWindow::BuildScript() { m_dbg.run_result = VM_FINISHED; - m_dbg.running = false; + m_dbg.free_run = false; if (m_assembler.Parse(m_scriptEditorDock->getScript().toStdString()) == true ) { diff --git a/story-editor/src/main_window.h b/story-editor/src/main_window.h index 8fb09f0..7e4adfe 100644 --- a/story-editor/src/main_window.h +++ b/story-editor/src/main_window.h @@ -54,10 +54,12 @@ struct DebugContext { uint32_t event_mask{0}; bool wait_event{0}; - bool running{false}; + bool free_run{false}; int line{-1}; chip32_result_t run_result{VM_FINISHED}; + std::set m_breakpoints; + static void DumpCodeAssembler(Chip32::Assembler & assembler) { for (std::vector::const_iterator iter = assembler.Begin(); @@ -109,6 +111,9 @@ public: {} static const QEvent::Type evStep = static_cast(QEvent::User + 1); static const QEvent::Type evOkButton = static_cast(QEvent::User + 2); + static const QEvent::Type evLeftButton = static_cast(QEvent::User + 3); + static const QEvent::Type evRightButton = static_cast(QEvent::User + 4); + static const QEvent::Type evAudioFinished = static_cast(QEvent::User + 5); uint8_t ev{0}; }; @@ -186,6 +191,7 @@ private: void EnableProject(); void OpenProject(const QString &filePath); QString ReadResourceFile(const QString &fileName); + void EventFinished(uint32_t replyEvent); }; #endif // MAIN_WINDOW_H diff --git a/story-editor/src/media_node_model.cpp b/story-editor/src/media_node_model.cpp index 9c6d30e..84a8578 100644 --- a/story-editor/src/media_node_model.cpp +++ b/story-editor/src/media_node_model.cpp @@ -12,7 +12,7 @@ MediaNodeModel::MediaNodeModel(StoryGraphModel &model) : m_model(model) - , m_widget(new QWidget()) + , m_widget(new StoryNodeWidgetBase()) { m_ui.setupUi(m_widget); m_ui.image->setText("Image will appear here"); @@ -73,12 +73,18 @@ MediaNodeModel::MediaNodeModel(StoryGraphModel &model) _nodeStyle.GradientColor2 = bgColor; _nodeStyle.GradientColor3 = bgColor; _nodeStyle.NormalBoundaryColor = bgColor; - _nodeStyle.FontColor = QColor(206, 206, 206); + _nodeStyle.FontColor = Qt::white; _nodeStyle.FontColorFaded = QColor(125, 125, 125); _nodeStyle.ShadowColor = QColor(20, 20, 20); _nodeStyle.ConnectionPointColor = QColor(125, 125, 125); _nodeStyle.FilledConnectionPointColor = QColor(206, 206, 206); + _nodeStyle.SelectedBoundaryColor = QColor(20, 146, 202); + _nodeStyle.Opacity = 1.0; + _nodeStyle.PenWidth = 0; + _nodeStyle.HoveredPenWidth = 2.0; + _nodeStyle.ConnectionPointDiameter = 3.5; + setNodeStyle(_nodeStyle); } @@ -239,12 +245,18 @@ std::string MediaNodeModel::Build() { std::unordered_set conns = m_model.allConnectionIds(getNodeId()); - auto it = conns.begin(); - ++it; - // On place dans R0 le prochain noeud à exécuter en cas de OK - ss << "lcons r0, " - << m_model.GetNodeEntryLabel(it->inNodeId) << "\n" - << "ret\n"; + + for (auto c : conns) + { + if (c.outNodeId == getNodeId()) + { + // On place dans R0 le prochain noeud à exécuter en cas de OK + ss << "lcons r0, " + << m_model.GetNodeEntryLabel(c.inNodeId) << "\n" + << "ret\n"; + } + } + } else // Choice node { @@ -346,3 +358,15 @@ std::string MediaNodeModel::EntryLabel() const ss << ".mediaEntry" << std::setw(4) << std::setfill('0') << getNodeId(); return ss.str(); } + +StoryNodeWidgetBase::StoryNodeWidgetBase() { + // setWindowFlags(Qt::Window | Qt::FramelessWindowHint); + + // setAttribute(Qt::WA_NoSystemBackground); + setAttribute(Qt::WA_TranslucentBackground); + // setAttribute(Qt::WA_PaintOnScreen); + + // setAttribute(Qt::WA_TransparentForMouseEvents); + + setStyleSheet("QLabel { background-color: rgba(0,0,0,0) }; QWidget { background-color: rgba(0,0,0,0) };"); +} diff --git a/story-editor/src/media_node_model.h b/story-editor/src/media_node_model.h index 6c9eab4..e1c235e 100644 --- a/story-editor/src/media_node_model.h +++ b/story-editor/src/media_node_model.h @@ -22,6 +22,13 @@ using QtNodes::PortType; #include "story_graph_model.h" #include "story_node_base.h" +class StoryNodeWidgetBase : public QWidget +{ +public: + StoryNodeWidgetBase(); +private: +}; + /// The model dictates the number of inputs and outputs for the Node. /// In this example it has no logic. class MediaNodeModel : public StoryNodeBase @@ -72,7 +79,7 @@ private: StoryGraphModel &m_model; unsigned int m_ports{1}; - QWidget *m_widget; + StoryNodeWidgetBase *m_widget; QString m_soundFilePath; diff --git a/story-editor/src/ost-editor.qrc b/story-editor/src/ost-editor.qrc index c4f9c51..b8b5ff6 100644 --- a/story-editor/src/ost-editor.qrc +++ b/story-editor/src/ost-editor.qrc @@ -11,5 +11,10 @@ ../assets/welcome.png ../assets/play-circle-green.png ../scripts/media.asm + ../assets/home.png + ../assets/left.png + ../assets/pause-button.png + ../assets/right.png + ../assets/check-mark.png diff --git a/story-editor/src/ost-hmi.ui b/story-editor/src/ost-hmi.ui index 089d5e1..632ecad 100644 --- a/story-editor/src/ost-hmi.ui +++ b/story-editor/src/ost-hmi.ui @@ -7,15 +7,21 @@ 0 0 338 - 443 + 326 + + + 0 + 0 + + Story Teller Emulator - - + + @@ -46,63 +52,140 @@ - - - - Commands - - - - - - - - - - - - - Ok - - - - - - - Home - - - - - - - Pause - - - - - - - - - - - Qt::Vertical - - - - 20 - 129 - - - - - - + + + + + + + 0 + 0 + + + + + + + + :/assets/left.png:/assets/left.png + + + + 45 + 35 + + + + + + + + + + + + :/assets/check-mark.png:/assets/check-mark.png + + + + 35 + 35 + + + + false + + + + + + + + 0 + 0 + + + + + + + + :/assets/right.png:/assets/right.png + + + + 45 + 35 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + + + + :/assets/pause-button.png:/assets/pause-button.png + + + + 30 + 30 + + + + + + + + + 0 + 0 + + + + + + + + :/assets/home.png:/assets/home.png + + + + 30 + 30 + + + + + - + + + diff --git a/story-editor/src/osthmi_dock.cpp b/story-editor/src/osthmi_dock.cpp index 9680954..b5ef77b 100644 --- a/story-editor/src/osthmi_dock.cpp +++ b/story-editor/src/osthmi_dock.cpp @@ -9,6 +9,8 @@ OstHmiDock::OstHmiDock() m_uiOstDisplay.setupUi(this); connect(m_uiOstDisplay.okButton, &QPushButton::clicked, this, &OstHmiDock::sigOkButton); + connect(m_uiOstDisplay.leftButton, &QPushButton::clicked, this, &OstHmiDock::sigLeftButton); + connect(m_uiOstDisplay.rightButton, &QPushButton::clicked, this, &OstHmiDock::sigRightButton); } void OstHmiDock::SetImage(const QString &fileName) diff --git a/story-editor/src/osthmi_dock.h b/story-editor/src/osthmi_dock.h index 74238ce..a610e3a 100644 --- a/story-editor/src/osthmi_dock.h +++ b/story-editor/src/osthmi_dock.h @@ -15,6 +15,8 @@ public: signals: void sigOkButton(); + void sigLeftButton(); + void sigRightButton(); private: Ui::ostDisplay m_uiOstDisplay; diff --git a/story-editor/src/script_editor_dock.cpp b/story-editor/src/script_editor_dock.cpp index 989822e..6912117 100644 --- a/story-editor/src/script_editor_dock.cpp +++ b/story-editor/src/script_editor_dock.cpp @@ -9,6 +9,8 @@ ScriptEditorDock::ScriptEditorDock() m_editor = new CodeEditor(this); m_highlighter = new Highlighter(m_editor->document()); setWidget(m_editor); + + connect(m_editor, &CodeEditor::sigLineNumberAreaClicked, this, &ScriptEditorDock::sigLineNumberAreaClicked); } void ScriptEditorDock::HighlightLine(int line) @@ -25,3 +27,8 @@ QString ScriptEditorDock::getScript() const { return m_editor->toPlainText(); } + +void ScriptEditorDock::SetBreakPoints(const std::set &bkp) +{ + m_editor->SetBreakPoints(bkp); +} diff --git a/story-editor/src/script_editor_dock.h b/story-editor/src/script_editor_dock.h index 7e01f17..2b459f6 100644 --- a/story-editor/src/script_editor_dock.h +++ b/story-editor/src/script_editor_dock.h @@ -17,6 +17,11 @@ public: void setScript(const std::string &script); QString getScript() const; + void SetBreakPoints(const std::set & bkp); + +signals: + void sigLineNumberAreaClicked(int line); + private: CodeEditor *m_editor{nullptr}; Highlighter *m_highlighter; diff --git a/story-editor/src/story_graph_model.cpp b/story-editor/src/story_graph_model.cpp index 0d2600c..c2790d0 100644 --- a/story-editor/src/story_graph_model.cpp +++ b/story-editor/src/story_graph_model.cpp @@ -186,8 +186,7 @@ QVariant StoryGraphModel::nodeData(NodeId nodeId, NodeRole role) const break; case NodeRole::Style: { - auto style = StyleCollection::nodeStyle(); - result = style.toJson().toVariantMap(); + result = model->nodeStyle().toJson().toVariantMap(); } break; case NodeRole::InternalData: