16#include "../../../ui/ChannelView.h"
19#include "../../../../RefreshCode.h"
20#include "../../../../TrackPanelMouseEvent.h"
22#include "../../../../prefs/SpectrogramSettings.h"
23#include "../../../../widgets/Ruler.h"
24#include "../../../../widgets/LinearUpdater.h"
25#include "../../../../widgets/LogarithmicUpdater.h"
26#include "../../../../widgets/IntFormat.h"
27#include "../../../../widgets/RealFormat.h"
35 std::vector<UIHandlePtr> results;
40 auto result = std::make_shared<SpectrumVZoomHandle>(
43 results.push_back(result);
48 std::copy(more.begin(), more.end(), std::back_inserter(results));
60 const auto wt =
static_cast<WaveTrack*
>(pTrack.get());
68 const wxMouseEvent &
event = evt.
event;
70 if (!(event.ShiftDown() || event.CmdDown()))
75 evt.
event.Skip(
false);
77 auto steps = evt.
steps;
80 if (event.CmdDown() && !event.ShiftDown()) {
81 const int yy =
event.m_y;
87 evt.
rect, yy, yy,
true);
89 else if (!event.CmdDown() && event.ShiftDown()) {
91 static const float movement = 10.0f;
92 const int height = evt.
rect.GetHeight();
94 const float delta = steps * movement / height;
99 const double rate = wt->
GetRate();
100 const float bound = rate / 2;
104 const float newBottom =
105 std::max((isLinear ? 0.0f : 1.0f),
124 const wxRect &rect_,
unsigned iPass )
132 const auto wt = std::static_pointer_cast< WaveTrack >(
FindTrack() );
139 const wxRect &rect,
const WaveTrack *wt )
143 float minFreq, maxFreq;
145 vruler->SetDbMirrorValue(0.0);
160 rect.x, rect.y, rect.x + rect.width, rect.y + rect.height - 1);
161 vruler->SetOrientation(wxVERTICAL);
163 vruler->SetLabelEdges(
true);
165 if (maxFreq >= 2000) {
166 vruler->SetRange((maxFreq / 1000.), (minFreq / 1000.));
168 vruler->SetUnits(
XO(
"k"));
172 vruler->SetRange((
int)(maxFreq), (
int)(minFreq));
173 vruler->SetUnits({});
192 rect.x, rect.y, rect.x + rect.width, rect.y + rect.height - 1);
193 vruler->SetOrientation(wxVERTICAL);
195 vruler->SetLabelEdges(
true);
196 vruler->SetRange(maxFreq, minFreq);
197 vruler->SetUnits({});
200 vruler->SetNumberScale(scale);
205 vruler->GetMaxSize(&
size.first, &
size.second);
static Settings & settings()
std::shared_ptr< Subclass > AssignUIHandlePtr(std::weak_ptr< Subclass > &holder, const std::shared_ptr< Subclass > &pNew)
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
std::vector< UIHandlePtr > HitTest(const TrackPanelMouseState &state, const AudacityProject *pProject) override
void Draw(TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass) override
static ChannelView & Get(Channel &channel)
std::pair< int, int > vrulerSize
std::shared_ptr< Track > FindTrack()
static const LinearUpdater & Instance()
static const LogarithmicUpdater & Instance()
float PositionToValue(float pp) const
float ValueToPosition(float val) const
void ModifyState(bool bWantsAutoSave)
static ProjectHistory & Get(AudacityProject &project)
void GetBounds(const WaveTrack &wt, float &min, float &max) const
void SetBounds(float min, float max)
static SpectrogramBounds & Get(WaveTrack &track)
Get either the global default settings, or the track's own if previously created.
Spectrogram settings, either for one track or as defaults.
static SpectrogramSettings & Get(const WaveTrack &track)
Mutative access to attachment even if the track argument is const.
static SpectrogramSettings & Own(WaveTrack &track)
static void DoUpdateVRuler(const wxRect &rect, const WaveTrack *wt)
std::weak_ptr< SpectrumVZoomHandle > mVZoomHandle
static unsigned DoHandleWheelRotation(const TrackPanelMouseEvent &evt, AudacityProject *pProject, WaveTrack *wt)
unsigned HandleWheelRotation(const TrackPanelMouseEvent &event, AudacityProject *pProject) override
void UpdateRuler(const wxRect &rect) override
~SpectrumVRulerControls() override
std::vector< UIHandlePtr > HitTest(const TrackPanelMouseState &state, const AudacityProject *) override
void Draw(TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass) override
static void DoZoom(AudacityProject *pProject, WaveTrack *pTrack, WaveChannelViewConstants::ZoomActions ZoomKind, const wxRect &rect, int zoomStart, int zoomEnd, bool fixedMousePoint)
A Track that contains audio waveform data.
double GetRate() const override
Namespace containing an enum 'what to do on a refresh?'.
AUDACITY_DLL_API Ruler & ScratchRuler()
AUDACITY_DLL_API void DoDraw(ChannelVRulerControls &controls, TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)
void copy(const T *src, T *dst, int32_t n)