Skip to content

Commit

Permalink
Cleaned up interface
Browse files Browse the repository at this point in the history
  • Loading branch information
ffAudio committed May 25, 2024
1 parent 4d9513a commit 2f7e6c0
Show file tree
Hide file tree
Showing 17 changed files with 273 additions and 273 deletions.
2 changes: 1 addition & 1 deletion .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ PenaltyExcessCharacter: '1'
PenaltyReturnTypeOnItsOwnLine: '20'
PointerAlignment: Left
ReflowComments: 'false'
SortIncludes: 'true'
SortIncludes: 'false'
SortUsingDeclarations: 'true'
SpaceAfterCStyleCast: 'true'
SpaceAfterLogicalNot: 'false'
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ jobs:
name: ${{ matrix.os }} - ${{ matrix.build_type }}
strategy:
matrix:
os: [macos-13, windows-latest]
os: [macos-latest, windows-latest]
build_type: [Debug, Release]
fail-fast: false

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: recursive

Expand All @@ -43,7 +43,7 @@ jobs:
echo PLUGINVAL_PATH=$(pwd)/$PLUGINVAL_BINARY >> $GITHUB_OUTPUT
- name: Configure CMake
run: cmake --preset maintainer --log-level=VERBOSE -D PLUGINVAL_PROGRAM=${{ steps.pluginval.outputs.PLUGINVAL_PATH }}
run: cmake --preset maintainer --log-level=VERBOSE -D PLUGINVAL_PROGRAM=${{ steps.pluginval.outputs.PLUGINVAL_PATH }} -DJUCE_SILENCE_XCODE_15_LINKER_WARNING=1

- name: Build
run: cmake --build --preset maintainer --config ${{ matrix.build_type }}
Expand Down
2 changes: 1 addition & 1 deletion Examples/PlayerExample/Source/MainComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,5 +184,5 @@ void MainComponent::paint (juce::Graphics& g)

void MainComponent::resized()
{
magicBuilder.updateLayout();
magicBuilder.updateLayout (getLocalBounds());
}
2 changes: 1 addition & 1 deletion modules/foleys_gui_magic/Editor/foleys_GUITreeEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ void GUITreeEditor::resized()
treeView.setBounds (bounds);
}

