kopia lustrzana https://github.com/jameshball/osci-render
Add half-complete Lua Console
rodzic
7b292c1c89
commit
446c065d93
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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)
|
||||
};
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
Ładowanie…
Reference in New Issue