Skip to content

Commit

Permalink
Documentation Hiding
Browse files Browse the repository at this point in the history
Add a footer control to hide and show documentation in a
plugin-wide sticky fashion.

Closes #69
  • Loading branch information
baconpaul committed May 7, 2024
1 parent a63475a commit 05f7190
Show file tree
Hide file tree
Showing 2 changed files with 164 additions and 13 deletions.
157 changes: 151 additions & 6 deletions src-juce/AWConsolidatedEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ void AWLookAndFeel::setDarkTheme()
setColour(ColourIds::jogHovered, juce::Colour(160, 160, 165));
setColour(ColourIds::jogStroke, juce::Colours::white);

setColour(ColourIds::help, juce::Colour(20, 20, 25));
setColour(ColourIds::helpHovered, juce::Colour(40, 40, 75));

setColour(ColourIds::hamburger, juce::Colour(90, 90, 95));
setColour(ColourIds::hamburgerHovered, juce::Colour(160, 160, 165));
setColour(ColourIds::hamburgerStroke, juce::Colours::white);
Expand Down Expand Up @@ -132,6 +135,9 @@ void AWLookAndFeel::setLightTheme()
setColour(ColourIds::jogHovered, juce::Colour(95, 95, 90));
setColour(ColourIds::jogStroke, juce::Colours::black);

setColour(ColourIds::help, juce::Colour(220, 220, 245));
setColour(ColourIds::helpHovered, juce::Colours::white);

setColour(ColourIds::hamburger, juce::Colour(165, 165, 160));
setColour(ColourIds::hamburgerHovered, juce::Colour(95, 95, 90));
setColour(ColourIds::hamburgerStroke, juce::Colours::black);
Expand Down Expand Up @@ -432,6 +438,11 @@ struct Picker : public juce::Component, public juce::TextEditor::Listener
teb.setX(teb.getX() + getBounds().getX());
teb.setY(teb.getY() + getBounds().getY() + teb.getHeight());
teb = teb.withHeight(400);
if (!editor->isDocDisplayed())
{
auto exp = getWidth() - teb.getWidth();
teb = teb.expanded(exp * 0.5 - 5, 0);
}
listBox->setBounds(teb);

populateForTypein();
Expand Down Expand Up @@ -639,6 +650,54 @@ struct AWLink : public juce::Component
}
};


struct ToggleHelp : public juce::Button
{
AWConsolidatedAudioProcessorEditor *editor;
ToggleHelp(AWConsolidatedAudioProcessorEditor *p)
: juce::Button(juce::String("Display Help") ), editor(p)
{
setAccessible(true);
}
void paintButton(juce::Graphics &g, bool shouldDrawButtonAsHighlighted,
bool shouldDrawButtonAsDown) override
{
// g.fillAll(juce::Colours::orchid);
g.setColour(findColour(ColourIds::help));
if (isHovered)
g.setColour(findColour(ColourIds::helpHovered));

g.setFont(editor->lnf->lookupFont(hideDoc));
std::string txt = (editor->isDocDisplayed() ? "Hide Doc": "Show Doc");
g.drawText(txt, getLocalBounds().withTrimmedBottom(3), juce::Justification::bottomLeft);
}

bool isHovered{false};
void mouseEnter(const juce::MouseEvent &) override
{
isHovered = true;
repaint();
}
void mouseExit(const juce::MouseEvent &) override
{
isHovered = false;
repaint();
}

void mouseDown(const juce::MouseEvent &) override { editor->toggleDocDisplay(); }

bool keyPressed(const juce::KeyPress &p) override
{
if (p.getKeyCode() == juce::KeyPress::returnKey)
{
// dojog does long hold stuff so go direct
editor->toggleDocDisplay();
return true;
}
return false;
}
};