void GUITreeEditor::setValueTree (juce::ValueTree& refTree)
void GUITreeEditor::setValueTree (const juce::ValueTree& refTree)
{
auto restorer = treeView.getRootItem() != nullptr ? treeView.getOpennessState (true)
: std::unique_ptr<juce::XmlElement>();
Expand Down
2 changes: 1 addition & 1 deletion modules/foleys_gui_magic/Editor/foleys_GUITreeEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class GUITreeEditor : public juce::Component,
void paint (juce::Graphics&) override;
void resized() override;

void setValueTree (juce::ValueTree& refTree);
void setValueTree (const juce::ValueTree& refTree);

void updateTree();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,10 @@ void StylePropertyComponent::resized()

void StylePropertyComponent::mouseDoubleClick (const juce::MouseEvent&)
{
#if FOLEYS_SHOW_GUI_EDITOR_PALLETTE
if (inheritedFrom.isValid())
builder.getMagicToolBox().setNodeToEdit (inheritedFrom);
#endif
}

void StylePropertyComponent::valueTreePropertyChanged (juce::ValueTree& tree, const juce::Identifier& changedProperty)
Expand Down
158 changes: 69 additions & 89 deletions modules/foleys_gui_magic/Editor/foleys_ToolBox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,11 @@ namespace foleys

namespace IDs
{
static juce::String lastLocation { "lastLocation" };
static juce::String lastLocation { "lastLocation" };
}

ToolBox::ToolBox (juce::Component* parentToUse, MagicGUIBuilder& builderToControl)
: parent (parentToUse),
builder (builderToControl),
undo (builder.getUndoManager())
: parent (parentToUse), builder (builderToControl), undo (builder.getUndoManager())
{
appProperties.setStorageParameters (getApplicationPropertyStorage());

Expand All @@ -54,11 +52,11 @@ ToolBox::ToolBox (juce::Component* parentToUse, MagicGUIBuilder& builderToContro
setAlwaysOnTop (properties->getValue ("alwaysOnTop") == "true");
}

EditorColours::background = findColour (juce::ResizableWindow::backgroundColourId);
EditorColours::outline = juce::Colours::silver;
EditorColours::text = juce::Colours::white;
EditorColours::disabledText = juce::Colours::grey;
EditorColours::removeButton = juce::Colours::darkred;
EditorColours::background = findColour (juce::ResizableWindow::backgroundColourId);
EditorColours::outline = juce::Colours::silver;
EditorColours::text = juce::Colours::white;
EditorColours::disabledText = juce::Colours::grey;
EditorColours::removeButton = juce::Colours::darkred;
EditorColours::selectedBackground = juce::Colours::darkorange;

setOpaque (true);
Expand All @@ -81,40 +79,36 @@ ToolBox::ToolBox (juce::Component* parentToUse, MagicGUIBuilder& builderToContro
file.addItem ("Load XML", [&] { loadDialog(); });
file.addItem ("Save XML", [&] { saveDialog(); });
file.addSeparator();
file.addItem ("Clear", [&] { builder.clearGUI(); });
file.addItem ("Clear", [&] { builder.clearGUI(); });
file.addSeparator();
file.addItem ("Refresh", [&] { builder.updateComponents(); });
file.addItem ("Refresh", [&] { builder.updateComponents(); });
file.showMenuAsync (juce::PopupMenu::Options());
};

viewMenu.onClick = [&]
{
juce::PopupMenu view;

view.addItem ("Left", true, positionOption == left, [&]() { setToolboxPosition (left); });
view.addItem ("Left", true, positionOption == left, [&]() { setToolboxPosition (left); });
view.addItem ("Right", true, positionOption == right, [&]() { setToolboxPosition (right); });
view.addItem ("Detached", true, positionOption == detached, [&]() { setToolboxPosition (detached); });
view.addSeparator();
view.addItem ("AlwaysOnTop", true, isAlwaysOnTop(), [&]() {
setAlwaysOnTop ( ! isAlwaysOnTop() );
if (auto* properties = appProperties.getUserSettings())
properties->setValue ("alwaysOnTop", isAlwaysOnTop() ? "true" : "false");
});
view.addItem ("AlwaysOnTop", true, isAlwaysOnTop(),
[&]()
{
setAlwaysOnTop (!isAlwaysOnTop());
if (auto* properties = appProperties.getUserSettings())
properties->setValue ("alwaysOnTop", isAlwaysOnTop() ? "true" : "false");
});

view.showMenuAsync (juce::PopupMenu::Options());
};

undoButton.onClick = [&]
{
undo.undo();
};
undoButton.onClick = [&] { undo.undo(); };

editSwitch.setClickingTogglesState (true);
editSwitch.setColour (juce::TextButton::buttonOnColourId, EditorColours::selectedBackground);
editSwitch.onStateChange = [&]
{
builder.setEditMode (editSwitch.getToggleState());
};
editSwitch.onStateChange = [&] { builder.setEditMode (editSwitch.getToggleState()); };

addAndMakeVisible (treeEditor);
addAndMakeVisible (resizer1);
Expand All @@ -140,11 +134,14 @@ ToolBox::ToolBox (juce::Component* parentToUse, MagicGUIBuilder& builderToContro

stateWasReloaded();

builder.addListener (this);
parent->addKeyListener (this);
}

ToolBox::~ToolBox()
{
builder.removeListener (this);

if (parent != nullptr)
parent->removeKeyListener (this);

Expand All @@ -169,47 +166,43 @@ void ToolBox::mouseDrag (const juce::MouseEvent& e)

void ToolBox::loadDialog()
{
auto dialog = std::make_unique<FileBrowserDialog>(NEEDS_TRANS ("Cancel"), NEEDS_TRANS ("Load"),
juce::FileBrowserComponent::openMode | juce::FileBrowserComponent::canSelectFiles,
lastLocation, getFileFilter());
dialog->setAcceptFunction ([&, dlg=dialog.get()]
{
loadGUI (dlg->getFile());
builder.closeOverlayDialog();
});
dialog->setCancelFunction ([&]
{
builder.closeOverlayDialog();
});
auto dialog = std::make_unique<FileBrowserDialog> (NEEDS_TRANS ("Cancel"), NEEDS_TRANS ("Load"),
juce::FileBrowserComponent::openMode | juce::FileBrowserComponent::canSelectFiles, lastLocation, getFileFilter());
dialog->setAcceptFunction (
[&, dlg = dialog.get()]
{
loadGUI (dlg->getFile());
builder.closeOverlayDialog();
});
dialog->setCancelFunction ([&] { builder.closeOverlayDialog(); });

builder.showOverlayDialog (std::move (dialog));
}

void ToolBox::saveDialog()
{
auto dialog = std::make_unique<FileBrowserDialog>(NEEDS_TRANS ("Cancel"), NEEDS_TRANS ("Save"),
juce::FileBrowserComponent::saveMode | juce::FileBrowserComponent::canSelectFiles | juce::FileBrowserComponent::warnAboutOverwriting,
lastLocation, getFileFilter());
dialog->setAcceptFunction ([&, dlg=dialog.get()]
{
auto xmlFile = dlg->getFile();
saveGUI (xmlFile);
setLastLocation (xmlFile);

builder.closeOverlayDialog();
});
dialog->setCancelFunction ([&]
{
builder.closeOverlayDialog();
});
auto dialog = std::make_unique<FileBrowserDialog> (NEEDS_TRANS ("Cancel"), NEEDS_TRANS ("Save"),
juce::FileBrowserComponent::saveMode | juce::FileBrowserComponent::canSelectFiles
| juce::FileBrowserComponent::warnAboutOverwriting,
lastLocation, getFileFilter());
dialog->setAcceptFunction (
[&, dlg = dialog.get()]
{
auto xmlFile = dlg->getFile();
saveGUI (xmlFile);
setLastLocation (xmlFile);

builder.closeOverlayDialog();
});
dialog->setCancelFunction ([&] { builder.closeOverlayDialog(); });

builder.showOverlayDialog (std::move (dialog));
}

void ToolBox::loadGUI (const juce::File& xmlFile)
{
juce::FileInputStream stream (xmlFile);
auto tree = juce::ValueTree::fromXml (stream.readEntireStreamAsString());
auto tree = juce::ValueTree::fromXml (stream.readEntireStreamAsString());

if (tree.isValid() && tree.getType() == IDs::magic)
{
Expand Down Expand Up @@ -267,36 +260,22 @@ void ToolBox::paint (juce::Graphics& g)

void ToolBox::resized()
{
auto bounds = getLocalBounds().reduced (2).withTop (24);
auto bounds = getLocalBounds().reduced (2).withTop (24);
auto buttons = bounds.removeFromTop (24);
auto w = buttons.getWidth() / 5;
auto w = buttons.getWidth() / 5;
fileMenu.setBounds (buttons.removeFromLeft (w));
viewMenu.setBounds (buttons.removeFromLeft (w));
undoButton.setBounds (buttons.removeFromLeft (w));
editSwitch.setBounds (buttons.removeFromLeft (w));

juce::Component* comps[] = {
&treeEditor,
&resizer1,
&propertiesEditor,
&resizer3,
&palette
};
juce::Component* comps[] = { &treeEditor, &resizer1, &propertiesEditor, &resizer3, &palette };

resizeManager.layOutComponents (comps, 5,
bounds.getX(),
bounds.getY(),
bounds.getWidth(),
bounds.getHeight(),
true, true);
resizeManager.layOutComponents (comps, 5, bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight(), true, true);

const int resizeCornerSize { 20 };
const int resizeCornerSize { 20 };
const auto bottomRight { getLocalBounds().getBottomRight() };

juce::Rectangle<int> resizeCornerArea { bottomRight.getX() - resizeCornerSize,
bottomRight.getY() - resizeCornerSize,
resizeCornerSize,
resizeCornerSize };
juce::Rectangle<int> resizeCornerArea { bottomRight.getX() - resizeCornerSize, bottomRight.getY() - resizeCornerSize, resizeCornerSize, resizeCornerSize };
resizeCorner.setBounds (resizeCornerArea);
}

Expand Down Expand Up @@ -341,7 +320,7 @@ bool ToolBox::keyPressed (const juce::KeyPress& key)

if (key.isKeyCode ('V') && key.getModifiers().isCommandDown())
{
auto paste = juce::ValueTree::fromXml (juce::SystemClipboard::getTextFromClipboard());
auto paste = juce::ValueTree::fromXml (juce::SystemClipboard::getTextFromClipboard());
auto selected = builder.getSelectedNode();
if (paste.isValid() && selected.isValid())
builder.draggedItemOnto (paste, selected);
Expand All @@ -352,6 +331,11 @@ bool ToolBox::keyPressed (const juce::KeyPress& key)
return false;
}

void ToolBox::selectedItem (const juce::ValueTree& node)
{
setSelectedNode (node);
}

void ToolBox::timerCallback (int timer)
{
if (timer == Timers::WindowDrag)
Expand All @@ -362,7 +346,7 @@ void ToolBox::timerCallback (int timer)

void ToolBox::setToolboxPosition (PositionOption position)
{
positionOption = position;
positionOption = position;
const auto isDetached = (positionOption == PositionOption::detached);

auto* userSettings = appProperties.getUserSettings();
Expand Down Expand Up @@ -391,7 +375,7 @@ void ToolBox::updateToolboxPosition()
setBounds (parentBounds.getRight(), parentBounds.getY(), width, height);
}

void ToolBox::setLastLocation(juce::File file)
void ToolBox::setLastLocation (juce::File file)
{
if (file.getFullPathName().isEmpty())
return;
Expand All @@ -402,28 +386,24 @@ void ToolBox::setLastLocation(juce::File file)
lastLocation = file;

autoSaveFile.deleteFile();
autoSaveFile = lastLocation.getParentDirectory()
.getNonexistentChildFile (file.getFileNameWithoutExtension() + ".sav", ".xml");
autoSaveFile = lastLocation.getParentDirectory().getNonexistentChildFile (file.getFileNameWithoutExtension() + ".sav", ".xml");

startTimer (Timers::AutoSave, 10000);
}

std::unique_ptr<juce::FileFilter> ToolBox::getFileFilter()
{
return std::make_unique<juce::WildcardFileFilter>("*.xml", "*", "XML files");
return std::make_unique<juce::WildcardFileFilter> ("*.xml", "*", "XML files");
}

juce::String ToolBox::positionOptionToString (PositionOption option)
{
switch (option)
{
case PositionOption::right:
return "right";
case PositionOption::detached:
return "detached";
case PositionOption::right: return "right";
case PositionOption::detached: return "detached";
case PositionOption::left:
default:
return "left";
default: return "left";
}
}

Expand All @@ -440,11 +420,11 @@ ToolBox::PositionOption ToolBox::positionOptionFromString (const juce::String& t
juce::PropertiesFile::Options ToolBox::getApplicationPropertyStorage()
{
juce::PropertiesFile::Options options;
options.folderName = "FoleysFinest";
options.applicationName = "foleys_gui_magic";
options.filenameSuffix = ".settings";
options.folderName = "FoleysFinest";
options.applicationName = "foleys_gui_magic";
options.filenameSuffix = ".settings";
options.osxLibrarySubFolder = "Application Support";
return options;
}

} // namespace foleys
} // namespace foleys
Loading

0 comments on commit 2f7e6c0

Please sign in to comment.