Missing alias file tracking out of AudacityApp, into new files...
... which reduces the need for including AudacityApp.h
This commit is contained in:
parent
0ab29d21e9
commit
a047fa6e7a
|
@ -127,6 +127,8 @@ src/MemoryX.h
|
|||
src/Menus.cpp
|
||||
src/Menus.h
|
||||
src/MenusMac.cpp
|
||||
src/MissingAliasFileDialog.cpp
|
||||
src/MissingAliasFileDialog.h
|
||||
src/Mix.cpp
|
||||
src/Mix.h
|
||||
src/MixerBoard.cpp
|
||||
|
|
|
@ -1274,6 +1274,7 @@
|
|||
5EBD243D1F74C50800132E0A /* eu_ES.po in Sources */ = {isa = PBXBuildFile; fileRef = 5EBD243C1F74C50800132E0A /* eu_ES.po */; };
|
||||
5EBD35861F78D37A0084D13F /* pt_PT.po in Sources */ = {isa = PBXBuildFile; fileRef = 5EBD35851F78D37A0084D13F /* pt_PT.po */; };
|
||||
5EC7ED061E101C5C0052CAE2 /* NotYetAvailableException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EC7ED041E101C5C0052CAE2 /* NotYetAvailableException.cpp */; };
|
||||
5ECF728A22887B3B007F2A35 /* MissingAliasFileDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ECF728822887B3B007F2A35 /* MissingAliasFileDialog.cpp */; };
|
||||
5ED1D0AD1CDE55BD00471E3C /* Overlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0A91CDE55BD00471E3C /* Overlay.cpp */; };
|
||||
5ED1D0AE1CDE55BD00471E3C /* OverlayPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AB1CDE55BD00471E3C /* OverlayPanel.cpp */; };
|
||||
5ED1D0B11CDE560C00471E3C /* BackedPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AF1CDE560C00471E3C /* BackedPanel.cpp */; };
|
||||
|
@ -3285,6 +3286,8 @@
|
|||
5EC7ED041E101C5C0052CAE2 /* NotYetAvailableException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NotYetAvailableException.cpp; sourceTree = "<group>"; };
|
||||
5EC7ED051E101C5C0052CAE2 /* NotYetAvailableException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotYetAvailableException.h; sourceTree = "<group>"; };
|
||||
5ECCE7651DE49834009900E9 /* AudacityException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudacityException.h; sourceTree = "<group>"; };
|
||||
5ECF728822887B3B007F2A35 /* MissingAliasFileDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MissingAliasFileDialog.cpp; sourceTree = "<group>"; };
|
||||
5ECF728922887B3B007F2A35 /* MissingAliasFileDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MissingAliasFileDialog.h; sourceTree = "<group>"; };
|
||||
5ED18DB61CC16B1E00FAFE95 /* Reverb_libSoX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reverb_libSoX.h; sourceTree = "<group>"; };
|
||||
5ED18DB71CC290AB00FAFE95 /* wxFileNameWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wxFileNameWrapper.h; sourceTree = "<group>"; };
|
||||
5ED1D0A91CDE55BD00471E3C /* Overlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Overlay.cpp; sourceTree = "<group>"; };
|
||||
|
@ -4319,6 +4322,7 @@
|
|||
1865A9B61004490500946EE6 /* LyricsWindow.cpp */,
|
||||
28EBA7FF0A78FAF800C8BB1F /* Matrix.cpp */,
|
||||
1790B0A709883BFD008A330A /* Menus.cpp */,
|
||||
5ECF728822887B3B007F2A35 /* MissingAliasFileDialog.cpp */,
|
||||
1790B0AB09883BFD008A330A /* Mix.cpp */,
|
||||
289E75081006D0BD00CEF79B /* MixerBoard.cpp */,
|
||||
280A8B4519F4403B0091DE70 /* ModuleManager.cpp */,
|
||||
|
@ -4425,6 +4429,7 @@
|
|||
28EBA8000A78FAF800C8BB1F /* Matrix.h */,
|
||||
5E61EE0C1CBAA6BB0009FCF1 /* MemoryX.h */,
|
||||
1790B0A809883BFD008A330A /* Menus.h */,
|
||||
5ECF728922887B3B007F2A35 /* MissingAliasFileDialog.h */,
|
||||
1790B0AC09883BFD008A330A /* Mix.h */,
|
||||
289E75091006D0BD00CEF79B /* MixerBoard.h */,
|
||||
280A8B4619F4403B0091DE70 /* ModuleManager.h */,
|
||||
|
@ -8528,6 +8533,7 @@
|
|||
28884949131B6CF600B59735 /* ca.po in Sources */,
|
||||
2888494A131B6CF600B59735 /* ca_ES@valencia.po in Sources */,
|
||||
2888494B131B6CF600B59735 /* cs.po in Sources */,
|
||||
5ECF728A22887B3B007F2A35 /* MissingAliasFileDialog.cpp in Sources */,
|
||||
2888494C131B6CF600B59735 /* cy.po in Sources */,
|
||||
2888494D131B6CF600B59735 /* da.po in Sources */,
|
||||
2888494E131B6CF600B59735 /* de.po in Sources */,
|
||||
|
|
|
@ -83,6 +83,7 @@ It handles initialization and termination by subclassing wxApp.
|
|||
#include "LangChoice.h"
|
||||
#include "Languages.h"
|
||||
#include "Menus.h"
|
||||
#include "MissingAliasFileDialog.h"
|
||||
#include "PluginManager.h"
|
||||
#include "Project.h"
|
||||
#include "Screenshot.h"
|
||||
|
@ -881,18 +882,13 @@ void AudacityApp::OnTimer(wxTimerEvent& WXUNUSED(event))
|
|||
}
|
||||
|
||||
// Check if a warning for missing aliased files should be displayed
|
||||
if (ShouldShowMissingAliasFilesWarning()) {
|
||||
if (MissingAliasFilesDialog::ShouldShow()) {
|
||||
// find which project owns the blockfile
|
||||
// note: there may be more than 1, but just go with the first one.
|
||||
//size_t numProjects = gAudacityProjects.size();
|
||||
AProjectHolder offendingProject;
|
||||
wxString missingFileName;
|
||||
|
||||
{
|
||||
ODLocker locker { &m_LastMissingBlockFileLock };
|
||||
offendingProject = m_LastMissingBlockFileProject.lock();
|
||||
missingFileName = m_LastMissingBlockFilePath;
|
||||
}
|
||||
auto marked = MissingAliasFilesDialog::Marked();
|
||||
AProjectHolder offendingProject = marked.second;
|
||||
wxString missingFileName = marked.first;
|
||||
|
||||
// if there are no projects open, don't show the warning (user has closed it)
|
||||
if (offendingProject) {
|
||||
|
@ -914,57 +910,15 @@ locations of the missing files."), missingFileName);
|
|||
if (offendingProject->GetMissingAliasFileDialog()) {
|
||||
offendingProject->GetMissingAliasFileDialog()->Raise();
|
||||
} else {
|
||||
ShowMissingAliasFilesDialog(offendingProject.get(), _("Files Missing"),
|
||||
MissingAliasFilesDialog::Show(offendingProject.get(), _("Files Missing"),
|
||||
errorMessage, wxT(""), true);
|
||||
}
|
||||
}
|
||||
// Only show this warning once per event (playback/menu item/etc).
|
||||
SetMissingAliasFilesWarningShouldShow(false);
|
||||
MissingAliasFilesDialog::SetShouldShow(false);
|
||||
}
|
||||
}
|
||||
|
||||
void AudacityApp::MarkMissingAliasFilesWarning(const AliasBlockFile *b)
|
||||
{
|
||||
ODLocker locker { &m_LastMissingBlockFileLock };
|
||||
if (b) {
|
||||
size_t numProjects = gAudacityProjects.size();
|
||||
for (size_t ii = 0; ii < numProjects; ++ii) {
|
||||
// search each project for the blockfile
|
||||
if (gAudacityProjects[ii]->GetDirManager()->ContainsBlockFile(b)) {
|
||||
m_LastMissingBlockFileProject = gAudacityProjects[ii];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
m_LastMissingBlockFileProject = {};
|
||||
|
||||
if (b)
|
||||
m_LastMissingBlockFilePath = b->GetAliasedFileName().GetFullPath();
|
||||
else
|
||||
m_LastMissingBlockFilePath = wxString{};
|
||||
}
|
||||
|
||||
void AudacityApp::SetMissingAliasFilesWarningShouldShow(bool b)
|
||||
{
|
||||
// Note that this is can be called by both the main thread and other threads.
|
||||
// I don't believe we need a mutex because we are checking zero vs non-zero,
|
||||
// and the setting from other threads will always be non-zero (true), and the
|
||||
// setting from the main thread is always false.
|
||||
m_missingAliasFilesWarningShouldShow = b;
|
||||
// reset the warnings as they were probably marked by a previous run
|
||||
if (m_missingAliasFilesWarningShouldShow) {
|
||||
MarkMissingAliasFilesWarning( nullptr );
|
||||
}
|
||||
}
|
||||
|
||||
bool AudacityApp::ShouldShowMissingAliasFilesWarning()
|
||||
{
|
||||
ODLocker locker { &m_LastMissingBlockFileLock };
|
||||
auto ptr = m_LastMissingBlockFileProject.lock();
|
||||
return ptr && m_missingAliasFilesWarningShouldShow;
|
||||
}
|
||||
|
||||
AudacityLogger *AudacityApp::GetLogger()
|
||||
{
|
||||
// Use dynamic_cast so that we get a NULL ptr if we haven't yet
|
||||
|
@ -1284,8 +1238,6 @@ bool AudacityApp::OnInit()
|
|||
|
||||
mLocale = NULL;
|
||||
|
||||
m_missingAliasFilesWarningShouldShow = true;
|
||||
|
||||
#if defined(__WXMAC__)
|
||||
// Disable window animation
|
||||
wxSystemOptions::SetOption(wxMAC_WINDOW_PLAIN_TRANSITION, 1);
|
||||
|
|
|
@ -23,12 +23,12 @@
|
|||
#include <wx/dir.h> // for wxDIR_FILES
|
||||
#include <wx/timer.h> // member variable
|
||||
|
||||
#include "ondemand/ODTaskThread.h"
|
||||
|
||||
#if defined(EXPERIMENTAL_CRASH_REPORT)
|
||||
#include <wx/debugrpt.h> // for wxDebugReport::Context
|
||||
#endif
|
||||
|
||||
#include "MemoryX.h"
|
||||
|
||||
class wxSingleInstanceChecker;
|
||||
class wxSocketEvent;
|
||||
class wxSocketServer;
|
||||
|
@ -47,7 +47,6 @@ void QuitAudacity();
|
|||
|
||||
extern bool gIsQuitting;
|
||||
|
||||
class BlockFile;
|
||||
class AliasBlockFile;
|
||||
|
||||
class AudacityApp final : public wxApp {
|
||||
|
@ -103,22 +102,6 @@ class AudacityApp final : public wxApp {
|
|||
void OnServerEvent(wxSocketEvent & evt);
|
||||
void OnSocketEvent(wxSocketEvent & evt);
|
||||
|
||||
/** \brief Mark playback as having missing aliased blockfiles
|
||||
*
|
||||
* Playback will continue, but the missing files will be silenced
|
||||
* ShouldShowMissingAliasFilesWarning can be called to determine
|
||||
* if the user should be notified
|
||||
*/
|
||||
void MarkMissingAliasFilesWarning(const AliasBlockFile *b);
|
||||
|
||||
/** \brief Changes the behavior of missing aliased blockfiles warnings
|
||||
*/
|
||||
void SetMissingAliasFilesWarningShouldShow(bool b);
|
||||
|
||||
/** \brief Returns true if the user should be notified of missing alias warnings
|
||||
*/
|
||||
bool ShouldShowMissingAliasFilesWarning();
|
||||
|
||||
#ifdef __WXMAC__
|
||||
// In response to Apple Events
|
||||
void MacOpenFile(const wxString &fileName) override;
|
||||
|
@ -185,12 +168,6 @@ class AudacityApp final : public wxApp {
|
|||
|
||||
wxTimer mTimer;
|
||||
|
||||
bool m_missingAliasFilesWarningShouldShow;
|
||||
std::weak_ptr< AudacityProject > m_LastMissingBlockFileProject;
|
||||
wxString m_LastMissingBlockFilePath;
|
||||
|
||||
ODLock m_LastMissingBlockFileLock;
|
||||
|
||||
void InitCommandHandler();
|
||||
|
||||
bool InitTempDir();
|
||||
|
|
|
@ -438,6 +438,7 @@ TimeTrack and AudioIOListener and whether the playback is looped.
|
|||
#include "portmixer.h"
|
||||
#endif
|
||||
|
||||
#include <wx/app.h>
|
||||
#include <wx/wxcrtvararg.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/textctrl.h>
|
||||
|
@ -447,7 +448,7 @@ TimeTrack and AudioIOListener and whether the playback is looped.
|
|||
#include <wx/sstream.h>
|
||||
#include <wx/txtstrm.h>
|
||||
|
||||
#include "AudacityApp.h"
|
||||
#include "MissingAliasFileDialog.h"
|
||||
#include "Mix.h"
|
||||
#include "Resample.h"
|
||||
#include "RingBuffer.h"
|
||||
|
@ -2058,7 +2059,7 @@ int AudioIO::StartStream(const TransportTracks &tracks,
|
|||
}
|
||||
|
||||
// Enable warning popups for unfound aliased blockfiles.
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
|
||||
commit = true;
|
||||
return mStreamToken;
|
||||
|
|
|
@ -53,7 +53,7 @@ out.
|
|||
#include "sndfile.h"
|
||||
#include "FileException.h"
|
||||
#include "FileFormats.h"
|
||||
#include "AudacityApp.h"
|
||||
#include "MissingAliasFileDialog.h"
|
||||
|
||||
// msmeyer: Define this to add debug output via wxPrintf()
|
||||
//#define DEBUG_BLOCKFILE
|
||||
|
@ -537,8 +537,8 @@ size_t BlockFile::CommonReadData(
|
|||
|
||||
if (pAliasFile) {
|
||||
// Set a marker to display an error message for the silence
|
||||
if (!wxGetApp().ShouldShowMissingAliasFilesWarning())
|
||||
wxGetApp().MarkMissingAliasFilesWarning(pAliasFile);
|
||||
if (!MissingAliasFilesDialog::ShouldShow())
|
||||
MissingAliasFilesDialog::Mark(pAliasFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,6 @@
|
|||
|
||||
#include <wx/wxcrtvararg.h>
|
||||
#include <wx/defs.h>
|
||||
#include <wx/app.h>
|
||||
#include <wx/dir.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/filefn.h>
|
||||
|
@ -86,7 +85,6 @@
|
|||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#include "AudacityApp.h"
|
||||
#include "Clipboard.h"
|
||||
#include "FileNames.h"
|
||||
#include "blockfile/LegacyBlockFile.h"
|
||||
|
@ -95,6 +93,7 @@
|
|||
#include "blockfile/ODPCMAliasBlockFile.h"
|
||||
#include "blockfile/ODDecodeBlockFile.h"
|
||||
#include "InconsistencyException.h"
|
||||
#include "MissingAliasFileDialog.h"
|
||||
#include "Project.h"
|
||||
#include "Prefs.h"
|
||||
#include "Sequence.h"
|
||||
|
@ -1702,7 +1701,7 @@ int DirManager::ProjectFSCK(const bool bForceError, const bool bAutoRecoverMode)
|
|||
//
|
||||
// MISSING ALIASED AUDIO FILES
|
||||
//
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(false);
|
||||
MissingAliasFilesDialog::SetShouldShow(false);
|
||||
BlockHash missingAliasFilesAUFHash; // (.auf) AliasBlockFiles whose aliased files are missing
|
||||
BlockHash missingAliasFilesPathHash; // full paths of missing aliased files
|
||||
this->FindMissingAliasFiles(missingAliasFilesAUFHash, missingAliasFilesPathHash);
|
||||
|
@ -2006,7 +2005,7 @@ other projects. \
|
|||
wxOK | wxICON_EXCLAMATION);
|
||||
}
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
return nResult;
|
||||
}
|
||||
|
||||
|
|
|
@ -182,6 +182,8 @@ audacity_SOURCES = \
|
|||
MemoryX.h \
|
||||
Menus.cpp \
|
||||
Menus.h \
|
||||
MissingAliasFileDialog.cpp \
|
||||
MissingAliasFileDialog.h \
|
||||
Mix.cpp \
|
||||
Mix.h \
|
||||
MixerBoard.cpp \
|
||||
|
|
|
@ -312,7 +312,8 @@ am__audacity_SOURCES_DIST = BlockFile.cpp BlockFile.h DirManager.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 MemoryX.h Menus.cpp Menus.h \
|
||||
Mix.cpp Mix.h MixerBoard.cpp MixerBoard.h ModuleManager.cpp \
|
||||
MissingAliasFileDialog.cpp MissingAliasFileDialog.h Mix.cpp \
|
||||
Mix.h MixerBoard.cpp MixerBoard.h ModuleManager.cpp \
|
||||
ModuleManager.h NumberScale.h PitchName.cpp PitchName.h \
|
||||
PlatformCompatibility.cpp PlatformCompatibility.h \
|
||||
PluginManager.cpp PluginManager.h Printing.cpp Printing.h \
|
||||
|
@ -648,9 +649,10 @@ am_audacity_OBJECTS = $(am__objects_1) audacity-AboutDialog.$(OBJEXT) \
|
|||
audacity-LangChoice.$(OBJEXT) audacity-Languages.$(OBJEXT) \
|
||||
audacity-Legacy.$(OBJEXT) audacity-Lyrics.$(OBJEXT) \
|
||||
audacity-LyricsWindow.$(OBJEXT) audacity-Matrix.$(OBJEXT) \
|
||||
audacity-Menus.$(OBJEXT) audacity-Mix.$(OBJEXT) \
|
||||
audacity-MixerBoard.$(OBJEXT) audacity-ModuleManager.$(OBJEXT) \
|
||||
audacity-PitchName.$(OBJEXT) \
|
||||
audacity-Menus.$(OBJEXT) \
|
||||
audacity-MissingAliasFileDialog.$(OBJEXT) \
|
||||
audacity-Mix.$(OBJEXT) audacity-MixerBoard.$(OBJEXT) \
|
||||
audacity-ModuleManager.$(OBJEXT) audacity-PitchName.$(OBJEXT) \
|
||||
audacity-PlatformCompatibility.$(OBJEXT) \
|
||||
audacity-PluginManager.$(OBJEXT) audacity-Printing.$(OBJEXT) \
|
||||
audacity-Profiler.$(OBJEXT) audacity-Project.$(OBJEXT) \
|
||||
|
@ -1243,7 +1245,6 @@ pdfdir = @pdfdir@
|
|||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
|
@ -1362,7 +1363,8 @@ audacity_SOURCES = $(libaudacity_la_SOURCES) AboutDialog.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 MemoryX.h Menus.cpp Menus.h \
|
||||
Mix.cpp Mix.h MixerBoard.cpp MixerBoard.h ModuleManager.cpp \
|
||||
MissingAliasFileDialog.cpp MissingAliasFileDialog.h Mix.cpp \
|
||||
Mix.h MixerBoard.cpp MixerBoard.h ModuleManager.cpp \
|
||||
ModuleManager.h NumberScale.h PitchName.cpp PitchName.h \
|
||||
PlatformCompatibility.cpp PlatformCompatibility.h \
|
||||
PluginManager.cpp PluginManager.h Printing.cpp Printing.h \
|
||||
|
@ -2522,6 +2524,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-LyricsWindow.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Matrix.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Menus.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-MissingAliasFileDialog.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-Mix.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-MixerBoard.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audacity-ModuleManager.Po@am__quote@
|
||||
|
@ -3764,6 +3767,20 @@ audacity-Menus.obj: Menus.cpp
|
|||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-Menus.obj `if test -f 'Menus.cpp'; then $(CYGPATH_W) 'Menus.cpp'; else $(CYGPATH_W) '$(srcdir)/Menus.cpp'; fi`
|
||||
|
||||
audacity-MissingAliasFileDialog.o: MissingAliasFileDialog.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-MissingAliasFileDialog.o -MD -MP -MF $(DEPDIR)/audacity-MissingAliasFileDialog.Tpo -c -o audacity-MissingAliasFileDialog.o `test -f 'MissingAliasFileDialog.cpp' || echo '$(srcdir)/'`MissingAliasFileDialog.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-MissingAliasFileDialog.Tpo $(DEPDIR)/audacity-MissingAliasFileDialog.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MissingAliasFileDialog.cpp' object='audacity-MissingAliasFileDialog.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-MissingAliasFileDialog.o `test -f 'MissingAliasFileDialog.cpp' || echo '$(srcdir)/'`MissingAliasFileDialog.cpp
|
||||
|
||||
audacity-MissingAliasFileDialog.obj: MissingAliasFileDialog.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-MissingAliasFileDialog.obj -MD -MP -MF $(DEPDIR)/audacity-MissingAliasFileDialog.Tpo -c -o audacity-MissingAliasFileDialog.obj `if test -f 'MissingAliasFileDialog.cpp'; then $(CYGPATH_W) 'MissingAliasFileDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/MissingAliasFileDialog.cpp'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-MissingAliasFileDialog.Tpo $(DEPDIR)/audacity-MissingAliasFileDialog.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MissingAliasFileDialog.cpp' object='audacity-MissingAliasFileDialog.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -c -o audacity-MissingAliasFileDialog.obj `if test -f 'MissingAliasFileDialog.cpp'; then $(CYGPATH_W) 'MissingAliasFileDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/MissingAliasFileDialog.cpp'; fi`
|
||||
|
||||
audacity-Mix.o: Mix.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(audacity_CPPFLAGS) $(CPPFLAGS) $(audacity_CXXFLAGS) $(CXXFLAGS) -MT audacity-Mix.o -MD -MP -MF $(DEPDIR)/audacity-Mix.Tpo -c -o audacity-Mix.o `test -f 'Mix.cpp' || echo '$(srcdir)/'`Mix.cpp
|
||||
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/audacity-Mix.Tpo $(DEPDIR)/audacity-Mix.Po
|
||||
|
|
|
@ -0,0 +1,133 @@
|
|||
/*********************************************************************
|
||||
|
||||
\class MissingAliasFileDialog
|
||||
\brief Special case of ErrorDialog for reporting missing alias files.
|
||||
|
||||
*//*******************************************************************/
|
||||
|
||||
#include "MissingAliasFileDialog.h"
|
||||
|
||||
#include <mutex>
|
||||
|
||||
#include "BlockFile.h"
|
||||
#include "DirManager.h"
|
||||
#include "Project.h"
|
||||
#include "widgets/ErrorDialog.h"
|
||||
|
||||
// special case for alias missing dialog because we keep track of if it exists.
|
||||
class MissingAliasFileDialog final : public ErrorDialog
|
||||
{
|
||||
public:
|
||||
MissingAliasFileDialog(AudacityProject *parent,
|
||||
const wxString & dlogTitle,
|
||||
const wxString & message,
|
||||
const wxString & helpURL,
|
||||
const bool Close = true, const bool modal = true);
|
||||
virtual ~MissingAliasFileDialog();
|
||||
};
|
||||
|
||||
|
||||
MissingAliasFileDialog::MissingAliasFileDialog(AudacityProject *parent,
|
||||
const wxString & dlogTitle,
|
||||
const wxString & message,
|
||||
const wxString & helpURL,
|
||||
const bool Close, const bool modal):
|
||||
ErrorDialog(parent, dlogTitle, message, helpURL, Close, modal)
|
||||
{
|
||||
parent->SetMissingAliasFileDialog(this);
|
||||
}
|
||||
|
||||
MissingAliasFileDialog::~MissingAliasFileDialog()
|
||||
{
|
||||
static_cast<AudacityProject *>(GetParent())
|
||||
->SetMissingAliasFileDialog( nullptr );
|
||||
}
|
||||
|
||||
namespace MissingAliasFilesDialog {
|
||||
|
||||
namespace{
|
||||
bool m_missingAliasFilesWarningShouldShow{ true };
|
||||
std::weak_ptr< AudacityProject > m_LastMissingBlockFileProject;
|
||||
wxString m_LastMissingBlockFilePath;
|
||||
std::mutex m_LastMissingBlockFileLock;
|
||||
}
|
||||
|
||||
using Lock = std::unique_lock< std::mutex >;
|
||||
|
||||
void Show(AudacityProject *parent,
|
||||
const wxString &dlogTitle,
|
||||
const wxString &message,
|
||||
const wxString &helpPage,
|
||||
const bool Close)
|
||||
{
|
||||
wxASSERT(parent); // to justify safenew
|
||||
ErrorDialog *dlog = safenew MissingAliasFileDialog(parent, dlogTitle, message, helpPage, Close, false);
|
||||
// Don't center because in many cases (effect, export, etc) there will be a progress bar in the center that blocks this.
|
||||
// instead put it just above or on the top of the project.
|
||||
wxPoint point;
|
||||
point.x = 0;
|
||||
|
||||
point.y = parent ? parent->GetPosition().y - 200 : 100;
|
||||
|
||||
if (point.y < 100)
|
||||
point.y = 100;
|
||||
dlog->SetPosition(point);
|
||||
dlog->CentreOnParent(wxHORIZONTAL);
|
||||
|
||||
// This needs to be modeless because user may need to
|
||||
// stop playback AND read dialog's instructions.
|
||||
dlog->Show();
|
||||
// ANSWER-ME: Vigilant Sentry flags this method as not deleting dlog, so a mem leak.
|
||||
// PRL: answer is that the parent window guarantees destruction of the dialog
|
||||
// but in practice Destroy() in OnOK does that
|
||||
}
|
||||
|
||||
void Mark(const AliasBlockFile *b)
|
||||
{
|
||||
Lock lock{ m_LastMissingBlockFileLock };
|
||||
if (b) {
|
||||
size_t numProjects = gAudacityProjects.size();
|
||||
for (size_t ii = 0; ii < numProjects; ++ii) {
|
||||
// search each project for the blockfile
|
||||
if (gAudacityProjects[ii]->GetDirManager()->ContainsBlockFile(b)) {
|
||||
m_LastMissingBlockFileProject = gAudacityProjects[ii];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
m_LastMissingBlockFileProject = {};
|
||||
|
||||
if (b)
|
||||
m_LastMissingBlockFilePath = b->GetAliasedFileName().GetFullPath();
|
||||
else
|
||||
m_LastMissingBlockFilePath = wxString{};
|
||||
}
|
||||
|
||||
std::pair< wxString, std::shared_ptr<AudacityProject> > Marked()
|
||||
{
|
||||
Lock lock{ m_LastMissingBlockFileLock };
|
||||
return { m_LastMissingBlockFilePath, m_LastMissingBlockFileProject.lock() };
|
||||
}
|
||||
|
||||
bool ShouldShow()
|
||||
{
|
||||
Lock lock{ m_LastMissingBlockFileLock };
|
||||
auto ptr = m_LastMissingBlockFileProject.lock();
|
||||
return ptr && m_missingAliasFilesWarningShouldShow;
|
||||
}
|
||||
|
||||
void SetShouldShow(bool b)
|
||||
{
|
||||
// Note that this is can be called by both the main thread and other threads.
|
||||
// I don't believe we need a mutex because we are checking zero vs non-zero,
|
||||
// and the setting from other threads will always be non-zero (true), and the
|
||||
// setting from the main thread is always false.
|
||||
m_missingAliasFilesWarningShouldShow = b;
|
||||
// reset the warnings as they were probably marked by a previous run
|
||||
if (m_missingAliasFilesWarningShouldShow) {
|
||||
Mark( nullptr );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#ifndef __AUDACITY_MISSING_ALIAS_FILES_DIALOG__
|
||||
#define __AUDACITY_MISSING_ALIAS_FILES_DIALOG__
|
||||
|
||||
class AliasBlockFile;
|
||||
class AudacityProject;
|
||||
class wxDialog;
|
||||
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <wx/string.h>
|
||||
|
||||
namespace MissingAliasFilesDialog {
|
||||
|
||||
/** \brief Mark playback as having missing aliased blockfiles
|
||||
*
|
||||
* Playback will continue, but the missing files will be silenced
|
||||
* ShouldShow can be called to determine
|
||||
* if the user should be notified
|
||||
*/
|
||||
void Mark(const AliasBlockFile *b);
|
||||
|
||||
// Retrieve information left by Mark
|
||||
std::pair< wxString, std::shared_ptr<AudacityProject> > Marked();
|
||||
|
||||
/** \brief Changes the behavior of missing aliased blockfiles warnings
|
||||
*/
|
||||
void SetShouldShow(bool b);
|
||||
|
||||
/** \brief Returns true if the user should be notified of missing alias warnings
|
||||
*/
|
||||
bool ShouldShow();
|
||||
|
||||
/// Displays a custom modeless error dialog for aliased file errors
|
||||
void Show(AudacityProject *parent,
|
||||
const wxString &dlogTitle,
|
||||
const wxString &message,
|
||||
const wxString &helpPage,
|
||||
const bool Close = true);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -113,6 +113,7 @@ scroll information. It also has some status flags.
|
|||
#include "Legacy.h"
|
||||
#include "LyricsWindow.h"
|
||||
#include "Menus.h"
|
||||
#include "MissingAliasFileDialog.h"
|
||||
#include "Mix.h"
|
||||
#include "NoteTrack.h"
|
||||
#include "Prefs.h"
|
||||
|
@ -1023,7 +1024,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id,
|
|||
mStatusBar->SetName(wxT("status_line")); // not localized
|
||||
mProjectNo = mProjectCounter++; // Bug 322
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
|
||||
// MM: DirManager is created dynamically, freed on demand via ref-counting
|
||||
// MM: We don't need to Ref() here because it start with refcount=1
|
||||
|
@ -5278,7 +5279,7 @@ bool AudacityProject::ExportFromTimerRecording(wxFileName fnFile, int iFormat, i
|
|||
{
|
||||
Exporter e;
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
return e.ProcessFromTimerRecording(this, false, 0.0, mTracks->GetEndTime(), fnFile, iFormat, iSubFormat, iFilterIndex);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#include "../Audacity.h" // for USE_* macros
|
||||
#include "../Experimental.h"
|
||||
|
||||
#include "../AudacityApp.h"
|
||||
#include "../BatchCommands.h"
|
||||
#include "../FileNames.h"
|
||||
#include "../LabelTrack.h"
|
||||
#include "../MissingAliasFileDialog.h"
|
||||
#include "../NoteTrack.h"
|
||||
#include "../Prefs.h"
|
||||
#include "../Printing.h"
|
||||
|
@ -33,7 +33,7 @@ void DoExport
|
|||
|
||||
Exporter e;
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
double t0 = 0.0;
|
||||
double t1 = tracks->GetEndTime();
|
||||
|
||||
|
@ -231,7 +231,7 @@ void OnExportSelection(const CommandContext &context)
|
|||
auto &selectedRegion = project.GetViewInfo().selectedRegion;
|
||||
Exporter e;
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
e.SetFileDialogTitle( _("Export Selected Audio") );
|
||||
e.Process(&project, true, selectedRegion.t0(),
|
||||
selectedRegion.t1());
|
||||
|
@ -303,7 +303,7 @@ void OnExportMultiple(const CommandContext &context)
|
|||
auto &project = context.project;
|
||||
ExportMultiple em(&project);
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
em.ShowModal();
|
||||
}
|
||||
|
||||
|
@ -396,7 +396,7 @@ void OnImport(const CommandContext &context)
|
|||
|
||||
// An import trigger for the alias missing dialog might not be intuitive, but
|
||||
// this serves to track the file if the users zooms in and such.
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
|
||||
wxArrayString selectedFiles = project.ShowOpenDialog(wxT(""));
|
||||
if (selectedFiles.size() == 0) {
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#include "../Audacity.h"
|
||||
#include "../Experimental.h"
|
||||
|
||||
#include "../AudacityApp.h"
|
||||
#include "../AudioIO.h"
|
||||
#include "../BatchProcessDialog.h"
|
||||
#include "../Benchmark.h"
|
||||
#include "../FreqWindow.h"
|
||||
#include "../Menus.h"
|
||||
#include "../MissingAliasFileDialog.h"
|
||||
#include "../PluginManager.h"
|
||||
#include "../Prefs.h"
|
||||
#include "../Project.h"
|
||||
|
@ -412,7 +412,7 @@ bool DoEffect(
|
|||
project.SelectAllIfNone();
|
||||
}
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
|
||||
auto nTracksOriginally = project.GetTrackCount();
|
||||
wxWindow *focus = wxWindow::FindFocus();
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#include "../Audacity.h"
|
||||
#include "../Experimental.h"
|
||||
|
||||
#include "../AudacityApp.h"
|
||||
#include "../LabelTrack.h"
|
||||
#include "../Menus.h"
|
||||
#include "../MissingAliasFileDialog.h"
|
||||
#include "../Mix.h"
|
||||
|
||||
#include "../Prefs.h"
|
||||
|
@ -43,7 +43,7 @@ void DoMixAndRender
|
|||
auto defaultFormat = project.GetDefaultFormat();
|
||||
auto trackPanel = project.GetTrackPanel();
|
||||
|
||||
wxGetApp().SetMissingAliasFilesWarningShouldShow(true);
|
||||
MissingAliasFilesDialog::SetShouldShow(true);
|
||||
|
||||
WaveTrack::Holder uNewLeft, uNewRight;
|
||||
::MixAndRender(
|
||||
|
|
|
@ -12,16 +12,12 @@
|
|||
\class ErrorDialog
|
||||
\brief Gives an Error message with an option for help.
|
||||
|
||||
*//*****************************************************************//**
|
||||
|
||||
\class MissingAliasFileDialog
|
||||
\brief Special case of ErrorDialog for reporting missing alias files.
|
||||
|
||||
*//********************************************************************/
|
||||
|
||||
#include "../Audacity.h"
|
||||
#include "ErrorDialog.h"
|
||||
|
||||
#include <wx/app.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/dialog.h>
|
||||
|
@ -37,43 +33,14 @@
|
|||
#include "../AllThemeResources.h"
|
||||
#include "../ShuttleGui.h"
|
||||
#include "../HelpText.h"
|
||||
#include "../Project.h"
|
||||
#include "../Prefs.h"
|
||||
#include "HelpSystem.h"
|
||||
|
||||
// special case for alias missing dialog because we keep track of if it exists.
|
||||
class MissingAliasFileDialog final : public ErrorDialog
|
||||
{
|
||||
public:
|
||||
MissingAliasFileDialog(AudacityProject *parent,
|
||||
const wxString & dlogTitle,
|
||||
const wxString & message,
|
||||
const wxString & helpURL,
|
||||
const bool Close = true, const bool modal = true);
|
||||
virtual ~MissingAliasFileDialog();
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ErrorDialog, wxDialogWrapper)
|
||||
EVT_BUTTON( wxID_OK, ErrorDialog::OnOk)
|
||||
EVT_BUTTON( wxID_HELP, ErrorDialog::OnHelp)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
MissingAliasFileDialog::MissingAliasFileDialog(AudacityProject *parent,
|
||||
const wxString & dlogTitle,
|
||||
const wxString & message,
|
||||
const wxString & helpURL,
|
||||
const bool Close, const bool modal):
|
||||
ErrorDialog(parent, dlogTitle, message, helpURL, Close, modal)
|
||||
{
|
||||
parent->SetMissingAliasFileDialog(this);
|
||||
}
|
||||
|
||||
MissingAliasFileDialog::~MissingAliasFileDialog()
|
||||
{
|
||||
((AudacityProject*)GetParent())->SetMissingAliasFileDialog(NULL);
|
||||
}
|
||||
|
||||
ErrorDialog::ErrorDialog(
|
||||
wxWindow *parent,
|
||||
const wxString & dlogTitle,
|
||||
|
@ -202,34 +169,6 @@ void ShowModelessErrorDialog(wxWindow *parent,
|
|||
// but in practice Destroy() in OnOK does that
|
||||
}
|
||||
|
||||
void ShowMissingAliasFilesDialog(AudacityProject *parent,
|
||||
const wxString &dlogTitle,
|
||||
const wxString &message,
|
||||
const wxString &helpPage,
|
||||
const bool Close)
|
||||
{
|
||||
wxASSERT(parent); // to justify safenew
|
||||
ErrorDialog *dlog = safenew MissingAliasFileDialog(parent, dlogTitle, message, helpPage, Close, false);
|
||||
// Don't center because in many cases (effect, export, etc) there will be a progress bar in the center that blocks this.
|
||||
// instead put it just above or on the top of the project.
|
||||
wxPoint point;
|
||||
point.x = 0;
|
||||
|
||||
point.y = parent ? parent->GetPosition().y - 200 : 100;
|
||||
|
||||
if (point.y < 100)
|
||||
point.y = 100;
|
||||
dlog->SetPosition(point);
|
||||
dlog->CentreOnParent(wxHORIZONTAL);
|
||||
|
||||
// This needs to be modeless because user may need to
|
||||
// stop playback AND read dialog's instructions.
|
||||
dlog->Show();
|
||||
// ANSWER-ME: Vigilant Sentry flags this method as not deleting dlog, so a mem leak.
|
||||
// PRL: answer is that the parent window guarantees destruction of the dialog
|
||||
// but in practice Destroy() in OnOK does that
|
||||
}
|
||||
|
||||
extern wxString AudacityMessageBoxCaptionStr()
|
||||
{
|
||||
return _("Message");
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include <wx/msgdlg.h> // to inherit
|
||||
#include "wxPanelWrapper.h" // to inherit
|
||||
|
||||
class AliasBlockFile;
|
||||
|
||||
class AudacityProject;
|
||||
|
||||
class ErrorDialog /* not final */ : public wxDialogWrapper
|
||||
|
@ -56,13 +58,6 @@ void ShowModelessErrorDialog(wxWindow *parent,
|
|||
const wxString &helpPage,
|
||||
bool Close = true);
|
||||
|
||||
/// Displays a custom modeless error dialog for aliased file errors
|
||||
void ShowMissingAliasFilesDialog(AudacityProject *parent,
|
||||
const wxString &dlogTitle,
|
||||
const wxString &message,
|
||||
const wxString &helpPage,
|
||||
const bool Close = true);
|
||||
|
||||
extern wxString AudacityMessageBoxCaptionStr();
|
||||
|
||||
// Do not use wxMessageBox!! Its default window title does not translate!
|
||||
|
|
|
@ -202,6 +202,7 @@
|
|||
<ClCompile Include="..\..\..\src\menus\TransportMenus.cpp" />
|
||||
<ClCompile Include="..\..\..\src\menus\ViewMenus.cpp" />
|
||||
<ClCompile Include="..\..\..\src\menus\WindowMenus.cpp" />
|
||||
<ClCompile Include="..\..\..\src\MissingAliasFileDialog.cpp" />
|
||||
<ClCompile Include="..\..\..\src\Mix.cpp" />
|
||||
<ClCompile Include="..\..\..\src\MixerBoard.cpp" />
|
||||
<ClCompile Include="..\..\..\lib-src\lib-widget-extra\NonGuiThread.cpp" />
|
||||
|
@ -625,6 +626,7 @@
|
|||
<ClInclude Include="..\..\..\src\MacroMagic.h" />
|
||||
<ClInclude Include="..\..\..\src\Matrix.h" />
|
||||
<ClInclude Include="..\..\..\src\Menus.h" />
|
||||
<ClInclude Include="..\..\..\src\MissingAliasFileDialog.h" />
|
||||
<ClInclude Include="..\..\..\src\Mix.h" />
|
||||
<ClInclude Include="..\..\..\src\MixerBoard.h" />
|
||||
<ClInclude Include="..\..\..\lib-src\lib-widget-extra\NonGuiThread.h" />
|
||||
|
|
|
@ -221,6 +221,9 @@
|
|||
<ClCompile Include="..\..\..\src\Menus.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\src\MissingAliasFileDialog.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\src\Mix.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
|
@ -1261,6 +1264,9 @@
|
|||
<ClInclude Include="..\..\..\src\Menus.h">
|
||||
<Filter>src</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\src\MissingAliasFileDialog.h">
|
||||
<Filter>src</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\src\Mix.h">
|
||||
<Filter>src</Filter>
|
||||
</ClInclude>
|
||||
|
|
Loading…
Reference in New Issue