osci-render/Source/PluginEditor.h

86 wiersze
3.3 KiB
C
Czysty Zwykły widok Historia

2023-01-09 21:58:49 +00:00
#pragma once
#include <JuceHeader.h>
#include "PluginProcessor.h"
#include "SettingsComponent.h"
#include "MidiComponent.h"
#include "components/OsciMainMenuBarModel.h"
#include "LookAndFeel.h"
2023-12-20 17:13:38 +00:00
#include "components/ErrorCodeEditorComponent.h"
2024-03-01 15:29:14 +00:00
#include "components/LuaConsole.h"
#include "visualiser/VisualiserSettings.h"
#include "CommonPluginEditor.h"
2023-01-09 21:58:49 +00:00
class OscirenderAudioProcessorEditor : public CommonPluginEditor, private juce::CodeDocument::Listener, public juce::AsyncUpdater, public juce::ChangeListener {
2023-01-09 21:58:49 +00:00
public:
OscirenderAudioProcessorEditor(OscirenderAudioProcessor&);
2023-01-09 21:58:49 +00:00
~OscirenderAudioProcessorEditor() override;
void paint(juce::Graphics&) override;
2023-01-09 21:58:49 +00:00
void resized() override;
bool isBinaryFile(juce::String name);
void initialiseCodeEditors();
void addCodeEditor(int index);
void removeCodeEditor(int index);
void fileUpdated(juce::String fileName, bool shouldOpenEditor = false);
void handleAsyncUpdate() override;
void changeListenerCallback(juce::ChangeBroadcaster* source) override;
void toggleLayout(juce::StretchableLayoutManager& layout, double prefSize);
void openVisualiserSettings();
void editCustomFunction(bool enabled);
2023-01-09 21:58:49 +00:00
private:
OscirenderAudioProcessor& audioProcessor;
public:
const double CLOSED_PREF_SIZE = 30.0;
const double RESIZER_BAR_SIZE = 7.0;
std::atomic<bool> editingCustomFunction = false;
SettingsComponent settings{audioProcessor, *this};
#if !SOSCI_FEATURES
juce::TextButton upgradeButton{"Upgrade to premium!"};
#endif
juce::ComponentAnimator codeEditorAnimator;
LuaComponent lua{audioProcessor, *this};
SettingsWindow visualiserSettingsWindow = SettingsWindow("Visualiser Settings", visualiserSettings);
2024-03-01 15:29:14 +00:00
LuaConsole console;
std::vector<std::shared_ptr<juce::CodeDocument>> codeDocuments;
std::vector<std::shared_ptr<OscirenderCodeEditorComponent>> codeEditors;
2023-08-27 16:47:30 +00:00
juce::CodeEditorComponent::ColourScheme colourScheme;
2023-03-29 11:51:22 +00:00
juce::LuaTokeniser luaTokeniser;
juce::XmlTokeniser xmlTokeniser;
2023-03-29 14:02:29 +00:00
juce::ShapeButton collapseButton;
std::shared_ptr<juce::CodeDocument> customFunctionCodeDocument = std::make_shared<juce::CodeDocument>();
std::shared_ptr<OscirenderCodeEditorComponent> customFunctionCodeEditor = std::make_shared<OscirenderCodeEditorComponent>(*customFunctionCodeDocument, &luaTokeniser, audioProcessor, CustomEffect::UNIQUE_ID, CustomEffect::FILE_NAME);
2023-01-09 21:58:49 +00:00
OsciMainMenuBarModel model{audioProcessor, *this};
2023-11-25 22:10:36 +00:00
juce::StretchableLayoutManager layout;
juce::StretchableLayoutResizerBar resizerBar{&layout, 1, true};
juce::StretchableLayoutManager luaLayout;
juce::StretchableLayoutResizerBar luaResizerBar{&luaLayout, 1, false};
std::atomic<bool> updatingDocumentsWithParserLock = false;
void codeDocumentTextInserted(const juce::String& newText, int insertIndex) override;
void codeDocumentTextDeleted(int startIndex, int endIndex) override;
void updateCodeDocument();
void updateCodeEditor(bool binaryFile, bool shouldOpenEditor = false);
bool keyPressed(const juce::KeyPress& key) override;
2024-03-02 18:31:12 +00:00
void mouseDown(const juce::MouseEvent& event) override;
void mouseMove(const juce::MouseEvent& event) override;
2023-01-09 21:58:49 +00:00
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OscirenderAudioProcessorEditor)
};