WE Core
Loading...
Searching...
No Matches
LabelReadoutSlider.h
Go to the documentation of this file.
1/*
2 * File: LabelReadoutSlider.h
3 *
4 * Version: 1.0.0
5 *
6 * Created: 01/07/2020
7 *
8 * This file is part of WECore.
9 *
10 * WECore is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * WECore is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with WECore. If not, see <http://www.gnu.org/licenses/>.
22 *
23 */
24
25#pragma once
26
27#include "../JuceLibraryCode/JuceHeader.h"
29
30namespace WECore::JUCEPlugin {
31
35 class SliderLabelUpdater : public juce::Slider {
36 public:
37 explicit SliderLabelUpdater(const juce::String& componentName) : Slider(componentName) {}
38 virtual ~SliderLabelUpdater() = default;
39
42 virtual void mouseEnter(const juce::MouseEvent& event) override {
43 Slider::mouseEnter(event);
44 _updateLabel(event);
45 }
46
47 virtual void mouseMove(const juce::MouseEvent& event) override {
48 Slider::mouseMove(event);
49 _updateLabel(event);
50 }
51
52 virtual void mouseExit(const juce::MouseEvent& event) override {
53 Slider::mouseExit(event);
55 }
56
57 virtual void mouseDoubleClick(const juce::MouseEvent& event) override {
58 Slider::mouseDoubleClick(event);
59 _updateLabel(event);
60 }
61
62 virtual void mouseDrag(const juce::MouseEvent& event) override {
63 Slider::mouseDrag(event);
64 _updateLabel(event);
65 }
66
67 virtual void mouseWheelMove(const juce::MouseEvent& event,
68 const juce::MouseWheelDetails& wheel) override {
69 Slider::mouseWheelMove(event, wheel);
70 _updateLabel(event);
71 }
74 private:
78 virtual void _updateLabel(const juce::MouseEvent& event) = 0;
79
83 virtual void _resetLabel() = 0;
84 };
85
89 template <class T>
91 public:
92 explicit LabelReadoutSlider(const juce::String& componentName) : SliderLabelUpdater(componentName),
93 _isRunning(false),
94 _valueToString([](T value) { return juce::String(value, 2); }) {}
95
96 virtual ~LabelReadoutSlider() = default;
97
104 inline void start(juce::Label* targetLabel, juce::String defaultText);
105 inline void start(juce::TextButton* targetButton, juce::String defaultText);
114 inline void stop();
115
116 void setValueToString(std::function<juce::String(T)> valueToString) { _valueToString = valueToString; }
117
118 protected:
119 std::function<void(const juce::String&)> _targetCallback;
121 std::function<juce::String(T)> _valueToString;
122
123 private:
124 juce::String _defaultText;
125
126 static std::function<void(const juce::String&)> _labelToCallback(juce::Label* label) {
127 return [label](const juce::String& text) { label->setText(text, juce::dontSendNotification); };
128 }
129
130 static std::function<void(const juce::String&)> _textButtonToCallback(juce::TextButton* button) {
131 return [button](const juce::String& text) { button->setButtonText(text); };
132 }
133
134 inline virtual void _updateLabel(const juce::MouseEvent& event) override;
135
136 inline virtual void _resetLabel() override;
137 };
138
139 template <class T>
140 void LabelReadoutSlider<T>::start(juce::Label* targetLabel, juce::String defaultText) {
141 _targetCallback = _labelToCallback(targetLabel);
142 _defaultText = defaultText;
143 _isRunning = true;
144 }
145
146 template <class T>
147 void LabelReadoutSlider<T>::start(juce::TextButton* targetButton, juce::String defaultText) {
148 _targetCallback = _textButtonToCallback(targetButton);
149 _defaultText = defaultText;
150 _isRunning = true;
151 }
152
153 template <class T>
155 _isRunning = false;
156 }
157
158 template <class T>
159 void LabelReadoutSlider<T>::_updateLabel(const juce::MouseEvent& /*event*/) {
160 if (_isRunning) {
161 _targetCallback(_valueToString(getValue()));
162 }
163 }
164
165 template <class T>
167 if (_isRunning) {
168 _targetCallback(_defaultText);
169 }
170 }
171}
static std::function< void(const juce::String &)> _textButtonToCallback(juce::TextButton *button)
std::function< juce::String(T)> _valueToString
std::function< void(const juce::String &)> _targetCallback
void start(juce::Label *targetLabel, juce::String defaultText)
void setValueToString(std::function< juce::String(T)> valueToString)
LabelReadoutSlider(const juce::String &componentName)
static std::function< void(const juce::String &)> _labelToCallback(juce::Label *label)
virtual void _updateLabel(const juce::MouseEvent &event) override
virtual void mouseWheelMove(const juce::MouseEvent &event, const juce::MouseWheelDetails &wheel) override
virtual void mouseMove(const juce::MouseEvent &event) override
virtual void mouseEnter(const juce::MouseEvent &event) override
SliderLabelUpdater(const juce::String &componentName)
virtual void _updateLabel(const juce::MouseEvent &event)=0
virtual void mouseDrag(const juce::MouseEvent &event) override
virtual void mouseDoubleClick(const juce::MouseEvent &event) override
virtual void mouseExit(const juce::MouseEvent &event) override