Move some handle and cell classes into their own files

This commit is contained in:
Paul Licameli 2017-07-04 11:39:32 -04:00
parent 4e68df55da
commit c1f667f170
20 changed files with 1314 additions and 980 deletions

View File

@ -1223,6 +1223,10 @@
5E1512701DB0010C00702E29 /* TrackVRulerControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E15126B1DB0010C00702E29 /* TrackVRulerControls.cpp */; };
5E2A19941EED688500217B58 /* SelectionState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E2A19921EED688500217B58 /* SelectionState.cpp */; };
5E3FFE721EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E3FFE701EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp */; };
5E667A601F0BEE5F00C942A5 /* WaveTrackVZoomHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E667A5E1F0BEE5F00C942A5 /* WaveTrackVZoomHandle.cpp */; };
5E667A651F0BEE8C00C942A5 /* NoteTrackButtonHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E667A611F0BEE8C00C942A5 /* NoteTrackButtonHandle.cpp */; };
5E667A661F0BEE8C00C942A5 /* NoteTrackVZoomHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E667A631F0BEE8C00C942A5 /* NoteTrackVZoomHandle.cpp */; };
5E667A691F0D723A00C942A5 /* TrackPanelResizerCell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E667A671F0D723A00C942A5 /* TrackPanelResizerCell.cpp */; };
5E73963B1DAFD82D00BA0A4D /* PopupMenuTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396391DAFD82D00BA0A4D /* PopupMenuTable.cpp */; };
5E73963E1DAFD86000BA0A4D /* ZoomHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E73963C1DAFD86000BA0A4D /* ZoomHandle.cpp */; };
5E7396441DAFD8C600BA0A4D /* TimeShiftHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7396421DAFD8C600BA0A4D /* TimeShiftHandle.cpp */; };
@ -3058,6 +3062,14 @@
5E3FFE711EC9032B0020F7C9 /* NoteTrackSliderHandles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteTrackSliderHandles.h; sourceTree = "<group>"; };
5E4685F81CCA9D84008741F2 /* CommandFunctors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CommandFunctors.h; sourceTree = "<group>"; };
5E61EE0C1CBAA6BB0009FCF1 /* MemoryX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryX.h; sourceTree = "<group>"; };
5E667A5E1F0BEE5F00C942A5 /* WaveTrackVZoomHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WaveTrackVZoomHandle.cpp; sourceTree = "<group>"; };
5E667A5F1F0BEE5F00C942A5 /* WaveTrackVZoomHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveTrackVZoomHandle.h; sourceTree = "<group>"; };
5E667A611F0BEE8C00C942A5 /* NoteTrackButtonHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NoteTrackButtonHandle.cpp; sourceTree = "<group>"; };
5E667A621F0BEE8C00C942A5 /* NoteTrackButtonHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteTrackButtonHandle.h; sourceTree = "<group>"; };
5E667A631F0BEE8C00C942A5 /* NoteTrackVZoomHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NoteTrackVZoomHandle.cpp; sourceTree = "<group>"; };
5E667A641F0BEE8C00C942A5 /* NoteTrackVZoomHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoteTrackVZoomHandle.h; sourceTree = "<group>"; };
5E667A671F0D723A00C942A5 /* TrackPanelResizerCell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrackPanelResizerCell.cpp; sourceTree = "<group>"; };
5E667A681F0D723A00C942A5 /* TrackPanelResizerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrackPanelResizerCell.h; sourceTree = "<group>"; };
5E7396391DAFD82D00BA0A4D /* PopupMenuTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PopupMenuTable.cpp; sourceTree = "<group>"; };
5E73963A1DAFD82D00BA0A4D /* PopupMenuTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PopupMenuTable.h; sourceTree = "<group>"; };
5E73963C1DAFD86000BA0A4D /* ZoomHandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ZoomHandle.cpp; sourceTree = "<group>"; };
@ -4041,6 +4053,7 @@
1790B0EC09883BFD008A330A /* TrackPanel.cpp */,
1790B0EE09883BFD008A330A /* TrackPanelAx.cpp */,
5E7396601DAFDB1E00BA0A4D /* TrackPanelResizeHandle.cpp */,
5E667A671F0D723A00C942A5 /* TrackPanelResizerCell.cpp */,
5E15123B1DB000C000702E29 /* UIHandle.cpp */,
1790B0F209883BFD008A330A /* UndoManager.cpp */,
5E07842F1DF1E4F400CA76EA /* UserException.cpp */,
@ -4147,6 +4160,7 @@
2803C8B619F35AA000278526 /* TrackPanelListener.h */,
5E15123A1DB000C000702E29 /* TrackPanelMouseEvent.h */,
5E7396611DAFDB1E00BA0A4D /* TrackPanelResizeHandle.h */,
5E667A681F0D723A00C942A5 /* TrackPanelResizerCell.h */,
284416391B82D6BC0000574D /* TranslatableStringArray.h */,
5E15123C1DB000C000702E29 /* UIHandle.h */,
1790B0F309883BFD008A330A /* UndoManager.h */,
@ -5852,14 +5866,18 @@
5EA0181B1EC7B226001F2996 /* ui */ = {
isa = PBXGroup;
children = (
5E3FFE701EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp */,
5E3FFE711EC9032B0020F7C9 /* NoteTrackSliderHandles.h */,
5E667A611F0BEE8C00C942A5 /* NoteTrackButtonHandle.cpp */,
5EA0181C1EC7B226001F2996 /* NoteTrackControls.cpp */,
5EA0181D1EC7B226001F2996 /* NoteTrackControls.h */,
5E3FFE701EC9032B0020F7C9 /* NoteTrackSliderHandles.cpp */,
5EA0181E1EC7B226001F2996 /* NoteTrackUI.cpp */,
5EA0181F1EC7B226001F2996 /* NoteTrackVRulerControls.cpp */,
5EA018201EC7B226001F2996 /* NoteTrackVRulerControls.h */,
5E667A631F0BEE8C00C942A5 /* NoteTrackVZoomHandle.cpp */,
5E73966C1DAFDB8500BA0A4D /* StretchHandle.cpp */,
5E667A621F0BEE8C00C942A5 /* NoteTrackButtonHandle.h */,
5EA0181D1EC7B226001F2996 /* NoteTrackControls.h */,
5E3FFE711EC9032B0020F7C9 /* NoteTrackSliderHandles.h */,
5EA018201EC7B226001F2996 /* NoteTrackVRulerControls.h */,
5E667A641F0BEE8C00C942A5 /* NoteTrackVZoomHandle.h */,
5E73966D1DAFDB8500BA0A4D /* StretchHandle.h */,
);
path = ui;
@ -5882,11 +5900,13 @@
5E7396541DAFDA0000BA0A4D /* WaveTrackSliderHandles.cpp */,
5EA018251EC7B226001F2996 /* WaveTrackUI.cpp */,
5EA018261EC7B226001F2996 /* WaveTrackVRulerControls.cpp */,
5E667A5E1F0BEE5F00C942A5 /* WaveTrackVZoomHandle.cpp */,
5E7396491DAFD91D00BA0A4D /* CutlineHandle.h */,
5E000A201EC7B5D500E8FD93 /* SampleHandle.h */,
5EA018241EC7B226001F2996 /* WaveTrackControls.h */,
5E7396551DAFDA0000BA0A4D /* WaveTrackSliderHandles.h */,
5EA018271EC7B226001F2996 /* WaveTrackVRulerControls.h */,
5E667A5F1F0BEE5F00C942A5 /* WaveTrackVZoomHandle.h */,
);
path = ui;
sourceTree = "<group>";
@ -7732,6 +7752,7 @@
1790B19709883BFD008A330A /* Track.cpp in Sources */,
1790B19809883BFD008A330A /* TrackArtist.cpp in Sources */,
1790B19909883BFD008A330A /* TrackPanel.cpp in Sources */,
5E667A601F0BEE5F00C942A5 /* WaveTrackVZoomHandle.cpp in Sources */,
1790B19A09883BFD008A330A /* TrackPanelAx.cpp in Sources */,
1790B19C09883BFD008A330A /* UndoManager.cpp in Sources */,
1790B19E09883BFD008A330A /* VoiceKey.cpp in Sources */,
@ -7850,12 +7871,14 @@
5EA0182A1EC7B226001F2996 /* NoteTrackVRulerControls.cpp in Sources */,
284B279D0FC66864005EAC96 /* PlaybackPrefs.cpp in Sources */,
284B279E0FC66864005EAC96 /* ProjectsPrefs.cpp in Sources */,
5E667A661F0BEE8C00C942A5 /* NoteTrackVZoomHandle.cpp in Sources */,
5E78388E1DE4995F003270C0 /* AudacityException.cpp in Sources */,
284B279F0FC66864005EAC96 /* RecordingPrefs.cpp in Sources */,
5E73966B1DAFDB5600BA0A4D /* LabelTextHandle.cpp in Sources */,
284B27E40FC66CCD005EAC96 /* TracksPrefs.cpp in Sources */,
284B27E50FC66CCD005EAC96 /* WarningsPrefs.cpp in Sources */,
5E15125B1DB000DC00702E29 /* LabelTrackUI.cpp in Sources */,
5E667A691F0D723A00C942A5 /* TrackPanelResizerCell.cpp in Sources */,
28D540050FD1912A00FA7C75 /* AppCommandEvent.cpp in Sources */,
28FBCA6A1B42E01100BB3405 /* AUControl.mm in Sources */,
28D540060FD1912A00FA7C75 /* CommandBuilder.cpp in Sources */,
@ -7901,6 +7924,7 @@
8484F31413086237002DF7F0 /* DeviceManager.cpp in Sources */,
28884943131B6CF600B59735 /* af.po in Sources */,
28884944131B6CF600B59735 /* ar.po in Sources */,
5E667A651F0BEE8C00C942A5 /* NoteTrackButtonHandle.cpp in Sources */,
28884945131B6CF600B59735 /* be.po in Sources */,
28884946131B6CF600B59735 /* bg.po in Sources */,
28884947131B6CF600B59735 /* bn.po in Sources */,

View File

