1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-01 16:19:43 +02:00

Merge branch 'master' into overlays

This commit is contained in:
Paul Licameli 2016-05-12 15:04:27 -04:00
commit dcd581297a
24 changed files with 563 additions and 368 deletions

View File

@ -129,9 +129,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/configure.ac
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@ -308,12 +307,6 @@ AUDACITY_NAME = @AUDACITY_NAME@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AVCODEC_CFLAGS = @AVCODEC_CFLAGS@
AVCODEC_LIBS = @AVCODEC_LIBS@
AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@
AVFORMAT_LIBS = @AVFORMAT_LIBS@
AVUTIL_CFLAGS = @AVUTIL_CFLAGS@
AVUTIL_LIBS = @AVUTIL_LIBS@
AWK = @AWK@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
CC = @CC@
@ -354,8 +347,6 @@ GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HAVE_GTK = @HAVE_GTK@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
@ -369,8 +360,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
JACK_CFLAGS = @JACK_CFLAGS@
JACK_LIBS = @JACK_LIBS@
LAME_CFLAGS = @LAME_CFLAGS@
LAME_LIBS = @LAME_LIBS@
LD = @LD@
@ -417,7 +406,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIXER_LIBS = @PORTMIXER_LIBS@

View File

@ -116,9 +116,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/configure.ac
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -187,12 +186,6 @@ AUDACITY_NAME = @AUDACITY_NAME@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AVCODEC_CFLAGS = @AVCODEC_CFLAGS@
AVCODEC_LIBS = @AVCODEC_LIBS@
AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@
AVFORMAT_LIBS = @AVFORMAT_LIBS@
AVUTIL_CFLAGS = @AVUTIL_CFLAGS@
AVUTIL_LIBS = @AVUTIL_LIBS@
AWK = @AWK@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
CC = @CC@
@ -233,8 +226,6 @@ GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HAVE_GTK = @HAVE_GTK@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
@ -248,8 +239,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
JACK_CFLAGS = @JACK_CFLAGS@
JACK_LIBS = @JACK_LIBS@
LAME_CFLAGS = @LAME_CFLAGS@
LAME_LIBS = @LAME_LIBS@
LD = @LD@
@ -296,7 +285,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIXER_LIBS = @PORTMIXER_LIBS@

View File

@ -118,9 +118,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/configure.ac
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -191,12 +190,6 @@ AUDACITY_NAME = @AUDACITY_NAME@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AVCODEC_CFLAGS = @AVCODEC_CFLAGS@
AVCODEC_LIBS = @AVCODEC_LIBS@
AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@
AVFORMAT_LIBS = @AVFORMAT_LIBS@
AVUTIL_CFLAGS = @AVUTIL_CFLAGS@
AVUTIL_LIBS = @AVUTIL_LIBS@
AWK = @AWK@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
CC = @CC@
@ -237,8 +230,6 @@ GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HAVE_GTK = @HAVE_GTK@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
@ -252,8 +243,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
JACK_CFLAGS = @JACK_CFLAGS@
JACK_LIBS = @JACK_LIBS@
LAME_CFLAGS = @LAME_CFLAGS@
LAME_LIBS = @LAME_LIBS@
LD = @LD@
@ -300,7 +289,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIXER_LIBS = @PORTMIXER_LIBS@

View File

@ -134,9 +134,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/configure.ac
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -232,12 +231,6 @@ AUDACITY_NAME = @AUDACITY_NAME@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AVCODEC_CFLAGS = @AVCODEC_CFLAGS@
AVCODEC_LIBS = @AVCODEC_LIBS@
AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@
AVFORMAT_LIBS = @AVFORMAT_LIBS@
AVUTIL_CFLAGS = @AVUTIL_CFLAGS@
AVUTIL_LIBS = @AVUTIL_LIBS@
AWK = @AWK@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
CC = @CC@
@ -278,8 +271,6 @@ GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HAVE_GTK = @HAVE_GTK@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
@ -293,8 +284,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
JACK_CFLAGS = @JACK_CFLAGS@
JACK_LIBS = @JACK_LIBS@
LAME_CFLAGS = @LAME_CFLAGS@
LAME_LIBS = @LAME_LIBS@
LD = @LD@
@ -341,7 +330,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIXER_LIBS = @PORTMIXER_LIBS@

View File

@ -92,12 +92,10 @@ enum CommandFlag : unsigned long long
IsRealtimeNotActiveFlag= 0x10000000, //lll
CaptureNotBusyFlag = 0x20000000,
CanStopAudioStreamFlag = 0x40000000,
AudioStreamNotScrubbingFlag
= 0x80000000ULL, // prl
RulerHasFocus
= 0x100000000ULL, // prl
TrackPanelOrRulerHasFocus
= 0x200000000ULL, // prl
= 0x80000000ULL, // prl
// nextOneHas33BitsWow
// = 0x100000000ULL, // prl
NoFlagsSpecifed = ~0ULL
};

View File

@ -402,6 +402,14 @@ struct AudioIO::ScrubQueue
}
~ScrubQueue() {}
double LastTimeInQueue() const
{
// Needed by the main thread sometimes
wxCriticalSectionLocker locker(mUpdating);
const Entry &previous = mEntries[(mLeadingIdx + Size - 1) % Size];
return previous.mS1 / mRate;
}
bool Producer(double end, double maxSpeed, bool bySpeed, bool maySkip)
{
// Main thread indicates a scrubbing interval
@ -670,7 +678,7 @@ private:
const double mRate;
const long mMinStutter;
wxLongLong mLastScrubTimeMillis;
wxCriticalSection mUpdating;
mutable wxCriticalSection mUpdating;
};
#endif
@ -2426,6 +2434,15 @@ bool AudioIO::EnqueueScrubBySignedSpeed(double speed, double maxSpeed, bool mayS
else
return false;
}
double AudioIO::GetLastTimeInScrubQueue() const
{
if (mScrubQueue)
return mScrubQueue->LastTimeInQueue();
else
return -1.0;
}
#endif
bool AudioIO::IsBusy()

View File