struct ParamDisp : juce::Component, juce::TextEditor::Listener
{
AWConsolidatedAudioProcessor::AWParam *weakParam{nullptr};
Expand Down Expand Up @@ -1039,7 +1098,7 @@ AWConsolidatedAudioProcessorEditor::AWConsolidatedAudioProcessorEditor(
setFocusContainerType(juce::Component::FocusContainerType::keyboardFocusContainer);
setWantsKeyboardFocus(true);

setSize(baseHeight, baseHeight);
setSize(baseWidth, baseHeight);

auto fs = awres::get_filesystem();
try
Expand Down Expand Up @@ -1123,6 +1182,9 @@ AWConsolidatedAudioProcessorEditor::AWConsolidatedAudioProcessorEditor(
awTag->setBounds(fa);
addAndMakeVisible(*awTag);

toggleHelp = std::make_unique<ToggleHelp>(this);
addAndMakeVisible(*toggleHelp);

accessibleOrderWeakRefs.push_back(menuPicker.get());
accessibleOrderWeakRefs.push_back(menuPicker->hamburger.get());
accessibleOrderWeakRefs.push_back(menuPicker->up.get());
Expand All @@ -1131,8 +1193,7 @@ AWConsolidatedAudioProcessorEditor::AWConsolidatedAudioProcessorEditor(
accessibleOrderWeakRefs.push_back(k.get());
accessibleOrderWeakRefs.push_back(docBodyLabel.get());
accessibleOrderWeakRefs.push_back(docBodyEd.get());

resizeDocArea();
accessibleOrderWeakRefs.push_back(toggleHelp.get());

juce::PropertiesFile::Options options;
options.applicationName = "AirwindowsConsolidated";
Expand All @@ -1152,6 +1213,9 @@ AWConsolidatedAudioProcessorEditor::AWConsolidatedAudioProcessorEditor(

auto cs = properties->getIntValue("colorStrategy", (int)ColorStrategy::FOLLOW_SYSTEM);
updateColorStrategy((ColorStrategy)cs, false);

resized();
sizeBasedOnDocAreaDisplay();
}

AWConsolidatedAudioProcessorEditor::~AWConsolidatedAudioProcessorEditor()
Expand Down Expand Up @@ -1207,6 +1271,17 @@ void AWConsolidatedAudioProcessorEditor::idle()

void AWConsolidatedAudioProcessorEditor::resizeDocArea()
{
if (!isDocDisplayed())
{
docBodyLabel->setVisible(false);
docBodyEd->setVisible(false);
return;
}
else
{
docBodyLabel->setVisible(true);
docBodyEd->setVisible(true);
}
docString = AirwinRegistry::documentationStringFor(processor.curentProcessorIndex);
docHeader = docString.upToFirstOccurrenceOf("\n", false, false);
docString = docString.fromFirstOccurrenceOf("\n", false, false).trim();
Expand Down Expand Up @@ -1236,7 +1311,40 @@ void AWConsolidatedAudioProcessorEditor::resizeDocArea()

void AWConsolidatedAudioProcessorEditor::handleAsyncUpdate() {}

void AWConsolidatedAudioProcessorEditor::resized() {}
void AWConsolidatedAudioProcessorEditor::resized() {
if (!properties || !menuPicker)
{
// not set up yet
return;
}

auto idd = isDocDisplayed();
resizeDocArea();

auto fa = getLocalBounds()
.withHeight(40)
.withY(getHeight() - 40)
.withTrimmedLeft(100)
.withTrimmedRight(100);
awTag->setBounds(fa);

menuPicker->setBounds(getLocalBounds().reduced(5).withHeight(60));

for (const auto &l : labels)
{
if (idd)
l->setSize(180, l->getHeight());
else
{
auto w = getWidth() - 5 - l->getX();
l->setSize(w, l->getHeight());
}
}

auto ta = getLocalBounds().withTrimmedTop(getHeight() - 40)
.withTrimmedLeft(5).withWidth(100);
toggleHelp->setBounds(ta);
}

void AWConsolidatedAudioProcessorEditor::paint(juce::Graphics &g)
{
Expand All @@ -1257,7 +1365,7 @@ void AWConsolidatedAudioProcessorEditor::paint(juce::Graphics &g)
g.setFont(lnf->lookupFont(dateFooter));
g.setColour(findColour(ColourIds::footerForeground));

g.drawText(std::string("Build : ") + __DATE__, fa.reduced(3), juce::Justification::bottomRight);
g.drawText(__DATE__, fa.reduced(3), juce::Justification::bottomRight);

if (clipperIcon)
{
Expand Down Expand Up @@ -1414,6 +1522,12 @@ void AWConsolidatedAudioProcessorEditor::showMenu()

settingsMenu.addSubMenu("Documentation Font", fsMenu);

settingsMenu.addItem("Show Documentation", true,
isDocDisplayed(), [w = juce::Component::SafePointer(this)](){
if (w)
w->toggleDocDisplay();
});

settingsMenu.addSeparator();

auto isRO = properties->getBoolValue("editorIsReadOnly");
Expand Down Expand Up @@ -1618,7 +1732,38 @@ juce::Font AWLookAndFeel::lookupFont(FontIDs fid) const
case dateFooter:
return juce::Font(firaMono).withHeight(14);

case hideDoc:
return juce::Font(jakartaSansMedium).withHeight(16);
default:
jassertfalse;
return juce::Font("Comic Sans MS", 24, juce::Font::bold);
}
}
}

bool AWConsolidatedAudioProcessorEditor::isDocDisplayed()
{
if (!properties)
return true;

return properties->getBoolValue("isDocDisplayed", true);
}

void AWConsolidatedAudioProcessorEditor::toggleDocDisplay()
{
auto res = properties->getBoolValue("isDocDisplayed", true);
properties->setValue("isDocDisplayed", !res);
sizeBasedOnDocAreaDisplay();
}
void AWConsolidatedAudioProcessorEditor::sizeBasedOnDocAreaDisplay()
{
resizeDocArea();
if (isDocDisplayed())
{
setSize(baseWidth, baseHeight);
}
else
{
setSize(baseWidth - 270, baseHeight);
}
repaint();
}
20 changes: 13 additions & 7 deletions src-juce/AWConsolidatedEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@
//==============================================================================
/**
*/
struct DocPanel;
struct ParamKnob;
struct ParamDisp;
struct Picker;
struct ToggleHelp;

enum ColourIds
{
gradientStart,
gradientStop,
jog,
jogHovered,
jogStroke,
help,
helpHovered,
hamburger,
hamburgerHovered,
hamburgerStroke,
Expand Down Expand Up @@ -67,15 +70,13 @@ enum FontIDs
paramTitle, // juce::Font(editor->jakartaSansMedium).withHeight(14)
paramNoParamas, // juce::Font(editor->jakartaSansSemi).withHeight(20)


// if (properties)
// fontOffset = properties->getIntValue("docFontSize", 0);

documentationLabel, // juce::Font(jakartaSansMedium).withHeight(18)
documentationBody, // juce::Font(jakartaSansMedium).withHeight(15)

airwindowsFooter, // jakartaSaneSmi at 28
dateFooter // medium 12
dateFooter, // medium 12

hideDoc // medium 17
};
struct AWLookAndFeel : public juce::LookAndFeel_V4
{
Expand Down Expand Up @@ -127,7 +128,7 @@ class AWConsolidatedAudioProcessorEditor : public juce::AudioProcessorEditor,
// access the processor object that created it.
AWConsolidatedAudioProcessor &processor;

static constexpr int baseWidth = 400, baseHeight = 600;
static constexpr int baseWidth = 600, baseHeight = 600;

struct IdleTimer : juce::Timer
{
Expand All @@ -150,6 +151,11 @@ class AWConsolidatedAudioProcessorEditor : public juce::AudioProcessorEditor,
std::unique_ptr<juce::Label> docBodyLabel;

void resizeDocArea();
bool isDocDisplayed();
void toggleDocDisplay();
void sizeBasedOnDocAreaDisplay();
std::unique_ptr<ToggleHelp> toggleHelp;


juce::String docString, docHeader;

Expand Down

0 comments on commit 05f7190

Please sign in to comment.