added offline render to plugin version. fixed file chooser cancel issue
This commit is contained in:
@ -76,12 +76,9 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
showSettings(true);
|
||||
};
|
||||
|
||||
if (JUCEApplicationBase::isStandaloneApp())
|
||||
{
|
||||
addAndMakeVisible(&m_render_button);
|
||||
m_render_button.setButtonText("Render...");
|
||||
m_render_button.onClick = [this]() { showRenderDialog(); };
|
||||
}
|
||||
addAndMakeVisible(&m_render_button);
|
||||
m_render_button.setButtonText("Render...");
|
||||
m_render_button.onClick = [this]() { showRenderDialog(); };
|
||||
|
||||
|
||||
m_rewind_button = std::make_unique<DrawableButton>("rewind", DrawableButton::ButtonStyle::ImageFitted);
|
||||
@ -730,10 +727,8 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
|
||||
topbox.items.add(FlexItem(buttw, buttonrowheight, m_import_button).withMargin(1).withFlex(1).withMaxWidth(130));
|
||||
topbox.items.add(FlexItem(buttw, buttonrowheight, m_settings_button).withMargin(1).withFlex(1).withMaxWidth(130));
|
||||
if (JUCEApplicationBase::isStandaloneApp())
|
||||
{
|
||||
topbox.items.add(FlexItem(buttw, buttonrowheight, m_render_button).withMargin(1).withFlex(1).withMaxWidth(130));
|
||||
}
|
||||
topbox.items.add(FlexItem(buttw, buttonrowheight, m_render_button).withMargin(1).withFlex(1).withMaxWidth(130));
|
||||
|
||||
topbox.items.add(FlexItem(4, 4));
|
||||
topbox.items.add(FlexItem(80, buttonrowheight, m_perfmeter).withMargin(1).withFlex(1).withMaxWidth(110).withMaxHeight(24).withAlignSelf(FlexItem::AlignSelf::center));
|
||||
topbox.items.add(FlexItem(140, 26, m_info_label).withMargin(1).withFlex(2));
|
||||
@ -1298,6 +1293,37 @@ void PaulstretchpluginAudioProcessorEditor::toggleFileBrowser()
|
||||
}
|
||||
|
||||
|
||||
void PaulstretchpluginAudioProcessorEditor::showPopTip(const String & message, int timeoutMs, Component * target, int maxwidth)
|
||||
{
|
||||
popTip.reset(new BubbleMessageComponent());
|
||||
popTip->setAllowedPlacement(BubbleComponent::above);
|
||||
|
||||
if (target) {
|
||||
if (auto * parent = target->findParentComponentOfClass<AudioProcessorEditor>()) {
|
||||
parent->addChildComponent (popTip.get());
|
||||
} else {
|
||||
addChildComponent(popTip.get());
|
||||
}
|
||||
}
|
||||
else {
|
||||
addChildComponent(popTip.get());
|
||||
}
|
||||
|
||||
AttributedString text(message);
|
||||
text.setJustification (Justification::centred);
|
||||
text.setColour (findColour (TextButton::textColourOffId));
|
||||
text.setFont(Font(12));
|
||||
if (target) {
|
||||
popTip->showAt(target, text, timeoutMs);
|
||||
}
|
||||
else {
|
||||
Rectangle<int> topbox(getWidth()/2 - maxwidth/2, 0, maxwidth, 2);
|
||||
popTip->showAt(topbox, text, timeoutMs);
|
||||
}
|
||||
popTip->toFront(false);
|
||||
//AccessibilityHandler::postAnnouncement(message, AccessibilityHandler::AnnouncementPriority::high);
|
||||
}
|
||||
|
||||
void PaulstretchpluginAudioProcessorEditor::toggleOutputRecording()
|
||||
{
|
||||
if (processor.isRecordingToFile()) {
|
||||
@ -1309,10 +1335,10 @@ void PaulstretchpluginAudioProcessorEditor::toggleOutputRecording()
|
||||
String filepath;
|
||||
#if (JUCE_IOS || JUCE_ANDROID)
|
||||
filepath = m_lastRecordedFile.getRelativePathFrom(File::getSpecialLocation (File::userDocumentsDirectory));
|
||||
//showPopTip(TRANS("Finished recording to ") + filepath, 4000, mRecordingButton.get(), 130);
|
||||
#else
|
||||
filepath = m_lastRecordedFile.getRelativePathFrom(File::getSpecialLocation (File::userHomeDirectory));
|
||||
#endif
|
||||
showPopTip(TRANS("Finished recording to ") + filepath, 4000, m_recordingButton.get(), 130);
|
||||
|
||||
m_recordingButton->setTooltip(TRANS("Last recorded file: ") + filepath);
|
||||
|
||||
@ -1373,7 +1399,7 @@ void PaulstretchpluginAudioProcessorEditor::toggleOutputRecording()
|
||||
else {
|
||||
// show error starting record
|
||||
String lasterr = processor.getLastErrorMessage();
|
||||
//showPopTip(lasterr, 0, mRecordingButton.get());
|
||||
showPopTip(lasterr, 0, m_recordingButton.get());
|
||||
}
|
||||
|
||||
m_fileRecordingLabel->setText("", dontSendNotification);
|
||||
|
@ -564,6 +564,9 @@ private:
|
||||
|
||||
void toggleOutputRecording();
|
||||
|
||||
void showPopTip(const String & message, int timeoutMs, Component * target, int maxwidth=100);
|
||||
|
||||
|
||||
CustomLookAndFeel m_lookandfeel;
|
||||
|
||||
PaulstretchpluginAudioProcessor& processor;
|
||||
@ -639,6 +642,10 @@ private:
|
||||
|
||||
std::unique_ptr<CustomTooltipWindow> tooltipWindow;
|
||||
|
||||
// keep this down here, so it gets destroyed early
|
||||
std::unique_ptr<BubbleMessageComponent> popTip;
|
||||
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PaulstretchpluginAudioProcessorEditor)
|
||||
};
|
||||
|
||||
|
@ -284,17 +284,22 @@ void RenderSettingsComponent::buttonClicked (Button* buttonThatWasClicked)
|
||||
else if (buttonThatWasClicked == &buttonSelectFile)
|
||||
{
|
||||
File lastexportfolder; // File(g_propsfile->getValue("last_export_file")).getParentDirectory();
|
||||
|
||||
Component * parent = nullptr;
|
||||
#if JUCE_IOS
|
||||
parent = JUCEApplication::isStandaloneApp() ? nullptr : getActiveEditor();
|
||||
#endif
|
||||
|
||||
m_filechooser = std::make_unique<FileChooser>("Please select audio file to render...",
|
||||
lastexportfolder,
|
||||
"*.wav");
|
||||
"*.wav", true, false, parent);
|
||||
m_filechooser->launchAsync(FileBrowserComponent::saveMode, [this](const FileChooser &chooser) {
|
||||
String newpath = chooser.getResult().getFullPathName();
|
||||
#if JUCE_IOS
|
||||
// not actually used here, but just in case for later
|
||||
newpath = chooser.getResult().getFileName();
|
||||
#endif
|
||||
outfileNameEditor.setText(newpath, dontSendNotification);
|
||||
if (newpath.isNotEmpty()) {
|
||||
outfileNameEditor.setText(newpath, dontSendNotification);
|
||||
}
|
||||
if (newpath.isNotEmpty() && pendingRender) {
|
||||
buttonClicked(&buttonRender);
|
||||
}
|
||||
|
Reference in New Issue
Block a user