mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-08 09:36:24 +01:00
Define a base class that will be useful for several track control sliders
This commit is contained in:
committed by
Paul Licameli
parent
d28b8f072b
commit
c6e7e5d99b
@@ -1209,6 +1209,7 @@
|
|||||||
5E7396471DAFD8F200BA0A4D /* EnvelopeHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396451DAFD8F200BA0A4D /* EnvelopeHandle.cpp */; };
|
5E7396471DAFD8F200BA0A4D /* EnvelopeHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396451DAFD8F200BA0A4D /* EnvelopeHandle.cpp */; };
|
||||||
5E73964A1DAFD91D00BA0A4D /* CutlineHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396481DAFD91D00BA0A4D /* CutlineHandle.cpp */; };
|
5E73964A1DAFD91D00BA0A4D /* CutlineHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396481DAFD91D00BA0A4D /* CutlineHandle.cpp */; };
|
||||||
5E73964D1DAFD95B00BA0A4D /* ButtonHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E73964B1DAFD95B00BA0A4D /* ButtonHandle.cpp */; };
|
5E73964D1DAFD95B00BA0A4D /* ButtonHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E73964B1DAFD95B00BA0A4D /* ButtonHandle.cpp */; };
|
||||||
|
5E7396501DAFD98400BA0A4D /* SliderHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E73964E1DAFD98400BA0A4D /* SliderHandle.cpp */; };
|
||||||
5E02BFF21D1164DF00EB7578 /* Distortion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E02BFF01D1164DF00EB7578 /* Distortion.cpp */; };
|
5E02BFF21D1164DF00EB7578 /* Distortion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E02BFF01D1164DF00EB7578 /* Distortion.cpp */; };
|
||||||
5E07842E1DEE6B8600CA76EA /* FileException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E07842C1DEE6B8600CA76EA /* FileException.cpp */; };
|
5E07842E1DEE6B8600CA76EA /* FileException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E07842C1DEE6B8600CA76EA /* FileException.cpp */; };
|
||||||
5E0784311DF1E4F400CA76EA /* UserException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E07842F1DF1E4F400CA76EA /* UserException.cpp */; };
|
5E0784311DF1E4F400CA76EA /* UserException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E07842F1DF1E4F400CA76EA /* UserException.cpp */; };
|
||||||
@@ -3016,6 +3017,8 @@
|
|||||||
5E7396491DAFD91D00BA0A4D /* CutlineHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CutlineHandle.h; sourceTree = "<group>"; };
|
5E7396491DAFD91D00BA0A4D /* CutlineHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CutlineHandle.h; sourceTree = "<group>"; };
|
||||||
5E73964B1DAFD95B00BA0A4D /* ButtonHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ButtonHandle.cpp; sourceTree = "<group>"; };
|
5E73964B1DAFD95B00BA0A4D /* ButtonHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ButtonHandle.cpp; sourceTree = "<group>"; };
|
||||||
5E73964C1DAFD95B00BA0A4D /* ButtonHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonHandle.h; sourceTree = "<group>"; };
|
5E73964C1DAFD95B00BA0A4D /* ButtonHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonHandle.h; sourceTree = "<group>"; };
|
||||||
|
5E73964E1DAFD98400BA0A4D /* SliderHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SliderHandle.cpp; sourceTree = "<group>"; };
|
||||||
|
5E73964F1DAFD98400BA0A4D /* SliderHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SliderHandle.h; sourceTree = "<group>"; };
|
||||||
5E02BFF01D1164DF00EB7578 /* Distortion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Distortion.cpp; sourceTree = "<group>"; };
|
5E02BFF01D1164DF00EB7578 /* Distortion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Distortion.cpp; sourceTree = "<group>"; };
|
||||||
5E02BFF11D1164DF00EB7578 /* Distortion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Distortion.h; sourceTree = "<group>"; };
|
5E02BFF11D1164DF00EB7578 /* Distortion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Distortion.h; sourceTree = "<group>"; };
|
||||||
5E07842C1DEE6B8600CA76EA /* FileException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileException.cpp; sourceTree = "<group>"; };
|
5E07842C1DEE6B8600CA76EA /* FileException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileException.cpp; sourceTree = "<group>"; };
|
||||||
@@ -5746,6 +5749,7 @@
|
|||||||
5E7396451DAFD8F200BA0A4D /* EnvelopeHandle.cpp */,
|
5E7396451DAFD8F200BA0A4D /* EnvelopeHandle.cpp */,
|
||||||
5E74D2DF1CC4429700D88B0B /* PlayIndicatorOverlay.cpp */,
|
5E74D2DF1CC4429700D88B0B /* PlayIndicatorOverlay.cpp */,
|
||||||
5E74D2E11CC4429700D88B0B /* Scrubbing.cpp */,
|
5E74D2E11CC4429700D88B0B /* Scrubbing.cpp */,
|
||||||
|
5E73964E1DAFD98400BA0A4D /* SliderHandle.cpp */,
|
||||||
5E7396421DAFD8C600BA0A4D /* TimeShiftHandle.cpp */,
|
5E7396421DAFD8C600BA0A4D /* TimeShiftHandle.cpp */,
|
||||||
5E1512681DB0010C00702E29 /* TrackControls.cpp */,
|
5E1512681DB0010C00702E29 /* TrackControls.cpp */,
|
||||||
5E15126A1DB0010C00702E29 /* TrackUI.cpp */,
|
5E15126A1DB0010C00702E29 /* TrackUI.cpp */,
|
||||||
@@ -5757,6 +5761,7 @@
|
|||||||
5E7396461DAFD8F200BA0A4D /* EnvelopeHandle.h */,
|
5E7396461DAFD8F200BA0A4D /* EnvelopeHandle.h */,
|
||||||
5E74D2E01CC4429700D88B0B /* PlayIndicatorOverlay.h */,
|
5E74D2E01CC4429700D88B0B /* PlayIndicatorOverlay.h */,
|
||||||
5E74D2E21CC4429700D88B0B /* Scrubbing.h */,
|
5E74D2E21CC4429700D88B0B /* Scrubbing.h */,
|
||||||
|
5E73964F1DAFD98400BA0A4D /* SliderHandle.h */,
|
||||||
5E7396431DAFD8C600BA0A4D /* TimeShiftHandle.h */,
|
5E7396431DAFD8C600BA0A4D /* TimeShiftHandle.h */,
|
||||||
5E1512691DB0010C00702E29 /* TrackControls.h */,
|
5E1512691DB0010C00702E29 /* TrackControls.h */,
|
||||||
5E15126C1DB0010C00702E29 /* TrackVRulerControls.h */,
|
5E15126C1DB0010C00702E29 /* TrackVRulerControls.h */,
|
||||||
@@ -7797,6 +7802,7 @@
|
|||||||
28BD8AB4101DF4C700686679 /* GetAllMenuCommands.cpp in Sources */,
|
28BD8AB4101DF4C700686679 /* GetAllMenuCommands.cpp in Sources */,
|
||||||
28948427101DF8FC005B0713 /* EffectsPrefs.cpp in Sources */,
|
28948427101DF8FC005B0713 /* EffectsPrefs.cpp in Sources */,
|
||||||
287E207F102561F300BF47A2 /* PluginManager.cpp in Sources */,
|
287E207F102561F300BF47A2 /* PluginManager.cpp in Sources */,
|
||||||
|
5E7396501DAFD98400BA0A4D /* SliderHandle.cpp in Sources */,
|
||||||
28851FAB1027F16500152EE1 /* Command.cpp in Sources */,
|
28851FAB1027F16500152EE1 /* Command.cpp in Sources */,
|
||||||
282B70341B682342009A1618 /* WaveformSettings.cpp in Sources */,
|
282B70341B682342009A1618 /* WaveformSettings.cpp in Sources */,
|
||||||
28851FAC1027F16500152EE1 /* CommandSignature.cpp in Sources */,
|
28851FAC1027F16500152EE1 /* CommandSignature.cpp in Sources */,
|
||||||
|
|||||||
@@ -585,6 +585,8 @@ audacity_SOURCES = \
|
|||||||
tracks/ui/PlayIndicatorOverlay.h \
|
tracks/ui/PlayIndicatorOverlay.h \
|
||||||
tracks/ui/Scrubbing.cpp \
|
tracks/ui/Scrubbing.cpp \
|
||||||
tracks/ui/Scrubbing.h \
|
tracks/ui/Scrubbing.h \
|
||||||
|
tracks/ui/SliderHandle.cpp \
|
||||||
|
tracks/ui/SliderHandle.h \
|
||||||
tracks/ui/TimeShiftHandle.cpp \
|
tracks/ui/TimeShiftHandle.cpp \
|
||||||
tracks/ui/TimeShiftHandle.h \
|
tracks/ui/TimeShiftHandle.h \
|
||||||
tracks/ui/TrackControls.cpp \
|
tracks/ui/TrackControls.cpp \
|
||||||
|
|||||||
96
src/tracks/ui/SliderHandle.cpp
Normal file
96
src/tracks/ui/SliderHandle.cpp
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
Audacity: A Digital Audio Editor
|
||||||
|
|
||||||
|
SliderHandle.cpp
|
||||||
|
|
||||||
|
Paul Licameli
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
#include "../../Audacity.h"
|
||||||
|
#include "SliderHandle.h"
|
||||||
|
#include "../../widgets/ASlider.h"
|
||||||
|
#include "../../HitTestResult.h"
|
||||||
|
#include "../../RefreshCode.h"
|
||||||
|
#include "../../TrackPanelMouseEvent.h"
|
||||||
|
|
||||||
|
SliderHandle::SliderHandle()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SliderHandle::~SliderHandle()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
HitTestPreview SliderHandle::HitPreview()
|
||||||
|
{
|
||||||
|
// No special message or cursor
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
UIHandle::Result SliderHandle::Click
|
||||||
|
(const TrackPanelMouseEvent &evt, AudacityProject *)
|
||||||
|
{
|
||||||
|
wxMouseEvent &event = evt.event;
|
||||||
|
using namespace RefreshCode;
|
||||||
|
if (!event.Button(wxMOUSE_BTN_LEFT))
|
||||||
|
return Cancelled;
|
||||||
|
|
||||||
|
// Come here for left click or double click
|
||||||
|
mStartingValue = GetValue();
|
||||||
|
mpSlider->Set(mStartingValue);
|
||||||
|
mpSlider->OnMouseEvent(event);
|
||||||
|
|
||||||
|
if (event.ButtonDClick())
|
||||||
|
// Just did a modal dialog in OnMouseEvent
|
||||||
|
// Do not start a drag
|
||||||
|
return RefreshCell | Cancelled;
|
||||||
|
else
|
||||||
|
return RefreshCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIHandle::Result SliderHandle::Drag
|
||||||
|
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
|
||||||
|
{
|
||||||
|
wxMouseEvent &event = evt.event;
|
||||||
|
using namespace RefreshCode;
|
||||||
|
mpSlider->OnMouseEvent(event);
|
||||||
|
const float newValue = mpSlider->Get();
|
||||||
|
|
||||||
|
// Make a non-permanent change to the project data:
|
||||||
|
return RefreshCell | SetValue(pProject, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
HitTestPreview SliderHandle::Preview
|
||||||
|
(const TrackPanelMouseEvent &, const AudacityProject *)
|
||||||
|
{
|
||||||
|
// No special message or cursor
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
UIHandle::Result SliderHandle::Release
|
||||||
|
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
|
||||||
|
wxWindow *)
|
||||||
|
{
|
||||||
|
using namespace RefreshCode;
|
||||||
|
wxMouseEvent &event = evt.event;
|
||||||
|
mpSlider->OnMouseEvent(event);
|
||||||
|
const float newValue = mpSlider->Get();
|
||||||
|
|
||||||
|
Result result = RefreshCell;
|
||||||
|
|
||||||
|
// Commit changes to the project data:
|
||||||
|
result |= SetValue(pProject, newValue);
|
||||||
|
result |= CommitChanges(event, pProject);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIHandle::Result SliderHandle::Cancel(AudacityProject *pProject)
|
||||||
|
{
|
||||||
|
wxMouseEvent event(wxEVT_LEFT_UP);
|
||||||
|
mpSlider->OnMouseEvent(event);
|
||||||
|
|
||||||
|
// Undo un-committed changes to project data:
|
||||||
|
return RefreshCode::RefreshCell | SetValue(pProject, mStartingValue);
|
||||||
|
}
|
||||||
64
src/tracks/ui/SliderHandle.h
Normal file
64
src/tracks/ui/SliderHandle.h
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
Audacity: A Digital Audio Editor
|
||||||
|
|
||||||
|
SliderHandle.h
|
||||||
|
|
||||||
|
Paul Licameli
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
#ifndef __AUDACITY_SLIDER_HANDLE__
|
||||||
|
#define __AUDACITY_SLIDER_HANDLE__
|
||||||
|
|
||||||
|
#include "../../UIHandle.h"
|
||||||
|
|
||||||
|
class wxMouseEvent;
|
||||||
|
class LWSlider;
|
||||||
|
class Track;
|
||||||
|
|
||||||
|
class SliderHandle /* not final */ : public UIHandle
|
||||||
|
{
|
||||||
|
SliderHandle(const SliderHandle&) = delete;
|
||||||
|
SliderHandle &operator=(const SliderHandle&) = delete;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
SliderHandle();
|
||||||
|
virtual ~SliderHandle();
|
||||||
|
|
||||||
|
// These new abstract virtuals simplify the duties of further subclasses.
|
||||||
|
// This class will decide whether to refresh the clicked cell for slider state
|
||||||
|
// change.
|
||||||
|
// Subclass can decide to refresh other things and the results will be ORed.
|
||||||
|
virtual float GetValue() = 0;
|
||||||
|
virtual Result SetValue(AudacityProject *pProject, float newValue) = 0;
|
||||||
|
virtual Result CommitChanges
|
||||||
|
(const wxMouseEvent &event, AudacityProject *pProject) = 0;
|
||||||
|
|
||||||
|
// For derived classes to define hit tests
|
||||||
|
static HitTestPreview HitPreview();
|
||||||
|
|
||||||
|
Result Click
|
||||||
|
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
|
||||||
|
|
||||||
|
Result Drag
|
||||||
|
(const TrackPanelMouseEvent &event, AudacityProject *pProject) override;
|
||||||
|
|
||||||
|
HitTestPreview Preview
|
||||||
|
(const TrackPanelMouseEvent &event, const AudacityProject *pProject)
|
||||||
|
override;
|
||||||
|
|
||||||
|
Result Release
|
||||||
|
(const TrackPanelMouseEvent &event, AudacityProject *pProject,
|
||||||
|
wxWindow *pParent) override;
|
||||||
|
|
||||||
|
Result Cancel(AudacityProject *pProject) override;
|
||||||
|
|
||||||
|
// Derived track is expected to set these two before Click():
|
||||||
|
Track *mpTrack {};
|
||||||
|
LWSlider *mpSlider {};
|
||||||
|
|
||||||
|
float mStartingValue {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -244,6 +244,7 @@
|
|||||||
<ClCompile Include="..\..\..\src\tracks\ui\EnvelopeHandle.cpp" />
|
<ClCompile Include="..\..\..\src\tracks\ui\EnvelopeHandle.cpp" />
|
||||||
<ClCompile Include="..\..\..\src\tracks\ui\PlayIndicatorOverlay.cpp" />
|
<ClCompile Include="..\..\..\src\tracks\ui\PlayIndicatorOverlay.cpp" />
|
||||||
<ClCompile Include="..\..\..\src\tracks\ui\Scrubbing.cpp" />
|
<ClCompile Include="..\..\..\src\tracks\ui\Scrubbing.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\tracks\ui\SliderHandle.cpp" />
|
||||||
<ClCompile Include="..\..\..\src\tracks\ui\TimeShiftHandle.cpp" />
|
<ClCompile Include="..\..\..\src\tracks\ui\TimeShiftHandle.cpp" />
|
||||||
<ClCompile Include="..\..\..\src\tracks\ui\TrackControls.cpp" />
|
<ClCompile Include="..\..\..\src\tracks\ui\TrackControls.cpp" />
|
||||||
<ClCompile Include="..\..\..\src\tracks\ui\TrackUI.cpp" />
|
<ClCompile Include="..\..\..\src\tracks\ui\TrackUI.cpp" />
|
||||||
@@ -510,6 +511,7 @@
|
|||||||
<ClInclude Include="..\..\..\src\tracks\ui\Scrubbing.h" />
|
<ClInclude Include="..\..\..\src\tracks\ui\Scrubbing.h" />
|
||||||
<ClInclude Include="..\..\..\src\TranslatableStringArray.h" />
|
<ClInclude Include="..\..\..\src\TranslatableStringArray.h" />
|
||||||
<ClInclude Include="..\..\..\src\UserException.h" />
|
<ClInclude Include="..\..\..\src\UserException.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\tracks\ui\SliderHandle.h" />
|
||||||
<ClInclude Include="..\..\..\src\tracks\ui\TimeShiftHandle.h" />
|
<ClInclude Include="..\..\..\src\tracks\ui\TimeShiftHandle.h" />
|
||||||
<ClInclude Include="..\..\..\src\tracks\ui\TrackControls.h" />
|
<ClInclude Include="..\..\..\src\tracks\ui\TrackControls.h" />
|
||||||
<ClInclude Include="..\..\..\src\tracks\ui\ZoomHandle.h" />
|
<ClInclude Include="..\..\..\src\tracks\ui\ZoomHandle.h" />
|
||||||
|
|||||||
@@ -1007,6 +1007,9 @@
|
|||||||
<ClCompile Include="..\..\..\src\tracks\ui\ButtonHandle.cpp">
|
<ClCompile Include="..\..\..\src\tracks\ui\ButtonHandle.cpp">
|
||||||
<Filter>src\tracks\ui</Filter>
|
<Filter>src\tracks\ui</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\tracks\ui\SliderHandle.cpp">
|
||||||
|
<Filter>src\tracks\ui</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\src\AboutDialog.h">
|
<ClInclude Include="..\..\..\src\AboutDialog.h">
|
||||||
@@ -2008,6 +2011,9 @@
|
|||||||
<ClInclude Include="..\..\..\src\tracks\ui\ButtonHandle.h">
|
<ClInclude Include="..\..\..\src\tracks\ui\ButtonHandle.h">
|
||||||
<Filter>src\tracks\ui</Filter>
|
<Filter>src\tracks\ui</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\..\src\tracks\ui\SliderHandle.h">
|
||||||
|
<Filter>src\tracks\ui</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="..\..\audacity.ico">
|
<Image Include="..\..\audacity.ico">
|
||||||
|
|||||||
Reference in New Issue
Block a user