diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index e2d2168..4aacdad 100644 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -27,6 +27,10 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr console.print(message); }; + LuaParser::onClear = [this]() { + console.clear(); + }; + if (!usingNativeMenuBar) { menuBar.setModel(&menuBarModel); addAndMakeVisible(menuBar); diff --git a/Source/components/LuaConsole.cpp b/Source/components/LuaConsole.cpp index cc40015..f7c5f61 100644 --- a/Source/components/LuaConsole.cpp +++ b/Source/components/LuaConsole.cpp @@ -12,7 +12,7 @@ LuaConsole::LuaConsole() { startTimerHz(10); clearConsoleButton.onClick = [this] { - clear(); + clear(true); }; addAndMakeVisible(console); @@ -42,18 +42,20 @@ void LuaConsole::print(const std::string& text) { } } -void LuaConsole::clear() { +void LuaConsole::clear(bool forceClear) { juce::SpinLock::ScopedLockType l(lock); - document.replaceAllContent(""); - document.clearUndoHistory(); - consoleLines = 0; - buffer.clear(); + if (forceClear || !pauseConsoleButton.getToggleState()) { + document.replaceAllContent(""); + document.clearUndoHistory(); + consoleLines = 0; + buffer.clear(); - juce::MessageManager::callAsync([this] { - console.setVisible(false); - emptyConsoleLabel.setVisible(true); - }); + juce::MessageManager::callAsync([this] { + console.setVisible(false); + emptyConsoleLabel.setVisible(true); + }); + } } void LuaConsole::timerCallback() { diff --git a/Source/components/LuaConsole.h b/Source/components/LuaConsole.h index 5f0fd31..661e3a1 100644 --- a/Source/components/LuaConsole.h +++ b/Source/components/LuaConsole.h @@ -11,7 +11,7 @@ public: ~LuaConsole(); void print(const std::string& text); - void clear(); + void clear(bool forceClear = false); void timerCallback() override; void setConsoleOpen(bool open); bool getConsoleOpen() { return consoleOpen; } diff --git a/Source/lua/LuaParser.cpp b/Source/lua/LuaParser.cpp index 5515afc..af694f4 100644 --- a/Source/lua/LuaParser.cpp +++ b/Source/lua/LuaParser.cpp @@ -2,8 +2,9 @@ #include "luaimport.h" std::function LuaParser::onPrint; +std::function LuaParser::onClear; -static int customPrint(lua_State* L) { +static int luaPrint(lua_State* L) { int nargs = lua_gettop(L); for (int i = 1; i <= nargs; ++i) { @@ -14,14 +15,20 @@ static int customPrint(lua_State* L) { return 0; } -static const struct luaL_Reg printlib[] = { - {"print", customPrint}, +static int luaClear(lua_State* L) { + LuaParser::onClear(); + return 0; +} + +static const struct luaL_Reg luaLib[] = { + {"print", luaPrint}, + {"clear", luaClear}, {NULL, NULL} /* end of array */ }; extern int luaopen_customprintlib(lua_State* L) { lua_getglobal(L, "_G"); - luaL_setfuncs(L, printlib, 0); + luaL_setfuncs(L, luaLib, 0); lua_pop(L, 1); return 0; } diff --git a/Source/lua/LuaParser.h b/Source/lua/LuaParser.h index af7210c..4cc3e08 100644 --- a/Source/lua/LuaParser.h +++ b/Source/lua/LuaParser.h @@ -70,6 +70,7 @@ public: void close(lua_State*& L); static std::function onPrint; + static std::function onClear; private: void reset(lua_State*& L, juce::String script);