From 8428f7da3236a3d435f2d1884c949f1e4e48aeb7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 24 Dec 2021 18:23:01 -0500 Subject: [PATCH] GUI: make the new button work --- src/engine/engine.cpp | 16 ++++++++++++++++ src/engine/engine.h | 2 ++ src/gui/gui.cpp | 5 +++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 7d34282f1..678a5bd05 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1428,6 +1428,22 @@ void DivEngine::renderSamples() { } } +void DivEngine::createNew() { + DivSystem sys=song.system; + quitDispatch(); + isBusy.lock(); + song.unload(); + song=DivSong(); + song.system=sys; + chans=getChannelCount(song.system); + renderSamples(); + isBusy.unlock(); + initDispatch(); + isBusy.lock(); + reset(); + isBusy.unlock(); +} + void DivEngine::changeSystem(DivSystem which) { quitDispatch(); isBusy.lock(); diff --git a/src/engine/engine.h b/src/engine/engine.h index 1bcc3d440..1d252a968 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -130,6 +130,8 @@ class DivEngine { void nextBuf(float** in, float** out, int inChans, int outChans, unsigned int size); DivInstrument* getIns(int index); DivWavetable* getWave(int index); + // start fresh + void createNew(); // load a .dmf. bool load(unsigned char* f, size_t length); // save as .dmf. diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 734e1ef8a..0dba56840 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -2237,10 +2237,11 @@ bool FurnaceGUI::loop() { ImGui::BeginMainMenuBar(); if (ImGui::BeginMenu("file")) { - ImGui::MenuItem("new"); + if (ImGui::MenuItem("new")) { + e->createNew(); + } if (ImGui::MenuItem("open...")) { openFileDialog(GUI_FILE_OPEN); - } ImGui::Separator(); ImGui::MenuItem("save");