Skip to content

Commit

Permalink
Add settings window
Browse files Browse the repository at this point in the history
  • Loading branch information
tobiashienzsch committed May 27, 2024
1 parent 62409ca commit 124bf1d
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 1 deletion.
2 changes: 2 additions & 0 deletions tool/RaumAkustik/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ target_sources(RaumAkustik
"application/Main.cpp"
"application/MenuBar.cpp"
"application/MenuBar.hpp"
"application/Settings.hpp"
"application/Settings.cpp"

"component/LevelMeter.cpp"
"component/LevelMeter.hpp"
Expand Down
7 changes: 7 additions & 0 deletions tool/RaumAkustik/application/MainComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ auto MainComponent::perform(juce::ApplicationCommandTarget::InvocationInfo const
case CommandIDs::saveAs: saveProject(); break;
case CommandIDs::undo: _undoManager.undo(); break;
case CommandIDs::redo: _undoManager.redo(); break;
case CommandIDs::settings: showSettingsWindow(); break;
case CommandIDs::fullscreen: toggleFullscreen(); break;
case CommandIDs::toggleLevelMeter:
_levelMeter.setVisible(not _levelMeter.isVisible());
Expand Down Expand Up @@ -214,6 +215,12 @@ auto MainComponent::loadProject() -> void
reloadUI();
}

auto MainComponent::showSettingsWindow() -> void
{
auto const background = getLookAndFeel().findColour(juce::ResizableWindow::backgroundColourId);
_settingsWindow.showInDialogBox("Settings", 640, 400, background);
}

auto MainComponent::reloadUI() -> void
{
auto tabIndex = _tabs.getCurrentTabIndex();
Expand Down
3 changes: 3 additions & 0 deletions tool/RaumAkustik/application/MainComponent.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "application/MenuBar.hpp"
#include "application/Settings.hpp"
#include "component/LevelMeter.hpp"
#include "component/ScrollingWaveform.hpp"
#include "editor/AudioInterfaceEditor.hpp"
Expand Down Expand Up @@ -35,6 +36,7 @@ struct MainComponent final
auto showAboutMessage() -> void;
auto saveProject() -> void;
auto loadProject() -> void;
auto showSettingsWindow() -> void;
auto reloadUI() -> void;
auto toggleFullscreen() -> void;

Expand All @@ -45,6 +47,7 @@ struct MainComponent final
LookAndFeel _lnf;

MenuBar _menuBar{_commandManager};
SettingsWindow _settingsWindow{_commandManager};

ProjectTreeViewRoot _treeViewRoot;
juce::TreeView _projectTree;
Expand Down
74 changes: 74 additions & 0 deletions tool/RaumAkustik/application/Settings.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include "Settings.hpp"

#include "look/LookAndFeel.hpp"

#include "BinaryData.hpp"

namespace ra {

namespace {

[[nodiscard]] auto getIcon(char const* name) -> std::unique_ptr<juce::Drawable>
{
auto size = 0;
auto const* data = mcbd::getNamedResource(name, size);
jassert(data != nullptr);

auto svg = juce::Drawable::createFromImageData(data, static_cast<size_t>(size));
jassert(svg != nullptr);
return svg;
}

} // namespace

SettingsWindow::SettingsWindow(juce::ApplicationCommandManager& commandManager) : _commandManager{commandManager}
{
auto speaker = getIcon("speaker_svg");
auto shortcut = getIcon("save_svg");
addSettingsPage("Audio I/O", speaker.get(), speaker.get(), speaker.get());
addSettingsPage("Look", shortcut.get(), shortcut.get(), shortcut.get());
addSettingsPage("Shortcut", shortcut.get(), shortcut.get(), shortcut.get());

_commandManager.getKeyMappings()->addChangeListener(this);
}

SettingsWindow::~SettingsWindow() { _commandManager.getKeyMappings()->removeChangeListener(this); }

auto SettingsWindow::createComponentForPage(juce::String const& pageName) -> juce::Component*
{
if (pageName == "Audio I/O") {
auto foo = _tree.getPropertyAsValue("foo", nullptr);
auto bar = _tree.getPropertyAsValue("bar", nullptr);

auto panel = std::make_unique<juce::PropertyPanel>();
panel->addProperties(juce::Array<juce::PropertyComponent*>{
std::make_unique<juce::SliderPropertyComponent>(foo, "Foo", 0.0, 1.0, 0.0).release(),
std::make_unique<juce::TextPropertyComponent>(bar, "Bar", 32, false).release(),
});
return panel.release();
}

if (pageName == "Look") {
auto panel = std::make_unique<juce::PropertyPanel>();
panel->addProperties(juce::Array<juce::PropertyComponent*>{});
return panel.release();
}

if (pageName == "Shortcut") {
auto& mappings = *_commandManager.getKeyMappings();
return std::make_unique<juce::KeyMappingEditorComponent>(mappings, true).release();
}

jassertfalse;
return nullptr;
}

auto SettingsWindow::changeListenerCallback(juce::ChangeBroadcaster* source) -> void
{
if (auto* mapping = _commandManager.getKeyMappings(); mapping == source) {
// auto xml = mapping->createXml(true);
// getApplicationSettings().setKeyMapping(*xml);
}
}

} // namespace ra
22 changes: 22 additions & 0 deletions tool/RaumAkustik/application/Settings.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

#include <juce_gui_extra/juce_gui_extra.h>

namespace ra {

struct SettingsWindow final
: juce::PreferencesPanel
, juce::ChangeListener
{
explicit SettingsWindow(juce::ApplicationCommandManager& commandManager);
~SettingsWindow() override;

auto createComponentForPage(juce::String const& pageName) -> juce::Component* override;
auto changeListenerCallback(juce::ChangeBroadcaster* source) -> void override;

private:
juce::ApplicationCommandManager& _commandManager;
juce::ValueTree _tree{"Settings"};
};

} // namespace ra
2 changes: 1 addition & 1 deletion tool/RaumAkustik/look/LookAndFeel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace ra {

LookAndFeel::LookAndFeel() : juce::LookAndFeel_V4{getDarkColorScheme()} {}
LookAndFeel::LookAndFeel() : juce::LookAndFeel_V4{getLightColorScheme()} {}

auto getDarkColorScheme() -> juce::LookAndFeel_V4::ColourScheme
{
Expand Down

0 comments on commit 124bf1d

Please sign in to comment.