Add half-complete Lua Console

pull/223/head
James Ball 2024-03-01 15:29:14 +00:00 zatwierdzone przez James H Ball
rodzic 7b292c1c89
commit 446c065d93
7 zmienionych plików z 188 dodań i 74 usunięć

Wyświetl plik

@ -20,6 +20,14 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr
}
#endif
addAndMakeVisible(console);
LuaParser::onPrint = [this](const juce::String& message) {
juce::MessageManager::callAsync([this, message] {
console.print(message);
});
};
if (!usingNativeMenuBar) {
menuBar.setModel(&menuBarModel);
addAndMakeVisible(menuBar);
@ -175,6 +183,7 @@ void OscirenderAudioProcessorEditor::resized() {
juce::Component dummy;
juce::Component dummy2;
juce::Component dummy3;
juce::Component* columns[] = { &dummy, &resizerBar, &dummy2 };
@ -196,10 +205,15 @@ void OscirenderAudioProcessorEditor::resized() {
}
if (editingCustomFunction || extension == ".lua") {
juce::Component* rows[] = { codeEditors[index].get(), &luaResizerBar, &lua };
juce::Component* rows[] = { &dummy3, &luaResizerBar, &lua };
luaLayout.layOutComponents(rows, 3, dummy2Bounds.getX(), dummy2Bounds.getY(), dummy2Bounds.getWidth(), dummy2Bounds.getHeight(), true, true);
auto dummy3Bounds = dummy3.getBounds();
console.setBounds(dummy3Bounds.removeFromBottom(200));
dummy3Bounds.removeFromBottom(5);
codeEditors[index]->setBounds(dummy3Bounds);
} else {
codeEditors[index]->setBounds(dummy2Bounds);
console.setBounds(0, 0, 0, 0);
luaResizerBar.setBounds(0, 0, 0, 0);
lua.setBounds(0, 0, 0, 0);
}
@ -208,12 +222,14 @@ void OscirenderAudioProcessorEditor::resized() {
resizerBar.setBounds(0, 0, 0, 0);
luaResizerBar.setBounds(0, 0, 0, 0);
lua.setBounds(0, 0, 0, 0);
console.setBounds(0, 0, 0, 0);
collapseButton.setBounds(area.removeFromRight(20));
}
} else {
collapseButton.setBounds(0, 0, 0, 0);
luaResizerBar.setBounds(0, 0, 0, 0);
lua.setBounds(0, 0, 0, 0);
console.setBounds(0, 0, 0, 0);
}
}

Wyświetl plik

@ -8,6 +8,7 @@
#include "components/MainMenuBarModel.h"
#include "LookAndFeel.h"
#include "components/ErrorCodeEditorComponent.h"
#include "components/LuaConsole.h"
class OscirenderAudioProcessorEditor : public juce::AudioProcessorEditor, private juce::CodeDocument::Listener, public juce::AsyncUpdater, public juce::ChangeListener {
@ -53,6 +54,8 @@ public:
LuaComponent lua{audioProcessor, *this};
VolumeComponent volume{audioProcessor};
LuaConsole console;
std::vector<std::shared_ptr<juce::CodeDocument>> codeDocuments;
std::vector<std::shared_ptr<ErrorCodeEditorComponent>> codeEditors;
juce::CodeEditorComponent::ColourScheme colourScheme;

Wyświetl plik

@ -0,0 +1,44 @@
#include "LuaConsole.h"
#include "../PluginEditor.h"
LuaConsole::LuaConsole() {
setText("Lua Console");
console.setMultiLine(true);
console.setReadOnly(true);
console.setCaretVisible(false);
console.setColour(juce::TextEditor::backgroundColourId, juce::Colours::black);
console.setColour(juce::TextEditor::textColourId, juce::Colours::white);
console.setColour(juce::TextEditor::outlineColourId, juce::Colours::white);
console.setColour(juce::TextEditor::focusedOutlineColourId, juce::Colours::white);
console.setColour(juce::TextEditor::highlightColourId, juce::Colours::white);
console.setColour(juce::TextEditor::highlightedTextColourId, juce::Colours::black);
console.setColour(juce::TextEditor::shadowColourId, juce::Colours::black);
addAndMakeVisible(console);
}
LuaConsole::~LuaConsole() {}
void LuaConsole::print(const juce::String& text) {
console.moveCaretToEnd();
console.insertTextAtCaret(text);
// clear start of console if it gets too long
if (console.getTotalNumChars() > 10000) {
console.setHighlightedRegion(juce::Range<int>(0, 1000));
console.deleteBackwards(true);
console.moveCaretToEnd();
}
}
void LuaConsole::clear() {
console.clear();
}
void LuaConsole::resized() {
auto area = getLocalBounds().withTrimmedTop(20);
console.setBounds(area);
}

Wyświetl plik

@ -0,0 +1,20 @@
#pragma once
#include <JuceHeader.h>
#include "../PluginProcessor.h"
class LuaConsole : public juce::GroupComponent {
public:
LuaConsole();
~LuaConsole();
void print(const juce::String& text);
void clear();
void resized() override;
private:
juce::TextEditor console;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(LuaConsole)
};

Wyświetl plik

@ -1,6 +1,31 @@
#include "LuaParser.h"
#include "luaimport.h"
std::function<void(const juce::String&)> LuaParser::onPrint;
static int customPrint(lua_State* L) {
int nargs = lua_gettop(L);
for (int i = 1; i <= nargs; ++i) {
LuaParser::onPrint(luaL_tolstring(L, i, nullptr));
lua_pop(L, 1);
}
return 0;
}
static const struct luaL_Reg printlib[] = {
{"print", customPrint},
{NULL, NULL} /* end of array */
};
extern int luaopen_customprintlib(lua_State* L) {
lua_getglobal(L, "_G");
luaL_setfuncs(L, printlib, 0);
lua_pop(L, 1);
return 0;
}
LuaParser::LuaParser(juce::String fileName, juce::String script, std::function<void(int, juce::String, juce::String)> errorCallback, juce::String fallbackScript) : script(script), fallbackScript(fallbackScript), errorCallback(errorCallback), fileName(fileName) {}
void LuaParser::reset(lua_State*& L, juce::String script) {
@ -12,6 +37,8 @@ void LuaParser::reset(lua_State*& L, juce::String script) {
L = luaL_newstate();
luaL_openlibs(L);
luaopen_customprintlib(L);
this->script = script;
parse(L);
}

Wyświetl plik

@ -69,6 +69,8 @@ public:
void resetErrors();
void close(lua_State*& L);
static std::function<void(const juce::String&)> onPrint;
private:
void reset(lua_State*& L, juce::String script);
void reportError(const char* error);

Wyświetl plik

@ -223,6 +223,8 @@
file="Source/components/ErrorCodeEditorComponent.h"/>
<FILE id="L9DIT2" name="LabelledTextBox.h" compile="0" resource="0"
file="Source/components/LabelledTextBox.h"/>
<FILE id="tpNWJ3" name="LuaConsole.cpp" compile="1" resource="0" file="Source/components/LuaConsole.cpp"/>
<FILE id="e3ZteP" name="LuaConsole.h" compile="0" resource="0" file="Source/components/LuaConsole.h"/>
<FILE id="qIxm1z" name="LuaListComponent.cpp" compile="1" resource="0"
file="Source/components/LuaListComponent.cpp"/>
<FILE id="x0Syav" name="LuaListComponent.h" compile="0" resource="0"