Skip to content

Commit

Permalink
Towards 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 6, 2024
1 parent 8f9eaad commit fb4bb33
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 12 deletions.
149 changes: 139 additions & 10 deletions src-juce/AWConsolidatedEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,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 @@ -106,6 +109,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 @@ -411,6 +417,10 @@ 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())
{
teb = teb.expanded(70, 0);
}
listBox->setBounds(teb);

populateForTypein();
Expand Down Expand Up @@ -618,6 +628,53 @@ 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.setColour(findColour(ColourIds::help));
if (isHovered)
g.setColour(findColour(ColourIds::helpHovered));

g.setFont(juce::Font(editor->jakartaSansMedium).withHeight(16));
std::string txt = (editor->isDocDisplayed() ? "Hide Doc": "Show Doc");
g.drawText(txt, getLocalBounds(), juce::Justification::centredRight);
}

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 @@ -1018,7 +1075,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 @@ -1112,14 +1169,11 @@ AWConsolidatedAudioProcessorEditor::AWConsolidatedAudioProcessorEditor(
findColour(ColourIds::documentationForeground));
addAndMakeVisible(*docBodyEd);
awTag = std::make_unique<AWLink>(jakartaSansSemi);
auto fa = getLocalBounds()
.withHeight(40)
.withY(getHeight() - 40)
.withTrimmedLeft(100)
.withTrimmedRight(100);
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 @@ -1128,8 +1182,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 @@ -1148,6 +1201,9 @@ AWConsolidatedAudioProcessorEditor::AWConsolidatedAudioProcessorEditor(

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

resized();
sizeBasedOnDocAreaDisplay();
}

AWConsolidatedAudioProcessorEditor::~AWConsolidatedAudioProcessorEditor()
Expand Down Expand Up @@ -1202,6 +1258,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 @@ -1235,7 +1302,41 @@ 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(getWidth() - 100).withTrimmedRight(5)
.withHeight(25);
toggleHelp->setBounds(ta);
}

void AWConsolidatedAudioProcessorEditor::paint(juce::Graphics &g)
{
Expand Down Expand Up @@ -1580,3 +1681,31 @@ void AWConsolidatedAudioProcessorEditor::darkModeSettingChanged()

repaint();
}

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 - 200, baseHeight);
}
repaint();
}
12 changes: 10 additions & 2 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 @@ -100,7 +103,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 @@ -123,6 +126,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 fb4bb33

Please sign in to comment.