diff --git a/locale/POTFILES.in b/locale/POTFILES.in index cf6f57653..2a7eb3463 100644 --- a/locale/POTFILES.in +++ b/locale/POTFILES.in @@ -640,6 +640,8 @@ src/toolbars/SelectionBarListener.h src/toolbars/SpectralSelectionBar.cpp src/toolbars/SpectralSelectionBar.h src/toolbars/SpectralSelectionBarListener.h +src/toolbars/TimerToolBar.cpp +src/toolbars/TimerToolBar.h src/toolbars/ToolBar.cpp src/toolbars/ToolBar.h src/toolbars/ToolDock.cpp diff --git a/mac/Audacity.xcodeproj/project.pbxproj b/mac/Audacity.xcodeproj/project.pbxproj index d1673f044..c7bd28d21 100644 --- a/mac/Audacity.xcodeproj/project.pbxproj +++ b/mac/Audacity.xcodeproj/project.pbxproj @@ -1334,6 +1334,7 @@ 5ED1D0AE1CDE55BD00471E3C /* OverlayPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AB1CDE55BD00471E3C /* OverlayPanel.cpp */; }; 5ED1D0B11CDE560C00471E3C /* BackedPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AF1CDE560C00471E3C /* BackedPanel.cpp */; }; 5ED8FF8A239AB9960065BC5B /* noisegate.ny in Resources */ = {isa = PBXBuildFile; fileRef = 5ED8FF89239AB9960065BC5B /* noisegate.ny */; }; + 5EE2698323BBD4E800C58E4D /* TimerToolBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EE2698123BBD4E800C58E4D /* TimerToolBar.cpp */; }; 5EF17C231D1F0A690090A642 /* ScrubbingToolBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EF17C211D1F0A690090A642 /* ScrubbingToolBar.cpp */; }; 5EF3E64D203FBAFB006C6882 /* AudacityCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EF3E643203FBAFB006C6882 /* AudacityCommand.cpp */; }; 5EF3E64E203FBAFB006C6882 /* CommandContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EF3E645203FBAFB006C6882 /* CommandContext.cpp */; }; @@ -3434,6 +3435,8 @@ 5ED1D0AF1CDE560C00471E3C /* BackedPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackedPanel.cpp; sourceTree = "<group>"; }; 5ED1D0B01CDE560C00471E3C /* BackedPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackedPanel.h; sourceTree = "<group>"; }; 5ED8FF89239AB9960065BC5B /* noisegate.ny */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = noisegate.ny; path = "../plug-ins/noisegate.ny"; sourceTree = "<group>"; }; + 5EE2698123BBD4E800C58E4D /* TimerToolBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimerToolBar.cpp; sourceTree = "<group>"; }; + 5EE2698223BBD4E800C58E4D /* TimerToolBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimerToolBar.h; sourceTree = "<group>"; }; 5EE8984821D68D88006DE939 /* CommandManagerWindowClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandManagerWindowClasses.h; sourceTree = "<group>"; }; 5EEE942021F397C00038E68E /* AttachedVirtualFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachedVirtualFunction.h; sourceTree = "<group>"; }; 5EF17C211D1F0A690090A642 /* ScrubbingToolBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrubbingToolBar.cpp; sourceTree = "<group>"; }; @@ -5961,6 +5964,8 @@ 28001B481A0F0EB6007DD161 /* SpectralSelectionBar.cpp */, 28001B491A0F0EB6007DD161 /* SpectralSelectionBar.h */, 28001B4A1A0F0EB6007DD161 /* SpectralSelectionBarListener.h */, + 5EE2698123BBD4E800C58E4D /* TimerToolBar.cpp */, + 5EE2698223BBD4E800C58E4D /* TimerToolBar.h */, 2897F6E60AB3DB5A003C20C5 /* ToolBar.cpp */, 2897F6E70AB3DB5A003C20C5 /* ToolBar.h */, 2897F6E80AB3DB5A003C20C5 /* ToolDock.cpp */, @@ -8968,6 +8973,7 @@ 28884952131B6CF600B59735 /* fa.po in Sources */, 28884953131B6CF600B59735 /* fi.po in Sources */, 28884954131B6CF600B59735 /* fr.po in Sources */, + 5EE2698323BBD4E800C58E4D /* TimerToolBar.cpp in Sources */, 5EBD1C9522D11DAF00299FD4 /* WaveformVZoomHandle.cpp in Sources */, 28884955131B6CF600B59735 /* ga.po in Sources */, 28884956131B6CF600B59735 /* gl.po in Sources */, diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0ed847eb9..9ab5aa27a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ project (Audacity) find_package(wxWidgets REQUIRED COMPONENTS net core base html qa adv) include(${wxWidgets_USE_FILE}) -set_property(GLOBAL PROPERTY USE_FOLDERS On) +set_property(GLOBAL PROPERTY USE_FOLDERS On) # Needed for configwin.h included by Audacity.h @@ -24,7 +24,7 @@ include_directories(${top_dir}/lib-src/libmad) include_directories(${top_dir}/lib-src/libnyquist) include_directories(${top_dir}/lib-src/libogg/include) include_directories(${top_dir}/lib-src/libscorealign) -include_directories(${top_dir}/win/Projects/libsndfile) +include_directories(${top_dir}/win/Projects/libsndfile) include_directories(${top_dir}/lib-src/libsoxr/src) #really? Src? include_directories(${top_dir}/lib-src/libvamp) include_directories(${top_dir}/lib-src/libvorbis/include) @@ -76,7 +76,7 @@ add_compile_options(/wd4996) -set( SOURCE +set( SOURCE ${CMAKE_SOURCE_DIRECTORY}AudacityHeaders.cpp #first so cotire can precompile ${CMAKE_SOURCE_DIRECTORY}AboutDialog.cpp ${CMAKE_SOURCE_DIRECTORY}AColor.cpp @@ -184,7 +184,7 @@ set( BLOCKFILE_SOURCE ${CMAKE_SOURCE_DIRECTORY}blockfile/PCMAliasBlockFile.cpp ${CMAKE_SOURCE_DIRECTORY}blockfile/SilentBlockFile.cpp ${CMAKE_SOURCE_DIRECTORY}blockfile/SimpleBlockFile.cpp -) +) source_group( blockfile FILES ${BLOCKFILE_SOURCE} ) @@ -379,6 +379,7 @@ set( TOOLBARS_SOURCE ${CMAKE_SOURCE_DIRECTORY}toolbars/ScrubbingToolBar.cpp ${CMAKE_SOURCE_DIRECTORY}toolbars/SelectionBar.cpp ${CMAKE_SOURCE_DIRECTORY}toolbars/SpectralSelectionBar.cpp + ${CMAKE_SOURCE_DIRECTORY}toolbars/TimerToolBar.cpp ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolBar.cpp ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolDock.cpp ${CMAKE_SOURCE_DIRECTORY}toolbars/ToolManager.cpp @@ -471,7 +472,7 @@ set( XML_SOURCE ) source_group( xml FILES ${XML_SOURCE} ) -set( SOURCE +set( SOURCE ${SOURCE} ${BLOCKFILE_SOURCE} ${COMMANDS_SOURCE} @@ -507,8 +508,8 @@ if(MSVC) endif() #Use cotire to get precompiled headers, and a unity build. -set_target_properties(Audacity -PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT +set_target_properties(Audacity +PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "AudacityHeaders.h") cotire(Audacity) diff --git a/src/Experimental.h b/src/Experimental.h index c1dcc2548..5080ffb39 100644 --- a/src/Experimental.h +++ b/src/Experimental.h @@ -258,4 +258,7 @@ // it is dangerous and has too many bugs. See bug 536 for example. //#do not define EXPERIMENTAL_OD_DATA +// Jonatã Bolzan Loss 31 Dec 2019 +#define EXPERIMENTAL_TIMER_TOOLBAR + #endif diff --git a/src/Makefile.am b/src/Makefile.am index c8eea3d23..36cfd7dc3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -627,6 +627,7 @@ audacity_SOURCES = \ toolbars/SpectralSelectionBar.cpp \ toolbars/SpectralSelectionBar.h \ toolbars/SpectralSelectionBarListener.h \ + toolbars/TimerToolBar.cpp \ toolbars/ToolBar.cpp \ toolbars/ToolBar.h \ toolbars/ToolDock.cpp \ diff --git a/src/Makefile.in b/src/Makefile.in index c00ce1409..2fb5efeb4 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -494,7 +494,8 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.cpp \ toolbars/SelectionBar.cpp toolbars/SelectionBar.h \ toolbars/SpectralSelectionBar.cpp \ toolbars/SpectralSelectionBar.h \ - toolbars/SpectralSelectionBarListener.h toolbars/ToolBar.cpp \ + toolbars/SpectralSelectionBarListener.h \ + toolbars/TimerToolBar.cpp toolbars/ToolBar.cpp \ toolbars/ToolBar.h toolbars/ToolDock.cpp toolbars/ToolDock.h \ toolbars/ToolManager.cpp toolbars/ToolManager.h \ toolbars/ToolsToolBar.cpp toolbars/ToolsToolBar.h \ @@ -892,6 +893,7 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \ toolbars/audacity-ScrubbingToolBar.$(OBJEXT) \ toolbars/audacity-SelectionBar.$(OBJEXT) \ toolbars/audacity-SpectralSelectionBar.$(OBJEXT) \ + toolbars/audacity-TimerToolBar.$(OBJEXT) \ toolbars/audacity-ToolBar.$(OBJEXT) \ toolbars/audacity-ToolDock.$(OBJEXT) \ toolbars/audacity-ToolManager.$(OBJEXT) \ @@ -1334,6 +1336,7 @@ am__depfiles_remade = ./$(DEPDIR)/audacity-AColor.Po \ toolbars/$(DEPDIR)/audacity-ScrubbingToolBar.Po \ toolbars/$(DEPDIR)/audacity-SelectionBar.Po \ toolbars/$(DEPDIR)/audacity-SpectralSelectionBar.Po \ + toolbars/$(DEPDIR)/audacity-TimerToolBar.Po \ toolbars/$(DEPDIR)/audacity-ToolBar.Po \ toolbars/$(DEPDIR)/audacity-ToolDock.Po \ toolbars/$(DEPDIR)/audacity-ToolManager.Po \ @@ -2013,7 +2016,8 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.cpp \ toolbars/SelectionBar.cpp toolbars/SelectionBar.h \ toolbars/SpectralSelectionBar.cpp \ toolbars/SpectralSelectionBar.h \ - toolbars/SpectralSelectionBarListener.h toolbars/ToolBar.cpp \ + toolbars/SpectralSelectionBarListener.h \ + toolbars/TimerToolBar.cpp toolbars/ToolBar.cpp \ toolbars/ToolBar.h toolbars/ToolDock.cpp toolbars/ToolDock.h \ toolbars/ToolManager.cpp toolbars/ToolManager.h \ toolbars/ToolsToolBar.cpp toolbars/ToolsToolBar.h \ @@ -2669,6 +2673,8 @@ toolbars/audacity-SelectionBar.$(OBJEXT): toolbars/$(am__dirstamp) \ toolbars/$(DEPDIR)/$(am__dirstamp) toolbars/audacity-SpectralSelectionBar.$(OBJEXT): \ toolbars/$(am__dirstamp) toolbars/$(DEPDIR)/$(am__dirstamp) +toolbars/audacity-TimerToolBar.$(OBJEXT): toolbars/$(am__dirstamp) \ + toolbars/$(DEPDIR)/$(am__dirstamp) toolbars/audacity-ToolBar.$(OBJEXT): toolbars/$(am__dirstamp) \ toolbars/$(DEPDIR)/$(am__dirstamp) toolbars/audacity-ToolDock.$(OBJEXT): toolbars/$(am__dirstamp) \ @@ -3347,6 +3353,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-ScrubbingToolBar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-SelectionBar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-SpectralSelectionBar.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-TimerToolBar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-ToolBar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-ToolDock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@toolbars/$(DEPDIR)/audacity-ToolManager.Po@am__quote@ # am--include-marker @@ -7462,6 +7469,20 @@ toolbars/audacity-SpectralSelectionBar.obj: toolbars/SpectralSelectionBar.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-SpectralSelectionBar.obj `if test -f 'toolbars/SpectralSelectionBar.cpp'; then $(CYGPATH_W) 'toolbars/SpectralSelectionBar.cpp'; else $(CYGPATH_W) '$(srcdir)/toolbars/SpectralSelectionBar.cpp'; fi` +toolbars/audacity-TimerToolBar.o: toolbars/TimerToolBar.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT toolbars/audacity-TimerToolBar.o -MD -MP -MF toolbars/$(DEPDIR)/audacity-TimerToolBar.Tpo -c -o toolbars/audacity-TimerToolBar.o `test -f 'toolbars/TimerToolBar.cpp' || echo '$(srcdir)/'`toolbars/TimerToolBar.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) toolbars/$(DEPDIR)/audacity-TimerToolBar.Tpo toolbars/$(DEPDIR)/audacity-TimerToolBar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='toolbars/TimerToolBar.cpp' object='toolbars/audacity-TimerToolBar.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 toolbars/audacity-TimerToolBar.o `test -f 'toolbars/TimerToolBar.cpp' || echo '$(srcdir)/'`toolbars/TimerToolBar.cpp + +toolbars/audacity-TimerToolBar.obj: toolbars/TimerToolBar.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT toolbars/audacity-TimerToolBar.obj -MD -MP -MF toolbars/$(DEPDIR)/audacity-TimerToolBar.Tpo -c -o toolbars/audacity-TimerToolBar.obj `if test -f 'toolbars/TimerToolBar.cpp'; then $(CYGPATH_W) 'toolbars/TimerToolBar.cpp'; else $(CYGPATH_W) '$(srcdir)/toolbars/TimerToolBar.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) toolbars/$(DEPDIR)/audacity-TimerToolBar.Tpo toolbars/$(DEPDIR)/audacity-TimerToolBar.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='toolbars/TimerToolBar.cpp' object='toolbars/audacity-TimerToolBar.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 toolbars/audacity-TimerToolBar.obj `if test -f 'toolbars/TimerToolBar.cpp'; then $(CYGPATH_W) 'toolbars/TimerToolBar.cpp'; else $(CYGPATH_W) '$(srcdir)/toolbars/TimerToolBar.cpp'; fi` + toolbars/audacity-ToolBar.o: toolbars/ToolBar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT toolbars/audacity-ToolBar.o -MD -MP -MF toolbars/$(DEPDIR)/audacity-ToolBar.Tpo -c -o toolbars/audacity-ToolBar.o `test -f 'toolbars/ToolBar.cpp' || echo '$(srcdir)/'`toolbars/ToolBar.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) toolbars/$(DEPDIR)/audacity-ToolBar.Tpo toolbars/$(DEPDIR)/audacity-ToolBar.Po @@ -9456,6 +9477,7 @@ distclean: distclean-am -rm -f toolbars/$(DEPDIR)/audacity-ScrubbingToolBar.Po -rm -f toolbars/$(DEPDIR)/audacity-SelectionBar.Po -rm -f toolbars/$(DEPDIR)/audacity-SpectralSelectionBar.Po + -rm -f toolbars/$(DEPDIR)/audacity-TimerToolBar.Po -rm -f toolbars/$(DEPDIR)/audacity-ToolBar.Po -rm -f toolbars/$(DEPDIR)/audacity-ToolDock.Po -rm -f toolbars/$(DEPDIR)/audacity-ToolManager.Po @@ -9899,6 +9921,7 @@ maintainer-clean: maintainer-clean-am -rm -f toolbars/$(DEPDIR)/audacity-ScrubbingToolBar.Po -rm -f toolbars/$(DEPDIR)/audacity-SelectionBar.Po -rm -f toolbars/$(DEPDIR)/audacity-SpectralSelectionBar.Po + -rm -f toolbars/$(DEPDIR)/audacity-TimerToolBar.Po -rm -f toolbars/$(DEPDIR)/audacity-ToolBar.Po -rm -f toolbars/$(DEPDIR)/audacity-ToolDock.Po -rm -f toolbars/$(DEPDIR)/audacity-ToolManager.Po diff --git a/src/Screenshot.cpp b/src/Screenshot.cpp index 6e3d45d0d..1385e04db 100644 --- a/src/Screenshot.cpp +++ b/src/Screenshot.cpp @@ -197,9 +197,10 @@ enum IdCaptureFullWindow, IdCaptureWindowPlus, IdCaptureFullScreen, - + IdCaptureSelectionBar, IdCaptureSpectralSelection, + IdCaptureTimer, IdCaptureTools, IdCaptureTransport, IdCaptureMixer, @@ -399,6 +400,7 @@ void ScreenshotBigDialog::PopulateOrExchange(ShuttleGui & S) { S.Id(IdCaptureSelectionBar).AddButton(XO("SelectionBar")); S.Id(IdCaptureSpectralSelection).AddButton(XO("Spectral Selection")); + S.Id(IdCaptureTimer).AddButton(XO("Timer")); S.Id(IdCaptureTools).AddButton(XO("Tools")); S.Id(IdCaptureTransport).AddButton(XO("Transport")); } @@ -635,7 +637,7 @@ void ScreenshotBigDialog::OnCaptureSomething(wxCommandEvent & event) IdCaptureFullWindow, IdCaptureWindowPlus, IdCaptureFullScreen, - + IdCaptureSelectionBar, IdCaptureSpectralSelection, IdCaptureTools, diff --git a/src/menus/ToolbarMenus.cpp b/src/menus/ToolbarMenus.cpp index 42d89dc05..b2f5fdcb3 100644 --- a/src/menus/ToolbarMenus.cpp +++ b/src/menus/ToolbarMenus.cpp @@ -52,6 +52,15 @@ void OnShowTransportToolBar(const CommandContext &context) MenuManager::Get(project).ModifyToolbarMenus(project); } +void OnShowTimerToolBar(const CommandContext &context) +{ + auto &project = context.project; + auto &toolManager = ToolManager::Get( project ); + + toolManager.ShowHide( TimerBarID ); + MenuManager::Get(project).ModifyToolbarMenus(project); +} + void OnShowToolsToolBar(const CommandContext &context) { auto &project = context.project; @@ -249,7 +258,7 @@ MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& ) { using namespace MenuTable; using Options = CommandManager::Options; - + static const auto checkOff = Options{}.CheckState( false ); return Menu( XO("&Toolbars"), @@ -306,6 +315,13 @@ MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& ) for selecting a time range of audio*/ Command( wxT("ShowSelectionTB"), XXO("&Selection Toolbar"), FN(OnShowSelectionToolBar), AlwaysEnabledFlag, checkOff ) +#ifdef EXPERIMENTAL_TIMER_TOOLBAR + , + /* i18n-hint: Clicking this menu item shows the toolbar + for viewing actual time of the cursor*/ + Command( wxT("ShowTImerToolBarTB"), XXO("&Timer Toolbar"), + FN(OnShowTimerToolBar), AlwaysEnabledFlag, checkOff ) +#endif #ifdef EXPERIMENTAL_SPECTRAL_EDITING , Command( wxT("ShowSpectralSelectionTB"), diff --git a/src/toolbars/TimerToolBar.cpp b/src/toolbars/TimerToolBar.cpp new file mode 100644 index 000000000..6cd9e0a76 --- /dev/null +++ b/src/toolbars/TimerToolBar.cpp @@ -0,0 +1,186 @@ +/********************************************************************** + + Audacity: A Digital Audio Editor + + TimerToolBar.cpp + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + *//*******************************************************************/ + + +#include "../Audacity.h" +#include "SelectionBar.h" + +#include "SelectionBarListener.h" +#include "ToolManager.h" + +// For compilers that support precompilation, includes "wx/wx.h". +#include <wx/wxprec.h> + +#include <wx/setup.h> // for wxUSE_* macros + +#ifndef WX_PRECOMP +#include <wx/choice.h> +#include <wx/intl.h> +#include <wx/settings.h> +#include <wx/sizer.h> +#include <wx/valtext.h> +#include <wx/stattext.h> +#endif +#include <wx/statline.h> + +#include "SelectionBarListener.h" +#include "SelectionBar.h" +#include "TimerToolBar.h" + +//#include "../widgets/AButton.h" +#include "../AudioIO.h" +#include "../AColor.h" +#include "../KeyboardCapture.h" +#include "../Prefs.h" +#include "../Project.h" +#include "../Snap.h" +#include "../widgets/NumericTextCtrl.h" +#include "../AllThemeResources.h" + +#if wxUSE_ACCESSIBILITY +#include "../widgets/WindowAccessible.h" +#endif + +IMPLEMENT_CLASS(TimerToolBar, ToolBar); + +enum { + TimerToolBarFirstID = 2700, + AudioTimeID, +}; + +BEGIN_EVENT_TABLE(TimerToolBar, ToolBar) +EVT_SIZE(TimerToolBar::OnSize) +EVT_COMMAND(wxID_ANY, EVT_CAPTURE_KEY, TimerToolBar::OnCaptureKey) +END_EVENT_TABLE() + +TimerToolBar::TimerToolBar( AudacityProject &project ) +: ToolBar(project, TimerBarID, XO("TimerToolBar"), wxT("TimerToolBar"),true), +mListener(NULL), mAudioTime(NULL) +{ + mRate = (double) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), + AudioIO::GetOptimalSupportedSampleRate()); +} + +TimerToolBar::~TimerToolBar() +{ +} + +TimerToolBar &TimerToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast<TimerToolBar*>( toolManager.GetToolBar(TimerBarID) ); +} + +const TimerToolBar &TimerToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast<AudacityProject&>( project )) ; +} + +void TimerToolBar::Create(wxWindow * parent) +{ + ToolBar::Create(parent); + UpdatePrefs(); +} + +NumericTextCtrl * TimerToolBar::AddTime( + const TranslatableString &Name, int id) +{ + auto formatName = mListener ? mListener->AS_GetSelectionFormat() + : NumericFormatSymbol{}; + auto pCtrl = safenew NumericTextCtrl( + this, id, NumericConverter::TIME, formatName, 0.0, mRate); + pCtrl->SetName(Name); + return pCtrl; +} + +void TimerToolBar::Populate() +{ + mAudioTime = AddTime(XO("Audio Position"), AudioTimeID); + + Add(mAudioTime, 0, wxALIGN_CENTER); + + Layout(); + SetMinSize(GetSizer()->GetMinSize()); +} + +void TimerToolBar::UpdatePrefs() +{ + SetLabel(XO("TimerToolBar")); + ToolBar::UpdatePrefs(); +} + +void TimerToolBar::OnSize(wxSizeEvent & event) +{ + event.Skip(); + + int sh = GetSize().GetHeight() - 10; + + if (mAudioTime) + { + mAudioTime->SetDigitSize( sh*.63, sh ); + wxSize ms = mAudioTime->GetSize(); + //int mw = ms.GetWidth(); + //mAudioTime->SetMinSize(GetSizer()->GetMinSize()); + //printf("(size) %i %i\n", GetSizer()->GetSize()); + } + //SetMinSize( GetSizer()->GetMinSize() ); + //Layout(); + //Fit(); + + //Refresh(true); + //evt.Skip(); +} + +void TimerToolBar::SetTimes(double audio) +{ + mAudioTime->SetValue(audio); +} + +void TimerToolBar::OnFocus(wxFocusEvent &event) +{ + KeyboardCapture::OnFocus(*this, event); +} + +void TimerToolBar::OnCaptureKey(wxCommandEvent &event) +{ + wxKeyEvent *kevent = (wxKeyEvent *)event.GetEventObject(); + wxWindow *w = FindFocus(); + int keyCode = kevent->GetKeyCode(); + + // Convert numeric keypad entries. + if ((keyCode >= WXK_NUMPAD0) && (keyCode <= WXK_NUMPAD9)) { + keyCode -= WXK_NUMPAD0 - '0'; + } + + if (keyCode >= '0' && keyCode <= '9') { + return; + } + + event.Skip(); +} + +void TimerToolBar::SetDocked(ToolDock *dock, bool pushed) { + ToolBar::SetDocked(dock, pushed); + Fit(); +} + + +void TimerToolBar::OnSnapTo(wxCommandEvent & WXUNUSED(event)) +{ + mListener->AS_SetSnapTo(mSnapTo->GetSelection()); +} + +static RegisteredToolbarFactory factory{ TimerBarID, + []( AudacityProject &project ){ + return ToolBar::Holder{ safenew TimerToolBar{ project } }; } +}; diff --git a/src/toolbars/TimerToolBar.h b/src/toolbars/TimerToolBar.h new file mode 100644 index 000000000..8d22c62e1 --- /dev/null +++ b/src/toolbars/TimerToolBar.h @@ -0,0 +1,63 @@ +/********************************************************************** + + Audacity: A Digital Audio Editor + + TimerToolBar.h + + Jonatã Bolzan Loss + +**********************************************************************/ + +#ifndef __AUDACITY_BIG_COUNTER__ +#define __AUDACITY_BIG_COUNTER__ + +#include <wx/defs.h> + +#include "ToolBar.h" +#include "ToolManager.h" + +class SelectionBarListener; +class NumericTextCtrl; + +class TimerToolBar final : public ToolBar { + +public: + TimerToolBar(AudacityProject &project); + virtual ~TimerToolBar(); + + static TimerToolBar &Get(AudacityProject &project); + static const TimerToolBar &Get(const AudacityProject &project); + + void Create(wxWindow *parent) override; + + void Populate() override; + void Repaint(wxDC * WXUNUSED(dc)) override {}; + void EnableDisableButtons() override {}; + void UpdatePrefs() override; + + void SetTimes(double audio); + void RegenerateTooltips() override {}; + +private: + NumericTextCtrl * AddTime( const TranslatableString &Name, int id); + + void OnFocus(wxFocusEvent &event); + void OnCaptureKey(wxCommandEvent &event); + void OnSize(wxSizeEvent &evt); + void OnSnapTo(wxCommandEvent & event); + virtual void SetDocked(ToolDock *dock, bool pushed) override; + + SelectionBarListener * mListener; + double mRate; + double mAudio; + + NumericTextCtrl *mAudioTime; + wxChoice *mSnapTo; + +public: + + DECLARE_CLASS(TimerToolBar) + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/src/toolbars/ToolBar.h b/src/toolbars/ToolBar.h index 264b1beb6..8bc7fc0da 100644 --- a/src/toolbars/ToolBar.h +++ b/src/toolbars/ToolBar.h @@ -68,6 +68,7 @@ enum { NoBarID = -1, TransportBarID, + TimerBarID, ToolsBarID, MeterBarID, RecordMeterBarID, diff --git a/src/toolbars/ToolManager.cpp b/src/toolbars/ToolManager.cpp index 248844045..209f70118 100644 --- a/src/toolbars/ToolManager.cpp +++ b/src/toolbars/ToolManager.cpp @@ -178,7 +178,7 @@ void ToolFrame::OnPaint( wxPaintEvent & WXUNUSED(event) ) dc.SetPen( theTheme.Colour( clrTrackPanelText) ); #if !defined(__WXMAC__) wxBrush clearer( theTheme.Colour( clrMedium )); - dc.SetBackground( clearer ); + dc.SetBackground( clearer ); dc.Clear(); dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.DrawRectangle( 0, 0, sz.GetWidth(), sz.GetHeight() ); @@ -563,7 +563,7 @@ void ToolManager::Reset() } // Decide which dock. - if (ndx == SelectionBarID + if (ndx == SelectionBarID #ifdef EXPERIMENTAL_SPECTRAL_EDITING || ndx == SpectralSelectionBarID #endif @@ -631,7 +631,7 @@ void ToolManager::Reset() // This bar is undocked and invisible. // We are doing a reset toolbars, so even the invisible undocked bars should // be moved somewhere sensible. Put bar near center of window. - // If there were multiple hidden toobars the ndx * 10 adjustment means + // If there were multiple hidden toobars the ndx * 10 adjustment means // they won't overlap too much. floater->CentreOnParent( ); floater->Move( floater->GetPosition() + wxSize( ndx * 10 - 200, ndx * 10 )); @@ -721,7 +721,7 @@ void ToolManager::ReadConfig() { ToolBar *bar = mBars[ ndx ].get(); //wxPoint Center = mParent->GetPosition() + (mParent->GetSize() * 0.33); - //wxPoint Center( + //wxPoint Center( // wxSystemSettings::GetMetric( wxSYS_SCREEN_X ) /2 , // wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ) /2 ); @@ -730,18 +730,20 @@ void ToolManager::ReadConfig() bool bShownByDefault = true; int defaultDock = TopDockID; - + if( ndx == SelectionBarID ) defaultDock = BotDockID; if( ndx == MeterBarID ) bShownByDefault = false; if( ndx == ScrubbingBarID ) bShownByDefault = false; + if( ndx == TimerBarID ) + bShownByDefault = false; #ifdef EXPERIMENTAL_SPECTRAL_EDITING if( ndx == SpectralSelectionBarID ){ defaultDock = BotDockID; - bShownByDefault = false; // Only show if asked for. + bShownByDefault = false; // Only show if asked for. } #endif @@ -751,13 +753,13 @@ void ToolManager::ReadConfig() gPrefs->Read( wxT("Dock"), &dock, -1); // legacy version of DockV2 else gPrefs->Read( wxT("DockV2"), &dock, -1); - + const bool found = (dock != -1); if (found) someFound = true; if (!found) dock = defaultDock; - + ToolDock *d; ToolBarConfiguration::Legacy *pLegacy; switch(dock) @@ -833,7 +835,7 @@ void ToolManager::ReadConfig() #endif // make a note of docked and hidden toolbars if (!show[ndx]) - dockedAndHidden.push_back(bar); + dockedAndHidden.push_back(bar); if (!ordered) { @@ -955,7 +957,7 @@ void ToolManager::WriteConfig() // its value is compatible with versions 2.1.3 to 2.2.1 which have this bug. ToolDock* dock = bar->GetDock(); // dock for both shown and hidden toolbars gPrefs->Write( wxT("DockV2"), static_cast<int>(dock == mTopDock ? TopDockID : dock == mBotDock ? BotDockID : NoDockID )); - + gPrefs->Write( wxT("Dock"), static_cast<int>( to ? TopDockID : bo ? BotDockID : NoDockID)); dock = to ? mTopDock : bo ? mBotDock : nullptr; // dock for shown toolbars @@ -1184,11 +1186,11 @@ void ToolManager::OnMouse( wxMouseEvent & event ) br.SetPosition( mBotDock->GetParent()->ClientToScreen( br.GetPosition() ) ); - // Add half the bar height. We could use the actual bar height, but that would be confusing as a + // Add half the bar height. We could use the actual bar height, but that would be confusing as a // bar removed at a place might not dock back there if just let go. - // Also add 5 pixels in horizontal direction, so that a click without a move (or a very small move) + // Also add 5 pixels in horizontal direction, so that a click without a move (or a very small move) // lands back where we started. - pos += wxPoint( 5, 20 ); + pos += wxPoint( 5, 20 ); // To find which dock, rather than test against pos, test against the whole dragger rect. diff --git a/src/widgets/NumericTextCtrl.cpp b/src/widgets/NumericTextCtrl.cpp index 76f797451..7008463c5 100644 --- a/src/widgets/NumericTextCtrl.cpp +++ b/src/widgets/NumericTextCtrl.cpp @@ -1415,6 +1415,14 @@ void NumericTextCtrl::SetValue(double newValue) ControlsToValue(); } +void NumericTextCtrl::SetDigitSize(int width, int height) +{ + mDigitBoxW = width; + mDigitBoxH = height; + Layout(); + Fit(); +} + void NumericTextCtrl::SetReadOnly(bool readOnly) { mReadOnly = readOnly; diff --git a/src/widgets/NumericTextCtrl.h b/src/widgets/NumericTextCtrl.h index 2b6a6b6be..49af8d2ab 100644 --- a/src/widgets/NumericTextCtrl.h +++ b/src/widgets/NumericTextCtrl.h @@ -204,6 +204,7 @@ class NumericTextCtrl final : public wxControl, public NumericConverter void SetFieldFocus(int /* digit */); + void SetDigitSize(int width, int height); void SetReadOnly(bool readOnly = true); void EnableMenu(bool enable = true); diff --git a/win/Projects/Audacity/Audacity.vcxproj b/win/Projects/Audacity/Audacity.vcxproj index e5490e6e1..fdd5e5628 100755 --- a/win/Projects/Audacity/Audacity.vcxproj +++ b/win/Projects/Audacity/Audacity.vcxproj @@ -491,6 +491,7 @@ <ClCompile Include="..\..\..\src\toolbars\MeterToolBar.cpp" /> <ClCompile Include="..\..\..\src\toolbars\MixerToolBar.cpp" /> <ClCompile Include="..\..\..\src\toolbars\SelectionBar.cpp" /> + <ClCompile Include="..\..\..\src\toolbars\TimerToolBar.cpp" /> <ClCompile Include="..\..\..\src\toolbars\ToolBar.cpp" /> <ClCompile Include="..\..\..\src\toolbars\ToolDock.cpp" /> <ClCompile Include="..\..\..\src\toolbars\ToolManager.cpp" /> diff --git a/win/Projects/Audacity/Audacity.vcxproj.filters b/win/Projects/Audacity/Audacity.vcxproj.filters index b17d5072b..65176fccb 100755 --- a/win/Projects/Audacity/Audacity.vcxproj.filters +++ b/win/Projects/Audacity/Audacity.vcxproj.filters @@ -806,6 +806,9 @@ <ClCompile Include="..\..\..\src\toolbars\SelectionBar.cpp"> <Filter>src\toolbars</Filter> </ClCompile> + <ClCompile Include="..\..\..\src\toolbars\TimerToolBar.cpp"> + <Filter>src\toolbars</Filter> + </ClCompile> <ClCompile Include="..\..\..\src\toolbars\ToolBar.cpp"> <Filter>src\toolbars</Filter> </ClCompile>