@ -251,6 +251,8 @@ audacity_SOURCES = \
TrackPanelMouseEvent.h \
TrackPanelResizeHandle.cpp \
TrackPanelResizeHandle.h \
TrackPanelResizerCell.cpp \
TrackPanelResizerCell.h \
TranslatableStringArray.h \
UIHandle.h \
UIHandle.cpp \
@ -562,6 +564,8 @@ audacity_SOURCES = \
tracks/labeltrack/ui/LabelTrackUI.cpp \
tracks/labeltrack/ui/LabelTrackVRulerControls.cpp \
tracks/labeltrack/ui/LabelTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h \
tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp \
@ -569,6 +573,8 @@ audacity_SOURCES = \
tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h \
tracks/playabletrack/notetrack/ui/StretchHandle.cpp \
tracks/playabletrack/notetrack/ui/StretchHandle.h \
tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp \
@ -583,6 +589,8 @@ audacity_SOURCES = \
tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h \
tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h \
tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h \
tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp \
tracks/timetrack/ui/TimeTrackControls.cpp \
tracks/timetrack/ui/TimeTrackControls.h \

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -16,7 +16,17 @@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@ -190,9 +200,6 @@ bin_PROGRAMS = audacity$(EXEEXT)
@USE_VST_TRUE@ $(NULL)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(srcdir)/configtemplate.h $(srcdir)/audacity.desktop.in \
$(top_srcdir)/autotools/depcomp $(dist_mime_DATA)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/ac_c99_func_lrintf.m4 \
@ -235,6 +242,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(dist_mime_DATA) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = configwin.h configunix.h
CONFIG_CLEAN_FILES = audacity.desktop
@ -321,7 +330,8 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
TrackPanel.cpp TrackPanel.h TrackPanelAx.cpp TrackPanelAx.h \
TrackPanelCell.h TrackPanelCellIterator.h TrackPanelListener.h \
TrackPanelMouseEvent.h TrackPanelResizeHandle.cpp \
TrackPanelResizeHandle.h TranslatableStringArray.h UIHandle.h \
TrackPanelResizeHandle.h TrackPanelResizerCell.cpp \
TrackPanelResizerCell.h TranslatableStringArray.h UIHandle.h \
UIHandle.cpp UndoManager.cpp UndoManager.h UserException.cpp \
UserException.h ViewInfo.cpp ViewInfo.h VoiceKey.cpp \
VoiceKey.h WaveClip.cpp WaveClip.h WaveTrack.cpp WaveTrack.h \
@ -469,6 +479,8 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
tracks/labeltrack/ui/LabelTrackUI.cpp \
tracks/labeltrack/ui/LabelTrackVRulerControls.cpp \
tracks/labeltrack/ui/LabelTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h \
tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp \
@ -476,6 +488,8 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h \
tracks/playabletrack/notetrack/ui/StretchHandle.cpp \
tracks/playabletrack/notetrack/ui/StretchHandle.h \
tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp \
@ -490,6 +504,8 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h \
tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h \
tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h \
tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp \
tracks/timetrack/ui/TimeTrackControls.cpp \
tracks/timetrack/ui/TimeTrackControls.h \
@ -638,6 +654,7 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
audacity-TrackArtist.$(OBJEXT) audacity-TrackPanel.$(OBJEXT) \
audacity-TrackPanelAx.$(OBJEXT) \
audacity-TrackPanelResizeHandle.$(OBJEXT) \
audacity-TrackPanelResizerCell.$(OBJEXT) \
audacity-UIHandle.$(OBJEXT) audacity-UndoManager.$(OBJEXT) \
audacity-UserException.$(OBJEXT) audacity-ViewInfo.$(OBJEXT) \
audacity-VoiceKey.$(OBJEXT) audacity-WaveClip.$(OBJEXT) \
@ -783,10 +800,12 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
tracks/labeltrack/ui/audacity-LabelTrackControls.$(OBJEXT) \
tracks/labeltrack/ui/audacity-LabelTrackUI.$(OBJEXT) \
tracks/labeltrack/ui/audacity-LabelTrackVRulerControls.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackControls.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackSliderHandles.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackUI.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackVRulerControls.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.$(OBJEXT) \
tracks/playabletrack/notetrack/ui/audacity-StretchHandle.$(OBJEXT) \
tracks/playabletrack/ui/audacity-PlayableTrackButtonHandles.$(OBJEXT) \
tracks/playabletrack/wavetrack/ui/audacity-CutlineHandle.$(OBJEXT) \
@ -794,6 +813,7 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackControls.$(OBJEXT) \
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackSliderHandles.$(OBJEXT) \
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVRulerControls.$(OBJEXT) \
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.$(OBJEXT) \
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackUI.$(OBJEXT) \
tracks/timetrack/ui/audacity-TimeTrackControls.$(OBJEXT) \
tracks/timetrack/ui/audacity-TimeTrackUI.$(OBJEXT) \
@ -986,6 +1006,8 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/audacity.desktop.in \
$(srcdir)/configtemplate.h $(top_srcdir)/autotools/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@ -1080,6 +1102,7 @@ LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LV2_CFLAGS = @LV2_CFLAGS@
LV2_LIBS = @LV2_LIBS@
MAINT = @MAINT@
@ -1105,6 +1128,8 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIDI_CFLAGS = @PORTMIDI_CFLAGS@
@ -1319,7 +1344,8 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
TrackPanel.cpp TrackPanel.h TrackPanelAx.cpp TrackPanelAx.h \
TrackPanelCell.h TrackPanelCellIterator.h TrackPanelListener.h \
TrackPanelMouseEvent.h TrackPanelResizeHandle.cpp \
TrackPanelResizeHandle.h TranslatableStringArray.h UIHandle.h \
TrackPanelResizeHandle.h TrackPanelResizerCell.cpp \
TrackPanelResizerCell.h TranslatableStringArray.h UIHandle.h \
UIHandle.cpp UndoManager.cpp UndoManager.h UserException.cpp \
UserException.h ViewInfo.cpp ViewInfo.h VoiceKey.cpp \
VoiceKey.h WaveClip.cpp WaveClip.h WaveTrack.cpp WaveTrack.h \
@ -1467,6 +1493,8 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
tracks/labeltrack/ui/LabelTrackUI.cpp \
tracks/labeltrack/ui/LabelTrackVRulerControls.cpp \
tracks/labeltrack/ui/LabelTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.h \
tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackSliderHandles.cpp \
@ -1474,6 +1502,8 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackUI.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.h \
tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp \
tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.h \
tracks/playabletrack/notetrack/ui/StretchHandle.cpp \
tracks/playabletrack/notetrack/ui/StretchHandle.h \
tracks/playabletrack/ui/PlayableTrackButtonHandles.cpp \
@ -1488,6 +1518,8 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackSliderHandles.h \
tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.h \
tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp \
tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h \
tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp \
tracks/timetrack/ui/TimeTrackControls.cpp \
tracks/timetrack/ui/TimeTrackControls.h \
@ -1567,7 +1599,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -2063,6 +2094,9 @@ tracks/playabletrack/notetrack/ui/$(am__dirstamp):
tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) tracks/playabletrack/notetrack/ui/$(DEPDIR)
@: > tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp)
tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.$(OBJEXT): \
tracks/playabletrack/notetrack/ui/$(am__dirstamp) \
tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp)
tracks/playabletrack/notetrack/ui/audacity-NoteTrackControls.$(OBJEXT): \
tracks/playabletrack/notetrack/ui/$(am__dirstamp) \
tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp)
@ -2075,6 +2109,9 @@ tracks/playabletrack/notetrack/ui/audacity-NoteTrackUI.$(OBJEXT): \
tracks/playabletrack/notetrack/ui/audacity-NoteTrackVRulerControls.$(OBJEXT): \
tracks/playabletrack/notetrack/ui/$(am__dirstamp) \
tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp)
tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.$(OBJEXT): \
tracks/playabletrack/notetrack/ui/$(am__dirstamp) \
tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp)
tracks/playabletrack/notetrack/ui/audacity-StretchHandle.$(OBJEXT): \
tracks/playabletrack/notetrack/ui/$(am__dirstamp) \
tracks/playabletrack/notetrack/ui/$(DEPDIR)/$(am__dirstamp)
@ -2108,6 +2145,9 @@ tracks/playabletrack/wavetrack/ui/audacity-WaveTrackSliderHandles.$(OBJEXT): \
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVRulerControls.$(OBJEXT): \
tracks/playabletrack/wavetrack/ui/$(am__dirstamp) \
tracks/playabletrack/wavetrack/ui/$(DEPDIR)/$(am__dirstamp)
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.$(OBJEXT): \
tracks/playabletrack/wavetrack/ui/$(am__dirstamp) \
tracks/playabletrack/wavetrack/ui/$(DEPDIR)/$(am__dirstamp)
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackUI.$(OBJEXT): \
tracks/playabletrack/wavetrack/ui/$(am__dirstamp) \
tracks/playabletrack/wavetrack/ui/$(DEPDIR)/$(am__dirstamp)
@ -2417,6 +2457,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-TrackPanel.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-TrackPanelAx.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-TrackPanelResizeHandle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-TrackPanelResizerCell.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-UIHandle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-UndoManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-UserException.Po@am__quote@
@ -2607,10 +2648,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@tracks/labeltrack/ui/$(DEPDIR)/audacity-LabelTrackControls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/labeltrack/ui/$(DEPDIR)/audacity-LabelTrackUI.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/labeltrack/ui/$(DEPDIR)/audacity-LabelTrackVRulerControls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackControls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackSliderHandles.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackUI.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVRulerControls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-StretchHandle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/ui/$(DEPDIR)/audacity-PlayableTrackButtonHandles.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-CutlineHandle.Po@am__quote@
@ -2619,6 +2662,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackSliderHandles.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackUI.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVRulerControls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/timetrack/ui/$(DEPDIR)/audacity-TimeTrackControls.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/timetrack/ui/$(DEPDIR)/audacity-TimeTrackUI.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/timetrack/ui/$(DEPDIR)/audacity-TimeTrackVRulerControls.Po@am__quote@
@ -4030,6 +4074,20 @@ audacity-TrackPanelResizeHandle.obj: TrackPanelResizeHandle.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-TrackPanelResizeHandle.obj `if test -f 'TrackPanelResizeHandle.cpp'; then $(CYGPATH_W) 'TrackPanelResizeHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/TrackPanelResizeHandle.cpp'; fi`
audacity-TrackPanelResizerCell.o: TrackPanelResizerCell.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-TrackPanelResizerCell.o -MD -MP -MF $(DEPDIR)/audacity-TrackPanelResizerCell.Tpo -c -o audacity-TrackPanelResizerCell.o `test -f 'TrackPanelResizerCell.cpp' || echo '$(srcdir)/'`TrackPanelResizerCell.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-TrackPanelResizerCell.Tpo $(DEPDIR)/audacity-TrackPanelResizerCell.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TrackPanelResizerCell.cpp' object='audacity-TrackPanelResizerCell.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-TrackPanelResizerCell.o `test -f 'TrackPanelResizerCell.cpp' || echo '$(srcdir)/'`TrackPanelResizerCell.cpp
audacity-TrackPanelResizerCell.obj: TrackPanelResizerCell.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-TrackPanelResizerCell.obj -MD -MP -MF $(DEPDIR)/audacity-TrackPanelResizerCell.Tpo -c -o audacity-TrackPanelResizerCell.obj `if test -f 'TrackPanelResizerCell.cpp'; then $(CYGPATH_W) 'TrackPanelResizerCell.cpp'; else $(CYGPATH_W) '$(srcdir)/TrackPanelResizerCell.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-TrackPanelResizerCell.Tpo $(DEPDIR)/audacity-TrackPanelResizerCell.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TrackPanelResizerCell.cpp' object='audacity-TrackPanelResizerCell.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-TrackPanelResizerCell.obj `if test -f 'TrackPanelResizerCell.cpp'; then $(CYGPATH_W) 'TrackPanelResizerCell.cpp'; else $(CYGPATH_W) '$(srcdir)/TrackPanelResizerCell.cpp'; fi`
audacity-UIHandle.o: UIHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-UIHandle.o -MD -MP -MF $(DEPDIR)/audacity-UIHandle.Tpo -c -o audacity-UIHandle.o `test -f 'UIHandle.cpp' || echo '$(srcdir)/'`UIHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-UIHandle.Tpo $(DEPDIR)/audacity-UIHandle.Po
@ -6116,6 +6174,20 @@ tracks/labeltrack/ui/audacity-LabelTrackVRulerControls.obj: tracks/labeltrack/ui
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/labeltrack/ui/audacity-LabelTrackVRulerControls.obj `if test -f 'tracks/labeltrack/ui/LabelTrackVRulerControls.cpp'; then $(CYGPATH_W) 'tracks/labeltrack/ui/LabelTrackVRulerControls.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/labeltrack/ui/LabelTrackVRulerControls.cpp'; fi`
tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.o: tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.o -MD -MP -MF tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Tpo -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.o `test -f 'tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Tpo tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp' object='tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.o `test -f 'tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp
tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.obj: tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.obj -MD -MP -MF tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Tpo -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.obj `if test -f 'tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Tpo tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackButtonHandle.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp' object='tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackButtonHandle.obj `if test -f 'tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/notetrack/ui/NoteTrackButtonHandle.cpp'; fi`
tracks/playabletrack/notetrack/ui/audacity-NoteTrackControls.o: tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/notetrack/ui/audacity-NoteTrackControls.o -MD -MP -MF tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackControls.Tpo -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackControls.o `test -f 'tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp' || echo '$(srcdir)/'`tracks/playabletrack/notetrack/ui/NoteTrackControls.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackControls.Tpo tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackControls.Po
@ -6172,6 +6244,20 @@ tracks/playabletrack/notetrack/ui/audacity-NoteTrackVRulerControls.obj: tracks/p
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackVRulerControls.obj `if test -f 'tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/notetrack/ui/NoteTrackVRulerControls.cpp'; fi`
tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.o: tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.o -MD -MP -MF tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Tpo -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.o `test -f 'tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Tpo tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp' object='tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.o `test -f 'tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp
tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.obj: tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.obj -MD -MP -MF tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Tpo -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.obj `if test -f 'tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Tpo tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-NoteTrackVZoomHandle.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp' object='tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/notetrack/ui/audacity-NoteTrackVZoomHandle.obj `if test -f 'tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/notetrack/ui/NoteTrackVZoomHandle.cpp'; fi`
tracks/playabletrack/notetrack/ui/audacity-StretchHandle.o: tracks/playabletrack/notetrack/ui/StretchHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/notetrack/ui/audacity-StretchHandle.o -MD -MP -MF tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-StretchHandle.Tpo -c -o tracks/playabletrack/notetrack/ui/audacity-StretchHandle.o `test -f 'tracks/playabletrack/notetrack/ui/StretchHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/notetrack/ui/StretchHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-StretchHandle.Tpo tracks/playabletrack/notetrack/ui/$(DEPDIR)/audacity-StretchHandle.Po
@ -6270,6 +6356,20 @@ tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVRulerControls.obj: tracks/p
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVRulerControls.obj `if test -f 'tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp'; fi`
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.o: tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.o -MD -MP -MF tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Tpo -c -o tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.o `test -f 'tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Tpo tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp' object='tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.o `test -f 'tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp' || echo '$(srcdir)/'`tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.obj: tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.obj -MD -MP -MF tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Tpo -c -o tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.obj `if test -f 'tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Tpo tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackVZoomHandle.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp' object='tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o tracks/playabletrack/wavetrack/ui/audacity-WaveTrackVZoomHandle.obj `if test -f 'tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp'; then $(CYGPATH_W) 'tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp'; fi`
tracks/playabletrack/wavetrack/ui/audacity-WaveTrackUI.o: tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/playabletrack/wavetrack/ui/audacity-WaveTrackUI.o -MD -MP -MF tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackUI.Tpo -c -o tracks/playabletrack/wavetrack/ui/audacity-WaveTrackUI.o `test -f 'tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp' || echo '$(srcdir)/'`tracks/playabletrack/wavetrack/ui/WaveTrackUI.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackUI.Tpo tracks/playabletrack/wavetrack/ui/$(DEPDIR)/audacity-WaveTrackUI.Po
@ -7499,6 +7599,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-desktopDATA \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-desktopDATA uninstall-dist_mimeDATA
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -18,6 +18,7 @@ class ViewInfo;
class wxKeyEvent;
class wxPoint;
class wxRect;
class wxWindow;
// Abstract base class defining TrackPanel's access to specialist classes that
// implement drawing and user interactions