@ -208,6 +208,10 @@ class AUDACITY_DLL_API AudioIO final {
* Return true if some work was really enqueued.
*/
bool EnqueueScrubBySignedSpeed(double speed, double maxSpeed, bool maySkip);
/** \brief return the ending time of the last enqueued scrub interval.
*/
double GetLastTimeInScrubQueue() const;
#endif
/** \brief Returns true if audio i/o is busy starting, stopping, playing,

View File

@ -173,7 +173,6 @@
// The following enable parts of the scrubbing user interface.
#define EXPERIMENTAL_SCRUBBING_BASIC
#ifdef EXPERIMENTAL_SCRUBBING_BASIC
#define EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
#define EXPERIMENTAL_SCRUBBING_SCROLL_WHEEL
#endif
#endif
@ -201,5 +200,9 @@
// interpolating in frequency domain.
#define EXPERIMENTAL_ZERO_PADDED_SPECTROGRAMS
// Paul Licameli (PRL) 10 May 2016
// Time ruler accepts focus, buttons can be reached with TAB
#define EXPERIMENTAL_TIME_RULER_NAVIGATION
#endif

View File

@ -226,9 +226,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/configure.ac
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -290,7 +289,7 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
LabelTrack.cpp LabelTrack.h LangChoice.cpp LangChoice.h \
Languages.cpp Languages.h Legacy.cpp Legacy.h Lyrics.cpp \
Lyrics.h LyricsWindow.cpp LyricsWindow.h MacroMagic.h \
Matrix.cpp Matrix.h Menus.cpp Menus.h Mix.cpp Mix.h \
Matrix.cpp Matrix.h MemoryX.h Menus.cpp Menus.h Mix.cpp Mix.h \
MixerBoard.cpp MixerBoard.h ModuleManager.cpp ModuleManager.h \
NumberScale.h PitchName.cpp PitchName.h \
PlatformCompatibility.cpp PlatformCompatibility.h \
@ -308,21 +307,22 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
TimerRecordDialog.cpp TimerRecordDialog.h TimeTrack.cpp \
TimeTrack.h Track.cpp Track.h TrackArtist.cpp TrackArtist.h \
TrackPanel.cpp TrackPanel.h TrackPanelAx.cpp TrackPanelAx.h \
TrackPanelListener.h TranslatableStringArray.h UndoManager.cpp \
UndoManager.h ViewInfo.cpp ViewInfo.h VoiceKey.cpp VoiceKey.h \
WaveClip.cpp WaveClip.h WaveTrack.cpp WaveTrack.h \
WaveTrackLocation.h WrappedType.cpp WrappedType.h \
TrackPanelCell.h TrackPanelCellIterator.h TrackPanelListener.h \
TranslatableStringArray.h UndoManager.cpp UndoManager.h \
ViewInfo.cpp ViewInfo.h VoiceKey.cpp VoiceKey.h WaveClip.cpp \
WaveClip.h WaveTrack.cpp WaveTrack.h WaveTrackLocation.h \
WrappedType.cpp WrappedType.h wxFileNameWrapper.h \
commands/AppCommandEvent.cpp commands/AppCommandEvent.h \
commands/BatchEvalCommand.cpp commands/BatchEvalCommand.h \
commands/Command.cpp commands/Command.h \
commands/CommandBuilder.cpp commands/CommandBuilder.h \
commands/CommandDirectory.cpp commands/CommandDirectory.h \
commands/CommandHandler.cpp commands/CommandHandler.h \
commands/CommandManager.cpp commands/CommandManager.h \
commands/CommandMisc.h commands/CommandSignature.cpp \
commands/CommandSignature.h commands/CommandTargets.h \
commands/CommandType.cpp commands/CommandType.h \
commands/CompareAudioCommand.cpp \
commands/CommandFunctors.h commands/CommandHandler.cpp \
commands/CommandHandler.h commands/CommandManager.cpp \
commands/CommandManager.h commands/CommandMisc.h \
commands/CommandSignature.cpp commands/CommandSignature.h \
commands/CommandTargets.h commands/CommandType.cpp \
commands/CommandType.h commands/CompareAudioCommand.cpp \
commands/CompareAudioCommand.h commands/ExecMenuCommand.cpp \
commands/ExecMenuCommand.h commands/GetAllMenuCommands.cpp \
commands/GetAllMenuCommands.h \
@ -439,9 +439,14 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
toolbars/ToolManager.cpp toolbars/ToolManager.h \
toolbars/ToolsToolBar.cpp toolbars/ToolsToolBar.h \
toolbars/TranscriptionToolBar.cpp \
toolbars/TranscriptionToolBar.h widgets/AButton.cpp \
widgets/AButton.h widgets/ASlider.cpp widgets/ASlider.h \
toolbars/TranscriptionToolBar.h \
tracks/ui/EditCursorOverlay.cpp tracks/ui/EditCursorOverlay.h \
tracks/ui/PlayIndicatorOverlay.cpp \
tracks/ui/PlayIndicatorOverlay.h tracks/ui/Scrubbing.cpp \
tracks/ui/Scrubbing.h widgets/AButton.cpp widgets/AButton.h \
widgets/ASlider.cpp widgets/ASlider.h \
widgets/AttachableScrollBar.cpp widgets/AttachableScrollBar.h \
widgets/BackedPanel.cpp widgets/BackedPanel.h \
widgets/ErrorDialog.cpp widgets/ErrorDialog.h \
widgets/ExpandingToolBar.cpp widgets/ExpandingToolBar.h \
widgets/FileHistory.cpp widgets/FileHistory.h \
@ -454,11 +459,13 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \
widgets/MultiDialog.cpp widgets/MultiDialog.h \
widgets/NumericTextCtrl.cpp widgets/NumericTextCtrl.h \
widgets/numformatter.cpp widgets/numformatter.h \
widgets/ProgressDialog.cpp widgets/ProgressDialog.h \
widgets/Ruler.cpp widgets/Ruler.h widgets/valnum.cpp \
widgets/valnum.h widgets/Warning.cpp widgets/Warning.h \
xml/XMLFileReader.cpp xml/XMLFileReader.h xml/XMLWriter.cpp \
xml/XMLWriter.h effects/audiounits/AudioUnitEffect.cpp \
widgets/Overlay.cpp widgets/Overlay.h widgets/OverlayPanel.cpp \
widgets/OverlayPanel.h widgets/ProgressDialog.cpp \
widgets/ProgressDialog.h widgets/Ruler.cpp widgets/Ruler.h \
widgets/valnum.cpp widgets/valnum.h widgets/Warning.cpp \
widgets/Warning.h xml/XMLFileReader.cpp xml/XMLFileReader.h \
xml/XMLWriter.cpp xml/XMLWriter.h \
effects/audiounits/AudioUnitEffect.cpp \
effects/audiounits/AudioUnitEffect.h export/ExportFFmpeg.cpp \
export/ExportFFmpeg.h export/ExportFFmpegDialogs.cpp \
export/ExportFFmpegDialogs.h import/ImportFFmpeg.cpp \
@ -689,9 +696,13 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
toolbars/audacity-ToolManager.$(OBJEXT) \
toolbars/audacity-ToolsToolBar.$(OBJEXT) \
toolbars/audacity-TranscriptionToolBar.$(OBJEXT) \
tracks/ui/audacity-EditCursorOverlay.$(OBJEXT) \
tracks/ui/audacity-PlayIndicatorOverlay.$(OBJEXT) \
tracks/ui/audacity-Scrubbing.$(OBJEXT) \
widgets/audacity-AButton.$(OBJEXT) \
widgets/audacity-ASlider.$(OBJEXT) \
widgets/audacity-AttachableScrollBar.$(OBJEXT) \
widgets/audacity-BackedPanel.$(OBJEXT) \
widgets/audacity-ErrorDialog.$(OBJEXT) \
widgets/audacity-ExpandingToolBar.$(OBJEXT) \
widgets/audacity-FileHistory.$(OBJEXT) \
@ -706,6 +717,8 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
widgets/audacity-MultiDialog.$(OBJEXT) \
widgets/audacity-NumericTextCtrl.$(OBJEXT) \
widgets/audacity-numformatter.$(OBJEXT) \
widgets/audacity-Overlay.$(OBJEXT) \
widgets/audacity-OverlayPanel.$(OBJEXT) \
widgets/audacity-ProgressDialog.$(OBJEXT) \
widgets/audacity-Ruler.$(OBJEXT) \
widgets/audacity-valnum.$(OBJEXT) \
@ -863,12 +876,6 @@ AUDACITY_NAME = @AUDACITY_NAME@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AVCODEC_CFLAGS = @AVCODEC_CFLAGS@
AVCODEC_LIBS = @AVCODEC_LIBS@
AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@
AVFORMAT_LIBS = @AVFORMAT_LIBS@
AVUTIL_CFLAGS = @AVUTIL_CFLAGS@
AVUTIL_LIBS = @AVUTIL_LIBS@
AWK = @AWK@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
CC = @CC@
@ -909,8 +916,6 @@ GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HAVE_GTK = @HAVE_GTK@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
@ -924,8 +929,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
JACK_CFLAGS = @JACK_CFLAGS@
JACK_LIBS = @JACK_LIBS@
LAME_CFLAGS = @LAME_CFLAGS@
LAME_LIBS = @LAME_LIBS@
LD = @LD@
@ -972,7 +975,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIXER_LIBS = @PORTMIXER_LIBS@
@ -1159,7 +1161,7 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
LabelTrack.cpp LabelTrack.h LangChoice.cpp LangChoice.h \
Languages.cpp Languages.h Legacy.cpp Legacy.h Lyrics.cpp \
Lyrics.h LyricsWindow.cpp LyricsWindow.h MacroMagic.h \
Matrix.cpp Matrix.h Menus.cpp Menus.h Mix.cpp Mix.h \
Matrix.cpp Matrix.h MemoryX.h Menus.cpp Menus.h Mix.cpp Mix.h \
MixerBoard.cpp MixerBoard.h ModuleManager.cpp ModuleManager.h \
NumberScale.h PitchName.cpp PitchName.h \
PlatformCompatibility.cpp PlatformCompatibility.h \
@ -1177,21 +1179,22 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
TimerRecordDialog.cpp TimerRecordDialog.h TimeTrack.cpp \
TimeTrack.h Track.cpp Track.h TrackArtist.cpp TrackArtist.h \
TrackPanel.cpp TrackPanel.h TrackPanelAx.cpp TrackPanelAx.h \
TrackPanelListener.h TranslatableStringArray.h UndoManager.cpp \
UndoManager.h ViewInfo.cpp ViewInfo.h VoiceKey.cpp VoiceKey.h \
WaveClip.cpp WaveClip.h WaveTrack.cpp WaveTrack.h \
WaveTrackLocation.h WrappedType.cpp WrappedType.h \
TrackPanelCell.h TrackPanelCellIterator.h TrackPanelListener.h \
TranslatableStringArray.h UndoManager.cpp UndoManager.h \
ViewInfo.cpp ViewInfo.h VoiceKey.cpp VoiceKey.h WaveClip.cpp \
WaveClip.h WaveTrack.cpp WaveTrack.h WaveTrackLocation.h \
WrappedType.cpp WrappedType.h wxFileNameWrapper.h \
commands/AppCommandEvent.cpp commands/AppCommandEvent.h \
commands/BatchEvalCommand.cpp commands/BatchEvalCommand.h \
commands/Command.cpp commands/Command.h \
commands/CommandBuilder.cpp commands/CommandBuilder.h \
commands/CommandDirectory.cpp commands/CommandDirectory.h \
commands/CommandHandler.cpp commands/CommandHandler.h \
commands/CommandManager.cpp commands/CommandManager.h \
commands/CommandMisc.h commands/CommandSignature.cpp \
commands/CommandSignature.h commands/CommandTargets.h \
commands/CommandType.cpp commands/CommandType.h \
commands/CompareAudioCommand.cpp \
commands/CommandFunctors.h commands/CommandHandler.cpp \
commands/CommandHandler.h commands/CommandManager.cpp \
commands/CommandManager.h commands/CommandMisc.h \
commands/CommandSignature.cpp commands/CommandSignature.h \
commands/CommandTargets.h commands/CommandType.cpp \
commands/CommandType.h commands/CompareAudioCommand.cpp \
commands/CompareAudioCommand.h commands/ExecMenuCommand.cpp \
commands/ExecMenuCommand.h commands/GetAllMenuCommands.cpp \
commands/GetAllMenuCommands.h \
@ -1308,9 +1311,14 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
toolbars/ToolManager.cpp toolbars/ToolManager.h \
toolbars/ToolsToolBar.cpp toolbars/ToolsToolBar.h \
toolbars/TranscriptionToolBar.cpp \
toolbars/TranscriptionToolBar.h widgets/AButton.cpp \
widgets/AButton.h widgets/ASlider.cpp widgets/ASlider.h \
toolbars/TranscriptionToolBar.h \
tracks/ui/EditCursorOverlay.cpp tracks/ui/EditCursorOverlay.h \
tracks/ui/PlayIndicatorOverlay.cpp \
tracks/ui/PlayIndicatorOverlay.h tracks/ui/Scrubbing.cpp \
tracks/ui/Scrubbing.h widgets/AButton.cpp widgets/AButton.h \
widgets/ASlider.cpp widgets/ASlider.h \
widgets/AttachableScrollBar.cpp widgets/AttachableScrollBar.h \
widgets/BackedPanel.cpp widgets/BackedPanel.h \
widgets/ErrorDialog.cpp widgets/ErrorDialog.h \
widgets/ExpandingToolBar.cpp widgets/ExpandingToolBar.h \
widgets/FileHistory.cpp widgets/FileHistory.h \
@ -1323,14 +1331,16 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \
widgets/MultiDialog.cpp widgets/MultiDialog.h \
widgets/NumericTextCtrl.cpp widgets/NumericTextCtrl.h \
widgets/numformatter.cpp widgets/numformatter.h \
widgets/ProgressDialog.cpp widgets/ProgressDialog.h \
widgets/Ruler.cpp widgets/Ruler.h widgets/valnum.cpp \
widgets/valnum.h widgets/Warning.cpp widgets/Warning.h \
xml/XMLFileReader.cpp xml/XMLFileReader.h xml/XMLWriter.cpp \
xml/XMLWriter.h $(NULL) $(am__append_3) $(am__append_6) \
$(am__append_9) $(am__append_12) $(am__append_17) \
$(am__append_24) $(am__append_33) $(am__append_36) \
$(am__append_39) $(am__append_44) $(am__append_47)
widgets/Overlay.cpp widgets/Overlay.h widgets/OverlayPanel.cpp \
widgets/OverlayPanel.h widgets/ProgressDialog.cpp \
widgets/ProgressDialog.h widgets/Ruler.cpp widgets/Ruler.h \
widgets/valnum.cpp widgets/valnum.h widgets/Warning.cpp \
widgets/Warning.h xml/XMLFileReader.cpp xml/XMLFileReader.h \
xml/XMLWriter.cpp xml/XMLWriter.h $(NULL) $(am__append_3) \
$(am__append_6) $(am__append_9) $(am__append_12) \
$(am__append_17) $(am__append_24) $(am__append_33) \
$(am__append_36) $(am__append_39) $(am__append_44) \
$(am__append_47)
# TODO: Check *.cpp and *.h files if they are needed.
EXTRA_DIST = audacity.desktop.in xml/audacityproject.dtd \
@ -1817,6 +1827,18 @@ toolbars/audacity-ToolsToolBar.$(OBJEXT): toolbars/$(am__dirstamp) \
toolbars/$(DEPDIR)/$(am__dirstamp)
toolbars/audacity-TranscriptionToolBar.$(OBJEXT): \
toolbars/$(am__dirstamp) toolbars/$(DEPDIR)/$(am__dirstamp)
tracks/ui/$(am__dirstamp):
@$(MKDIR_P) tracks/ui
@: > tracks/ui/$(am__dirstamp)
tracks/ui/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) tracks/ui/$(DEPDIR)
@: > tracks/ui/$(DEPDIR)/$(am__dirstamp)
tracks/ui/audacity-EditCursorOverlay.$(OBJEXT): \
tracks/ui/$(am__dirstamp) tracks/ui/$(DEPDIR)/$(am__dirstamp)
tracks/ui/audacity-PlayIndicatorOverlay.$(OBJEXT): \
tracks/ui/$(am__dirstamp) tracks/ui/$(DEPDIR)/$(am__dirstamp)
tracks/ui/audacity-Scrubbing.$(OBJEXT): tracks/ui/$(am__dirstamp) \
tracks/ui/$(DEPDIR)/$(am__dirstamp)
widgets/$(am__dirstamp):
@$(MKDIR_P) widgets
@: > widgets/$(am__dirstamp)
@ -1829,6 +1851,8 @@ widgets/audacity-ASlider.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-AttachableScrollBar.$(OBJEXT): \
widgets/$(am__dirstamp) widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-BackedPanel.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-ErrorDialog.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-ExpandingToolBar.$(OBJEXT): widgets/$(am__dirstamp) \
@ -1857,6 +1881,10 @@ widgets/audacity-NumericTextCtrl.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-numformatter.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-Overlay.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-OverlayPanel.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-ProgressDialog.$(OBJEXT): widgets/$(am__dirstamp) \
widgets/$(DEPDIR)/$(am__dirstamp)
widgets/audacity-Ruler.$(OBJEXT): widgets/$(am__dirstamp) \
@ -1968,6 +1996,7 @@ mostlyclean-compile:
-rm -f ondemand/*.$(OBJEXT)
-rm -f prefs/*.$(OBJEXT)
-rm -f toolbars/*.$(OBJEXT)
-rm -f tracks/ui/*.$(OBJEXT)
-rm -f widgets/*.$(OBJEXT)
-rm -f xml/*.$(OBJEXT)
-rm -f xml/*.lo
@ -2227,9 +2256,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-ToolManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-ToolsToolBar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-TranscriptionToolBar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@tracks/ui/$(DEPDIR)/audacity-Scrubbing.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-AButton.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-ASlider.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-AttachableScrollBar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-BackedPanel.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-ErrorDialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-ExpandingToolBar.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-FileHistory.Po@am__quote@
@ -2243,6 +2276,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-Meter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-MultiDialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-NumericTextCtrl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-Overlay.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-OverlayPanel.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-ProgressDialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-Ruler.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/audacity-Warning.Po@am__quote@
@ -5469,6 +5504,48 @@ toolbars/audacity-TranscriptionToolBar.obj: toolbars/TranscriptionToolBar.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 toolbars/audacity-TranscriptionToolBar.obj `if test -f 'toolbars/TranscriptionToolBar.cpp'; then $(CYGPATH_W) 'toolbars/TranscriptionToolBar.cpp'; else $(CYGPATH_W) '$(srcdir)/toolbars/TranscriptionToolBar.cpp'; fi`
tracks/ui/audacity-EditCursorOverlay.o: tracks/ui/EditCursorOverlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/ui/audacity-EditCursorOverlay.o -MD -MP -MF tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Tpo -c -o tracks/ui/audacity-EditCursorOverlay.o `test -f 'tracks/ui/EditCursorOverlay.cpp' || echo '$(srcdir)/'`tracks/ui/EditCursorOverlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Tpo tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/ui/EditCursorOverlay.cpp' object='tracks/ui/audacity-EditCursorOverlay.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/ui/audacity-EditCursorOverlay.o `test -f 'tracks/ui/EditCursorOverlay.cpp' || echo '$(srcdir)/'`tracks/ui/EditCursorOverlay.cpp
tracks/ui/audacity-EditCursorOverlay.obj: tracks/ui/EditCursorOverlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/ui/audacity-EditCursorOverlay.obj -MD -MP -MF tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Tpo -c -o tracks/ui/audacity-EditCursorOverlay.obj `if test -f 'tracks/ui/EditCursorOverlay.cpp'; then $(CYGPATH_W) 'tracks/ui/EditCursorOverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/ui/EditCursorOverlay.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Tpo tracks/ui/$(DEPDIR)/audacity-EditCursorOverlay.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/ui/EditCursorOverlay.cpp' object='tracks/ui/audacity-EditCursorOverlay.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/ui/audacity-EditCursorOverlay.obj `if test -f 'tracks/ui/EditCursorOverlay.cpp'; then $(CYGPATH_W) 'tracks/ui/EditCursorOverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/ui/EditCursorOverlay.cpp'; fi`
tracks/ui/audacity-PlayIndicatorOverlay.o: tracks/ui/PlayIndicatorOverlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/ui/audacity-PlayIndicatorOverlay.o -MD -MP -MF tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Tpo -c -o tracks/ui/audacity-PlayIndicatorOverlay.o `test -f 'tracks/ui/PlayIndicatorOverlay.cpp' || echo '$(srcdir)/'`tracks/ui/PlayIndicatorOverlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Tpo tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/ui/PlayIndicatorOverlay.cpp' object='tracks/ui/audacity-PlayIndicatorOverlay.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/ui/audacity-PlayIndicatorOverlay.o `test -f 'tracks/ui/PlayIndicatorOverlay.cpp' || echo '$(srcdir)/'`tracks/ui/PlayIndicatorOverlay.cpp
tracks/ui/audacity-PlayIndicatorOverlay.obj: tracks/ui/PlayIndicatorOverlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/ui/audacity-PlayIndicatorOverlay.obj -MD -MP -MF tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Tpo -c -o tracks/ui/audacity-PlayIndicatorOverlay.obj `if test -f 'tracks/ui/PlayIndicatorOverlay.cpp'; then $(CYGPATH_W) 'tracks/ui/PlayIndicatorOverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/ui/PlayIndicatorOverlay.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Tpo tracks/ui/$(DEPDIR)/audacity-PlayIndicatorOverlay.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/ui/PlayIndicatorOverlay.cpp' object='tracks/ui/audacity-PlayIndicatorOverlay.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/ui/audacity-PlayIndicatorOverlay.obj `if test -f 'tracks/ui/PlayIndicatorOverlay.cpp'; then $(CYGPATH_W) 'tracks/ui/PlayIndicatorOverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/ui/PlayIndicatorOverlay.cpp'; fi`
tracks/ui/audacity-Scrubbing.o: tracks/ui/Scrubbing.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/ui/audacity-Scrubbing.o -MD -MP -MF tracks/ui/$(DEPDIR)/audacity-Scrubbing.Tpo -c -o tracks/ui/audacity-Scrubbing.o `test -f 'tracks/ui/Scrubbing.cpp' || echo '$(srcdir)/'`tracks/ui/Scrubbing.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/ui/$(DEPDIR)/audacity-Scrubbing.Tpo tracks/ui/$(DEPDIR)/audacity-Scrubbing.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/ui/Scrubbing.cpp' object='tracks/ui/audacity-Scrubbing.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/ui/audacity-Scrubbing.o `test -f 'tracks/ui/Scrubbing.cpp' || echo '$(srcdir)/'`tracks/ui/Scrubbing.cpp
tracks/ui/audacity-Scrubbing.obj: tracks/ui/Scrubbing.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT tracks/ui/audacity-Scrubbing.obj -MD -MP -MF tracks/ui/$(DEPDIR)/audacity-Scrubbing.Tpo -c -o tracks/ui/audacity-Scrubbing.obj `if test -f 'tracks/ui/Scrubbing.cpp'; then $(CYGPATH_W) 'tracks/ui/Scrubbing.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/ui/Scrubbing.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tracks/ui/$(DEPDIR)/audacity-Scrubbing.Tpo tracks/ui/$(DEPDIR)/audacity-Scrubbing.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tracks/ui/Scrubbing.cpp' object='tracks/ui/audacity-Scrubbing.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/ui/audacity-Scrubbing.obj `if test -f 'tracks/ui/Scrubbing.cpp'; then $(CYGPATH_W) 'tracks/ui/Scrubbing.cpp'; else $(CYGPATH_W) '$(srcdir)/tracks/ui/Scrubbing.cpp'; fi`
widgets/audacity-AButton.o: widgets/AButton.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-AButton.o -MD -MP -MF widgets/$(DEPDIR)/audacity-AButton.Tpo -c -o widgets/audacity-AButton.o `test -f 'widgets/AButton.cpp' || echo '$(srcdir)/'`widgets/AButton.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-AButton.Tpo widgets/$(DEPDIR)/audacity-AButton.Po
@ -5511,6 +5588,20 @@ widgets/audacity-AttachableScrollBar.obj: widgets/AttachableScrollBar.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 widgets/audacity-AttachableScrollBar.obj `if test -f 'widgets/AttachableScrollBar.cpp'; then $(CYGPATH_W) 'widgets/AttachableScrollBar.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/AttachableScrollBar.cpp'; fi`
widgets/audacity-BackedPanel.o: widgets/BackedPanel.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-BackedPanel.o -MD -MP -MF widgets/$(DEPDIR)/audacity-BackedPanel.Tpo -c -o widgets/audacity-BackedPanel.o `test -f 'widgets/BackedPanel.cpp' || echo '$(srcdir)/'`widgets/BackedPanel.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-BackedPanel.Tpo widgets/$(DEPDIR)/audacity-BackedPanel.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/BackedPanel.cpp' object='widgets/audacity-BackedPanel.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 widgets/audacity-BackedPanel.o `test -f 'widgets/BackedPanel.cpp' || echo '$(srcdir)/'`widgets/BackedPanel.cpp
widgets/audacity-BackedPanel.obj: widgets/BackedPanel.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-BackedPanel.obj -MD -MP -MF widgets/$(DEPDIR)/audacity-BackedPanel.Tpo -c -o widgets/audacity-BackedPanel.obj `if test -f 'widgets/BackedPanel.cpp'; then $(CYGPATH_W) 'widgets/BackedPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/BackedPanel.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-BackedPanel.Tpo widgets/$(DEPDIR)/audacity-BackedPanel.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/BackedPanel.cpp' object='widgets/audacity-BackedPanel.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 widgets/audacity-BackedPanel.obj `if test -f 'widgets/BackedPanel.cpp'; then $(CYGPATH_W) 'widgets/BackedPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/BackedPanel.cpp'; fi`
widgets/audacity-ErrorDialog.o: widgets/ErrorDialog.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-ErrorDialog.o -MD -MP -MF widgets/$(DEPDIR)/audacity-ErrorDialog.Tpo -c -o widgets/audacity-ErrorDialog.o `test -f 'widgets/ErrorDialog.cpp' || echo '$(srcdir)/'`widgets/ErrorDialog.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-ErrorDialog.Tpo widgets/$(DEPDIR)/audacity-ErrorDialog.Po
@ -5707,6 +5798,34 @@ widgets/audacity-numformatter.obj: widgets/numformatter.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 widgets/audacity-numformatter.obj `if test -f 'widgets/numformatter.cpp'; then $(CYGPATH_W) 'widgets/numformatter.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/numformatter.cpp'; fi`
widgets/audacity-Overlay.o: widgets/Overlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-Overlay.o -MD -MP -MF widgets/$(DEPDIR)/audacity-Overlay.Tpo -c -o widgets/audacity-Overlay.o `test -f 'widgets/Overlay.cpp' || echo '$(srcdir)/'`widgets/Overlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-Overlay.Tpo widgets/$(DEPDIR)/audacity-Overlay.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/Overlay.cpp' object='widgets/audacity-Overlay.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 widgets/audacity-Overlay.o `test -f 'widgets/Overlay.cpp' || echo '$(srcdir)/'`widgets/Overlay.cpp
widgets/audacity-Overlay.obj: widgets/Overlay.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-Overlay.obj -MD -MP -MF widgets/$(DEPDIR)/audacity-Overlay.Tpo -c -o widgets/audacity-Overlay.obj `if test -f 'widgets/Overlay.cpp'; then $(CYGPATH_W) 'widgets/Overlay.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/Overlay.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-Overlay.Tpo widgets/$(DEPDIR)/audacity-Overlay.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/Overlay.cpp' object='widgets/audacity-Overlay.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 widgets/audacity-Overlay.obj `if test -f 'widgets/Overlay.cpp'; then $(CYGPATH_W) 'widgets/Overlay.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/Overlay.cpp'; fi`
widgets/audacity-OverlayPanel.o: widgets/OverlayPanel.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-OverlayPanel.o -MD -MP -MF widgets/$(DEPDIR)/audacity-OverlayPanel.Tpo -c -o widgets/audacity-OverlayPanel.o `test -f 'widgets/OverlayPanel.cpp' || echo '$(srcdir)/'`widgets/OverlayPanel.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-OverlayPanel.Tpo widgets/$(DEPDIR)/audacity-OverlayPanel.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/OverlayPanel.cpp' object='widgets/audacity-OverlayPanel.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 widgets/audacity-OverlayPanel.o `test -f 'widgets/OverlayPanel.cpp' || echo '$(srcdir)/'`widgets/OverlayPanel.cpp
widgets/audacity-OverlayPanel.obj: widgets/OverlayPanel.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-OverlayPanel.obj -MD -MP -MF widgets/$(DEPDIR)/audacity-OverlayPanel.Tpo -c -o widgets/audacity-OverlayPanel.obj `if test -f 'widgets/OverlayPanel.cpp'; then $(CYGPATH_W) 'widgets/OverlayPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/OverlayPanel.cpp'; fi`
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-OverlayPanel.Tpo widgets/$(DEPDIR)/audacity-OverlayPanel.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/OverlayPanel.cpp' object='widgets/audacity-OverlayPanel.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 widgets/audacity-OverlayPanel.obj `if test -f 'widgets/OverlayPanel.cpp'; then $(CYGPATH_W) 'widgets/OverlayPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/widgets/OverlayPanel.cpp'; fi`
widgets/audacity-ProgressDialog.o: widgets/ProgressDialog.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT widgets/audacity-ProgressDialog.o -MD -MP -MF widgets/$(DEPDIR)/audacity-ProgressDialog.Tpo -c -o widgets/audacity-ProgressDialog.o `test -f 'widgets/ProgressDialog.cpp' || echo '$(srcdir)/'`widgets/ProgressDialog.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/audacity-ProgressDialog.Tpo widgets/$(DEPDIR)/audacity-ProgressDialog.Po
@ -6237,6 +6356,8 @@ distclean-generic:
-rm -f prefs/$(am__dirstamp)
-rm -f toolbars/$(DEPDIR)/$(am__dirstamp)
-rm -f toolbars/$(am__dirstamp)
-rm -f tracks/ui/$(DEPDIR)/$(am__dirstamp)
-rm -f tracks/ui/$(am__dirstamp)
-rm -f widgets/$(DEPDIR)/$(am__dirstamp)
-rm -f widgets/$(am__dirstamp)
-rm -f xml/$(DEPDIR)/$(am__dirstamp)
@ -6251,7 +6372,7 @@ clean-am: clean-binPROGRAMS clean-checkLTLIBRARIES clean-generic \
clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR) blockfile/$(DEPDIR) commands/$(DEPDIR) effects/$(DEPDIR) effects/VST/$(DEPDIR) effects/audiounits/$(DEPDIR) effects/ladspa/$(DEPDIR) effects/lv2/$(DEPDIR) effects/nyquist/$(DEPDIR) effects/vamp/$(DEPDIR) export/$(DEPDIR) import/$(DEPDIR) ondemand/$(DEPDIR) prefs/$(DEPDIR) toolbars/$(DEPDIR) widgets/$(DEPDIR) xml/$(DEPDIR)
-rm -rf ./$(DEPDIR) blockfile/$(DEPDIR) commands/$(DEPDIR) effects/$(DEPDIR) effects/VST/$(DEPDIR) effects/audiounits/$(DEPDIR) effects/ladspa/$(DEPDIR) effects/lv2/$(DEPDIR) effects/nyquist/$(DEPDIR) effects/vamp/$(DEPDIR) export/$(DEPDIR) import/$(DEPDIR) ondemand/$(DEPDIR) prefs/$(DEPDIR) toolbars/$(DEPDIR) tracks/ui/$(DEPDIR) widgets/$(DEPDIR) xml/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-tags
@ -6297,7 +6418,7 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR) blockfile/$(DEPDIR) commands/$(DEPDIR) effects/$(DEPDIR) effects/VST/$(DEPDIR) effects/audiounits/$(DEPDIR) effects/ladspa/$(DEPDIR) effects/lv2/$(DEPDIR) effects/nyquist/$(DEPDIR) effects/vamp/$(DEPDIR) export/$(DEPDIR) import/$(DEPDIR) ondemand/$(DEPDIR) prefs/$(DEPDIR) toolbars/$(DEPDIR) widgets/$(DEPDIR) xml/$(DEPDIR)
-rm -rf ./$(DEPDIR) blockfile/$(DEPDIR) commands/$(DEPDIR) effects/$(DEPDIR) effects/VST/$(DEPDIR) effects/audiounits/$(DEPDIR) effects/ladspa/$(DEPDIR) effects/lv2/$(DEPDIR) effects/nyquist/$(DEPDIR) effects/vamp/$(DEPDIR) export/$(DEPDIR) import/$(DEPDIR) ondemand/$(DEPDIR) prefs/$(DEPDIR) toolbars/$(DEPDIR) tracks/ui/$(DEPDIR) widgets/$(DEPDIR) xml/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

View File

@ -134,6 +134,7 @@ simplifies construction of menu items.
#endif /* EXPERIMENTAL_SCOREALIGN */
#include "tracks/ui/Scrubbing.h"
#include "prefs/TracksPrefs.h"
enum {
kAlignStartZero = 0,
@ -753,9 +754,7 @@ void AudacityProject::CreateMenusAndCommands()
// Scrubbing sub-menu
GetScrubber().AddMenuItems();
c->AddItem(wxT("Pause"), _("&Pause"), FN(OnPause), wxT("P"),
c->GetDefaultFlags() | AudioStreamNotScrubbingFlag,
c->GetDefaultMask() | AudioStreamNotScrubbingFlag);
c->AddItem(wxT("Pause"), _("&Pause"), FN(OnPause), wxT("P"));
c->AddItem(wxT("SkipStart"), _("S&kip to Start"), FN(OnSkipStart), wxT("Home"),
AudioIONotBusyFlag, AudioIONotBusyFlag);
c->AddItem(wxT("SkipEnd"), _("Skip to E&nd"), FN(OnSkipEnd), wxT("End"),
@ -928,6 +927,16 @@ void AudacityProject::CreateMenusAndCommands()
//////////////////////////////////////////////////////////////////////////
c->AddSeparator();
c->AddCheck(wxT("ScrollLeftOfZero"), _("Scroll left of zero"),
FN(OnToggleScrollLeftOfZero),
gPrefs->ReadBool(
TracksPrefs::ScrollingPreferenceKey(),
TracksPrefs::ScrollingPreferenceDefault()),
AudioIONotBusyFlag, AudioIONotBusyFlag);
//////////////////////////////////////////////////////////////////////////
c->EndMenu();
// All of this is a bit hacky until we can get more things connected into
@ -1128,8 +1137,8 @@ void AudacityProject::CreateMenusAndCommands()
c->AddCommand(wxT("SeekLeftLong"), _("Long seek left during playback"), FN(OnSeekLeftLong), wxT("Shift+Left\tallowDup"));
c->AddCommand(wxT("SeekRightLong"), _("Long Seek right during playback"), FN(OnSeekRightLong), wxT("Shift+Right\tallowDup"));
c->SetDefaultFlags(TrackPanelOrRulerHasFocus,
TrackPanelOrRulerHasFocus);
c->SetDefaultFlags(TracksExistFlag | TrackPanelHasFocus,
TracksExistFlag | TrackPanelHasFocus);
c->AddCommand(wxT("PrevTrack"), _("Move Focus to Previous Track"), FN(OnCursorUp), wxT("Up"));
c->AddCommand(wxT("NextTrack"), _("Move Focus to Next Track"), FN(OnCursorDown), wxT("Down"));
@ -1141,9 +1150,6 @@ void AudacityProject::CreateMenusAndCommands()
c->AddCommand(wxT("ShiftDown"), _("Move Focus to Next and Select"), FN(OnShiftDown), wxT("Shift+Down"));
c->SetDefaultFlags(TracksExistFlag | TrackPanelHasFocus,
TracksExistFlag | TrackPanelHasFocus);
c->AddCommand(wxT("Toggle"), _("Toggle Focused Track"), FN(OnToggle), wxT("Return"));
c->AddCommand(wxT("ToggleAlt"), _("Toggle Focused Track"), FN(OnToggle), wxT("NUMPAD_ENTER"));
@ -1734,8 +1740,6 @@ CommandFlag AudacityProject::GetUpdateFlags()
flags |= TextClipFlag;
flags |= GetFocusedFrame();
if (flags & (TrackPanelHasFocus | RulerHasFocus))
flags |= TrackPanelOrRulerHasFocus;
double start, end;
GetPlayRegion(&start, &end);
@ -1770,9 +1774,6 @@ CommandFlag AudacityProject::GetUpdateFlags()
if (bar->ControlToolBar::CanStopAudioStream())
flags |= CanStopAudioStreamFlag;
if(!GetScrubber().HasStartedScrubbing())
flags |= AudioStreamNotScrubbingFlag;
return flags;
}
@ -2281,8 +2282,13 @@ void AudacityProject::OnRecordAppend()
GetControlToolBar()->OnRecord(evt);
}
// The code for "OnPlayStopSelect" is simply the code of "OnPlayStop" and "OnStopSelect" merged.
void AudacityProject::OnPlayStopSelect()
{
DoPlayStopSelect(false, false);
}
// The code for "OnPlayStopSelect" is simply the code of "OnPlayStop" and "OnStopSelect" merged.
void AudacityProject::DoPlayStopSelect(bool click, bool shift)
{
wxCommandEvent evt;
ControlToolBar *toolbar = GetControlToolBar();
@ -2291,7 +2297,36 @@ void AudacityProject::OnPlayStopSelect()
if (gAudioIO->IsStreamActive(GetAudioIOToken())) {
toolbar->SetPlay(false); //Pops
toolbar->SetStop(true); //Pushes stop down
mViewInfo.selectedRegion.setT0(gAudioIO->GetStreamTime(), false);
// change the selection
auto time = gAudioIO->GetStreamTime();
auto &selection = mViewInfo.selectedRegion;
if (shift && click) {
// Change the region selection, as if by shift-click at the play head
auto t0 = selection.t0(), t1 = selection.t1();
if (time < t0)
// Grow selection
t0 = time;
else if (time > t1)
// Grow selection
t1 = time;
else {
// Shrink selection, changing the nearer boundary
if (fabs(t0 - time) < fabs(t1 - time))
t0 = time;
else
t1 = time;
}
selection.setTimes(t0, t1);
}
else if (click)
// Set a point selection, as if by a click at the play head
selection.setTimes(time, time);
else
// How stop and set cursor always worked
// -- change t0, collapsing to point only if t1 was greater
selection.setT0(time, false);
ModifyState(false); // without bWantsAutoSave
toolbar->OnStop(evt);
}
@ -2477,6 +2512,15 @@ void AudacityProject::OnSortName()
mTrackPanel->Refresh(false);
}
void AudacityProject::OnToggleScrollLeftOfZero()
{
auto key = TracksPrefs::ScrollingPreferenceKey();
auto value = gPrefs->ReadBool(key, TracksPrefs::ScrollingPreferenceDefault());
gPrefs->Write(key, !value);
gPrefs->Flush();
UpdatePrefs();
}
void AudacityProject::OnSkipStart()
{
wxCommandEvent evt;
@ -2691,13 +2735,17 @@ void AudacityProject::NextFrame()
switch( GetFocusedFrame() )
{
case TopDockHasFocus:
if(mTrackPanel->GetFocusedTrack())
mTrackPanel->SetFocus();
else
mRuler->SetFocus();
#ifdef EXPERIMENTAL_TIME_RULER_NAVIGATION
mRuler->SetFocus();
break;
case RulerHasFocus:
#endif
mTrackPanel->SetFocus();
break;
case TrackPanelHasFocus:
mToolManager->GetBotDock()->SetFocus();
break;
@ -2715,20 +2763,24 @@ void AudacityProject::PrevFrame()
{
switch( GetFocusedFrame() )
{
case TopDockHasFocus:
mToolManager->GetBotDock()->SetFocus();
case BotDockHasFocus:
mTrackPanel->SetFocus();
break;
case TrackPanelHasFocus:
#ifdef EXPERIMENTAL_TIME_RULER_NAVIGATION
mRuler->SetFocus();
break;
case TrackPanelHasFocus:
case RulerHasFocus:
#endif
mToolManager->GetTopDock()->SetFocus();
break;
case BotDockHasFocus:
if(mTrackPanel->GetFocusedTrack())
mTrackPanel->SetFocus();
else
mRuler->SetFocus();
case TopDockHasFocus:
mToolManager->GetBotDock()->SetFocus();
break;
default:

View File

@ -80,6 +80,7 @@ void OnSeekRightLong();
bool MakeReadyToPlay(bool loop = false, bool cutpreview = false); // Helper function that sets button states etc.
void OnPlayStop();
void DoPlayStopSelect(bool click, bool shift);
void OnPlayStopSelect();
void OnPlayOneSecond();
void OnPlayToSelection();
@ -178,6 +179,8 @@ double GetTime(const Track *t);
void OnSortTime();
void OnSortName();
void OnToggleScrollLeftOfZero();
void OnSnapToOff();
void OnSnapToNearest();
void OnSnapToPrior();

View File

@ -2161,11 +2161,9 @@ void AudacityProject::OnActivate(wxActivateEvent & event)
mLastFocusedWindow->SetFocus();
}
else {
if (mTrackPanel->GetFocusedTrack()) {
if (mTrackPanel) {
mTrackPanel->SetFocus();
}
else
mRuler->SetFocus();
}
// No longer need to remember the last focused window
mLastFocusedWindow = NULL;
@ -4708,7 +4706,8 @@ void AudacityProject::TP_DisplaySelection()
if (gAudioIO->IsBusy())
audioTime = gAudioIO->GetStreamTime();
else {
audioTime = 0;
double playEnd;
GetPlayRegion(&audioTime, &playEnd);
}
GetSelectionBar()->SetTimes(mViewInfo.selectedRegion.t0(),
@ -5364,7 +5363,6 @@ void AudacityProject::PlaybackScroller::OnTimer(wxCommandEvent &event)
// Let other listeners get the notification
event.Skip();
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
if (mActive && mProject->IsAudioActive())
{
// Pan the view, so that we center the play indicator.
@ -5382,5 +5380,4 @@ void AudacityProject::PlaybackScroller::OnTimer(wxCommandEvent &event)
viewInfo.h = std::max(0.0, viewInfo.h);
trackPanel->Refresh(false);
}
#endif
}

View File

@ -5472,12 +5472,9 @@ void TrackPanel::HandleWheelRotation(wxMouseEvent & event)
(event.m_wheelDelta > 0 ? (double)event.m_wheelDelta : 120.0);
if (event.ShiftDown()
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
// Don't pan during smooth scrolling. That would conflict with keeping
// the play indicator centered.
&& !GetProject()->GetScrubber().IsScrollScrubbing()
#endif
)
&& !GetProject()->GetScrubber().IsScrollScrubbing())
{
// MM: Scroll left/right when used with Shift key down
mListener->TP_ScrollWindow(
@ -5506,15 +5503,12 @@ void TrackPanel::HandleWheelRotation(wxMouseEvent & event)
// Time corresponding to mouse position
wxCoord xx;
double center_h;
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
if (GetProject()->GetScrubber().IsScrollScrubbing()) {
// Expand or contract about the center, ignoring mouse position
center_h = mViewInfo->h + (GetScreenEndTime() - mViewInfo->h) / 2.0;
xx = mViewInfo->TimeToPosition(center_h, trackLeftEdge);
}
else
#endif
{
else {
xx = event.m_x;
center_h = mViewInfo->PositionToTime(xx, trackLeftEdge);
}
@ -7119,49 +7113,46 @@ void TrackPanel::UpdateVRulerSize()
/// TrackPanel::OnNextTrack.
void TrackPanel::OnPrevTrack( bool shift )
{
bool rulerFocus = mRuler->HasFocus();
bool stealFocus = (mCircularTrackNavigation && rulerFocus);
if(stealFocus) // if there isn't one, focus on last
TrackListIterator iter( mTracks );
Track* t = GetFocusedTrack();
if( t == NULL ) // if there isn't one, focus on last
{
if(rulerFocus) {
this->SetFocus();
mRuler->Refresh();
}
TrackListIterator iter( mTracks );
auto t = iter.Last();
t = iter.Last();
SetFocusedTrack( t );
EnsureVisible( t );
MakeParentModifyState(false);
return;
}
else if (rulerFocus) {
// JKC: wxBell() is probably for accessibility, so a blind
// user knows they were at the top track.
wxBell();
return;
}
Track* t = GetFocusedTrack();
Track* p = mTracks->GetPrev( t, true ); // Get previous track
if (!p) {
SetFocusedTrack(nullptr);
mRuler->SetFocus();
Refresh(false);
mRuler->Refresh();
return;
}
Track* p = NULL;
bool tSelected = false;
bool pSelected = false;
if( shift )
{
p = mTracks->GetPrev( t, true ); // Get previous track
if( p == NULL ) // On first track
{
// JKC: wxBell() is probably for accessibility, so a blind
// user knows they were at the top track.
wxBell();
if( mCircularTrackNavigation )
{
TrackListIterator iter( mTracks );
p = iter.Last();
}
else
{
EnsureVisible( t );
return;
}
}
tSelected = t->GetSelected();
if (p)
pSelected = p->GetSelected();
if( tSelected && pSelected )
{
mTracks->Select( t, false );
SetFocusedTrack( p ); // move focus to next track up
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState(false);
return;
@ -7169,7 +7160,7 @@ void TrackPanel::OnPrevTrack( bool shift )
if( tSelected && !pSelected )
{
mTracks->Select( p, true );
SetFocusedTrack( p ); // move focus to next track up
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState(false);
return;
@ -7177,7 +7168,7 @@ void TrackPanel::OnPrevTrack( bool shift )
if( !tSelected && pSelected )
{
mTracks->Select( p, false );
SetFocusedTrack( p ); // move focus to next track up
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState(false);
return;
@ -7185,7 +7176,7 @@ void TrackPanel::OnPrevTrack( bool shift )
if( !tSelected && !pSelected )
{
mTracks->Select( t, true );
SetFocusedTrack( p ); // move focus to next track up
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState(false);
return;
@ -7193,10 +7184,35 @@ void TrackPanel::OnPrevTrack( bool shift )
}
else
{
SetFocusedTrack( p ); // move focus to next track up
EnsureVisible( p );
MakeParentModifyState(false);
return;
p = mTracks->GetPrev( t, true ); // Get next track
if( p == NULL ) // On last track so stay there?
{
wxBell();
if( mCircularTrackNavigation )
{
TrackListIterator iter( mTracks );
for( Track *d = iter.First(); d; d = iter.Next( true ) )
{
p = d;
}
SetFocusedTrack( p ); // Wrap to the first track
EnsureVisible( p );
MakeParentModifyState(false);
return;
}
else
{
EnsureVisible( t );
return;
}
}
else
{
SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p );
MakeParentModifyState(false);
return;
}
}
}
@ -7205,46 +7221,37 @@ void TrackPanel::OnPrevTrack( bool shift )
/// block or not.
void TrackPanel::OnNextTrack( bool shift )
{
if(mRuler->HasFocus()) {
TrackListIterator iter(mTracks);
auto first = iter.First();
if(first != nullptr) {
// Steal focus
this->SetFocus();
SetFocusedTrack(first);
EnsureVisible(first);
MakeParentModifyState(false);
mRuler->Refresh();
}
return;
}
Track *t;
Track *n = nullptr;
bool tSelected, nSelected;
Track *n;
TrackListIterator iter( mTracks );
bool tSelected,nSelected;
t = GetFocusedTrack(); // Get currently focused track
bool surrenderFocus =
t == nullptr ||
((n = mTracks->GetNext( t, true )) == nullptr &&
mCircularTrackNavigation);
if( surrenderFocus ) // if there is no next, give focus to the ruler
if( t == NULL ) // if there isn't one, focus on first
{
SetFocusedTrack(nullptr);
mRuler->SetFocus();
mRuler->Refresh();
Refresh(false);
t = iter.First();
SetFocusedTrack( t );
EnsureVisible( t );
MakeParentModifyState(false);
return;
}
if( shift )
{
n = mTracks->GetNext( t, true ); // Get next track
if( n == NULL ) // On last track so stay there
{
wxBell();
EnsureVisible( t );
return;
if( mCircularTrackNavigation )
{
TrackListIterator iter( mTracks );
n = iter.First();
}
else
{
EnsureVisible( t );
return;
}
}
tSelected = t->GetSelected();
nSelected = n->GetSelected();
@ -7283,11 +7290,24 @@ void TrackPanel::OnNextTrack( bool shift )
}
else
{
n = mTracks->GetNext( t, true ); // Get next track
if( n == NULL ) // On last track so stay there
{
wxBell();
EnsureVisible( t );
return;
if( mCircularTrackNavigation )
{
TrackListIterator iter( mTracks );
n = iter.First();
SetFocusedTrack( n ); // Wrap to the first track
EnsureVisible( n );
MakeParentModifyState(false);
return;
}
else
{
EnsureVisible( t );
return;
}
}
else
{
@ -7301,25 +7321,26 @@ void TrackPanel::OnNextTrack( bool shift )
void TrackPanel::OnFirstTrack()
{
SetFocusedTrack(nullptr);
if (!mRuler->HasFocus()) {
mRuler->SetFocus();
mRuler->Refresh();
Track *t = GetFocusedTrack();
if (!t)
return;
TrackListIterator iter(mTracks);
Track *f = iter.First();
if (t != f)
{
SetFocusedTrack(f);
MakeParentModifyState(false);
}
EnsureVisible(f);
}
void TrackPanel::OnLastTrack()
{
if (mTracks->empty()) {
OnFirstTrack();
return;
}
else if(mRuler->HasFocus()) {
this->SetFocus();
mRuler->Refresh();
}
Track *t = GetFocusedTrack();
if (!t)
return;
TrackListIterator iter(mTracks);
Track *l = iter.Last();
if (t != l)

View File

@ -18,6 +18,7 @@ Paul Licameli
#include "prefs/GUISettings.h"
#include "Prefs.h"
#include "xml/XMLWriter.h"
#include "prefs/TracksPrefs.h"
namespace {
static const double gMaxZoom = 6000000;
@ -133,7 +134,8 @@ void ViewInfo::UpdatePrefs()
{
ZoomInfo::UpdatePrefs();
#ifdef EXPERIMENTAL_SCROLLING_LIMITS
gPrefs->Read(wxT("/GUI/ScrollBeyondZero"), &bScrollBeyondZero, false);
gPrefs->Read(TracksPrefs::ScrollingPreferenceKey(), &bScrollBeyondZero,
TracksPrefs::ScrollingPreferenceDefault());
#endif
}

View File

@ -110,13 +110,6 @@ void MousePrefs::CreateList()
AddItem(_("Left-Drag"), _("Select"), _("Set Selection Range"));
AddItem(_("Shift-Left-Click"), _("Select"), _("Extend Selection Range"));
AddItem(_("Left-Double-Click"), _("Select"), _("Select Clip or Entire Track"));
#ifdef EXPERIMENTAL_SCRUBBING_BASIC
AddItem(CTRL + _("-Left-Click"), _("Select"), _("Scrub"));
AddItem(CTRL + _("-Left-Drag"), _("Select"), _("Seek"));
#endif
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
AddItem(CTRL + _("-Left-Double-Click"), _("Select"), _("Scroll-scrub"));
#endif
#ifdef EXPERIMENTAL_SCRUBBING_SCROLL_WHEEL
AddItem(_("Wheel-Rotate"), _("Select"), _("Change scrub speed"));
#endif

View File

@ -45,6 +45,12 @@ TracksPrefs::~TracksPrefs()
{
}
const wxChar *TracksPrefs::ScrollingPreferenceKey()
{
static auto string = wxT("/GUI/ScrollBeyondZero");
return string;
}
void TracksPrefs::Populate()
{
mSoloCodes.Add(wxT("Simple"));
@ -134,8 +140,8 @@ void TracksPrefs::PopulateOrExchange(ShuttleGui & S)
true);
#ifdef EXPERIMENTAL_SCROLLING_LIMITS
S.TieCheckBox(_("Enable scrolling left of &zero"),
wxT("/GUI/ScrollBeyondZero"),
false);
ScrollingPreferenceKey(),
ScrollingPreferenceDefault());
#endif
S.AddSpace(10);

View File

@ -29,6 +29,9 @@ class TracksPrefs final : public PrefsPanel
~TracksPrefs();
bool Apply() override;
static const wxChar *ScrollingPreferenceKey();
static inline bool ScrollingPreferenceDefault() { return false; }
private:
void Populate();
void PopulateOrExchange(ShuttleGui & S);

View File

@ -431,9 +431,7 @@ void ControlToolBar::EnableDisableButtons()
mFF->SetEnabled(tracks && !playing && !recording);
auto pProject = GetActiveProject();
mPause->SetEnabled(CanStopAudioStream() &&
!(pProject &&
pProject->GetScrubber().HasStartedScrubbing()));
mPause->SetEnabled(CanStopAudioStream());
}
void ControlToolBar::SetPlay(bool down, PlayAppearance appearance)
@ -479,7 +477,12 @@ void ControlToolBar::SetRecord(bool down, bool append)
EnableDisableButtons();
}
bool ControlToolBar::IsRecordDown()
bool ControlToolBar::IsPauseDown() const
{
return mPause->IsDown();
}
bool ControlToolBar::IsRecordDown() const
{
return mRecord->IsDown();
}
@ -1090,12 +1093,6 @@ void ControlToolBar::OnPause(wxCommandEvent & WXUNUSED(evt))
return;
}
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
if (gAudioIO->IsScrubbing())
// Pausing does not make sense. Force the button
// to pop up below.
mPaused = true;
#endif
if(mPaused)
{
@ -1108,7 +1105,15 @@ void ControlToolBar::OnPause(wxCommandEvent & WXUNUSED(evt))
mPaused=true;
}
gAudioIO->SetPaused(mPaused);
#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT
if (gAudioIO->IsScrubbing())
GetActiveProject()->GetScrubber().Pause(mPaused);
else
#endif
{
gAudioIO->SetPaused(mPaused);
}
UpdateStatusBar(GetActiveProject());
}
@ -1190,22 +1195,22 @@ int ControlToolBar::WidthForStatusBar(wxStatusBar* const sb)
int xMax = 0;
const auto pauseString = wxT(" ") + wxGetTranslation(mStatePause);
auto update = [&] (const wxString &state, bool pauseToo) {
auto update = [&] (const wxString &state) {
int x, y;
sb->GetTextExtent(
wxGetTranslation(state) + ( pauseToo ? pauseString : wxString{} ) + wxT("."),
wxGetTranslation(state) + pauseString + wxT("."),
&x, &y
);
xMax = std::max(x, xMax);
};
update(mStatePlay, true);
update(mStateStop, true);
update(mStateRecord, true);
update(mStatePlay);
update(mStateStop);
update(mStateRecord);
// Note that Scrubbing + Paused is not allowed.
for(const auto &state : Scrubber::GetAllUntranslatedStatusStrings())
update(state, false);
update(state);
return xMax + 30; // added constant needed because xMax isn't large enough for some reason, plus some space.
}

View File

@ -70,7 +70,8 @@ class ControlToolBar final : public ToolBar {
void SetStop(bool down);
void SetRecord(bool down, bool append=false);
bool IsRecordDown();
bool IsPauseDown() const;
bool IsRecordDown() const;
// A project is only allowed to stop an audio stream that it owns.
bool CanStopAudioStream ();

View File

@ -188,11 +188,7 @@ namespace {
void Scrubber::MarkScrubStart(
// Assume xx is relative to the left edge of TrackPanel!
wxCoord xx
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
, bool smoothScrolling
#endif
, bool alwaysSeeking
wxCoord xx, bool smoothScrolling, bool alwaysSeeking
)
{
UncheckAllMenuItems();
@ -200,9 +196,7 @@ void Scrubber::MarkScrubStart(
// Don't actually start scrubbing, but collect some information
// needed for the decision to start scrubbing later when handling
// drag events.
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
SetScrollScrubbing (smoothScrolling);
#endif
mSmoothScrollingScrub = smoothScrolling;
mAlwaysSeeking = alwaysSeeking;
ControlToolBar * const ctb = mProject->GetControlToolBar();
@ -216,9 +210,6 @@ void Scrubber::MarkScrubStart(
ctb->SetPlay(true, ControlToolBar::PlayAppearance::Scrub);
// This disables the pause button.
ctb->EnableDisableButtons();
ctb->UpdateStatusBar(mProject);
mScrubStartPosition = xx;
@ -236,6 +227,9 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx)
if (IsScrubbing())
return false;
else {
const auto state = ::wxGetMouseState();
mDragging = state.LeftIsDown();
const bool busy = gAudioIO->IsBusy();
if (busy && gAudioIO->GetNumCaptureChannels() > 0) {
// Do not stop recording, and don't try to start scrubbing after
@ -265,6 +259,14 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx)
mScrubStartPosition = position;
}
if (mDragging && mSmoothScrollingScrub) {
auto delta = time0 - time1;
time0 = std::max(0.0, std::min(maxTime,
(viewInfo.h + mProject->GetScreenEndTime()) / 2
));
time1 = time0 + delta;
}
AudioIOStartStreamOptions options(mProject->GetDefaultPlayOptions());
options.timeTrack = NULL;
options.scrubDelay = (kTimerInterval / 1000.0);
@ -278,8 +280,10 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx)
p->GetTranscriptionToolBar()->GetPlaySpeed();
}
#else
// That idea seems unpopular... just make it one
mMaxScrubSpeed = options.maxScrubSpeed = 1.0;
// That idea seems unpopular... just make it one for move-scrub,
// but big for drag-scrub
mMaxScrubSpeed = options.maxScrubSpeed =
mDragging ? AudioIO::GetMaxScrubSpeed() : 1.0;
#endif
options.maxScrubTime = mProject->GetTracks()->GetEndTime();
ControlToolBar::PlayAppearance appearance =
@ -303,8 +307,11 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx)
// Wait to test again
mScrubStartClockTimeMillis = ::wxGetLocalTimeMillis();
if (IsScrubbing())
if (IsScrubbing()) {
mProject->GetPlaybackScroller().Activate(mSmoothScrollingScrub);
mScrubHasFocus = true;
mLastScrubPosition = xx;
}
// Return true whether we started scrub, or are still waiting to decide.
return true;
@ -313,13 +320,19 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx)
void Scrubber::ContinueScrubbing()
{
const wxMouseState state(::wxGetMouseState());
if (mDragging && !state.LeftIsDown()) {
// Stop and set cursor
mProject->DoPlayStopSelect(true, state.ShiftDown());
return;
}
// Thus scrubbing relies mostly on periodic polling of mouse and keys,
// not event notifications. But there are a few event handlers that
// leave messages for this routine, in mScrubSeekPress and in mScrubHasFocus.
// Seek only when the pointer is in the panel. Else, scrub.
const wxMouseState state(::wxGetMouseState());
TrackPanel *const trackPanel = mProject->GetTrackPanel();
// Decide whether to skip play, because either mouse is down now,
@ -337,26 +350,32 @@ void Scrubber::ContinueScrubbing()
}
const wxPoint position = trackPanel->ScreenToClient(state.GetPosition());
// When we don't have focus, enqueue silent scrubs until we regain focus.
const auto &viewInfo = mProject->GetViewInfo();
bool result = false;
if (!mScrubHasFocus)
// When we don't have focus, enqueue silent scrubs until we regain focus.
result = gAudioIO->EnqueueScrubBySignedSpeed(0, mMaxScrubSpeed, false);
else if (mDragging && mSmoothScrollingScrub) {
const auto lastTime = gAudioIO->GetLastTimeInScrubQueue();
const auto delta = mLastScrubPosition - position.x;
const double time = viewInfo.OffsetTimeByPixels(lastTime, delta);
result = gAudioIO->EnqueueScrubByPosition(time, mMaxScrubSpeed, true);
mLastScrubPosition = position.x;
}
else {
const double time = mProject->GetViewInfo().PositionToTime(position.x, trackPanel->GetLeftOffset());
const double time = viewInfo.PositionToTime(position.x, trackPanel->GetLeftOffset());
if (seek)
// Cause OnTimer() to suppress the speed display
mScrubSpeedDisplayCountdown = 1;
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
if (mSmoothScrollingScrub) {
const double speed = FindScrubSpeed(seek, time);
result = gAudioIO->EnqueueScrubBySignedSpeed(speed, mMaxScrubSpeed, seek);
}
else
#endif
result = gAudioIO->EnqueueScrubByPosition
(time, seek ? 1.0 : mMaxScrubSpeed, seek);
(time, seek ? 1.0 : mMaxScrubSpeed, seek);
}
if (result)
@ -364,12 +383,9 @@ void Scrubber::ContinueScrubbing()
// else, if seek requested, try again at a later time when we might
// enqueue a long enough stutter
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
if (mSmoothScrollingScrub)
;
else
#endif
{
else {
if (mScrubSpeedDisplayCountdown > 0)
--mScrubSpeedDisplayCountdown;
}
@ -380,7 +396,8 @@ void Scrubber::StopScrubbing()
UncheckAllMenuItems();
mScrubStartPosition = -1;
SetScrollScrubbing (false);
mProject->GetPlaybackScroller().Activate(false);
mDragging = false;
if (!IsScrubbing())
{
@ -389,12 +406,8 @@ void Scrubber::StopScrubbing()
const auto ctb = mProject->GetControlToolBar();
ctb->SetPlay(false, ControlToolBar::PlayAppearance::Straight);
}
}
void Scrubber::SetScrollScrubbing(bool scrollScrubbing)
{
mSmoothScrollingScrub = scrollScrubbing;
mProject->GetPlaybackScroller().Activate(scrollScrubbing);
mProject->GetRulerPanel()->HideQuickPlayIndicator();
}
bool Scrubber::IsScrubbing() const
@ -406,24 +419,22 @@ bool Scrubber::IsScrubbing() const
else {
const_cast<Scrubber&>(*this).mScrubToken = -1;
const_cast<Scrubber&>(*this).mScrubStartPosition = -1;
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
// Don't call SetScrollScrubbing
const_cast<Scrubber&>(*this).mSmoothScrollingScrub = false;
#endif
return false;
}
}
bool Scrubber::ShouldDrawScrubSpeed()
{
if (mDragging)
return false;
return IsScrubbing() &&
mScrubHasFocus && (
// Draw for (non-scroll) scrub, sometimes, but never for seek
(!PollIsSeeking() && mScrubSpeedDisplayCountdown > 0)
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
// Draw always for scroll-scrub and for scroll-seek
|| mSmoothScrollingScrub
#endif
);
}
@ -437,6 +448,10 @@ double Scrubber::FindScrubSpeed(bool seeking, double time) const
void Scrubber::HandleScrollWheel(int steps)
{
if (mDragging)
// Not likely you would spin it with the left button down, but...
return;
const int newLogMaxScrubSpeed = mLogMaxScrubSpeed + steps;
static const double maxScrubSpeedBase =
pow(2.0, 1.0 / ScrubSpeedStepsPerOctave);
@ -445,44 +460,39 @@ void Scrubber::HandleScrollWheel(int steps)
newSpeed <= AudioIO::GetMaxScrubSpeed()) {
mLogMaxScrubSpeed = newLogMaxScrubSpeed;
mMaxScrubSpeed = newSpeed;
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
if (!mSmoothScrollingScrub)
#endif
// Show the speed for one second
mScrubSpeedDisplayCountdown = kOneSecondCountdown + 1;
}
}
void Scrubber::Pause( bool paused )
{
mScrubHasFocus = !paused;
}
void Scrubber::OnActivateOrDeactivateApp(wxActivateEvent &event)
{
if (event.GetActive())
mScrubHasFocus = IsScrubbing();
Pause(!IsScrubbing() || mProject->GetControlToolBar()->IsPauseDown());
else
mScrubHasFocus = false;
Pause(true);
event.Skip();
}
void Scrubber::Forwarder::OnMouse(wxMouseEvent &event)
{
auto ruler = scrubber.mProject->GetRulerPanel();
auto isScrubbing = scrubber.IsScrubbing();
if (!isScrubbing && scrubber.HasStartedScrubbing()) {
if (!event.HasAnyModifiers() &&
event.GetEventType() == wxEVT_MOTION) {
// Really start scrub if motion is far enough
auto ruler = scrubber.mProject->GetRulerPanel();
auto xx = ruler->ScreenToClient(::wxGetMousePosition()).x;
scrubber.MaybeStartScrubbing(xx);
}
}
else if (isScrubbing && !event.HasAnyModifiers()) {
if (isScrubbing && !event.HasAnyModifiers()) {
if(event.LeftDown() ||
(event.LeftIsDown() && event.Dragging())) {
scrubber.mScrubSeekPress = true;
auto ruler = scrubber.mProject->GetRulerPanel();
if (!scrubber.mDragging)
scrubber.mScrubSeekPress = true;
auto xx = ruler->ScreenToClient(::wxGetMousePosition()).x;
ruler->UpdateQuickPlayPos(xx);
ruler->ShowQuickPlayIndicator();
}
else if (event.m_wheelRotation) {
double steps = event.m_wheelRotation /
@ -551,11 +561,9 @@ void ScrubbingOverlay::Draw(OverlayPanel &, wxDC &dc)
// (b) Error alerts
// So they were changed to 'orange' and 'lime'.
static const wxColour clrNoScroll(215, 162, 0), clrScroll(0, 204, 153);
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
if (scrubber.IsScrollScrubbing())
dc.SetTextForeground(clrScroll);
else
#endif
dc.SetTextForeground(clrNoScroll);
dc.DrawText(mLastScrubSpeedText, mLastScrubRect.GetX(), mLastScrubRect.GetY());
@ -567,9 +575,26 @@ void ScrubbingOverlay::OnTimer(wxCommandEvent &event)
event.Skip();
Scrubber &scrubber = GetScrubber();
if (!GetScrubber().IsScrubbing()) {
mNextScrubRect = wxRect();
return;
const auto isScrubbing = scrubber.IsScrubbing();
const auto ruler = mProject->GetRulerPanel();
auto position = ::wxGetMousePosition();
{
if(scrubber.HasStartedScrubbing()) {
auto xx = ruler->ScreenToClient(position).x;
ruler->UpdateQuickPlayPos(xx);
if (!isScrubbing)
// Really start scrub if motion is far enough
scrubber.MaybeStartScrubbing(xx);
}
if (!isScrubbing) {
mNextScrubRect = wxRect();
return;
}
else
ruler->ShowQuickPlayIndicator();
}
// Call ContinueScrubbing() here in the timer handler
@ -587,32 +612,24 @@ void ScrubbingOverlay::OnTimer(wxCommandEvent &event)
trackPanel->GetSize(&panelWidth, &panelHeight);
// Where's the mouse?
int xx, yy;
::wxGetMousePosition(&xx, &yy);
trackPanel->ScreenToClient(&xx, &yy);
position = trackPanel->ScreenToClient(position);
const bool seeking = scrubber.PollIsSeeking();
// Find the text
const double maxScrubSpeed = GetScrubber().GetMaxScrubSpeed();
const double speed =
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
scrubber.IsScrollScrubbing()
? scrubber.FindScrubSpeed
(seeking, mProject->GetViewInfo().PositionToTime(xx, trackPanel->GetLeftOffset()))
:
#endif
maxScrubSpeed;
(seeking, mProject->GetViewInfo().PositionToTime(position.x, trackPanel->GetLeftOffset()))
: maxScrubSpeed;
const wxChar *format =
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
scrubber.IsScrollScrubbing()
? seeking
? wxT("%+.2fX")
: wxT("%+.2f")
:
#endif
wxT("%.2f");
: wxT("%.2f");
mNextScrubSpeedText = wxString::Format(format, speed);
@ -624,11 +641,12 @@ void ScrubbingOverlay::OnTimer(wxCommandEvent &event)
dc.SetFont(labelFont);
dc.GetTextExtent(mNextScrubSpeedText, &width, &height);
}
xx = std::max(0, std::min(panelWidth - width, xx - width / 2));
const auto xx =
std::max(0, std::min(panelWidth - width, position.x - width / 2));
// Put the text above the cursor, if it fits.
enum { offset = 20 };
yy -= height + offset;
auto yy = position.y - height + offset;
if (yy < 0)
yy += height + 2 * offset;
yy = std::max(0, std::min(panelHeight - height, yy));
@ -649,7 +667,7 @@ Scrubber &ScrubbingOverlay::GetScrubber()
bool Scrubber::PollIsSeeking()
{
return mAlwaysSeeking || ::wxGetMouseState().LeftIsDown();
return mDragging || (mAlwaysSeeking || ::wxGetMouseState().LeftIsDown());
}
void Scrubber::DoScrub(bool scroll, bool seek)
@ -669,7 +687,8 @@ void Scrubber::DoScrub(bool scroll, bool seek)
MarkScrubStart(xx, scroll, seek);
}
else if(!match) {
SetScrollScrubbing(scroll);
mSmoothScrollingScrub = scroll;
mProject->GetPlaybackScroller().Activate(scroll);
mAlwaysSeeking = seek;
UncheckAllMenuItems();
CheckMenuItem();

View File

@ -29,11 +29,8 @@ public:
// Assume xx is relative to the left edge of TrackPanel!
void MarkScrubStart(
wxCoord xx
#ifdef EXPERIMENTAL_SCRUBBING_SMOOTH_SCROLL
, bool smoothScrolling
#endif
, bool alwaysSeeking // if false, can switch seeking or scrubbing
wxCoord xx, bool smoothScrolling,
bool alwaysSeeking // if false, can switch seeking or scrubbing
// by mouse button state
);
@ -57,7 +54,6 @@ public:
bool IsScrollScrubbing() const // If true, implies HasStartedScrubbing()
{ return mSmoothScrollingScrub; }
void SetScrollScrubbing(bool scrollScrubbing);
bool IsAlwaysSeeking() const
{ return mAlwaysSeeking; }
@ -89,6 +85,8 @@ public:
// All possible status strings.
static std::vector<wxString> GetAllUntranslatedStatusStrings();
void Pause(bool paused);
private:
void DoScrub(bool scroll, bool seek);
void OnActivateOrDeactivateApp(wxActivateEvent & event);
@ -113,10 +111,12 @@ private:
bool mScrubHasFocus;
int mScrubSpeedDisplayCountdown;
wxCoord mScrubStartPosition;
wxCoord mLastScrubPosition {};
double mMaxScrubSpeed;
bool mScrubSeekPress;
bool mSmoothScrollingScrub;
bool mAlwaysSeeking{};
bool mAlwaysSeeking {};
bool mDragging {};
#ifdef EXPERIMENTAL_SCRUBBING_SCROLL_WHEEL
int mLogMaxScrubSpeed;

View File

@ -82,6 +82,7 @@ array of Ruler::Label.
#include "../Prefs.h"
#include "../Snap.h"
#include "../tracks/ui/Scrubbing.h"
#include "../prefs/TracksPrefs.h"
//#define SCRUB_ABOVE
#define RULER_DOUBLE_CLICK
@ -2044,7 +2045,8 @@ void AdornedRulerPanel::UpdatePrefs()
#ifdef EXPERIMENTAL_TWO_TONE_TIME_RULER
{
bool scrollBeyondZero = false;
gPrefs->Read(wxT("/GUI/ScrollBeyondZero"), &scrollBeyondZero, false);
gPrefs->Read(TracksPrefs::ScrollingPreferenceKey(), &scrollBeyondZero,
TracksPrefs::ScrollingPreferenceDefault());
mRuler.SetTwoTone(scrollBeyondZero);
}
#endif
@ -2380,7 +2382,7 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
auto &scrubber = mProject->GetScrubber();
if (scrubber.HasStartedScrubbing()) {
if (IsButton(zone))
if (IsButton(zone) || evt.RightDown())
// Fall through to pushbutton handling
;
else if (zone == StatusChoice::EnteringQP &&
@ -2503,13 +2505,16 @@ void AdornedRulerPanel::OnMouseEvents(wxMouseEvent &evt)
mDoubleClick = false;
HandleQPClick(evt, mousePosX);
HandleQPDrag(evt, mousePosX);
ShowQuickPlayIndicator();
}
else if (evt.LeftIsDown())
else if (evt.LeftIsDown() && HasCapture()) {
HandleQPDrag(evt, mousePosX);
else if (evt.LeftUp())
ShowQuickPlayIndicator();
}
else if (evt.LeftUp() && HasCapture()) {
HandleQPRelease(evt);
ShowQuickPlayIndicator();
ShowQuickPlayIndicator();
}
}
}
@ -2654,10 +2659,12 @@ void AdornedRulerPanel::HandleQPRelease(wxMouseEvent &evt)
if (mDoubleClick)
return;
HideQuickPlayIndicator();
if (HasCapture())
ReleaseMouse();
else
return;
HideQuickPlayIndicator();
mCaptureState = CaptureState{};
@ -2908,7 +2915,6 @@ void AdornedRulerPanel::OnKeyDown(wxKeyEvent &event)
void AdornedRulerPanel::OnSetFocus(wxFocusEvent & WXUNUSED(event))
{
AudacityProject::CaptureKeyboard(this);
mProject->GetTrackPanel()->SetFocusedTrack(nullptr);
mTabState = TabState{};
Refresh( false );
}

View File

@ -293,6 +293,10 @@ public:
~AdornedRulerPanel();
#ifndef EXPERIMENTAL_TIME_RULER_NAVIGATION
bool AcceptsFocus() const override { return false; }
#endif
public:
static int GetRulerHeight();
static int GetRulerHeight(bool showScrubBar);

View File

@ -117,9 +117,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c99_func_lrint.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/configure.ac
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
@ -414,12 +413,6 @@ AUDACITY_NAME = @AUDACITY_NAME@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AVCODEC_CFLAGS = @AVCODEC_CFLAGS@
AVCODEC_LIBS = @AVCODEC_LIBS@
AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@
AVFORMAT_LIBS = @AVFORMAT_LIBS@
AVUTIL_CFLAGS = @AVUTIL_CFLAGS@
AVUTIL_LIBS = @AVUTIL_LIBS@
AWK = @AWK@
BUILD_LDFLAGS = @BUILD_LDFLAGS@
CC = @CC@
@ -460,8 +453,6 @@ GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSTREAMER_CFLAGS = @GSTREAMER_CFLAGS@
GSTREAMER_LIBS = @GSTREAMER_LIBS@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HAVE_GTK = @HAVE_GTK@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
@ -475,8 +466,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
JACK_CFLAGS = @JACK_CFLAGS@
JACK_LIBS = @JACK_LIBS@
LAME_CFLAGS = @LAME_CFLAGS@
LAME_LIBS = @LAME_LIBS@
LD = @LD@
@ -523,7 +512,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@
PORTAUDIO_LIBS = @PORTAUDIO_LIBS@
PORTMIXER_LIBS = @PORTMIXER_LIBS@