Vital
Loading...
Searching...
No Matches
tempo_selector.cpp
Go to the documentation of this file.
1
3
4#include "tempo_selector.h"
5
6#include "paths.h"
7#include "skin.h"
9
11TempoSelector::TempoSelector(String name) : SynthSlider(name), free_slider_(nullptr),
12 tempo_slider_(nullptr), keytrack_transpose_slider_(nullptr),
13 keytrack_tune_slider_(nullptr) {
14 paintToImage(true);
15}
16
19void TempoSelector::mouseDown(const MouseEvent& e) {
20 if (e.mods.isPopupMenu()) {
22 return;
23 }
24
25 PopupItems options;
26 options.addItem(kSeconds, "Seconds");
27 options.addItem(kTempo, "Tempo");
28 options.addItem(kTempoDotted, "Tempo Dotted");
29 options.addItem(kTempoTriplet, "Tempo Triplets");
30 if (getMaximum() >= kKeytrack)
31 options.addItem(kKeytrack, "Keytrack");
32
33 parent_->showPopupSelector(this, Point<int>(0, getHeight()), options, [=](int value) { setValue(value); });
34}
35
38void TempoSelector::mouseUp(const MouseEvent& e) {
39 if (e.mods.isPopupMenu()) {
41 return;
42 }
43}
44
47 int menu_value = getValue();
48
49 free_slider_->setVisible(menu_value == kSeconds);
50 tempo_slider_->setVisible(menu_value != kSeconds && menu_value != kKeytrack);
51
52 if (keytrack_transpose_slider_)
53 keytrack_transpose_slider_->setVisible(menu_value == kKeytrack);
54 if (keytrack_tune_slider_)
55 keytrack_tune_slider_->setVisible(menu_value == kKeytrack);
56
58}
59
63void TempoSelector::paint(Graphics& g) {
64 g.setColour(findColour(Skin::kIconSelectorIcon, true));
65
66 Path path;
67 int value = getValue();
68 if (value == kSeconds)
69 path = Paths::clock();
70 else if (value == kTempo || value == kTempoDotted)
71 path = Paths::note();
72 else if (value == kTempoTriplet)
73 path = Paths::tripletNotes();
74 else if (value == kKeytrack)
76
77 g.fillPath(path, path.getTransformToScaleToFit(getLocalBounds().toFloat(), true));
78 if (value == kTempoDotted) {
79 float dot_width = getWidth() / 8.0f;
80 g.fillEllipse(3.0f * getWidth() / 4.0f - dot_width / 2.0f, getHeight() / 2.0f, dot_width, dot_width);
81 }
82}
83
86void TempoSelector::setFreeSlider(Slider* slider) {
87 bool free_slider = getValue() == kSeconds;
88
89 free_slider_ = slider;
90 free_slider_->setVisible(free_slider);
91}
92
95void TempoSelector::setTempoSlider(Slider* slider) {
96 bool visible = (getValue() != kSeconds) && (getValue() != kKeytrack);
97
98 tempo_slider_ = slider;
99 tempo_slider_->setVisible(visible);
100}
101
105 bool visible = getValue() == kKeytrack;
106
107 keytrack_transpose_slider_ = slider;
108 keytrack_transpose_slider_->setVisible(visible);
109}
110
114 bool visible = getValue() == kKeytrack;
115
116 keytrack_tune_slider_ = slider;
117 keytrack_tune_slider_->setVisible(visible);
118}
void paintToImage(bool paint)
Definition synth_slider.h:93
SynthSection * parent_
The parent SynthSection.
Definition synth_slider.h:289
static Path note()
Creates a musical note icon path.
Definition paths.h:219
static Path tripletNotes()
Creates a triplet notes icon path.
Definition paths.h:242
static Path clock()
Creates a clock icon path.
Definition paths.h:195
static Path keyboardBordered()
Definition paths.h:490
@ kIconSelectorIcon
Definition skin.h:183
void showPopupSelector(Component *source, Point< int > position, const PopupItems &options, std::function< void(int)> callback, std::function< void()> cancel={ })
Shows a popup selector with options.
Definition synth_section.cpp:119
A specialized slider with extended functionality for modulation, parameter control,...
Definition synth_slider.h:314
virtual void valueChanged() override
Called when the slider value changes. Notifies GUIs.
Definition synth_slider.cpp:375
virtual void mouseDown(const MouseEvent &e) override
Mouse event overrides for custom behavior.
Definition synth_slider.cpp:234
@ kSeconds
Seconds mode.
Definition tempo_selector.h:19
@ kTempo
Regular tempo mode.
Definition tempo_selector.h:20
@ kTempoDotted
Dotted tempo mode.
Definition tempo_selector.h:21
@ kTempoTriplet
Triplet tempo mode.
Definition tempo_selector.h:22
@ kKeytrack
Keytrack mode.
Definition tempo_selector.h:23
void valueChanged() override
Called when the slider value changes (the mode changes). Shows or hides linked sliders accordingly.
Definition tempo_selector.cpp:46
void mouseUp(const MouseEvent &e) override
Definition tempo_selector.cpp:38
void setFreeSlider(Slider *slider)
Definition tempo_selector.cpp:86
void setKeytrackTransposeSlider(Slider *slider)
Definition tempo_selector.cpp:104
void setKeytrackTuneSlider(Slider *slider)
Definition tempo_selector.cpp:113
TempoSelector(String name)
Constructs a TempoSelector and sets initial rendering mode.
Definition tempo_selector.cpp:11
void paint(Graphics &g) override
Definition tempo_selector.cpp:63
void mouseDown(const MouseEvent &e) override
Definition tempo_selector.cpp:19
void setTempoSlider(Slider *slider)
Definition tempo_selector.cpp:95
A hierarchical structure of popup menu items for a selector component.
Definition synth_section.h:29
void addItem(int sub_id, const std::string &sub_name, bool sub_selected=false)
Adds a new item as a submenu entry.
Definition synth_section.h:51
Declares the TempoSelector class, a specialized slider for selecting tempo-related modes.