View File

@ -383,16 +383,3 @@ UIHandle::Result TrackPanelResizeHandle::Cancel(AudacityProject *pProject)
return RefreshCode::RefreshAll;
}
TrackPanelResizerCell::TrackPanelResizerCell( std::shared_ptr<Track> pTrack )
: mpTrack{ pTrack }
{}
HitTestResult TrackPanelResizerCell::HitTest
(const TrackPanelMouseEvent &event, const AudacityProject *pProject)
{
return {
TrackPanelResizeHandle::HitPreview( mBetweenTracks ),
&TrackPanelResizeHandle::Instance()
};
}

View File

@ -11,7 +11,6 @@ Paul Licameli split from TrackPanel.cpp
#ifndef __AUDACITY_TRACK_PANEL_RESIZE_HANDLE__
#define __AUDACITY_TRACK_PANEL_RESIZE_HANDLE__
#include "tracks/ui/CommonTrackPanelCell.h"
#include "MemoryX.h"
#include "UIHandle.h"
@ -66,24 +65,4 @@ private:
int mMouseClickY{};
};
class TrackPanelResizerCell : public CommonTrackPanelCell
{
TrackPanelResizerCell(const TrackPanelResizerCell&) = delete;
TrackPanelResizerCell &operator= (const TrackPanelResizerCell&) = delete;
public:
explicit
TrackPanelResizerCell( std::shared_ptr<Track> pTrack );
HitTestResult HitTest
(const TrackPanelMouseEvent &event,
const AudacityProject *pProject) override;
std::shared_ptr<Track> FindTrack() override { return mpTrack.lock(); };
private:
friend class TrackPanelCellIterator;
std::weak_ptr<Track> mpTrack;
bool mBetweenTracks {};
};
#endif

View File

