Skip to content

Commit

Permalink
Update ForceNewDirectoryButton
Browse files Browse the repository at this point in the history
  • Loading branch information
medengineer committed Aug 30, 2024
1 parent 9780519 commit 8384d89
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 11 deletions.
57 changes: 47 additions & 10 deletions Source/UI/ControlPanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,41 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
const int SIZE_AUDIO_EDITOR_MAX_WIDTH = 500;
//const int SIZE_AUDIO_EDITOR_MIN_WIDTH = 250;

ForceNewDirectoryButton::ForceNewDirectoryButton () : Button ("ForceNewDirectory")
{
XmlDocument xmlDoc (R"(
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-lock" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="currentColor" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z" fill="currentColor" />
<path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0" fill="currentColor" />
<path d="M8 11v-4a4 4 0 1 1 8 0v4" fill="currentColor"/>
</svg>)");

forceNewDirectoryIcon = Drawable::createFromSVG (*xmlDoc.getDocumentElement().get());

setClickingTogglesState (true);

}

void ForceNewDirectoryButton::paintButton (Graphics& g, bool isMouseOver, bool isButtonDown)
{
Colour buttonColour;

if (getToggleState())
buttonColour = findColour (ThemeColours::highlightedFill);
else
buttonColour = findColour (ThemeColours::defaultText);

if (isMouseOver)
buttonColour = buttonColour.brighter (0.2f);

forceNewDirectoryIcon->replaceColour (Colours::black, buttonColour);

forceNewDirectoryIcon->drawWithin (g, getLocalBounds().toFloat(), RectanglePlacement::centred, 1.0f);

forceNewDirectoryIcon->replaceColour (buttonColour, Colours::black);
}

FilenameEditorButton::FilenameEditorButton()
: TextButton ("Filename Editor")
{
Expand Down Expand Up @@ -387,19 +422,17 @@ ControlPanel::ControlPanel (ProcessorGraph* graph_, AudioComponent* audio_, bool

newDirectoryButton = std::make_unique<UtilityButton> ("+");
newDirectoryButton->setFont (FontOptions ("Silkscreen", "Regular", 15));
newDirectoryButton->setEnabledState (false);
newDirectoryButton->setEnabled (false);
newDirectoryButton->addListener (this);
newDirectoryButton->setTooltip ("Start a new data directory for next recording");
newDirectoryButton->setToggleState (true, sendNotification);
newDirectoryButton->setClickingTogglesState (true);
addChildComponent (newDirectoryButton.get());

forceNewDirectoryButton = std::make_unique<UtilityButton> ("F");
forceNewDirectoryButton->setFont (FontOptions ("Silkscreen", "Regular", 15));
forceNewDirectoryButton->setEnabledState (true);
forceNewDirectoryButton = std::make_unique<ForceNewDirectoryButton> ();
forceNewDirectoryButton->setEnabled (true);
forceNewDirectoryButton->addListener (this);
forceNewDirectoryButton->setTooltip ("Force a new data directory for each recording");
forceNewDirectoryButton->setClickingTogglesState (true);
addChildComponent (forceNewDirectoryButton.get());

clock = std::make_unique<Clock>();
Expand Down Expand Up @@ -890,12 +923,12 @@ void ControlPanel::stopRecording()
if (forceNewDirectoryButton->getToggleState())
{
newDirectoryButton->setToggleState (true, dontSendNotification);
newDirectoryButton->setEnabledState (false);
newDirectoryButton->setEnabled (false);
}
else
{
newDirectoryButton->setToggleState (false, dontSendNotification);
newDirectoryButton->setEnabledState (true);
newDirectoryButton->setEnabled (true);
}

recordButton->updateImages (false);
Expand Down Expand Up @@ -953,15 +986,19 @@ void ControlPanel::buttonClicked (Button* button)

if (button == newDirectoryButton.get())
{
//Setting the button state only takes affect on the next recording
//Setting the button state only takes effect on the next recording
return;
}

if (button == forceNewDirectoryButton.get())
{
if (button->getToggleState()) {
newDirectoryButton->setToggleState (true, dontSendNotification);
newDirectoryButton->setEnabledState (false);
newDirectoryButton->setEnabled (false);
}
else
{
newDirectoryButton->setEnabled (true);
}
return;
}
Expand Down Expand Up @@ -1055,7 +1092,7 @@ void ControlPanel::setSelectedRecordEngine (int index)
re = recordEngines[index]->instantiateEngine();
re->registerManager (recordEngines[index]);

newDirectoryButton->setEnabledState (false);
newDirectoryButton->setEnabled (false);
clock->resetRecordingTime();

lastEngineIndex = index;
Expand Down
23 changes: 22 additions & 1 deletion Source/UI/ControlPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,27 @@
#include "LookAndFeel/CustomLookAndFeel.h"
#include <queue>

/**
Locks the new directory button to force new directories for each recording.
*/
class ForceNewDirectoryButton : public Button
{
public:
/** Constructor */
ForceNewDirectoryButton();

/** Destructor */
~ForceNewDirectoryButton() {}

void paintButton (Graphics& g, bool isMouseOver, bool isButtonDown) override;

private:

std::unique_ptr<Drawable> forceNewDirectoryIcon;
};

/**
Allows the user to specify custom file names,
Expand Down Expand Up @@ -461,7 +482,7 @@ class TESTABLE ControlPanel : public Component,
std::unique_ptr<DiskSpaceMeter> diskMeter;
std::unique_ptr<FilenameComponent> filenameComponent;
std::unique_ptr<UtilityButton> newDirectoryButton;
std::unique_ptr<UtilityButton> forceNewDirectoryButton;
std::unique_ptr<ForceNewDirectoryButton> forceNewDirectoryButton;
std::unique_ptr<CustomArrowButton> showHideRecordingOptionsButton;
std::unique_ptr<RecordButton> recordButton;
std::unique_ptr<ComboBox> recordSelector;
Expand Down

0 comments on commit 8384d89

Please sign in to comment.