@ -0,0 +1,27 @@
/**********************************************************************
Audacity: A Digital Audio Editor
TrackPanelResizeHandle.cpp
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#include "Audacity.h"
#include "TrackPanelResizerCell.h"
#include "TrackPanelResizeHandle.h"
#include "HitTestResult.h"
TrackPanelResizerCell::TrackPanelResizerCell( std::shared_ptr<Track> pTrack )
: mpTrack{ pTrack }
{}
HitTestResult TrackPanelResizerCell::HitTest
(const TrackPanelMouseEvent &event, const AudacityProject *pProject)
{
return {
TrackPanelResizeHandle::HitPreview( mBetweenTracks ),
&TrackPanelResizeHandle::Instance()
};
}

View File

@ -0,0 +1,36 @@
/**********************************************************************
Audacity: A Digital Audio Editor
TrackPanelResizerCell.h
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#ifndef __AUDACITY_TRACK_PANEL_RESIZER_CELL__
#define __AUDACITY_TRACK_PANEL_RESIZER_CELL__
#include "tracks/ui/CommonTrackPanelCell.h"
class TrackPanelResizerCell : public CommonTrackPanelCell
{
TrackPanelResizerCell(const TrackPanelResizerCell&) = delete;
TrackPanelResizerCell &operator= (const TrackPanelResizerCell&) = delete;
public:
explicit
TrackPanelResizerCell( std::shared_ptr<Track> pTrack );
HitTestResult HitTest
(const TrackPanelMouseEvent &event,
const AudacityProject *pProject) override;
std::shared_ptr<Track> FindTrack() override { return mpTrack.lock(); };
private:
friend class TrackPanelCellIterator;
std::weak_ptr<Track> mpTrack;
bool mBetweenTracks {};
};
#endif

View File

@ -0,0 +1,98 @@
/**********************************************************************
Audacity: A Digital Audio Editor
NoteTrackButtonHandle.cpp
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#include "../../../../Audacity.h"
#include "NoteTrackButtonHandle.h"
#include "../../../../HitTestResult.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../NoteTrack.h"
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanel.h"
NoteTrackButtonHandle::NoteTrackButtonHandle()
{
}
NoteTrackButtonHandle::~NoteTrackButtonHandle()
{
}
NoteTrackButtonHandle &NoteTrackButtonHandle::Instance()
{
static NoteTrackButtonHandle instance;
return instance;
}
HitTestResult NoteTrackButtonHandle::HitTest
(const wxMouseState &state, const wxRect &rect,
const std::shared_ptr<NoteTrack> &pTrack)
{
wxRect midiRect;
TrackInfo::GetMidiControlsRect(rect, midiRect);
if ( TrackInfo::HideTopItem( rect, midiRect ) )
return {};
if (pTrack->GetKind() == Track::Note &&
midiRect.Contains(state.m_x, state.m_y)) {
Instance().mpTrack = pTrack;
Instance().mRect = midiRect;
return {
HitTestPreview(),
&Instance()
};
}
else
return {};
}
UIHandle::Result NoteTrackButtonHandle::Click
(const TrackPanelMouseEvent &, AudacityProject *)
{
return RefreshCode::RefreshNone;
}
UIHandle::Result NoteTrackButtonHandle::Drag
(const TrackPanelMouseEvent &, AudacityProject *)
{
return RefreshCode::RefreshNone;
}
HitTestPreview NoteTrackButtonHandle::Preview
(const TrackPanelMouseEvent &, const AudacityProject *)
{
// No special message or cursor
return {};
}
UIHandle::Result NoteTrackButtonHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject, wxWindow *)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return Cancelled;
const wxMouseEvent &event = evt.event;
if (pTrack->LabelClick(mRect, event.m_x, event.m_y,
event.Button(wxMOUSE_BTN_RIGHT))) {
// No undo items needed??
pProject->ModifyState(false);
return RefreshAll;
}
return RefreshNone;
}
UIHandle::Result NoteTrackButtonHandle::Cancel(AudacityProject *)
{
return RefreshCode::RefreshNone;
}

View File

@ -0,0 +1,58 @@
/**********************************************************************
Audacity: A Digital Audio Editor
NoteTrackButtonHandle.h
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#ifndef __AUDACITY_NOTE_TRACK_BUTTON_HANDLE__
#define __AUDACITY_NOTE_TRACK_BUTTON_HANDLE__
class wxMouseState;
class NoteTrack;
struct HitTestResult;
#include <wx/gdicmn.h>
#include "../../../../MemoryX.h"
#include "../../../../UIHandle.h"
///////////////////////////////////////////////////////////////////////////////
// TODO: do appearance changes as in ButtonHandle, or even, inherit from that
class NoteTrackButtonHandle : public UIHandle
{
NoteTrackButtonHandle(const NoteTrackButtonHandle&);
NoteTrackButtonHandle &operator=(const NoteTrackButtonHandle&);
NoteTrackButtonHandle();
virtual ~NoteTrackButtonHandle();
static NoteTrackButtonHandle& Instance();
public:
static HitTestResult HitTest
(const wxMouseState &state, const wxRect &rect,
const std::shared_ptr<NoteTrack> &pTrack);
protected:
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;
std::weak_ptr<NoteTrack> mpTrack;
wxRect mRect{};
};
#endif

View File

@ -13,132 +13,17 @@ Paul Licameli split from TrackPanel.cpp
#ifdef USE_MIDI
#include "NoteTrackControls.h"
#include "NoteTrackButtonHandle.h"
#include "../../ui/PlayableTrackButtonHandles.h"
#include "NoteTrackSliderHandles.h"
#include "../../../../HitTestResult.h"
#include "../../../../Track.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../NoteTrack.h"
#include "../../../../widgets/PopupMenuTable.h"
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanel.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../UIHandle.h"
///////////////////////////////////////////////////////////////////////////////
// TODO: do appearance changes as in ButtonHandle, or even, inherit from that
class NoteTrackClickHandle : public UIHandle
{
NoteTrackClickHandle(const NoteTrackClickHandle&);
NoteTrackClickHandle &operator=(const NoteTrackClickHandle&);
NoteTrackClickHandle();
virtual ~NoteTrackClickHandle();
static NoteTrackClickHandle& Instance();
public:
static HitTestResult HitTest
(const wxMouseEvent &event, const wxRect &rect,
const std::shared_ptr<NoteTrack> &pTrack);
protected:
virtual Result Click
(const TrackPanelMouseEvent &event, AudacityProject *pProject);
virtual Result Drag
(const TrackPanelMouseEvent &event, AudacityProject *pProject);
virtual HitTestPreview Preview
(const TrackPanelMouseEvent &event, const AudacityProject *pProject);
virtual Result Release
(const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent);
virtual Result Cancel(AudacityProject *pProject);
std::weak_ptr<NoteTrack> mpTrack;
wxRect mRect{};
};
NoteTrackClickHandle::NoteTrackClickHandle()
{
}
NoteTrackClickHandle::~NoteTrackClickHandle()
{
}
NoteTrackClickHandle &NoteTrackClickHandle::Instance()
{
static NoteTrackClickHandle instance;
return instance;
}
HitTestResult NoteTrackClickHandle::HitTest
(const wxMouseEvent &event, const wxRect &rect,
const std::shared_ptr<NoteTrack> &pTrack)
{
wxRect midiRect;
TrackInfo::GetMidiControlsRect(rect, midiRect);
if ( TrackInfo::HideTopItem( rect, midiRect ) )
return {};
if (pTrack->GetKind() == Track::Note &&
midiRect.Contains(event.m_x, event.m_y)) {
Instance().mpTrack = pTrack;
Instance().mRect = midiRect;
return {
HitTestPreview(),
&Instance()
};
}
else
return {};
}
UIHandle::Result NoteTrackClickHandle::Click
(const TrackPanelMouseEvent &, AudacityProject *)
{
return RefreshCode::RefreshNone;
}
UIHandle::Result NoteTrackClickHandle::Drag
(const TrackPanelMouseEvent &, AudacityProject *)
{
return RefreshCode::RefreshNone;
}
HitTestPreview NoteTrackClickHandle::Preview
(const TrackPanelMouseEvent &, const AudacityProject *)
{
// No special message or cursor
return {};
}
UIHandle::Result NoteTrackClickHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject, wxWindow *)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return Cancelled;
const wxMouseEvent &event = evt.event;
if (pTrack->LabelClick(mRect, event.m_x, event.m_y,
event.Button(wxMOUSE_BTN_RIGHT))) {
// No undo items needed??
pProject->ModifyState(false);
return RefreshAll;
}
return RefreshNone;
}
UIHandle::Result NoteTrackClickHandle::Cancel(AudacityProject *)
{
return RefreshCode::RefreshNone;
}
///////////////////////////////////////////////////////////////////////////////
NoteTrackControls::~NoteTrackControls()
@ -169,7 +54,7 @@ HitTestResult NoteTrackControls::HitTest
VelocitySliderHandle::HitTest(event, rect, pProject, track)).handle)
return result;
if (NULL != (result =
NoteTrackClickHandle::HitTest(event, rect, track)).handle)
NoteTrackButtonHandle::HitTest(event, rect, track)).handle)
return result;
#endif
}

View File

@ -13,195 +13,14 @@ Paul Licameli split from TrackPanel.cpp
#ifdef USE_MIDI
#include "NoteTrackVRulerControls.h"
#include "NoteTrackVZoomHandle.h"
#include "../../../../HitTestResult.h"
#include "../../../../NoteTrack.h"
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../UIHandle.h"
#include "../../../../../images/Cursors.h"
namespace
{
bool IsDragZooming(int zoomStart, int zoomEnd)
{
const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click.
return (abs(zoomEnd - zoomStart) > DragThreshold);
}
}
///////////////////////////////////////////////////////////////////////////////
class NoteTrackVZoomHandle : public UIHandle
{
NoteTrackVZoomHandle();
NoteTrackVZoomHandle(const NoteTrackVZoomHandle&);
NoteTrackVZoomHandle &operator=(const NoteTrackVZoomHandle&);
static NoteTrackVZoomHandle& Instance();
static HitTestPreview HitPreview(const wxMouseEvent &event);
public:
static HitTestResult HitTest(const wxMouseEvent &event);
virtual ~NoteTrackVZoomHandle();
virtual Result Click
(const TrackPanelMouseEvent &event, AudacityProject *pProject);
virtual Result Drag
(const TrackPanelMouseEvent &event, AudacityProject *pProject);
virtual HitTestPreview Preview
(const TrackPanelMouseEvent &event, const AudacityProject *pProject);
virtual Result Release
(const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent);
virtual Result Cancel(AudacityProject *pProject);
virtual void DrawExtras
(DrawingPass pass,
wxDC * dc, const wxRegion &updateRegion, const wxRect &panelRect);
private:
std::weak_ptr<NoteTrack> mpTrack;
int mZoomStart, mZoomEnd;
wxRect mRect;
};
NoteTrackVZoomHandle::NoteTrackVZoomHandle()
: mZoomStart(0), mZoomEnd(0), mRect()
{
}
NoteTrackVZoomHandle &NoteTrackVZoomHandle::Instance()
{
static NoteTrackVZoomHandle instance;
return instance;
}
HitTestPreview NoteTrackVZoomHandle::HitPreview(const wxMouseEvent &event)
{
static auto zoomInCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomInCursorXpm, 19, 15);
static auto zoomOutCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomOutCursorXpm, 19, 15);
return {
_("Click to vertically zoom in. Shift-click to zoom out. Drag to specify a zoom region."),
(event.ShiftDown() ? &*zoomOutCursor : &*zoomInCursor)
};
}
HitTestResult NoteTrackVZoomHandle::HitTest(const wxMouseEvent &event)
{
return HitTestResult(HitPreview(event), &Instance());
}
NoteTrackVZoomHandle::~NoteTrackVZoomHandle()
{
}
UIHandle::Result NoteTrackVZoomHandle::Click
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
mpTrack = std::static_pointer_cast<NoteTrack>(
static_cast<NoteTrackVRulerControls*>(evt.pCell.get())->FindTrack() );
mRect = evt.rect;
const wxMouseEvent &event = evt.event;
mZoomStart = event.m_y;
mZoomEnd = event.m_y;
// change note track to zoom like audio track
// mpTrack->StartVScroll();
return RefreshCode::RefreshNone;
}
UIHandle::Result NoteTrackVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return Cancelled;
const wxMouseEvent &event = evt.event;
mZoomEnd = event.m_y;
if (IsDragZooming(mZoomStart, mZoomEnd)) {
// changed Note track to work like audio track
// pTrack->VScroll(mZoomStart, mZoomEnd);
return RefreshAll;
}
return RefreshNone;
}
HitTestPreview NoteTrackVZoomHandle::Preview
(const TrackPanelMouseEvent &evt, const AudacityProject *pProject)
{
return HitPreview(evt.event);
}
UIHandle::Result NoteTrackVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return RefreshNone;
const wxMouseEvent &event = evt.event;
if (IsDragZooming(mZoomStart, mZoomEnd)) {
pTrack->ZoomTo(evt.rect, mZoomStart, mZoomEnd);
}
else if (event.ShiftDown() || event.RightUp()) {
if (event.ShiftDown() && event.RightUp()) {
// Zoom out completely
pTrack->SetBottomNote(0);
auto octavePadding = 2 * 10; // 10 octaves times 2 single-pixel seperations per pixel
auto availableHeight = evt.rect.height - octavePadding;
auto numNotes = 128;
auto spacePerNote = availableHeight / numNotes;
pTrack->SetPitchHeight(std::max(spacePerNote, 1));
} else {
// Zoom out
pTrack->ZoomOut(evt.rect, mZoomEnd);
}
}
else {
pTrack->ZoomIn(evt.rect, mZoomEnd);
}
mZoomEnd = mZoomStart = 0;
pProject->ModifyState(true);
return RefreshAll;
}
UIHandle::Result NoteTrackVZoomHandle::Cancel(AudacityProject *pProject)
{
// Cancel is implemented! And there is no initial state to restore,
// so just return a code.
return RefreshCode::RefreshAll;
}
void NoteTrackVZoomHandle::DrawExtras
(DrawingPass pass, wxDC * dc, const wxRegion &, const wxRect &panelRect)
{
if (!mpTrack.lock()) //? TrackList::Lock()
return;
if ( pass == UIHandle::Cells &&
IsDragZooming( mZoomStart, mZoomEnd ) )
TrackVRulerControls::DrawZooming
( dc, mRect, panelRect, mZoomStart, mZoomEnd );
}
///////////////////////////////////////////////////////////////////////////////
NoteTrackVRulerControls::~NoteTrackVRulerControls()

View File

@ -0,0 +1,164 @@
/**********************************************************************
Audacity: A Digital Audio Editor
NoteTrackVZoomHandle.cpp
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#include "../../../../Audacity.h"
#include "NoteTrackVZoomHandle.h"
#include "NoteTrackVRulerControls.h"
#include "../../../../HitTestResult.h"
#include "../../../../NoteTrack.h"
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../../images/Cursors.h"
#include <wx/event.h>
namespace
{
bool IsDragZooming(int zoomStart, int zoomEnd)
{
const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click.
return (abs(zoomEnd - zoomStart) > DragThreshold);
}
}
///////////////////////////////////////////////////////////////////////////////
NoteTrackVZoomHandle::NoteTrackVZoomHandle()
: mZoomStart(0), mZoomEnd(0), mRect()
{
}
NoteTrackVZoomHandle &NoteTrackVZoomHandle::Instance()
{
static NoteTrackVZoomHandle instance;
return instance;
}
HitTestPreview NoteTrackVZoomHandle::HitPreview(const wxMouseState &state)
{
static auto zoomInCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomInCursorXpm, 19, 15);
static auto zoomOutCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomOutCursorXpm, 19, 15);
return {
_("Click to verticaly zoom in, Shift-click to zoom out, Drag to create a particular zoom region."),
(state.ShiftDown() ? &*zoomOutCursor : &*zoomInCursor)
};
}
HitTestResult NoteTrackVZoomHandle::HitTest(const wxMouseState &state)
{
return HitTestResult(HitPreview(state), &Instance());
}
NoteTrackVZoomHandle::~NoteTrackVZoomHandle()
{
}
UIHandle::Result NoteTrackVZoomHandle::Click
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
mpTrack = std::static_pointer_cast<NoteTrack>(
static_cast<NoteTrackVRulerControls*>(evt.pCell.get())->FindTrack() );
mRect = evt.rect;
const wxMouseEvent &event = evt.event;
mZoomStart = event.m_y;
mZoomEnd = event.m_y;
// change note track to zoom like audio track
// mpTrack->StartVScroll();
return RefreshCode::RefreshNone;
}
UIHandle::Result NoteTrackVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return Cancelled;
const wxMouseEvent &event = evt.event;
mZoomEnd = event.m_y;
if (IsDragZooming(mZoomStart, mZoomEnd)) {
// changed Note track to work like audio track
// pTrack->VScroll(mZoomStart, mZoomEnd);
return RefreshAll;
}
return RefreshNone;
}
HitTestPreview NoteTrackVZoomHandle::Preview
(const TrackPanelMouseEvent &evt, const AudacityProject *)
{
return HitPreview(evt.event);
}
UIHandle::Result NoteTrackVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return RefreshNone;
const wxMouseEvent &event = evt.event;
if (IsDragZooming(mZoomStart, mZoomEnd)) {
pTrack->ZoomTo(evt.rect, mZoomStart, mZoomEnd);
}
else if (event.ShiftDown() || event.RightUp()) {
if (event.ShiftDown() && event.RightUp()) {
// Zoom out completely
pTrack->SetBottomNote(0);
auto octavePadding = 2 * 10; // 10 octaves times 2 single-pixel seperations per pixel
auto availableHeight = evt.rect.height - octavePadding;
auto numNotes = 128;
auto spacePerNote = availableHeight / numNotes;
pTrack->SetPitchHeight(std::max(spacePerNote, 1));
} else {
// Zoom out
pTrack->ZoomOut(evt.rect, mZoomEnd);
}
}
else {
pTrack->ZoomIn(evt.rect, mZoomEnd);
}
mZoomEnd = mZoomStart = 0;
pProject->ModifyState(true);
return RefreshAll;
}
UIHandle::Result NoteTrackVZoomHandle::Cancel(AudacityProject *pProject)
{
// Cancel is implemented! And there is no initial state to restore,
// so just return a code.
return RefreshCode::RefreshAll;
}
void NoteTrackVZoomHandle::DrawExtras
(DrawingPass pass, wxDC * dc, const wxRegion &, const wxRect &panelRect)
{
if (!mpTrack.lock()) //? TrackList::Lock()
return;
if ( pass == UIHandle::Cells &&
IsDragZooming( mZoomStart, mZoomEnd ) )
TrackVRulerControls::DrawZooming
( dc, mRect, panelRect, mZoomStart, mZoomEnd );
}

View File

@ -0,0 +1,63 @@
/**********************************************************************
Audacity: A Digital Audio Editor
NoteTrackVZoomHandle.h
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#ifndef __AUDACITY_NOTE_TRACK_VZOOM_HANDLE__
#define __AUDACITY_NOTE_TRACK_VZOOM_HANDLE__
class wxMouseState;
struct HitTestResult;
class NoteTrack;
#include "../../../../MemoryX.h"
#include "../../../../UIHandle.h"
#include <wx/gdicmn.h>
class NoteTrackVZoomHandle : public UIHandle
{
NoteTrackVZoomHandle();
NoteTrackVZoomHandle(const NoteTrackVZoomHandle&);
NoteTrackVZoomHandle &operator=(const NoteTrackVZoomHandle&);
static NoteTrackVZoomHandle& Instance();
static HitTestPreview HitPreview(const wxMouseState &state);
public:
static HitTestResult HitTest(const wxMouseState &state);
virtual ~NoteTrackVZoomHandle();
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;
void DrawExtras
(DrawingPass pass,
wxDC * dc, const wxRegion &updateRegion, const wxRect &panelRect)
override;
private:
std::weak_ptr<NoteTrack> mpTrack;
int mZoomStart, mZoomEnd;
wxRect mRect;
};
#endif

View File

@ -10,8 +10,7 @@ Paul Licameli split from TrackPanel.cpp
#include "../../../../Audacity.h"
#include "WaveTrackVRulerControls.h"
#include <algorithm>
#include "WaveTrackVZoomHandle.h"
#include "../../../../HitTestResult.h"
#include "../../../../NumberScale.h"
@ -20,636 +19,11 @@ Paul Licameli split from TrackPanel.cpp
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../UIHandle.h"
#include "../../../../WaveTrack.h"
#include "../../../../widgets/PopupMenuTable.h"
#include "../../../../../images/Cursors.h"
#include <wx/gdicmn.h>
#include <wx/dc.h>
#include <wx/event.h>
namespace
{
struct InitMenuData
{
public:
WaveTrack *pTrack;
wxRect rect;
unsigned result;
int yy;
};
bool IsDragZooming(int zoomStart, int zoomEnd)
{
const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click.
return (abs(zoomEnd - zoomStart) > DragThreshold);
}
void HandleWaveTrackVZoom
(AudacityProject *pProject,
WaveTrack *pTrack, bool shiftDown, bool rightUp,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint)
{
static const float ZOOMLIMIT = 0.001f;
TrackList *const tracks = pProject->GetTracks();
// Assume linked track is wave or null
const auto partner = static_cast<WaveTrack *>(pTrack->GetLink());
int height = rect.height;
int ypos = rect.y;
// Ensure start and end are in order (swap if not).
if (zoomEnd < zoomStart)
std::swap( zoomStart, zoomEnd );
float min, max, c, minBand = 0;
const double rate = pTrack->GetRate();
const float halfrate = rate / 2;
const SpectrogramSettings &settings = pTrack->GetSpectrogramSettings();
NumberScale scale;
const bool spectral = (pTrack->GetDisplay() == WaveTrack::Spectrum);
const bool spectrumLinear = spectral &&
(pTrack->GetSpectrogramSettings().scaleType == SpectrogramSettings::stLinear);
if (spectral) {
pTrack->GetSpectrumBounds(&min, &max);
scale = (settings.GetScale(min, max));
const auto fftLength = settings.GetFFTLength();
const float binSize = rate / fftLength;
// JKC: Following discussions of Bug 1208 I'm allowing zooming in
// down to one bin.
// const int minBins =
// std::min(10, fftLength / 2); //minimum 10 freq bins, unless there are less
const int minBins = 1;
minBand = minBins * binSize;
}
else
pTrack->GetDisplayBounds(&min, &max);
if (IsDragZooming(zoomStart, zoomEnd)) {
// Drag Zoom
const float tmin = min, tmax = max;
if (spectral) {
double xmin = 1 - (zoomEnd - ypos) / (float)height;
double xmax = 1 - (zoomStart - ypos) / (float)height;
const float middle = (xmin + xmax) / 2;
const float middleValue = scale.PositionToValue(middle);
min = std::max(spectrumLinear ? 0.0f : 1.0f,
std::min(middleValue - minBand / 2,
scale.PositionToValue(xmin)
));
max = std::min(halfrate,
std::max(middleValue + minBand / 2,
scale.PositionToValue(xmax)
));
}
else {
const float p1 = (zoomStart - ypos) / (float)height;
const float p2 = (zoomEnd - ypos) / (float)height;
max = (tmax * (1.0 - p1) + tmin * p1);
min = (tmax * (1.0 - p2) + tmin * p2);
// Waveform view - allow zooming down to a range of ZOOMLIMIT
if (max - min < ZOOMLIMIT) { // if user attempts to go smaller...
c = (min + max) / 2; // ...set centre of view to centre of dragged area and top/bottom to ZOOMLIMIT/2 above/below
min = c - ZOOMLIMIT / 2.0;
max = c + ZOOMLIMIT / 2.0;
}
}
}
else if (shiftDown || rightUp) {
// Zoom OUT
if (spectral) {
if (shiftDown && rightUp) {
// Zoom out full
min = spectrumLinear ? 0.0f : 1.0f;
max = halfrate;
}
else {
// Zoom out
const float p1 = (zoomStart - ypos) / (float)height;
// (Used to zoom out centered at midline, ignoring the click, if linear view.
// I think it is better to be consistent. PRL)
// Center zoom-out at the midline
const float middle = // spectrumLinear ? 0.5f :
1.0f - p1;
if (fixedMousePoint) {
min = std::max(spectrumLinear ? 0.0f : 1.0f, scale.PositionToValue(-middle));
max = std::min(halfrate, scale.PositionToValue(1.0f + p1));
}
else {
min = std::max(spectrumLinear ? 0.0f : 1.0f, scale.PositionToValue(middle - 1.0f));
max = std::min(halfrate, scale.PositionToValue(middle + 1.0f));
}
}
}
else {
// Zoom out to -1.0...1.0 first, then, and only
// then, if they click again, allow one more
// zoom out.
if (shiftDown && rightUp) {
// Zoom out full
min = -1.0;
max = 1.0;
}
else {
// Zoom out
const WaveformSettings &settings = pTrack->GetWaveformSettings();
const bool linear = settings.isLinear();
const float top = linear
? 2.0
: (LINEAR_TO_DB(2.0) + settings.dBRange) / settings.dBRange;
if (min <= -1.0 && max >= 1.0) {
min = -top;
max = top;
}
else {
// limit to +/- 1 range unless already outside that range...
float minRange = (min < -1) ? -top : -1.0;
float maxRange = (max > 1) ? top : 1.0;
// and enforce vertical zoom limits.
const float p1 = (zoomStart - ypos) / (float)height;
if (fixedMousePoint) {
const float oldRange = max - min;
const float c = (max * (1.0 - p1) + min * p1);
min = std::min(maxRange - ZOOMLIMIT,
std::max(minRange, c - 2 * (1.0f - p1) * oldRange));
max = std::max(minRange + ZOOMLIMIT,
std::min(maxRange, c + 2 * p1 * oldRange));
}
else {
const float c = p1 * min + (1 - p1) * max;
const float l = (max - min);
min = std::min(maxRange - ZOOMLIMIT,
std::max(minRange, c - l));
max = std::max(minRange + ZOOMLIMIT,
std::min(maxRange, c + l));
}
}
}
}
}
else {
// Zoom IN
if (spectral) {
// Center the zoom-in at the click
const float p1 = (zoomStart - ypos) / (float)height;
const float middle = 1.0f - p1;
const float middleValue = scale.PositionToValue(middle);
if (fixedMousePoint) {
min = std::max(spectrumLinear ? 0.0f : 1.0f,
std::min(middleValue - minBand * middle,
scale.PositionToValue(0.5f * middle)
));
max = std::min(halfrate,
std::max(middleValue + minBand * p1,
scale.PositionToValue(middle + 0.5f * p1)
));
}
else {
min = std::max(spectrumLinear ? 0.0f : 1.0f,
std::min(middleValue - minBand / 2,
scale.PositionToValue(middle - 0.25f)
));
max = std::min(halfrate,
std::max(middleValue + minBand / 2,
scale.PositionToValue(middle + 0.25f)
));
}
}
else {
// Zoom in centered on cursor
if (min < -1.0 || max > 1.0) {
min = -1.0;
max = 1.0;
}
else {
// Enforce maximum vertical zoom
const float oldRange = max - min;
const float l = std::max(ZOOMLIMIT, 0.5f * oldRange);
const float ratio = l / (max - min);
const float p1 = (zoomStart - ypos) / (float)height;
const float c = (max * (1.0 - p1) + min * p1);
if (fixedMousePoint)
min = c - ratio * (1.0f - p1) * oldRange,
max = c + ratio * p1 * oldRange;
else
min = c - 0.5 * l,
max = c + 0.5 * l;
}
}
}
if (spectral) {
pTrack->SetSpectrumBounds(min, max);
if (partner)
partner->SetSpectrumBounds(min, max);
}
else {
pTrack->SetDisplayBounds(min, max);
if (partner)
partner->SetDisplayBounds(min, max);
}
zoomEnd = zoomStart = 0;
pProject->ModifyState(true);
}
}
enum {
OnZoomInVerticalID = 20000,
OnZoomOutVerticalID,
OnZoomFitVerticalID,
// Reserve an ample block of ids for waveform scale types
OnFirstWaveformScaleID,
OnLastWaveformScaleID = OnFirstWaveformScaleID + 9,
// Reserve an ample block of ids for spectrum scale types
OnFirstSpectrumScaleID,
OnLastSpectrumScaleID = OnFirstSpectrumScaleID + 19,
};
///////////////////////////////////////////////////////////////////////////////
// Table class
class WaveTrackVRulerMenuTable : public PopupMenuTable
{
protected:
WaveTrackVRulerMenuTable() {}
void InitMenu(Menu *pMenu, void *pUserData) override;
private:
void DestroyMenu() override
{
mpData = nullptr;
}
protected:
InitMenuData *mpData {};
void OnZoomInVertical(wxCommandEvent&);
void OnZoomOutVertical(wxCommandEvent&);
void OnZoomFitVertical(wxCommandEvent&);
};
void WaveTrackVRulerMenuTable::InitMenu(Menu *, void *pUserData)
{
mpData = static_cast<InitMenuData*>(pUserData);
}
void WaveTrackVRulerMenuTable::OnZoomInVertical(wxCommandEvent &)
{
HandleWaveTrackVZoom
(::GetActiveProject(), mpData->pTrack, false, false, mpData->rect, mpData->yy, mpData->yy, false);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
void WaveTrackVRulerMenuTable::OnZoomOutVertical(wxCommandEvent &)
{
HandleWaveTrackVZoom
(::GetActiveProject(), mpData->pTrack, true, false, mpData->rect, mpData->yy, mpData->yy, false);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
void WaveTrackVRulerMenuTable::OnZoomFitVertical(wxCommandEvent &)
{
HandleWaveTrackVZoom
(::GetActiveProject(), mpData->pTrack, true, true, mpData->rect, mpData->yy, mpData->yy, false);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
///////////////////////////////////////////////////////////////////////////////
// Table class
class WaveformVRulerMenuTable : public WaveTrackVRulerMenuTable
{
WaveformVRulerMenuTable() : WaveTrackVRulerMenuTable() {}
virtual ~WaveformVRulerMenuTable() {}
DECLARE_POPUP_MENU(WaveformVRulerMenuTable);
public:
static WaveformVRulerMenuTable &Instance();
private:
virtual void InitMenu(Menu *pMenu, void *pUserData);
void OnWaveformScaleType(wxCommandEvent &evt);
};
WaveformVRulerMenuTable &WaveformVRulerMenuTable::Instance()
{
static WaveformVRulerMenuTable instance;
return instance;
}
void WaveformVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData)
{
WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData);
WaveTrack *const wt = mpData->pTrack;
const int id =
OnFirstWaveformScaleID + (int)(wt->GetWaveformSettings().scaleType);
pMenu->Check(id, true);
}
BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
{
const wxArrayString & names = WaveformSettings::GetScaleNames();
for (int ii = 0, nn = names.size(); ii < nn; ++ii) {
POPUP_MENU_RADIO_ITEM(OnFirstWaveformScaleID + ii, names[ii],
OnWaveformScaleType);
}
}
POPUP_MENU_SEPARATOR()
POPUP_MENU_ITEM(OnZoomInVerticalID, _("Zoom In\tLeft-Click/Left-Drag"), OnZoomInVertical)
POPUP_MENU_ITEM(OnZoomOutVerticalID, _("Zoom Out\tShift-Left-Click"), OnZoomOutVertical)
POPUP_MENU_ITEM(OnZoomFitVerticalID, _("Zoom to Fit\tShift-Right-Click"), OnZoomFitVertical)
END_POPUP_MENU()
void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt)
{
WaveTrack *const wt = mpData->pTrack;
// Assume linked track is wave or null
const auto partner = static_cast<WaveTrack*>(wt->GetLink());
const WaveformSettings::ScaleType newScaleType =
WaveformSettings::ScaleType(
std::max(0,
std::min((int)(WaveformSettings::stNumScaleTypes) - 1,
evt.GetId() - OnFirstWaveformScaleID
)));
if (wt->GetWaveformSettings().scaleType != newScaleType) {
wt->GetIndependentWaveformSettings().scaleType = newScaleType;
if (partner)
partner->GetIndependentWaveformSettings().scaleType = newScaleType;
::GetActiveProject()->ModifyState(true);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
}
///////////////////////////////////////////////////////////////////////////////
// Table class
class SpectrumVRulerMenuTable : public WaveTrackVRulerMenuTable
{
SpectrumVRulerMenuTable() : WaveTrackVRulerMenuTable() {}
virtual ~SpectrumVRulerMenuTable() {}
DECLARE_POPUP_MENU(SpectrumVRulerMenuTable);
public:
static SpectrumVRulerMenuTable &Instance();
private:
void InitMenu(Menu *pMenu, void *pUserData);
void OnSpectrumScaleType(wxCommandEvent &evt);
};
SpectrumVRulerMenuTable &SpectrumVRulerMenuTable::Instance()
{
static SpectrumVRulerMenuTable instance;
return instance;
}
void SpectrumVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData)
{
WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData);
WaveTrack *const wt = mpData->pTrack;
const int id =
OnFirstSpectrumScaleID + (int)(wt->GetSpectrogramSettings().scaleType);
pMenu->Check(id, true);
}
BEGIN_POPUP_MENU(SpectrumVRulerMenuTable)
{
const wxArrayString & names = SpectrogramSettings::GetScaleNames();
for (int ii = 0, nn = names.size(); ii < nn; ++ii) {
POPUP_MENU_RADIO_ITEM(OnFirstSpectrumScaleID + ii, names[ii],
OnSpectrumScaleType);
}
}
POPUP_MENU_SEPARATOR()
POPUP_MENU_ITEM(OnZoomInVerticalID, _("Zoom In\tLeft-Click/Left-Drag"), OnZoomInVertical)
POPUP_MENU_ITEM(OnZoomOutVerticalID, _("Zoom Out\tShift-Left-Click"), OnZoomOutVertical)
POPUP_MENU_ITEM(OnZoomFitVerticalID, _("Zoom to Fit\tShift-Right-Click"), OnZoomFitVertical)
END_POPUP_MENU()
void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt)
{
WaveTrack *const wt = mpData->pTrack;
// Assume linked track is wave or null
const auto partner = static_cast<WaveTrack*>(wt->GetLink());
const SpectrogramSettings::ScaleType newScaleType =
SpectrogramSettings::ScaleType(
std::max(0,
std::min((int)(SpectrogramSettings::stNumScaleTypes) - 1,
evt.GetId() - OnFirstSpectrumScaleID
)));
if (wt->GetSpectrogramSettings().scaleType != newScaleType) {
wt->GetIndependentSpectrogramSettings().scaleType = newScaleType;
if (partner)
partner->GetIndependentSpectrogramSettings().scaleType = newScaleType;
::GetActiveProject()->ModifyState(true);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
}
///////////////////////////////////////////////////////////////////////////////
class WaveTrackVZoomHandle : public UIHandle
{
WaveTrackVZoomHandle();
WaveTrackVZoomHandle(const WaveTrackVZoomHandle&);
WaveTrackVZoomHandle &operator=(const WaveTrackVZoomHandle&);
static WaveTrackVZoomHandle& Instance();
static HitTestPreview HitPreview(const wxMouseEvent &event);
public:
static HitTestResult HitTest(const wxMouseEvent &event);
virtual ~WaveTrackVZoomHandle();
virtual Result Click
(const TrackPanelMouseEvent &event, AudacityProject *pProject);
virtual Result Drag
(const TrackPanelMouseEvent &event, AudacityProject *pProject);
virtual HitTestPreview Preview
(const TrackPanelMouseEvent &event, const AudacityProject *pProject);
virtual Result Release
(const TrackPanelMouseEvent &event, AudacityProject *pProject,
wxWindow *pParent);
virtual Result Cancel(AudacityProject *pProject);
virtual void DrawExtras
(DrawingPass pass,
wxDC * dc, const wxRegion &updateRegion, const wxRect &panelRect);
private:
std::weak_ptr<WaveTrack> mpTrack;
int mZoomStart{}, mZoomEnd{};
wxRect mRect{};
};
WaveTrackVZoomHandle::WaveTrackVZoomHandle()
{
}
WaveTrackVZoomHandle &WaveTrackVZoomHandle::Instance()
{
static WaveTrackVZoomHandle instance;
return instance;
}
HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseEvent &event)
{
static auto zoomInCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomInCursorXpm, 19, 15);
static auto zoomOutCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomOutCursorXpm, 19, 15);
return {
_("Click to vertically zoom in. Shift-click to zoom out. Drag to specify a zoom region."),
(event.ShiftDown() ? &*zoomOutCursor : &*zoomInCursor)
};
}
HitTestResult WaveTrackVZoomHandle::HitTest(const wxMouseEvent &event)
{
return { HitPreview(event), &Instance() };
}
WaveTrackVZoomHandle::~WaveTrackVZoomHandle()
{
}
UIHandle::Result WaveTrackVZoomHandle::Click
(const TrackPanelMouseEvent &evt, AudacityProject *)
{
mpTrack = std::static_pointer_cast<WaveTrack>(
static_cast<WaveTrackVRulerControls*>(evt.pCell.get())->FindTrack() );
mRect = evt.rect;
const wxMouseEvent &event = evt.event;
mZoomStart = event.m_y;
mZoomEnd = event.m_y;
return RefreshCode::RefreshNone;
}
UIHandle::Result WaveTrackVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return Cancelled;
const wxMouseEvent &event = evt.event;
mZoomEnd = event.m_y;
if (IsDragZooming(mZoomStart, mZoomEnd))
return RefreshAll;
return RefreshNone;
}
HitTestPreview WaveTrackVZoomHandle::Preview
(const TrackPanelMouseEvent &evt, const AudacityProject *)
{
return HitPreview(evt.event);
}
UIHandle::Result WaveTrackVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return RefreshNone;
const wxMouseEvent &event = evt.event;
const bool shiftDown = event.ShiftDown();
const bool rightUp = event.RightUp();
// Popup menu... disabled
if (false &&
rightUp &&
!(event.ShiftDown() || event.CmdDown()))
{
InitMenuData data {
pTrack.get(), mRect, RefreshCode::RefreshNone, event.m_y
};
PopupMenuTable *const pTable =
(pTrack->GetDisplay() == WaveTrack::Spectrum)
? (PopupMenuTable *) &SpectrumVRulerMenuTable::Instance()
: (PopupMenuTable *) &WaveformVRulerMenuTable::Instance();
std::unique_ptr<PopupMenuTable::Menu>
pMenu(PopupMenuTable::BuildMenu(pParent, pTable, &data));
pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y);
return data.result;
}
else
HandleWaveTrackVZoom(pProject, pTrack.get(), shiftDown, rightUp,
mRect, mZoomStart, mZoomEnd, false);
return UpdateVRuler | RefreshAll;
}
UIHandle::Result WaveTrackVZoomHandle::Cancel(AudacityProject*)
{
// Cancel is implemented! And there is no initial state to restore,
// so just return a code.
return RefreshCode::RefreshAll;
}
void WaveTrackVZoomHandle::DrawExtras
(DrawingPass pass, wxDC * dc, const wxRegion &, const wxRect &panelRect)
{
if (!mpTrack.lock()) // TrackList::Lock()?
return;
if ( pass == UIHandle::Cells &&
IsDragZooming( mZoomStart, mZoomEnd ) )
TrackVRulerControls::DrawZooming
( dc, mRect, panelRect, mZoomStart, mZoomEnd );
}
///////////////////////////////////////////////////////////////////////////////
WaveTrackVRulerControls::~WaveTrackVRulerControls()
{
@ -738,7 +112,7 @@ unsigned WaveTrackVRulerControls::HandleWheelRotation
}
else if (event.CmdDown() && !event.ShiftDown()) {
const int yy = event.m_y;
HandleWaveTrackVZoom(
WaveTrackVZoomHandle::DoZoom(
pProject, wt, false, (steps < 0),
evt.rect, yy, yy, true);
}

View File

@ -0,0 +1,607 @@
/**********************************************************************
Audacity: A Digital Audio Editor
WaveTrackVZoomHandle.cpp
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#include "../../../../Audacity.h"
#include "WaveTrackVZoomHandle.h"
#include "WaveTrackVRulerControls.h"
#include "../../../../HitTestResult.h"
#include "../../../../NumberScale.h"
#include "../../../../prefs/SpectrogramSettings.h"
#include "../../../../prefs/WaveformSettings.h"
#include "../../../../Project.h"
#include "../../../../RefreshCode.h"
#include "../../../../TrackPanelMouseEvent.h"
#include "../../../../WaveTrack.h"
#include "../../../../widgets/PopupMenuTable.h"
#include "../../../../../images/Cursors.h"
namespace
{
struct InitMenuData
{
public:
WaveTrack *pTrack;
wxRect rect;
unsigned result;
int yy;
};
bool IsDragZooming(int zoomStart, int zoomEnd)
{
const int DragThreshold = 3;// Anything over 3 pixels is a drag, else a click.
return (abs(zoomEnd - zoomStart) > DragThreshold);
}
}
void WaveTrackVZoomHandle::DoZoom
(AudacityProject *pProject,
WaveTrack *pTrack, bool shiftDown, bool rightUp,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint)
{
static const float ZOOMLIMIT = 0.001f;
TrackList *const tracks = pProject->GetTracks();
// Assume linked track is wave or null
const auto partner = static_cast<WaveTrack *>(pTrack->GetLink());
int height = rect.height;
int ypos = rect.y;
// Ensure start and end are in order (swap if not).
if (zoomEnd < zoomStart)
std::swap( zoomStart, zoomEnd );
float min, max, c, minBand = 0;
const double rate = pTrack->GetRate();
const float halfrate = rate / 2;
const SpectrogramSettings &settings = pTrack->GetSpectrogramSettings();
NumberScale scale;
const bool spectral = (pTrack->GetDisplay() == WaveTrack::Spectrum);
const bool spectrumLinear = spectral &&
(pTrack->GetSpectrogramSettings().scaleType == SpectrogramSettings::stLinear);
if (spectral) {
pTrack->GetSpectrumBounds(&min, &max);
scale = (settings.GetScale(min, max));
const auto fftLength = settings.GetFFTLength();
const float binSize = rate / fftLength;
// JKC: Following discussions of Bug 1208 I'm allowing zooming in
// down to one bin.
// const int minBins =
// std::min(10, fftLength / 2); //minimum 10 freq bins, unless there are less
const int minBins = 1;
minBand = minBins * binSize;
}
else
pTrack->GetDisplayBounds(&min, &max);
if (IsDragZooming(zoomStart, zoomEnd)) {
// Drag Zoom
const float tmin = min, tmax = max;
if (spectral) {
double xmin = 1 - (zoomEnd - ypos) / (float)height;
double xmax = 1 - (zoomStart - ypos) / (float)height;
const float middle = (xmin + xmax) / 2;
const float middleValue = scale.PositionToValue(middle);
min = std::max(spectrumLinear ? 0.0f : 1.0f,
std::min(middleValue - minBand / 2,
scale.PositionToValue(xmin)
));
max = std::min(halfrate,
std::max(middleValue + minBand / 2,
scale.PositionToValue(xmax)
));
}
else {
const float p1 = (zoomStart - ypos) / (float)height;
const float p2 = (zoomEnd - ypos) / (float)height;
max = (tmax * (1.0 - p1) + tmin * p1);
min = (tmax * (1.0 - p2) + tmin * p2);
// Waveform view - allow zooming down to a range of ZOOMLIMIT
if (max - min < ZOOMLIMIT) { // if user attempts to go smaller...
c = (min + max) / 2; // ...set centre of view to centre of dragged area and top/bottom to ZOOMLIMIT/2 above/below
min = c - ZOOMLIMIT / 2.0;
max = c + ZOOMLIMIT / 2.0;
}
}
}
else if (shiftDown || rightUp) {
// Zoom OUT
if (spectral) {
if (shiftDown && rightUp) {
// Zoom out full
min = spectrumLinear ? 0.0f : 1.0f;
max = halfrate;
}
else {
// Zoom out
const float p1 = (zoomStart - ypos) / (float)height;
// (Used to zoom out centered at midline, ignoring the click, if linear view.
// I think it is better to be consistent. PRL)
// Center zoom-out at the midline
const float middle = // spectrumLinear ? 0.5f :
1.0f - p1;
if (fixedMousePoint) {
min = std::max(spectrumLinear ? 0.0f : 1.0f, scale.PositionToValue(-middle));
max = std::min(halfrate, scale.PositionToValue(1.0f + p1));
}
else {
min = std::max(spectrumLinear ? 0.0f : 1.0f, scale.PositionToValue(middle - 1.0f));
max = std::min(halfrate, scale.PositionToValue(middle + 1.0f));
}
}
}
else {
// Zoom out to -1.0...1.0 first, then, and only
// then, if they click again, allow one more
// zoom out.
if (shiftDown && rightUp) {
// Zoom out full
min = -1.0;
max = 1.0;
}
else {
// Zoom out
const WaveformSettings &settings = pTrack->GetWaveformSettings();
const bool linear = settings.isLinear();
const float top = linear
? 2.0
: (LINEAR_TO_DB(2.0) + settings.dBRange) / settings.dBRange;
if (min <= -1.0 && max >= 1.0) {
min = -top;
max = top;
}
else {
// limit to +/- 1 range unless already outside that range...
float minRange = (min < -1) ? -top : -1.0;
float maxRange = (max > 1) ? top : 1.0;
// and enforce vertical zoom limits.
const float p1 = (zoomStart - ypos) / (float)height;
if (fixedMousePoint) {
const float oldRange = max - min;
const float c = (max * (1.0 - p1) + min * p1);
min = std::min(maxRange - ZOOMLIMIT,
std::max(minRange, c - 2 * (1.0f - p1) * oldRange));
max = std::max(minRange + ZOOMLIMIT,
std::min(maxRange, c + 2 * p1 * oldRange));
}
else {
const float c = p1 * min + (1 - p1) * max;
const float l = (max - min);
min = std::min(maxRange - ZOOMLIMIT,
std::max(minRange, c - l));
max = std::max(minRange + ZOOMLIMIT,
std::min(maxRange, c + l));
}
}
}
}
}
else {
// Zoom IN
if (spectral) {
// Center the zoom-in at the click
const float p1 = (zoomStart - ypos) / (float)height;
const float middle = 1.0f - p1;
const float middleValue = scale.PositionToValue(middle);
if (fixedMousePoint) {
min = std::max(spectrumLinear ? 0.0f : 1.0f,
std::min(middleValue - minBand * middle,
scale.PositionToValue(0.5f * middle)
));
max = std::min(halfrate,
std::max(middleValue + minBand * p1,
scale.PositionToValue(middle + 0.5f * p1)
));
}
else {
min = std::max(spectrumLinear ? 0.0f : 1.0f,
std::min(middleValue - minBand / 2,
scale.PositionToValue(middle - 0.25f)
));
max = std::min(halfrate,
std::max(middleValue + minBand / 2,
scale.PositionToValue(middle + 0.25f)
));
}
}
else {
// Zoom in centered on cursor
if (min < -1.0 || max > 1.0) {
min = -1.0;
max = 1.0;
}
else {
// Enforce maximum vertical zoom
const float oldRange = max - min;
const float l = std::max(ZOOMLIMIT, 0.5f * oldRange);
const float ratio = l / (max - min);
const float p1 = (zoomStart - ypos) / (float)height;
const float c = (max * (1.0 - p1) + min * p1);
if (fixedMousePoint)
min = c - ratio * (1.0f - p1) * oldRange,
max = c + ratio * p1 * oldRange;
else
min = c - 0.5 * l,
max = c + 0.5 * l;
}
}
}
if (spectral) {
pTrack->SetSpectrumBounds(min, max);
if (partner)
partner->SetSpectrumBounds(min, max);
}
else {
pTrack->SetDisplayBounds(min, max);
if (partner)
partner->SetDisplayBounds(min, max);
}
zoomEnd = zoomStart = 0;
pProject->ModifyState(true);
}
enum {
OnZoomInVerticalID = 20000,
OnZoomOutVerticalID,
OnZoomFitVerticalID,
// Reserve an ample block of ids for waveform scale types
OnFirstWaveformScaleID,
OnLastWaveformScaleID = OnFirstWaveformScaleID + 9,
// Reserve an ample block of ids for spectrum scale types
OnFirstSpectrumScaleID,
OnLastSpectrumScaleID = OnFirstSpectrumScaleID + 19,
};
///////////////////////////////////////////////////////////////////////////////
// Table class
class WaveTrackVRulerMenuTable : public PopupMenuTable
{
protected:
WaveTrackVRulerMenuTable() {}
void InitMenu(Menu *pMenu, void *pUserData) override;
private:
void DestroyMenu() override
{
mpData = nullptr;
}
protected:
InitMenuData *mpData {};
void OnZoomInVertical(wxCommandEvent&);
void OnZoomOutVertical(wxCommandEvent&);
void OnZoomFitVertical(wxCommandEvent&);
};
void WaveTrackVRulerMenuTable::InitMenu(Menu *, void *pUserData)
{
mpData = static_cast<InitMenuData*>(pUserData);
}
void WaveTrackVRulerMenuTable::OnZoomInVertical(wxCommandEvent &)
{
WaveTrackVZoomHandle::DoZoom
(::GetActiveProject(), mpData->pTrack, false, false, mpData->rect, mpData->yy, mpData->yy, false);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
void WaveTrackVRulerMenuTable::OnZoomOutVertical(wxCommandEvent &)
{
WaveTrackVZoomHandle::DoZoom
(::GetActiveProject(), mpData->pTrack, true, false, mpData->rect, mpData->yy, mpData->yy, false);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
void WaveTrackVRulerMenuTable::OnZoomFitVertical(wxCommandEvent &)
{
WaveTrackVZoomHandle::DoZoom
(::GetActiveProject(), mpData->pTrack, true, true, mpData->rect, mpData->yy, mpData->yy, false);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
///////////////////////////////////////////////////////////////////////////////
// Table class
class WaveformVRulerMenuTable : public WaveTrackVRulerMenuTable
{
WaveformVRulerMenuTable() : WaveTrackVRulerMenuTable() {}
virtual ~WaveformVRulerMenuTable() {}
DECLARE_POPUP_MENU(WaveformVRulerMenuTable);
public:
static WaveformVRulerMenuTable &Instance();
private:
virtual void InitMenu(Menu *pMenu, void *pUserData);
void OnWaveformScaleType(wxCommandEvent &evt);
};
WaveformVRulerMenuTable &WaveformVRulerMenuTable::Instance()
{
static WaveformVRulerMenuTable instance;
return instance;
}
void WaveformVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData)
{
WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData);
WaveTrack *const wt = mpData->pTrack;
const int id =
OnFirstWaveformScaleID + (int)(wt->GetWaveformSettings().scaleType);
pMenu->Check(id, true);
}
BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
{
const wxArrayString & names = WaveformSettings::GetScaleNames();
for (int ii = 0, nn = names.size(); ii < nn; ++ii) {
POPUP_MENU_RADIO_ITEM(OnFirstWaveformScaleID + ii, names[ii],
OnWaveformScaleType);
}
}
POPUP_MENU_SEPARATOR()
POPUP_MENU_ITEM(OnZoomInVerticalID, _("Zoom In\tLeft-Click/Left-Drag"), OnZoomInVertical)
POPUP_MENU_ITEM(OnZoomOutVerticalID, _("Zoom Out\tShift-Left-Click"), OnZoomOutVertical)
POPUP_MENU_ITEM(OnZoomFitVerticalID, _("Zoom to Fit\tShift-Right-Click"), OnZoomFitVertical)
END_POPUP_MENU()
void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt)
{
WaveTrack *const wt = mpData->pTrack;
// Assume linked track is wave or null
const auto partner = static_cast<WaveTrack*>(wt->GetLink());
const WaveformSettings::ScaleType newScaleType =
WaveformSettings::ScaleType(
std::max(0,
std::min((int)(WaveformSettings::stNumScaleTypes) - 1,
evt.GetId() - OnFirstWaveformScaleID
)));
if (wt->GetWaveformSettings().scaleType != newScaleType) {
wt->GetIndependentWaveformSettings().scaleType = newScaleType;
if (partner)
partner->GetIndependentWaveformSettings().scaleType = newScaleType;
::GetActiveProject()->ModifyState(true);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
}
///////////////////////////////////////////////////////////////////////////////
// Table class
class SpectrumVRulerMenuTable : public WaveTrackVRulerMenuTable
{
SpectrumVRulerMenuTable() : WaveTrackVRulerMenuTable() {}
virtual ~SpectrumVRulerMenuTable() {}
DECLARE_POPUP_MENU(SpectrumVRulerMenuTable);
public:
static SpectrumVRulerMenuTable &Instance();
private:
void InitMenu(Menu *pMenu, void *pUserData);
void OnSpectrumScaleType(wxCommandEvent &evt);
};
SpectrumVRulerMenuTable &SpectrumVRulerMenuTable::Instance()
{
static SpectrumVRulerMenuTable instance;
return instance;
}
void SpectrumVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData)
{
WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData);
WaveTrack *const wt = mpData->pTrack;
const int id =
OnFirstSpectrumScaleID + (int)(wt->GetSpectrogramSettings().scaleType);
pMenu->Check(id, true);
}
BEGIN_POPUP_MENU(SpectrumVRulerMenuTable)
{
const wxArrayString & names = SpectrogramSettings::GetScaleNames();
for (int ii = 0, nn = names.size(); ii < nn; ++ii) {
POPUP_MENU_RADIO_ITEM(OnFirstSpectrumScaleID + ii, names[ii],
OnSpectrumScaleType);
}
}
POPUP_MENU_SEPARATOR()
POPUP_MENU_ITEM(OnZoomInVerticalID, _("Zoom In\tLeft-Click/Left-Drag"), OnZoomInVertical)
POPUP_MENU_ITEM(OnZoomOutVerticalID, _("Zoom Out\tShift-Left-Click"), OnZoomOutVertical)
POPUP_MENU_ITEM(OnZoomFitVerticalID, _("Zoom to Fit\tShift-Right-Click"), OnZoomFitVertical)
END_POPUP_MENU()
void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt)
{
WaveTrack *const wt = mpData->pTrack;
// Assume linked track is wave or null
const auto partner = static_cast<WaveTrack*>(wt->GetLink());
const SpectrogramSettings::ScaleType newScaleType =
SpectrogramSettings::ScaleType(
std::max(0,
std::min((int)(SpectrogramSettings::stNumScaleTypes) - 1,
evt.GetId() - OnFirstSpectrumScaleID
)));
if (wt->GetSpectrogramSettings().scaleType != newScaleType) {
wt->GetIndependentSpectrogramSettings().scaleType = newScaleType;
if (partner)
partner->GetIndependentSpectrogramSettings().scaleType = newScaleType;
::GetActiveProject()->ModifyState(true);
using namespace RefreshCode;
mpData->result = UpdateVRuler | RefreshAll;
}
}
///////////////////////////////////////////////////////////////////////////////
WaveTrackVZoomHandle::WaveTrackVZoomHandle()
{
}
WaveTrackVZoomHandle &WaveTrackVZoomHandle::Instance()
{
static WaveTrackVZoomHandle instance;
return instance;
}
HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state)
{
static auto zoomInCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomInCursorXpm, 19, 15);
static auto zoomOutCursor =
::MakeCursor(wxCURSOR_MAGNIFIER, ZoomOutCursorXpm, 19, 15);
return {
_("Click to vertically zoom in. Shift-click to zoom out. Drag to specify a zoom region."),
(state.ShiftDown() ? &*zoomOutCursor : &*zoomInCursor)
};
}
HitTestResult WaveTrackVZoomHandle::HitTest(const wxMouseState &state)
{
return { HitPreview(state), &Instance() };
}
WaveTrackVZoomHandle::~WaveTrackVZoomHandle()
{
}
UIHandle::Result WaveTrackVZoomHandle::Click
(const TrackPanelMouseEvent &evt, AudacityProject *)
{
mpTrack = std::static_pointer_cast<WaveTrack>(
static_cast<WaveTrackVRulerControls*>(evt.pCell.get())->FindTrack() );
mRect = evt.rect;
const wxMouseEvent &event = evt.event;
mZoomStart = event.m_y;
mZoomEnd = event.m_y;
return RefreshCode::RefreshNone;
}
UIHandle::Result WaveTrackVZoomHandle::Drag
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return Cancelled;
const wxMouseEvent &event = evt.event;
mZoomEnd = event.m_y;
if (IsDragZooming(mZoomStart, mZoomEnd))
return RefreshAll;
return RefreshNone;
}
HitTestPreview WaveTrackVZoomHandle::Preview
(const TrackPanelMouseEvent &evt, const AudacityProject *)
{
return HitPreview(evt.event);
}
UIHandle::Result WaveTrackVZoomHandle::Release
(const TrackPanelMouseEvent &evt, AudacityProject *pProject,
wxWindow *pParent)
{
using namespace RefreshCode;
auto pTrack = pProject->GetTracks()->Lock(mpTrack);
if (!pTrack)
return RefreshNone;
const wxMouseEvent &event = evt.event;
const bool shiftDown = event.ShiftDown();
const bool rightUp = event.RightUp();
// Popup menu... disabled
if (false &&
rightUp &&
!(event.ShiftDown() || event.CmdDown()))
{
InitMenuData data {
pTrack.get(), mRect, RefreshCode::RefreshNone, event.m_y
};
PopupMenuTable *const pTable =
(pTrack->GetDisplay() == WaveTrack::Spectrum)
? (PopupMenuTable *) &SpectrumVRulerMenuTable::Instance()
: (PopupMenuTable *) &WaveformVRulerMenuTable::Instance();
std::unique_ptr<PopupMenuTable::Menu>
pMenu(PopupMenuTable::BuildMenu(pParent, pTable, &data));
pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y);
return data.result;
}
else
DoZoom(pProject, pTrack.get(), shiftDown, rightUp,
mRect, mZoomStart, mZoomEnd, false);
return UpdateVRuler | RefreshAll;
}
UIHandle::Result WaveTrackVZoomHandle::Cancel(AudacityProject*)
{
// Cancel is implemented! And there is no initial state to restore,
// so just return a code.
return RefreshCode::RefreshAll;
}
void WaveTrackVZoomHandle::DrawExtras
(DrawingPass pass, wxDC * dc, const wxRegion &, const wxRect &panelRect)
{
if (!mpTrack.lock()) // TrackList::Lock()?
return;
if ( pass == UIHandle::Cells &&
IsDragZooming( mZoomStart, mZoomEnd ) )
TrackVRulerControls::DrawZooming
( dc, mRect, panelRect, mZoomStart, mZoomEnd );
}

View File

@ -0,0 +1,69 @@
/**********************************************************************
Audacity: A Digital Audio Editor
WaveTrackVZoomHandle.h
Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#ifndef __AUDACITY_WAVE_TRACK_VZOOM_HANDLE__
#define __AUDACITY_WAVE_TRACK_VZOOM_HANDLE__
class wxMouseState;
class WaveTrack;
#include <wx/gdicmn.h>
#include "../../../../MemoryX.h"
#include "../../../../UIHandle.h"
struct HitTestResult;
class WaveTrackVZoomHandle : public UIHandle
{
WaveTrackVZoomHandle();
WaveTrackVZoomHandle(const WaveTrackVZoomHandle&);
WaveTrackVZoomHandle &operator=(const WaveTrackVZoomHandle&);
static WaveTrackVZoomHandle& Instance();
static HitTestPreview HitPreview(const wxMouseState &state);
public:
static HitTestResult HitTest(const wxMouseState &state);
static void DoZoom
(AudacityProject *pProject,
WaveTrack *pTrack, bool shiftDown, bool rightUp,
const wxRect &rect, int zoomStart, int zoomEnd,
bool fixedMousePoint);
virtual ~WaveTrackVZoomHandle();
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;
void DrawExtras
(DrawingPass pass,
wxDC * dc, const wxRegion &updateRegion, const wxRect &panelRect)
override;
private:
std::weak_ptr<WaveTrack> mpTrack;
int mZoomStart{}, mZoomEnd{};
wxRect mRect{};
};
#endif

View File

@ -22,6 +22,7 @@ Paul Licameli split from TrackPanel.cpp
#include "../playabletrack/wavetrack/ui/SampleHandle.h"
#include "ZoomHandle.h"
#include "TimeShiftHandle.h"
#include "../../TrackPanelResizerCell.h"
HitTestResult Track::HitTest
(const TrackPanelMouseEvent &event,

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
@ -225,16 +225,19 @@
<ClCompile Include="..\..\..\src\TrackPanel.cpp" />
<ClCompile Include="..\..\..\src\TrackPanelAx.cpp" />
<ClCompile Include="..\..\..\src\TrackPanelResizeHandle.cpp" />
<ClCompile Include="..\..\..\src\TrackPanelResizerCell.cpp" />
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelDefaultClickHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelGlyphHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelTextHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelTrackControls.cpp" />
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelTrackUI.cpp" />
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelTrackVRulerControls.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackButtonHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackControls.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackSliderHandles.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackUI.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVRulerControls.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVZoomHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\StretchHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\ui\PlayableTrackButtonHandles.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\CutlineHandle.cpp" />
@ -243,6 +246,7 @@
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackSliderHandles.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackUI.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVRulerControls.cpp" />
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVZoomHandle.cpp" />
<ClCompile Include="..\..\..\src\tracks\timetrack\ui\TimeTrackControls.cpp" />
<ClCompile Include="..\..\..\src\tracks\timetrack\ui\TimeTrackUI.cpp" />
<ClCompile Include="..\..\..\src\tracks\timetrack\ui\TimeTrackVRulerControls.cpp" />
@ -506,9 +510,11 @@
<ClInclude Include="..\..\..\src\TrackPanelCellIterator.h" />
<ClInclude Include="..\..\..\src\TrackPanelListener.h" />
<ClInclude Include="..\..\..\src\TrackPanelMouseEvent.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackButtonHandle.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackControls.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackSliderHandles.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVRulerControls.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVZoomHandle.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\StretchHandle.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\ui\PlayableTrackButtonHandles.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\CutlineHandle.h" />
@ -516,7 +522,9 @@
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackControls.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackSliderHandles.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVRulerControls.h" />
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVZoomHandle.h" />
<ClInclude Include="..\..\..\src\TrackPanelResizeHandle.h" />
<ClInclude Include="..\..\..\src\TrackPanelResizerCell.h" />
<ClInclude Include="..\..\..\src\tracks\labeltrack\ui\LabelDefaultClickHandle.h" />
<ClInclude Include="..\..\..\src\tracks\labeltrack\ui\LabelGlyphHandle.h" />
<ClInclude Include="..\..\..\src\tracks\labeltrack\ui\LabelTextHandle.h" />
@ -1209,4 +1217,4 @@
<ImportGroup Label="ExtensionTargets">
<Import Project="..\..\ny.targets" />
</ImportGroup>
</Project>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="src">
@ -980,6 +980,9 @@
<ClCompile Include="..\..\..\src\tracks\ui\CommonTrackPanelCell.cpp">
<Filter>src\tracks\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackButtonHandle.cpp">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackControls.cpp">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClCompile>
@ -989,6 +992,9 @@
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVRulerControls.cpp">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVZoomHandle.cpp">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackControls.cpp">
<Filter>src\tracks\playabletrack\wavetrack\ui</Filter>
</ClCompile>
@ -998,6 +1004,9 @@
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVRulerControls.cpp">
<Filter>src\tracks\playabletrack\wavetrack\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVZoomHandle.cpp">
<Filter>src\tracks\playabletrack\wavetrack\ui</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\widgets\PopupMenuTable.cpp">
<Filter>src\widgets</Filter>
</ClCompile>
@ -1031,6 +1040,9 @@
<ClCompile Include="..\..\..\src\TrackPanelResizeHandle.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\TrackPanelResizerCell.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\tracks\labeltrack\ui\LabelTextHandle.cpp">
<Filter>src\tracks\labeltrack\ui</Filter>
</ClCompile>
@ -2020,18 +2032,27 @@
<ClInclude Include="..\..\..\src\SelectionState.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackButtonHandle.h">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackControls.h">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVRulerControls.h">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\notetrack\ui\NoteTrackVZoomHandle.h">
<Filter>src\tracks\playabletrack\notetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackControls.h">
<Filter>src\tracks\playabletrack\wavetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVRulerControls.h">
<Filter>src\tracks\playabletrack\wavetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\playabletrack\wavetrack\ui\WaveTrackVZoomHandle.h">
<Filter>src\tracks\playabletrack\wavetrack\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\widgets\PopupMenuTable.h">
<Filter>src\widgets</Filter>
</ClInclude>
@ -2071,6 +2092,9 @@
<ClInclude Include="..\..\..\src\TrackPanelResizeHandle.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\TrackPanelResizerCell.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\..\src\tracks\labeltrack\ui\LabelGlyphHandle.h">
<Filter>src\tracks\labeltrack\ui</Filter>
</ClInclude>
@ -2312,4 +2336,4 @@
<Filter>plug-ins</Filter>
</copy>
</ItemGroup>
</Project>
</Project>