El 09/10/14 a les 01:11, Benjamin Drung ha escrit:
Your patch needs to be forward ported,
We already have a patch that fixes 2.0.6 for wxWidgets 3.0. Back when you asked me to forward-port my patch to the current svn head (in order to get the changes into upstream), I did. Apart from the porting it includes specific fixes for svn head. Fortunately, 2.0.6 isn't that different from what was svn head back then, so we have a patch for 2.0.6, find it attached. To keep it small, I've removed everything that isn't relevant here (fixes of dead code or code that otherwise isn't relevant on Debian), but we will have that available for upstream. Be aware that this patch is by far not as well tested as my patch for 2.0.5!
[...] backport the preliminary upstream changes for wxWidgets 3.0.1 from r13403 [...] [...] Upstream want to get wx3.0 support in for 2.0.7 and is actively working on getting it in the svn
"Actively working", yes, unfortunately. Why? Your messages sounded like upstream was aware of this being resolved already, especially with you being part of upstream (AFAIK). Not only was this a major duplication of effort, but now it also requires additional porting - which is mainly manual work here, given that different people have been working on similar issues and touching the same code, but in different ways. What we're doing here is really inefficient.
So you could provide the missing bits and we will get upstream to test your proposed changes (when I commit them to the upstream repository).
So you're proposing to do the upstream integration first? I'd do it the other way round, given that for 2.0.6 we already have a patch and that the upstream integration has just gotten more complicated. We've already lost a lot of time. And before we just upload stuff to upstream, I'd also like to discuss the upstream integration with the person that has been working on wx3.0 there, especially as he has been fixing some code that I consider obsolete with wx3.0 and that I'd like to fix some things in a different way.
Cheers, Martin
Description: Compile audacity against wxWidgets 3.0 Solved compilation issues: (1.) Allow wxWidgets 3.0 in various configure scripts. (2.) The file dialog was derived from an internal wx class that disappeared in wx3.0 (discussed in further detail below). (3.) In several places the types in interfaces changed between wxChar* and wxString. I've tried to modify the code so it works with both interfaces (thanks to implicit conversion; may look a bit weird in some places). (4.) Calls to "wxTheApp->SuspendIdleCallback()" are no longer supported. They were part of a workaround for a clipboard problem, which fortunately doesn't seem to be there any longer in wx3.0, so I deactivated it for wx3.0. (5.) AddPendingEvent() and ProcessEvent() now have the visibility "protected" in wxWindow. It has always been a bad idea to call them directly on a wxWindow object, but now it's explicitly forbidden. Instead, those functions should be called on the object returned by GetEventHandler(). (6.) The class wxStandardPaths is now a singleton and has to be treated as such (no more explicit constructor calls). (7.) "wxLogWarning" is a macro now, so the "::" prefix doesn't work on it anymore. (8.) Several int types (which were actually used as enums) are now real enum types (e.g. wxRasterOperationMode, wxMouseButton) and have to be used as such. (9.) Apart from the FD constants (which have been fixed in Olly's patch already) there are some other constants which have received a prefix (e.g. wx* -> wxFONTFAMILY_*, wx* -> wxFONTSTYLE_*, wx* -> wxFONTWEIGHT_*). (10.) Signature changes in constructors of wxFlexGridSizer and wxIcon and wxSizeEvent (11.) Missing includes (missing header files were probably included indirectly in wx2.8 by chance) (12.) When deriving from the abstract class wxGridTableBase, different methods have to be implemented with wx3.0 (EndEdit with new signature and ApplyEdit) than before with wx2.8 (only EndEdit with old signature). Now both versions are implemented in parallel in the classes TimeEditor and ChoiceEditor (one version essentially being a wrapper of the other one). Solved runtime issues: (1.) Segmentation fault: The LadspaEffectDialog receives EVT_TEXT events before it's properly initialized. To prevent this, a workaround was already in place, but was only active on Windows. It looks like this happens now on more platforms (including GTK). As the workaround doesn't do any harm, even if activated unnecessarily, I've simply activated it for all environments. (2.) GTK critical warning "IA__gtk_range_set_range: assertion 'min < max' failed" because of negative numbers as result of window size checking. Added a sanity check that straightens up the numbers in edge cases. (3.) GTK critical warning "IA__gdk_window_get_origin: assertion 'GDK_IS_WINDOW (window)' failed": Received events of type wxSizeEvent on the main project window cause calls to "ClientToScreen" - which is not available until the window is first shown. So the class has to keep track of wxShowEvent events and inhibit those actions until the window is first shown. (4.) The functions wxString::Format and wxString::Printf have become stricter about parameter types that don't match (format string vs. function parameters). A systematic check of all occurrences was done to make sure all of them are fixed. (5.) Fix a segmentation fault that was due to an incorrect implementation of wxStaticCast. Use the C++ static_case as a workaround. (6.) Fix a segmentation fault due to double initialization of the classes wxNumberFormatter and wxNumValidator. Those classes had been copied from wxWidgets to audacity, but are included in wxWidgets 3.0, too. Use the original classes, if we compile against wxWidgets 3.0. Author: Martin Steghöfer <mar...@steghoefer.eu> Bug-Debian: https://bugs.debian.org/749659 diff --git a/configure.ac b/configure.ac index eb6b076..f1f910f 100644 --- a/configure.ac +++ b/configure.ac @@ -184,13 +184,11 @@ AC_ARG_ENABLE(dynamic-loading, [dynamic_loading="$enableval"], [dynamic_loading="yes"]) -dnl AC_ARG_WITH(wx-version, -dnl [AS_HELP_STRING([--with-wx-version], -dnl [select wxWidgets version (if both installed) [2.8,]])], -dnl wx_preference="--version=$withval", -dnl wx_preference="") -dnl At the moment we only support wx2.8. If we start supporting 3.0 when it -dnl comes out, we'll want it back again. +AC_ARG_WITH(wx-version, + [AS_HELP_STRING([--with-wx-version], + [select wxWidgets version (if both installed) [2.8, 3.0]])], + wx_preference="--version=$withval", + wx_preference="") dnl ---------------------------------------------------- dnl If user asked for debug, put debug in compiler flags @@ -289,19 +287,21 @@ dnl more things we always pass to wx-config wxconfigargs="$static_wx_preference $unicode_preference $wxconfigargs $wx_preference" wx_version=`${WX_CONFIG} $wxconfigargs --version` -AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x]) +AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x or 3.0.x]) case "${wx_version}" in 2.8.*) echo "Great, you're using wxWidgets ${wx_version}!" ;; + 3.0.*) + echo "Great, you're using wxWidgets ${wx_version}!" + ;; *) wx_list=`${WX_CONFIG} --list` - AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x or higher. -The currently available configurations are listed below. If necessary, either -install the package for your distribution or download the latest version of -wxWidgets -from http://wxwidgets.org. + AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x +or v3.0.x. The currently available configurations are listed below. If +necessary, either install the package for your distribution or download a +suitable version of wxWidgets from http://wxwidgets.org. ${wx_list}]) esac diff --git a/lib-src/FileDialog/FileDialog.h b/lib-src/FileDialog/FileDialog.h index 827edd6..fbf8a46 100644 --- a/lib-src/FileDialog/FileDialog.h +++ b/lib-src/FileDialog/FileDialog.h @@ -43,11 +43,11 @@ typedef void (*fdCallback)(void *, int); //---------------------------------------------------------------------------- wxString -FileSelector(const wxChar *message = wxFileSelectorPromptStr, +FileSelector(const wxChar *message = wxString(wxFileSelectorPromptStr, wxConvUTF8).wc_str(), const wxChar *default_path = NULL, const wxChar *default_filename = NULL, const wxChar *default_extension = NULL, - const wxChar *wildcard = wxFileSelectorDefaultWildcardStr, + const wxChar *wildcard = wxString(wxFileSelectorDefaultWildcardStr, wxConvUTF8).wc_str(), int flags = 0, wxWindow *parent = NULL, wxString label = wxEmptyString, diff --git a/lib-src/FileDialog/Makefile.am b/lib-src/FileDialog/Makefile.am index a07b4ea..9773462 100644 --- a/lib-src/FileDialog/Makefile.am +++ b/lib-src/FileDialog/Makefile.am @@ -32,3 +32,7 @@ endif if WINDOWS libFileDialog_la_SOURCES += win/FileDialogPrivate.cpp win/FileDialogPrivate.h endif + +if WX30 +libFileDialog_la_SOURCES += wx30/FileDialogPrivate.cpp wx30/FileDialogPrivate.h +endif diff --git a/lib-src/FileDialog/configure.ac b/lib-src/FileDialog/configure.ac index f5a9365..cde612d 100644 --- a/lib-src/FileDialog/configure.ac +++ b/lib-src/FileDialog/configure.ac @@ -42,7 +42,7 @@ AC_ARG_ENABLE(debug, debug_preference="") AC_ARG_WITH(wx-version, - [AS_HELP_STRING([--with-wx-version],[override default wxWidgets version [2.6,2.8]])], + [AS_HELP_STRING([--with-wx-version],[override default wxWidgets version [2.8, 3.0]])], wx_preference="--version=$withval", wx_preference="") @@ -67,27 +67,48 @@ AC_SUBST([WX_LIBS]) PKG_CHECK_MODULES(GTK, gtk+-2.0, have_gtk="yes", have_gtk="no") -dnl OS-specific configuration +dnl Get wx version +wx_version=`${WX_CONFIG} $wxconfigargs --version` + +dnl OS- and wx-version-specific configuration AC_CANONICAL_HOST IMPLEMENTATION="generic" -case "${host_os}" in - darwin*) - dnl Mac OS X configuration - IMPLEMENTATION="mac" +case "${wx_version}" in + 2.8.*) + case "${host_os}" in + darwin*) + dnl Mac OS X configuration + IMPLEMENTATION="mac" + ;; + + cygwin*) + dnl Windows/CygWin configuration + IMPLEMENTATION="win" + ;; + + *) + if test "$have_gtk" = "yes"; then + AC_DEFINE(HAVE_GTK, 1, [Define to 1 if GTK+ is available.]) + IMPLEMENTATION="gtk" + fi + ;; + esac ;; - - cygwin*) - dnl Windows/CygWin configuration - IMPLEMENTATION="win" + + 3.0.*) + dnl wx3.0 version for all platforms + IMPLEMENTATION="wx30" ;; - + *) - if test "$have_gtk" = "yes"; then - AC_DEFINE(HAVE_GTK, 1, [Define to 1 if GTK+ is available.]) - IMPLEMENTATION="gtk" - fi + wx_list=`${WX_CONFIG} --list` + AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x + or v3.0.x. The currently available configurations are listed below. If + necessary, either install the package for your distribution or download a + suitable version of wxWidgets from http://wxwidgets.org. + ${wx_list}]) ;; esac @@ -96,6 +117,7 @@ AM_CONDITIONAL([GENERIC], test "$IMPLEMENTATION" = "generic") AM_CONDITIONAL([GTK], test "$IMPLEMENTATION" = "gtk") AM_CONDITIONAL([MAC], test "$IMPLEMENTATION" = "mac") AM_CONDITIONAL([WINDOWS], test "$IMPLEMENTATION" = "win") +AM_CONDITIONAL([WX30], test "$IMPLEMENTATION" = "wx30") echo "Implementation to use: $IMPLEMENTATION" diff --git a/lib-src/FileDialog/wx30/FileDialogPrivate.cpp b/lib-src/FileDialog/wx30/FileDialogPrivate.cpp new file mode 100644 index 0000000..289b1bf --- /dev/null +++ b/lib-src/FileDialog/wx30/FileDialogPrivate.cpp @@ -0,0 +1,61 @@ +#include <wx/wxprec.h> +#ifndef WX_PRECOMP +# include <wx/wx.h> +#endif + +#include "../FileDialog.h" + +#include <cassert> + +#include "wx/event.h" +#include "wx/filedlg.h" +#include "wx/window.h" + + +FileDialog::FileDialog(wxWindow *parent, + const wxString& message, + const wxString& defaultDir, + const wxString& defaultFile, + const wxString& wildCard, + long style, + const wxPoint& pos, + const wxSize& sz, + const wxString& name) +: wxFileDialog(parent, message, defaultDir, defaultFile, wildCard, style, pos, sz, name) +{ +} + + +FileDialog::~FileDialog() +{ + // intentionally left blank; it's just there to make sure + // we have a virtual destructor (in case of subclassing) +} + + +int FileDialog::ShowModal() +{ + assert (SupportsExtraControl()); + + if (!m_buttonlabel.IsEmpty()) { + SetExtraControlCreator(&FileDialog::CreateButton); + } + + return wxFileDialog::ShowModal(); +} + + +wxWindow * FileDialog::CreateButton(wxWindow *fileDialogGeneric) +{ + FileDialog *fileDialog = (FileDialog *) fileDialogGeneric; + wxButton *button = new wxButton(fileDialog, wxID_ANY, fileDialog->m_buttonlabel); + fileDialog->Bind(wxEVT_BUTTON, &FileDialog::OnButton, fileDialog, button->GetId()); + return button; +} + +void FileDialog::OnButton(wxCommandEvent& WXUNUSED(event)) +{ + ClickButton(GetFilterIndex()); +} + + diff --git a/lib-src/FileDialog/wx30/FileDialogPrivate.h b/lib-src/FileDialog/wx30/FileDialogPrivate.h new file mode 100644 index 0000000..1673db1 --- /dev/null +++ b/lib-src/FileDialog/wx30/FileDialogPrivate.h @@ -0,0 +1,47 @@ +#ifndef __FILEDIALOGWX30H__ +#define __FILEDIALOGWX30H__ + + +#include "wx/filedlg.h" + + +class FileDialog : public wxFileDialog +{ +public: // constructors/destructors + FileDialog() { } + + FileDialog(wxWindow *parent, + const wxString& message = wxFileSelectorPromptStr, + const wxString& defaultDir = wxEmptyString, + const wxString& defaultFile = wxEmptyString, + const wxString& wildCard = wxFileSelectorDefaultWildcardStr, + long style = wxFD_DEFAULT_STYLE, + const wxPoint& pos = wxDefaultPosition, + const wxSize& sz = wxDefaultSize, + const wxString& name = wxFileDialogNameStr); + + virtual ~FileDialog(); + +public: // public methods + virtual void EnableButton(wxString label, fdCallback cb, void *cbdata); + + virtual void ClickButton(int index); + + virtual int ShowModal(); + + void OnButton(wxCommandEvent& event); + +private: // private methods + static wxWindow * CreateButton(wxWindow *fileDialog); + +private: // attributes + wxString m_buttonlabel; + + fdCallback m_callback; + + void *m_cbdata; +}; + + +#endif + diff --git a/lib-src/lib-widget-extra/configure.ac b/lib-src/lib-widget-extra/configure.ac index 649da27..0efd162 100644 --- a/lib-src/lib-widget-extra/configure.ac +++ b/lib-src/lib-widget-extra/configure.ac @@ -63,12 +63,11 @@ AC_ARG_ENABLE(debug, debug_preference="$enableval", debug_preference="no") -dnl AC_ARG_WITH(wx-version, -dnl [AS_HELP_STRING([--with-wx-version], -dnl [select wxWidgets version (if both installed) [2.8,]])], -dnl wx_preference="--version=$withval", -dnl wx_preference="") -dnl Right now only support wx 2.8 +AC_ARG_WITH(wx-version, + [AS_HELP_STRING([--with-wx-version], + [select wxWidgets version (if both installed) [2.8, 3.0]])], + wx_preference="--version=$withval", + wx_preference="") dnl ---------------------------------------------------- dnl If user asked for debug, put debug in compiler flags @@ -128,19 +127,21 @@ wxconfigargs="$static_wx_preference $unicode_preference $wxconfigargs $wx_prefer wx_version=`${WX_CONFIG} $wxconfigargs --version` -AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x]) +AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x or 3.0.x]) case "${wx_version}" in 2.8.*) echo "Great, you're using wxWidgets ${wx_version}!" ;; + 3.0.*) + echo "Great, you're using wxWidgets ${wx_version}!" + ;; *) wx_list=`${WX_CONFIG} --list` - AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x or higher. -The currently available configurations are listed below. If necessary, either -install the package for your distribution or download the latest version of -wxWidgets -from http://wxwidgets.org. + AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x +or v3.0.x. The currently available configurations are listed below. If +necessary, either install the package for your distribution or download a +suitable version of wxWidgets from http://wxwidgets.org. ${wx_list}]) esac diff --git a/src/AudacityApp.cpp b/src/AudacityApp.cpp index e0277ca..328b132 100644 --- a/src/AudacityApp.cpp +++ b/src/AudacityApp.cpp @@ -924,7 +924,7 @@ bool AudacityApp::ShouldShowMissingAliasedFileWarning() AudacityLogger *AudacityApp::GetLogger() { - return wxStaticCast(wxLog::GetActiveTarget(), AudacityLogger); + return static_cast<AudacityLogger *>(wxLog::GetActiveTarget()); } void AudacityApp::InitLang( const wxString & lang ) @@ -1295,7 +1295,7 @@ bool AudacityApp::OnInit() } if (option < argc - 1 && - argv[option + 1] && + !wxString(argv[option + 1]).IsEmpty() && // *argv is of type wxChar* in wx28 and wxString in wx30 !wxString(wxT("-blocksize")).CmpNoCase(argv[option])) { long theBlockSize; if (wxString(argv[option + 1]).ToLong(&theBlockSize)) { diff --git a/src/AudacityLogger.cpp b/src/AudacityLogger.cpp index e6e043f..0b1e6bf 100644 --- a/src/AudacityLogger.cpp +++ b/src/AudacityLogger.cpp @@ -170,9 +170,9 @@ void AudacityLogger::Show(bool show) // loads either the XPM or the windows resource, depending on the platform #if !defined(__WXMAC__) && !defined(__WXX11__) #if defined(__WXMSW__) - wxIcon ic(wxICON(AudacityLogo)); + wxIcon ic = wxICON(AudacityLogo); #elif defined(__WXGTK__) - wxIcon ic(wxICON(AudacityLogoAlpha)); + wxIcon ic = wxICON(AudacityLogoAlpha); #else wxIcon ic; ic.CopyFromBitmap(theTheme.Bitmap(bmpAudacityLogo48x48)); diff --git a/src/Benchmark.cpp b/src/Benchmark.cpp index af4d256..a91897f 100644 --- a/src/Benchmark.cpp +++ b/src/Benchmark.cpp @@ -394,8 +394,8 @@ void BenchmarkDialog::OnRun( wxCommandEvent & WXUNUSED(event)) t->GetEndTime(); if (t->GetClipByIndex(0)->GetSequence()->GetNumSamples() != (sampleCount)nChunks * chunkSize) { - Printf(wxT("Expected len %d, track len %d.\n"), nChunks * chunkSize, - t->GetClipByIndex(0)->GetSequence()->GetNumSamples()); + Printf(wxT("Expected len %d, track len %lld.\n"), nChunks * chunkSize, + (long long) t->GetClipByIndex(0)->GetSequence()->GetNumSamples()); goto fail; } @@ -415,8 +415,8 @@ void BenchmarkDialog::OnRun( wxCommandEvent & WXUNUSED(event)) Printf(wxT("Trial %d\n"), z); Printf(wxT("Cut (%d, %d) failed.\n"), (x0 * chunkSize), (x0 + xlen) * chunkSize); - Printf(wxT("Expected len %d, track len %d.\n"), nChunks * chunkSize, - t->GetClipByIndex(0)->GetSequence()->GetNumSamples()); + Printf(wxT("Expected len %d, track len %lld.\n"), nChunks * chunkSize, + (long long) t->GetClipByIndex(0)->GetSequence()->GetNumSamples()); goto fail; } @@ -432,8 +432,8 @@ void BenchmarkDialog::OnRun( wxCommandEvent & WXUNUSED(event)) if (t->GetClipByIndex(0)->GetSequence()->GetNumSamples() != (sampleCount) nChunks * chunkSize) { Printf(wxT("Trial %d\n"), z); - Printf(wxT("Expected len %d, track len %d.\n"), nChunks * chunkSize, - t->GetClipByIndex(0)->GetSequence()->GetNumSamples()); + Printf(wxT("Expected len %d, track len %lld.\n"), nChunks * chunkSize, + (long long) t->GetClipByIndex(0)->GetSequence()->GetNumSamples()); goto fail; } // Copy diff --git a/src/CaptureEvents.cpp b/src/CaptureEvents.cpp index 7875578..b95295a 100644 --- a/src/CaptureEvents.cpp +++ b/src/CaptureEvents.cpp @@ -17,7 +17,7 @@ #include "Audacity.h" #include "CaptureEvents.h" -#if defined(__WXGTK__) && defined(HAVE_GTK) +#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3 // As of wxGTK 2.8.9, there is a problem in the wxClipboard class that // allows recursive event processing. This problem has been corrected // by wxWidgets 2.9+. However, this han't made it into a release yet, diff --git a/src/CaptureEvents.h b/src/CaptureEvents.h index 96fa36c..44e4886 100644 --- a/src/CaptureEvents.h +++ b/src/CaptureEvents.h @@ -17,7 +17,7 @@ #ifndef _AUDACITY_CAPTURE_EVENTS_ #define _AUDACITY_CAPTURE_EVENTS_ -#if defined(__WXGTK__) && defined(HAVE_GTK) +#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3 // As of wxGTK 2.8.9, there is a problem in the wxClipboard class that // allows recursive event processing. This problem has been corrected // by wxWidgets 2.9+. However, this han't made it into a release yet, diff --git a/src/DirManager.cpp b/src/DirManager.cpp index 097bfaa..759e849 100644 --- a/src/DirManager.cpp +++ b/src/DirManager.cpp @@ -1417,7 +1417,7 @@ int DirManager::ProjectFSCK(const bool bForceError, const bool bAutoRecoverMode) { wxString msgA = _("Project check of \"%s\" folder \ -\ndetected %d missing external audio file(s) \ +\ndetected %lld missing external audio file(s) \ \n('aliased files'). There is no way for Audacity \ \nto recover these files automatically. \ \n\nIf you choose the first or second option below, \ @@ -1429,7 +1429,7 @@ _("Project check of \"%s\" folder \ \nproject in its current state, unless you \"Close \ \nproject immediately\" on further error alerts."); wxString msg; - msg.Printf(msgA, this->projName.c_str(), missingAliasedFilePathHash.size()); + msg.Printf(msgA, this->projName.c_str(), (long long) missingAliasedFilePathHash.size()); const wxChar *buttons[] = {_("Close project immediately with no changes"), _("Treat missing audio as silence (this session only)"), @@ -1487,11 +1487,11 @@ _("Project check of \"%s\" folder \ { wxString msgA = _("Project check of \"%s\" folder \ -\ndetected %d missing alias (.auf) blockfile(s). \ +\ndetected %lld missing alias (.auf) blockfile(s). \ \nAudacity can fully regenerate these files \ \nfrom the current audio in the project."); wxString msg; - msg.Printf(msgA, this->projName.c_str(), missingAUFHash.size()); + msg.Printf(msgA, this->projName.c_str(), (long long) missingAUFHash.size()); const wxChar *buttons[] = {_("Regenerate alias summary files (safe and recommended)"), _("Fill in silence for missing display data (this session only)"), _("Close project immediately with no further changes"), @@ -1538,7 +1538,7 @@ _("Project check of \"%s\" folder \ { wxString msgA = _("Project check of \"%s\" folder \ -\ndetected %d missing audio data (.au) blockfile(s), \ +\ndetected %lld missing audio data (.au) blockfile(s), \ \nprobably due to a bug, system crash, or accidental \ \ndeletion. There is no way for Audacity to recover \ \nthese missing files automatically. \ @@ -1548,7 +1548,7 @@ _("Project check of \"%s\" folder \ \n\nNote that for the second option, the waveform \ \nmay not show silence."); wxString msg; - msg.Printf(msgA, this->projName.c_str(), missingAUHash.size()); + msg.Printf(msgA, this->projName.c_str(), (long long) missingAUHash.size()); const wxChar *buttons[] = {_("Close project immediately with no further changes"), _("Treat missing audio as silence (this session only)"), diff --git a/src/LabelTrack.cpp b/src/LabelTrack.cpp index f5eb186..b90c32f 100644 --- a/src/LabelTrack.cpp +++ b/src/LabelTrack.cpp @@ -957,7 +957,7 @@ bool LabelTrack::CutSelectedText() // copy data onto clipboard if (wxTheClipboard->Open()) { -#if defined(__WXGTK__) && defined(HAVE_GTK) +#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3 CaptureEvents capture; #endif wxTheClipboard->SetData(new wxTextDataObject(data)); @@ -992,7 +992,7 @@ bool LabelTrack::CopySelectedText() // copy the data on clipboard if (wxTheClipboard->Open()) { -#if defined(__WXGTK__) && defined(HAVE_GTK) +#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3 CaptureEvents capture; #endif wxTheClipboard->SetData(new wxTextDataObject(data)); @@ -1017,7 +1017,7 @@ bool LabelTrack::PasteSelectedText(double sel0, double sel1) // if text data is available if (IsTextClipSupported()) { if (wxTheClipboard->Open()) { -#if defined(__WXGTK__) && HAVE_GTK +#if defined(__WXGTK__) && HAVE_GTK && wxMAJOR_VERSION < 3 CaptureEvents capture; #endif wxTextDataObject data; @@ -1074,7 +1074,7 @@ bool LabelTrack::PasteSelectedText(double sel0, double sel1) /// @return true if the text data is available in the clipboard, false otherwise bool LabelTrack::IsTextClipSupported() { -#if defined(__WXGTK__) && defined(HAVE_GTK) +#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3 CaptureEvents capture; #endif diff --git a/src/LyricsWindow.cpp b/src/LyricsWindow.cpp index e794e5b..3c9d1d6 100644 --- a/src/LyricsWindow.cpp +++ b/src/LyricsWindow.cpp @@ -68,9 +68,9 @@ LyricsWindow::LyricsWindow(AudacityProject *parent): // loads either the XPM or the windows resource, depending on the platform #if !defined(__WXMAC__) && !defined(__WXX11__) #ifdef __WXMSW__ - wxIcon ic(wxICON(AudacityLogo)); + wxIcon ic = wxICON(AudacityLogo); #else - wxIcon ic(wxICON(AudacityLogo48x48)); + wxIcon ic = wxICON(AudacityLogo48x48); #endif SetIcon(ic); #endif diff --git a/src/Menus.cpp b/src/Menus.cpp index 9b9505f..c2bf5f7 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2422,7 +2422,7 @@ void AudacityProject::OnTrackMenu() // The workaround is to queue a context menu event, allowing the key press // event to complete. wxContextMenuEvent e(wxEVT_CONTEXT_MENU, GetId()); - mTrackPanel->AddPendingEvent(e); + mTrackPanel->GetEventHandler()->AddPendingEvent(e); } void AudacityProject::OnTrackMute() @@ -5871,7 +5871,7 @@ void AudacityProject::OnResample() wxArrayString rates; wxComboBox *cb; - rate.Printf(wxT("%d"), lrint(mRate)); + rate.Printf(wxT("%ld"), lrint(mRate)); rates.Add(wxT("8000")); rates.Add(wxT("11025")); diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index d628352..07b0d25 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -1723,9 +1723,9 @@ MixerBoardFrame::MixerBoardFrame(AudacityProject* parent) // loads either the XPM or the windows resource, depending on the platform #if !defined(__WXMAC__) && !defined(__WXX11__) #ifdef __WXMSW__ - wxIcon ic(wxICON(AudacityLogo)); + wxIcon ic = wxICON(AudacityLogo); #else - wxIcon ic(wxICON(AudacityLogo48x48)); + wxIcon ic = wxICON(AudacityLogo48x48); #endif SetIcon(ic); #endif diff --git a/src/PitchName.cpp b/src/PitchName.cpp index 29c42f3..699339d 100644 --- a/src/PitchName.cpp +++ b/src/PitchName.cpp @@ -20,6 +20,10 @@ #include <math.h> #include <stdio.h> +#ifndef WX_PRECOMP +# include "wx/wx.h" +#endif + #include "PitchName.h" diff --git a/src/PlatformCompatibility.cpp b/src/PlatformCompatibility.cpp index 3d5377c..4a447e0 100644 --- a/src/PlatformCompatibility.cpp +++ b/src/PlatformCompatibility.cpp @@ -20,6 +20,7 @@ #include <wx/filename.h> #include <wx/stdpaths.h> #include <wx/app.h> +#include <wx/version.h> #include "AudacityApp.h" #include "PlatformCompatibility.h" @@ -37,7 +38,11 @@ wxString PlatformCompatibility::GetExecutablePath() static wxString path; if (!found) { +#if wxMAJOR_VERSION < 3 wxStandardPaths std; +#else + wxStandardPaths std(wxStandardPaths::Get()); +#endif path = std.GetExecutablePath(); @@ -65,4 +70,4 @@ wxString PlatformCompatibility::ConvertSlashInFileName(const wxString& filePath) #else return filePath; #endif -} \ No newline at end of file +} diff --git a/src/Profiler.cpp b/src/Profiler.cpp index c90ffe8..e371bdc 100644 --- a/src/Profiler.cpp +++ b/src/Profiler.cpp @@ -22,6 +22,9 @@ but it will probably work fine if you use it on a high level. #include "Profiler.h" +#include <cstdio> +#include <cstring> + ///write to a profile at the end of the test. Profiler::~Profiler() { diff --git a/src/Project.cpp b/src/Project.cpp index eab0226..41fddd9 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -79,7 +79,6 @@ scroll information. It also has some status flags. #include <wx/string.h> #include <wx/textfile.h> #include <wx/timer.h> -#include <wx/generic/filedlgg.h> #include <wx/display.h> #include <wx/arrimpl.cpp> // this allows for creation of wxObjArray @@ -704,6 +703,7 @@ BEGIN_EVENT_TABLE(AudacityProject, wxFrame) EVT_MOUSE_EVENTS(AudacityProject::OnMouseEvent) EVT_CLOSE(AudacityProject::OnCloseWindow) EVT_SIZE(AudacityProject::OnSize) + EVT_SHOW(AudacityProject::OnShow) EVT_MOVE(AudacityProject::OnMove) EVT_ACTIVATE(AudacityProject::OnActivate) EVT_COMMAND_SCROLL_LINEUP(HSBarID, AudacityProject::OnScrollLeftButton) @@ -763,7 +763,8 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, mLastEffect(NULL), mLastEffectType(0), mTimerRecordCanceled(false), - mMenuClose(false) + mMenuClose(false), + mShownOnce(false) { int widths[] = {-2, -1}; mStatusBar = CreateStatusBar(2); @@ -985,9 +986,9 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, // loads either the XPM or the windows resource, depending on the platform #if !defined(__WXMAC__) && !defined(__WXX11__) #if defined(__WXMSW__) - wxIcon ic(wxICON(AudacityLogo)); + wxIcon ic = wxICON(AudacityLogo); #elif defined(__WXGTK__) - wxIcon ic(wxICON(AudacityLogoAlpha)); + wxIcon ic = wxICON(AudacityLogoAlpha); #else wxIcon ic; ic.CopyFromBitmap(theTheme.Bitmap(bmpAudacityLogo48x48)); @@ -1392,6 +1393,12 @@ void AudacityProject::FixScrollbars() int panelWidth, panelHeight; mTrackPanel->GetTracksUsableArea(&panelWidth, &panelHeight); + if (panelWidth < 0) { + panelWidth = 0; + } + if (panelHeight < 0) { + panelHeight = 0; + } // Add 1/4 of a screen of blank space to the end of the longest track mViewInfo.screen = ((double) panelWidth) / mViewInfo.zoom; @@ -1603,9 +1610,26 @@ void AudacityProject::OnMove(wxMoveEvent & event) void AudacityProject::OnSize(wxSizeEvent & event) { - HandleResize(); - if (!this->IsMaximized() && !this->IsIconized()) - SetNormalizedWindowState(this->GetRect()); + if (mShownOnce) { + HandleResize(); + if (!this->IsMaximized() && !this->IsIconized()) + SetNormalizedWindowState(this->GetRect()); + } + event.Skip(); +} + +void AudacityProject::OnShow(wxShowEvent & event) +{ + // Remember that the window has been shown at least once + mShownOnce = true; + + // Call "OnSize" again (the previous calls to "OnSize" might not + // have succeeded because some methods are not available before + // the actual creation/showing of the window) + wxSizeEvent sizeEvent(GetSize()); + OnSize(sizeEvent); + + // Further processing by default handlers event.Skip(); } @@ -1717,7 +1741,7 @@ bool AudacityProject::HandleKeyDown(wxKeyEvent & event) wxCommandEvent e(EVT_CAPTURE_KEY); e.SetEventObject(&event); - if (w->ProcessEvent(e)) { + if (w->GetEventHandler()->ProcessEvent(e)) { return false; } } diff --git a/src/Project.h b/src/Project.h index c859c97..dcc3ccb 100644 --- a/src/Project.h +++ b/src/Project.h @@ -254,6 +254,7 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, void OnMouseEvent(wxMouseEvent & event); void OnIconize(wxIconizeEvent &event); void OnSize(wxSizeEvent & event); + void OnShow(wxShowEvent & event); void OnMove(wxMoveEvent & event); void OnScroll(wxScrollEvent & event); void OnCloseWindow(wxCloseEvent & event); @@ -499,6 +500,8 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, // dialog for missing alias warnings wxDialog *mAliasMissingWarningDialog; + bool mShownOnce; + public: ToolManager *mToolManager; bool mShowSplashScreen; diff --git a/src/Sequence.cpp b/src/Sequence.cpp index 02883db..7ec00d7 100644 --- a/src/Sequence.cpp +++ b/src/Sequence.cpp @@ -1048,7 +1048,7 @@ void Sequence::WriteXML(XMLWriter &xmlFile) Internat::ToString(((wxLongLong)(bb->f->GetLength())).ToDouble(), 0).c_str(), Internat::ToString(((wxLongLong)mMaxSamples).ToDouble(), 0).c_str()); ::wxMessageBox(sMsg, _("Warning - Length in Writing Sequence"), wxICON_EXCLAMATION | wxOK); - ::wxLogWarning(sMsg); + wxLogWarning(sMsg); bb->f->SetLength(mMaxSamples); } @@ -1843,10 +1843,10 @@ void Sequence::DebugPrintf(wxString *dest) for (i = 0; i < mBlock->GetCount(); i++) { SeqBlock* pSeqBlock = mBlock->Item(i); *dest += wxString::Format - (wxT(" Block %3d: start %8d, len %8d, refs %d, "), + (wxT(" Block %3u: start %8lld, len %8lld, refs %d, "), i, - pSeqBlock->start, - pSeqBlock->f ? pSeqBlock->f->GetLength() : 0, + (long long) pSeqBlock->start, + pSeqBlock->f ? (long long) pSeqBlock->f->GetLength() : 0, pSeqBlock->f ? mDirManager->GetRefCount(pSeqBlock->f) : 0); if (pSeqBlock->f) @@ -1864,7 +1864,7 @@ void Sequence::DebugPrintf(wxString *dest) } if (pos != mNumSamples) *dest += wxString::Format - (wxT("ERROR mNumSamples = %d\n"), mNumSamples); + (wxT("ERROR mNumSamples = %lld\n"), (long long) mNumSamples); } // static diff --git a/src/Shuttle.cpp b/src/Shuttle.cpp index 993a5dd..b704338 100644 --- a/src/Shuttle.cpp +++ b/src/Shuttle.cpp @@ -189,7 +189,7 @@ bool Shuttle::TransferLongLong( const wxString & Name, wxLongLong_t & iValue, co else { /// \todo Fix for long long values. - mValueString = wxString::Format(wxT("%d"),iValue); + mValueString = wxString::Format(wxT("%lld"), (long long) iValue); return ExchangeWithMaster( Name ); } return true; diff --git a/src/Tags.cpp b/src/Tags.cpp index cf61d6f..1cfc35e 100644 --- a/src/Tags.cpp +++ b/src/Tags.cpp @@ -474,7 +474,7 @@ bool Tags::HandleXMLTag(const wxChar *tag, const wxChar **attrs) while (*attrs) { wxString attr = *attrs++; - if (!*attr) + if (attr.IsEmpty()) break; wxString value = *attrs++; diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index d7cb246..eea4884 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -5124,7 +5124,7 @@ void TrackPanel::OnMouseEvent(wxMouseEvent & event) // The activate event is used to make the // parent window 'come alive' if it didn't have focus. wxActivateEvent e; - GetParent()->ProcessEvent(e); + GetParent()->GetEventHandler()->ProcessEvent(e); // wxTimers seem to be a little unreliable, so this // "primes" it to make sure it keeps going for a while... @@ -5562,7 +5562,7 @@ int TrackPanel::DetermineToolToUse( ToolsToolBar * pTtb, wxMouseEvent & event) int trackKind = pTrack->GetKind(); currentTool = selectTool; // the default. - if( event.ButtonIsDown(3) || event.RightUp()){ + if( event.ButtonIsDown(wxMOUSE_BTN_RIGHT) || event.RightUp()){ currentTool = zoomTool; } else if( trackKind == Track::Time ){ currentTool = envelopeTool; @@ -7583,7 +7583,7 @@ void TrackPanel::SetRate(Track * pTrack, double rate) Track *partner = mTracks->GetLink(pTrack); if (partner) ((WaveTrack *) partner)->SetRate(rate); - MakeParentPushState(wxString::Format(_("Changed '%s' to %d Hz"), + MakeParentPushState(wxString::Format(_("Changed '%s' to %f Hz"), pTrack->GetName().c_str(), rate), _("Rate Change")); } @@ -7723,7 +7723,7 @@ void TrackPanel::OnRateOther(wxCommandEvent &event) wxArrayString rates; wxComboBox *cb; - rate.Printf(wxT("%d"), lrint(((WaveTrack *) mPopupMenuTarget)->GetRate())); + rate.Printf(wxT("%ld"), lrint(((WaveTrack *) mPopupMenuTarget)->GetRate())); rates.Add(wxT("8000")); rates.Add(wxT("11025")); @@ -7810,7 +7810,7 @@ void TrackPanel::OnSetTimeTrackRange(wxCommandEvent & /*event*/) if( lower >= 10 && upper <= 1000 && lower < upper ) { t->SetRangeLower((double)lower / 100.0); t->SetRangeUpper((double)upper / 100.0); - MakeParentPushState(wxString::Format(_("Set range to '%d' - '%d'"), + MakeParentPushState(wxString::Format(_("Set range to '%ld' - '%ld'"), lower, upper), /* i18n-hint: (verb)*/ @@ -8065,7 +8065,7 @@ void TrackPanel::OnSetFont(wxCommandEvent & WXUNUSED(event)) /* i18n-hint: (noun) The size of the typeface*/ S.AddPrompt(_("Face size")); sc = new wxSpinCtrl(&dlg, wxID_ANY, - wxString::Format(wxT("%d"), fontsize), + wxString::Format(wxT("%ld"), fontsize), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, @@ -8382,7 +8382,7 @@ TrackInfo::TrackInfo(wxWindow * pParentIn) mSliderOffset = 0; int fontSize = 10; - mFont.Create(fontSize, wxSWISS, wxNORMAL, wxNORMAL); + mFont.Create(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); int allowableWidth = GetTrackInfoWidth() - 2; // 2 to allow for left/right borders int textWidth, textHeight; diff --git a/src/blockfile/SimpleBlockFile.cpp b/src/blockfile/SimpleBlockFile.cpp index c256588..6c23af7 100644 --- a/src/blockfile/SimpleBlockFile.cpp +++ b/src/blockfile/SimpleBlockFile.cpp @@ -207,7 +207,7 @@ bool SimpleBlockFile::WriteSimpleBlockFile( size_t nBytesWritten = file.Write(&header, nBytesToWrite); if (nBytesWritten != nBytesToWrite) { - wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite); + wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite); return false; } @@ -215,7 +215,7 @@ bool SimpleBlockFile::WriteSimpleBlockFile( nBytesWritten = file.Write(summaryData, nBytesToWrite); if (nBytesWritten != nBytesToWrite) { - wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite); + wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite); return false; } @@ -237,7 +237,7 @@ bool SimpleBlockFile::WriteSimpleBlockFile( #endif if (nBytesWritten != nBytesToWrite) { - wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite); + wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite); return false; } } @@ -250,7 +250,7 @@ bool SimpleBlockFile::WriteSimpleBlockFile( nBytesWritten = file.Write(sampleData, nBytesToWrite); if (nBytesWritten != nBytesToWrite) { - wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite); + wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite); return false; } } diff --git a/src/commands/CompareAudioCommand.cpp b/src/commands/CompareAudioCommand.cpp index afb209f..f8ed52f 100644 --- a/src/commands/CompareAudioCommand.cpp +++ b/src/commands/CompareAudioCommand.cpp @@ -135,8 +135,8 @@ bool CompareAudioCommand::Apply(CommandExecutionContext context) // Output the results double errorSeconds = mTrack0->LongSamplesToTime(errorCount); - Status(wxString::Format(wxT("%i"), errorCount)); + Status(wxString::Format(wxT("%li"), errorCount)); Status(wxString::Format(wxT("%.4f"), errorSeconds)); - Status(wxString::Format(wxT("Finished comparison: %i samples (%.3f seconds) exceeded the error threshold of %f."), errorCount, errorSeconds, errorThreshold)); + Status(wxString::Format(wxT("Finished comparison: %li samples (%.3f seconds) exceeded the error threshold of %f."), errorCount, errorSeconds, errorThreshold)); return true; } diff --git a/src/commands/ScriptCommandRelay.cpp b/src/commands/ScriptCommandRelay.cpp index c4dc2bd..01b4152 100644 --- a/src/commands/ScriptCommandRelay.cpp +++ b/src/commands/ScriptCommandRelay.cpp @@ -57,7 +57,7 @@ void ScriptCommandRelay::PostCommand(AudacityProject *project, Command *cmd) wxASSERT(cmd != NULL); AppCommandEvent ev; ev.SetCommand(cmd); - project->AddPendingEvent(ev); + project->GetEventHandler()->AddPendingEvent(ev); } /// This is the function which actually obeys one command. Rather than applying diff --git a/src/commands/Validators.h b/src/commands/Validators.h index d2bd768..0201d30 100644 --- a/src/commands/Validators.h +++ b/src/commands/Validators.h @@ -201,7 +201,7 @@ public: } virtual wxString GetDescription() const { - return wxString::Format(wxT("between %d and %d"), mLower, mUpper); + return wxString::Format(wxT("between %f and %f"), mLower, mUpper); } virtual Validator *GetClone() const { diff --git a/src/effects/BassTreble.cpp b/src/effects/BassTreble.cpp index 53af991..315b701 100644 --- a/src/effects/BassTreble.cpp +++ b/src/effects/BassTreble.cpp @@ -35,6 +35,7 @@ #include <wx/checkbox.h> #include <wx/slider.h> #include <wx/sizer.h> +#include <wx/textctrl.h> // Used to communicate the type of the filter. static const int bassType = 0; //Low Shelf diff --git a/src/effects/Compressor.cpp b/src/effects/Compressor.cpp index 560fe50..c52c67c 100644 --- a/src/effects/Compressor.cpp +++ b/src/effects/Compressor.cpp @@ -38,6 +38,7 @@ #include <wx/textdlg.h> #include <wx/brush.h> #include <wx/image.h> +#include <wx/dcclient.h> #include <wx/dcmemory.h> #include "Compressor.h" diff --git a/src/effects/FindClipping.cpp b/src/effects/FindClipping.cpp index 8bad09c..18fa53e 100644 --- a/src/effects/FindClipping.cpp +++ b/src/effects/FindClipping.cpp @@ -183,7 +183,7 @@ bool EffectFindClipping::ProcessOne(LabelTrack * l, if (stoprun >= mStop) { l->AddLabel(startTime, t->LongSamplesToTime(start + s - mStop), - wxString::Format(wxT("%lld of %lld"), startrun, samps - mStop)); + wxString::Format(wxT("%lld of %lld"), (long long) startrun, (long long) (samps - mStop))); startrun = 0; stoprun = 0; samps = 0; diff --git a/src/effects/ladspa/LadspaEffect.cpp b/src/effects/ladspa/LadspaEffect.cpp index 1507133..c96b9dc 100644 --- a/src/effects/ladspa/LadspaEffect.cpp +++ b/src/effects/ladspa/LadspaEffect.cpp @@ -518,16 +518,14 @@ LadspaEffectDialog::LadspaEffectDialog(LadspaEffect *eff, this->mData = data; this->inputControls = inputControls; this->sampleRate = sampleRate; - #ifdef __WXMSW__ - // On Windows, for some reason, wxWidgets calls OnTextCtrl during creation - // of the text control, and LadspaEffectDialog::OnTextCtrl calls HandleText, - // which assumes all the fields have been initialized. - // This can give us a bad pointer crash, so manipulate inSlider to - // no-op HandleText during creation. - inSlider = true; - #else - inSlider = false; - #endif + + // wxWidgets calls OnTextCtrl during creation + // of the text control, and LadspaEffectDialog::OnTextCtrl calls HandleText, + // which assumes all the fields have been initialized. + // This can give us a bad pointer crash, so manipulate inSlider to + // no-op HandleText during creation. + inSlider = true; + inText = false; toggles = new wxCheckBox*[mData->PortCount]; diff --git a/src/effects/ladspa/LoadLadspa.cpp b/src/effects/ladspa/LoadLadspa.cpp index 5758b1f..affcdb2 100644 --- a/src/effects/ladspa/LoadLadspa.cpp +++ b/src/effects/ladspa/LoadLadspa.cpp @@ -147,7 +147,7 @@ static void LoadLadspaEffect(wxSortedArrayString &uniq, wxString fname, data = mainFn(index); while(data) { - wxString uniqid = wxString::Format(wxT("%08x-%s"), data->UniqueID, LAT1CTOWX(data->Label).c_str()); + wxString uniqid = wxString::Format(wxT("%08x-%s"), (unsigned int) data->UniqueID, LAT1CTOWX(data->Label).c_str()); if (uniq.Index(uniqid) == wxNOT_FOUND) { uniq.Add(uniqid); std::set<wxString> categories; diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 902c12a..88e9975 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -703,7 +703,7 @@ bool EffectNyquist::Process() // See also http://bugzilla.audacityteam.org/show_bug.cgi?id=642#c9 // for further info about this thread safety question. wxString prevlocale = wxSetlocale(LC_NUMERIC, NULL); - wxSetlocale(LC_NUMERIC, wxT("C")); + wxSetlocale(LC_NUMERIC, wxString(wxT("C"))); nyx_init(); nyx_set_os_callback(StaticOSCallback, (void *)this); @@ -1242,13 +1242,7 @@ NyquistDialog::NyquistDialog(wxWindow * parent, wxWindowID id, wxFloatingPointValidator<double> vld(12, &ctrl->val); vld.SetRange(-FLT_MAX, FLT_MAX); // Set number of decimal places - if (ctrl->high - ctrl->low < 10) { - vld.SetStyle(wxNUM_VAL_THREE_TRAILING_ZEROES); - } else if (ctrl->high - ctrl->low < 100) { - vld.SetStyle(wxNUM_VAL_TWO_TRAILING_ZEROES); - } else { - vld.SetStyle(wxNUM_VAL_ONE_TRAILING_ZERO); - } + vld.SetStyle(wxNUM_VAL_NO_TRAILING_ZEROES); item->SetValidator(vld); } else { diff --git a/src/export/ExportFFmpeg.cpp b/src/export/ExportFFmpeg.cpp index 28c5cc9..2077d6e 100644 --- a/src/export/ExportFFmpeg.cpp +++ b/src/export/ExportFFmpeg.cpp @@ -452,7 +452,7 @@ bool ExportFFmpeg::InitCodecs(AudacityProject *project) if (codec == NULL) { wxLogError(wxT("FFmpeg : ERROR - Can't find audio codec 0x%x."),mEncAudioCodecCtx->codec_id); - wxMessageBox(wxString::Format(_("FFmpeg cannot find audio codec 0x%x.\nSupport for this codec is probably not compiled in."),mEncAudioCodecCtx->codec_id)); + wxMessageBox(wxString::Format(_("FFmpeg cannot find audio codec 0x%x.\nSupport for this codec is probably not compiled in."), (unsigned int) mEncAudioCodecCtx->codec_id)); return false; } diff --git a/src/export/ExportFFmpegDialogs.cpp b/src/export/ExportFFmpegDialogs.cpp index 260a0ab..d0a421e 100644 --- a/src/export/ExportFFmpegDialogs.cpp +++ b/src/export/ExportFFmpegDialogs.cpp @@ -1846,7 +1846,7 @@ void ExportFFmpegOptions::DoOnCodecList() mCodecName->SetLabel(wxString(_("Failed to find the codec"))); return; } - mCodecName->SetLabel(wxString::Format(wxT("[%d] %s"),cdc->id,selcdclong->c_str())); + mCodecName->SetLabel(wxString::Format(wxT("[%d] %s"), (int) cdc->id,selcdclong->c_str())); if (selfmt != NULL) { diff --git a/src/export/ExportMP2.cpp b/src/export/ExportMP2.cpp index 0baa5d3..92d25fe 100644 --- a/src/export/ExportMP2.cpp +++ b/src/export/ExportMP2.cpp @@ -276,8 +276,8 @@ int ExportMP2::Export(AudacityProject *project, ProgressDialog *progress = new ProgressDialog(wxFileName(fName).GetName(), selectionOnly ? - wxString::Format(_("Exporting selected audio at %d kbps"), bitrate) : - wxString::Format(_("Exporting entire file at %d kbps"), bitrate)); + wxString::Format(_("Exporting selected audio at %ld kbps"), bitrate) : + wxString::Format(_("Exporting entire file at %ld kbps"), bitrate)); int updateResult = eProgressSuccess; while(updateResult == eProgressSuccess) { diff --git a/src/export/ExportMP3.cpp b/src/export/ExportMP3.cpp index 3c998bf..6d7d9fb 100644 --- a/src/export/ExportMP3.cpp +++ b/src/export/ExportMP3.cpp @@ -1799,7 +1799,7 @@ int ExportMP3::Export(AudacityProject *project, if (bytes < 0) { wxString msg; - msg.Printf(_("Error %d returned from MP3 encoder"), bytes); + msg.Printf(_("Error %ld returned from MP3 encoder"), bytes); wxMessageBox(msg); break; } diff --git a/src/export/ExportMultiple.cpp b/src/export/ExportMultiple.cpp index 45057f4..c8d42c2 100644 --- a/src/export/ExportMultiple.cpp +++ b/src/export/ExportMultiple.cpp @@ -535,14 +535,14 @@ void ExportMultiple::OnExport(wxCommandEvent& WXUNUSED(event)) { wxString msg; msg.Printf( - ok == eProgressSuccess ? _("Successfully exported the following %ld file(s).") - : (ok == eProgressFailed ? _("Something went wrong after exporting the following %ld file(s).") - : (ok == eProgressCancelled ? _("Export canceled after exporting the following %ld file(s).") - : (ok == eProgressStopped ? _("Export stopped after exporting the following %ld file(s).") - : _("Something went really wrong after exporting the following %ld file(s).") + ok == eProgressSuccess ? _("Successfully exported the following %lld file(s).") + : (ok == eProgressFailed ? _("Something went wrong after exporting the following %lld file(s).") + : (ok == eProgressCancelled ? _("Export canceled after exporting the following %lld file(s).") + : (ok == eProgressStopped ? _("Export stopped after exporting the following %lld file(s).") + : _("Something went really wrong after exporting the following %lld file(s).") ) ) - ), mExported.GetCount()); + ), (long long) mExported.GetCount()); wxString FileList; for (size_t i = 0; i < mExported.GetCount(); i++) { diff --git a/src/import/Import.cpp b/src/import/Import.cpp index d7d5214..bdf7293 100644 --- a/src/import/Import.cpp +++ b/src/import/Import.cpp @@ -279,7 +279,7 @@ void Importer::WriteImportItems() val.Append (wxT(":")); } } - name.Printf (wxT("/ExtImportItems/Item%d"), i); + name.Printf (wxT("/ExtImportItems/Item%lld"), (long long) i); gPrefs->Write (name, val); gPrefs->Flush(); } @@ -288,7 +288,7 @@ void Importer::WriteImportItems() more to delete.*/ i = this->mExtImportItems->Count(); do { - name.Printf (wxT("/ExtImportItems/Item%d"), i); + name.Printf (wxT("/ExtImportItems/Item%lld"), (long long) i); // No item to delete? Then it's time to finish. if (!gPrefs->Read(name, &val)) break; diff --git a/src/import/ImportFFmpeg.cpp b/src/import/ImportFFmpeg.cpp index 212ded3..5a7a26a 100644 --- a/src/import/ImportFFmpeg.cpp +++ b/src/import/ImportFFmpeg.cpp @@ -440,7 +440,7 @@ bool FFmpegImportFileHandle::InitCodecs() { lang.FromUTF8(tag->value); } - strinfo.Printf(_("Index[%02x] Codec[%S], Language[%S], Bitrate[%S], Channels[%d], Duration[%d]"),sc->m_stream->id,codec->name,lang.c_str(),bitrate.c_str(),sc->m_stream->codec->channels, duration); + strinfo.Printf(_("Index[%02x] Codec[%s], Language[%s], Bitrate[%s], Channels[%d], Duration[%d]"),sc->m_stream->id,codec->name,lang.c_str(),bitrate.c_str(),sc->m_stream->codec->channels, duration); mStreamInfo->Add(strinfo); mScs[mNumStreams++] = sc; } @@ -541,7 +541,7 @@ int FFmpegImportFileHandle::Import(TrackFactory *trackFactory, if (mScs[s]->m_stream->start_time != int64_t(AV_NOPTS_VALUE) && mScs[s]->m_stream->start_time > 0) { stream_delay = mScs[s]->m_stream->start_time; - wxLogDebug(wxT("Stream %d start_time = %d, that would be %f milliseconds."), s, mScs[s]->m_stream->start_time, double(mScs[s]->m_stream->start_time)/AV_TIME_BASE*1000); + wxLogDebug(wxT("Stream %d start_time = %lld, that would be %f milliseconds."), s, (long long) mScs[s]->m_stream->start_time, double(mScs[s]->m_stream->start_time)/AV_TIME_BASE*1000); } if (stream_delay != 0) { diff --git a/src/import/ImportGStreamer.cpp b/src/import/ImportGStreamer.cpp index 256ef65..6f52198 100644 --- a/src/import/ImportGStreamer.cpp +++ b/src/import/ImportGStreamer.cpp @@ -983,9 +983,9 @@ GStreamerImportFileHandle::Init() // Create stream info string wxString strinfo; strinfo.Printf(wxT("Index[%02d], Type[%s], Channels[%d], Rate[%d]"), - i, + (unsigned int) i, wxString::FromUTF8(c->mType).c_str(), - c->mNumChannels, + (int) c->mNumChannels, (int) c->mSampleRate); mStreamInfo.Add(strinfo); } @@ -1371,7 +1371,7 @@ GStreamerImportFileHandle::OnTag(GstAppSink * WXUNUSED(appsink), GstTagList *tag } else if (G_VALUE_HOLDS_UINT(val)) { - string.Printf(wxT("%u"), g_value_get_uint(val)); + string.Printf(wxT("%u"), (unsigned int) g_value_get_uint(val)); } else if (G_VALUE_HOLDS_DOUBLE(val)) { diff --git a/src/import/ImportOGG.cpp b/src/import/ImportOGG.cpp index 347e590..0676a38 100644 --- a/src/import/ImportOGG.cpp +++ b/src/import/ImportOGG.cpp @@ -109,7 +109,7 @@ public: for (int i = 0; i < vorbisFile->links; i++) { wxString strinfo; - strinfo.Printf(wxT("Index[%02x] Version[%d], Channels[%d], Rate[%d]"),i,vorbisFile->vi[i].version,vorbisFile->vi[i].channels,vorbisFile->vi[i].rate); + strinfo.Printf(wxT("Index[%02x] Version[%d], Channels[%d], Rate[%ld]"), (unsigned int) i,vorbisFile->vi[i].version,vorbisFile->vi[i].channels,vorbisFile->vi[i].rate); mStreamInfo->Add(strinfo); mStreamUsage[i] = 0; } diff --git a/src/import/ImportRaw.cpp b/src/import/ImportRaw.cpp index 03279f0..4e38753 100644 --- a/src/import/ImportRaw.cpp +++ b/src/import/ImportRaw.cpp @@ -337,7 +337,7 @@ ImportRawDialog::ImportRawDialog(wxWindow * parent, if (sf_format_check(&info)) { mEncodingSubtype[mNumEncodings] = subtype; - encodings.Add(LAT1CTOWX(sf_encoding_index_name(i))); + encodings.Add(sf_encoding_index_name(i)); if ((mEncoding & SF_FORMAT_SUBMASK) == subtype) selection = mNumEncodings; diff --git a/src/ondemand/ODManager.cpp b/src/ondemand/ODManager.cpp index a2b352c..b69cc5a 100644 --- a/src/ondemand/ODManager.cpp +++ b/src/ondemand/ODManager.cpp @@ -311,7 +311,7 @@ void ODManager::Start() AudacityProject::AllProjectsDeleteLock(); AudacityProject* proj = GetActiveProject(); if(proj) - proj->AddPendingEvent( event ); + proj->GetEventHandler()->AddPendingEvent( event ); AudacityProject::AllProjectsDeleteUnlock(); } mTerminateMutex.Lock(); diff --git a/src/ondemand/ODTask.cpp b/src/ondemand/ODTask.cpp index c15b73d..fbf1f0c 100644 --- a/src/ondemand/ODTask.cpp +++ b/src/ondemand/ODTask.cpp @@ -158,7 +158,7 @@ void ODTask::DoSome(float amountWork) if(IsTaskAssociatedWithProject(gAudacityProjects[i])) { //this assumes tasks are only associated with one project. - gAudacityProjects[i]->AddPendingEvent( event ); + gAudacityProjects[i]->GetEventHandler()->AddPendingEvent( event ); //mark the changes so that the project can be resaved. gAudacityProjects[i]->GetUndoManager()->SetODChangesFlag(); break; diff --git a/src/prefs/KeyConfigPrefs.cpp b/src/prefs/KeyConfigPrefs.cpp index bac9697..224290b 100644 --- a/src/prefs/KeyConfigPrefs.cpp +++ b/src/prefs/KeyConfigPrefs.cpp @@ -420,7 +420,7 @@ void KeyConfigPrefs::OnHotkeyKeyDown(wxKeyEvent & e) nevent.SetDirection(!e.ShiftDown()); nevent.SetEventObject(t); nevent.SetCurrentFocus(t); - t->GetParent()->ProcessEvent(nevent); + t->GetParent()->GetEventHandler()->ProcessEvent(nevent); return; } @@ -465,7 +465,7 @@ void KeyConfigPrefs::OnFilterKeyDown(wxKeyEvent & e) nevent.SetDirection(!e.ShiftDown()); nevent.SetEventObject(t); nevent.SetCurrentFocus(t); - t->GetParent()->ProcessEvent(nevent); + t->GetParent()->GetEventHandler()->ProcessEvent(nevent); return; } @@ -996,7 +996,7 @@ void KeyConfigPrefs::OnCaptureKeyDown(wxKeyEvent & e) nevent.SetDirection(!e.ShiftDown()); nevent.SetEventObject(t); nevent.SetCurrentFocus(t); - t->GetParent()->ProcessEvent(nevent); + t->GetParent()->GetEventHandler()->ProcessEvent(nevent); return; } diff --git a/src/prefs/PrefsDialog.cpp b/src/prefs/PrefsDialog.cpp index d6cc2ba..0a306ed 100644 --- a/src/prefs/PrefsDialog.cpp +++ b/src/prefs/PrefsDialog.cpp @@ -185,8 +185,6 @@ PrefsDialog::PrefsDialog(wxWindow * parent) Fit(); wxSize sz = GetSize(); - wxASSERT_MSG(sz.x <= 800 && sz.y <= 600, wxT("Preferences dialog exceeds max size")); - if (sz.x > 800) { sz.x = 800; } diff --git a/src/prefs/QualityPrefs.cpp b/src/prefs/QualityPrefs.cpp index d3d3e75..44c6f6d 100644 --- a/src/prefs/QualityPrefs.cpp +++ b/src/prefs/QualityPrefs.cpp @@ -162,13 +162,13 @@ void QualityPrefs::PopulateOrExchange(ShuttleGui & S) { S.StartMultiColumn(2, wxEXPAND); { - S.SetStretchyCol(2); + S.SetStretchyCol(1); // 2nd column (= index 1) is stretchy S.TieChoice(_("Sample Rate Con&verter:"), Resample::GetFastMethodKey(), Resample::GetFastMethodDefault(), mConverterNames, - mConverterLabels), + mConverterLabels); S.SetSizeHints(mConverterNames); S.TieChoice(_("&Dither:"), diff --git a/src/toolbars/DeviceToolBar.cpp b/src/toolbars/DeviceToolBar.cpp index 13a5a58..3412886 100644 --- a/src/toolbars/DeviceToolBar.cpp +++ b/src/toolbars/DeviceToolBar.cpp @@ -71,9 +71,7 @@ void DeviceToolBar::Create(wxWindow *parent) { ToolBar::Create(parent); - // Simulate a size event to set initial meter placement/size - wxSizeEvent dummy; - OnSize(dummy); + Layout(); } void DeviceToolBar::RecreateTipWindows() @@ -618,7 +616,7 @@ void DeviceToolBar::FillInputChannels() name = _("2 (Stereo) Recording Channels"); } else { - name = wxString::Format(wxT("%d"), j + 1); + name = wxString::Format(wxT("%lld"), (long long) (j + 1)); } mInputChannels->Append(name); } diff --git a/src/toolbars/ToolsToolBar.cpp b/src/toolbars/ToolsToolBar.cpp index 2fcecab..9688674 100644 --- a/src/toolbars/ToolsToolBar.cpp +++ b/src/toolbars/ToolsToolBar.cpp @@ -59,7 +59,7 @@ IMPLEMENT_CLASS(ToolsToolBar, ToolBar); // Strings to convert a tool number into a status message // These MUST be in the same order as the ids above. -static const wxChar * MessageOfTool[numTools] = { +static const wxString MessageOfTool[numTools] = { wxTRANSLATE("Click and drag to select audio"), wxTRANSLATE("Click and drag to edit the amplitude envelope"), wxTRANSLATE("Click and drag to edit the samples"), diff --git a/src/widgets/ASlider.cpp b/src/widgets/ASlider.cpp index a7f6449..90abba8 100644 --- a/src/widgets/ASlider.cpp +++ b/src/widgets/ASlider.cpp @@ -1191,7 +1191,7 @@ void LWSlider::OnKeyEvent(wxKeyEvent & event) nevent.SetDirection( !event.ShiftDown() ); nevent.SetEventObject( mParent ); nevent.SetCurrentFocus( mParent ); - mParent->GetParent()->ProcessEvent( nevent ); + mParent->GetParent()->GetEventHandler()->ProcessEvent( nevent ); } break; @@ -1203,7 +1203,7 @@ void LWSlider::OnKeyEvent(wxKeyEvent & event) if (def && def->IsEnabled()) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId()); - mParent->ProcessEvent(cevent); + mParent->GetEventHandler()->ProcessEvent(cevent); } } @@ -1228,7 +1228,7 @@ void LWSlider::SendUpdate( float newValue ) int intValue = (int)( ( mCurrentValue - mMinValue ) * 1000.0f / ( mMaxValue - mMinValue ) ); e.SetInt( intValue ); - mParent->ProcessEvent( e ); + mParent->GetEventHandler()->ProcessEvent( e ); } int LWSlider::ValueToPosition(float val) diff --git a/src/widgets/ExpandingToolBar.cpp b/src/widgets/ExpandingToolBar.cpp index 801aa53..4fa5aa6 100644 --- a/src/widgets/ExpandingToolBar.cpp +++ b/src/widgets/ExpandingToolBar.cpp @@ -72,6 +72,7 @@ ExpandingToolBar. #include <wx/window.h> #endif +#include <wx/dcclient.h> #include <wx/dcmemory.h> #include <wx/log.h> #include <wx/dragimag.h> diff --git a/src/widgets/FileHistory.cpp b/src/widgets/FileHistory.cpp index 8ff5d05..c83f496 100644 --- a/src/widgets/FileHistory.cpp +++ b/src/widgets/FileHistory.cpp @@ -142,7 +142,7 @@ void FileHistory::Save(wxConfigBase & config, const wxString & group) // Stored in reverse order int n = mHistory.GetCount() - 1; for (size_t i = 1; i <= mHistory.GetCount(); i++) { - config.Write(wxString::Format(wxT("file%02d"), i), mHistory[n--]); + config.Write(wxString::Format(wxT("file%02d"), (int) i), mHistory[n--]); } config.SetPath(wxT("..")); diff --git a/src/widgets/Grabber.cpp b/src/widgets/Grabber.cpp index cf1d1fb..aff2ce6 100644 --- a/src/widgets/Grabber.cpp +++ b/src/widgets/Grabber.cpp @@ -89,7 +89,7 @@ void Grabber::SendEvent(wxEventType type, const wxPoint & pos) e.SetEventObject(parent); // Queue the event - parent->AddPendingEvent(e); + parent->GetEventHandler()->AddPendingEvent(e); } // diff --git a/src/widgets/Grid.cpp b/src/widgets/Grid.cpp index cd246d8..85e8b5c 100644 --- a/src/widgets/Grid.cpp +++ b/src/widgets/Grid.cpp @@ -71,7 +71,8 @@ void TimeEditor::BeginEdit(int row, int col, wxGrid *grid) { wxGridTableBase *table = grid->GetTable(); - table->GetValue(row, col).ToDouble(&mOld); + mOldString = table->GetValue(row, col); + mOldString.ToDouble(&mOld); GetTimeCtrl()->SetTimeValue(mOld); GetTimeCtrl()->EnableMenu(); @@ -81,16 +82,32 @@ void TimeEditor::BeginEdit(int row, int col, wxGrid *grid) bool TimeEditor::EndEdit(int row, int col, wxGrid *grid) { + wxString newvalue; + bool changed = EndEdit(row, col, grid, mOldString, &newvalue); + if (changed) { + ApplyEdit(row, col, grid); + } + return changed; +} + +bool TimeEditor::EndEdit(int row, int col, const wxGrid *grid, const wxString &oldval, wxString *newval) +{ double newtime = GetTimeCtrl()->GetTimeValue(); bool changed = newtime != mOld; if (changed) { - grid->GetTable()->SetValue(row, col, wxString::Format(wxT("%g"), newtime)); + mValueAsString = wxString::Format(wxT("%g"), newtime); + *newval = mValueAsString; } return changed; } +void TimeEditor::ApplyEdit(int row, int col, wxGrid *grid) +{ + grid->GetTable()->SetValue(row, col, mValueAsString); +} + void TimeEditor::Reset() { GetTimeCtrl()->SetTimeValue(mOld); @@ -295,8 +312,19 @@ void ChoiceEditor::BeginEdit(int row, int col, wxGrid* grid) Choice()->SetFocus(); } +bool ChoiceEditor::EndEdit(int row, int col, wxGrid *grid) +{ + wxString newvalue; + bool changed = EndEdit(row, col, grid, mOld, &newvalue); + if (changed) { + ApplyEdit(row, col, grid); + } + return changed; +} + bool ChoiceEditor::EndEdit(int row, int col, - wxGrid* grid) + const wxGrid* grid, + const wxString &oldval, wxString *newval) { int sel = Choice()->GetSelection(); @@ -307,12 +335,20 @@ bool ChoiceEditor::EndEdit(int row, int col, } wxString val = mChoices[sel]; - if (val == mOld) - return false; + bool changed = val != mOld; - grid->GetTable()->SetValue(row, col, val); + if (changed) + { + mValueAsString = val; + *newval = val; + } - return true; + return changed; +} + +void ChoiceEditor::ApplyEdit(int row, int col, wxGrid *grid) +{ + grid->GetTable()->SetValue(row, col, mValueAsString); } void ChoiceEditor::Reset() @@ -491,7 +527,7 @@ void Grid::OnKeyDown(wxKeyEvent &event) if (def && def->IsEnabled()) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId()); - GetParent()->ProcessEvent(cevent); + GetParent()->GetEventHandler()->ProcessEvent(cevent); } } else { diff --git a/src/widgets/Grid.h b/src/widgets/Grid.h index fbdf553..9d036cc 100644 --- a/src/widgets/Grid.h +++ b/src/widgets/Grid.h @@ -52,8 +52,13 @@ class TimeEditor:public wxGridCellEditor void SetSize(const wxRect &rect); void BeginEdit(int row, int col, wxGrid *grid); + bool EndEdit(int row, int col, wxGrid *grid); + bool EndEdit(int row, int col, const wxGrid *grid, const wxString &oldval, wxString *newval); + + void ApplyEdit(int row, int col, wxGrid *grid); + void Reset(); wxString GetFormat(); @@ -65,12 +70,14 @@ class TimeEditor:public wxGridCellEditor wxString GetValue() const; TimeTextCtrl *GetTimeCtrl() const { return (TimeTextCtrl *)m_control; }; - + private: wxString mFormat; double mRate; double mOld; + wxString mOldString; + wxString mValueAsString; }; // ---------------------------------------------------------------------------- @@ -124,8 +131,13 @@ public: void SetSize(const wxRect &rect); void BeginEdit(int row, int col, wxGrid *grid); + bool EndEdit(int row, int col, wxGrid *grid); + bool EndEdit(int row, int col, const wxGrid *grid, const wxString &oldval, wxString *newval); + + void ApplyEdit(int row, int col, wxGrid *grid); + void Reset(); wxGridCellEditor *Clone() const; @@ -159,6 +171,7 @@ public: wxArrayString mChoices; wxString mOld; + wxString mValueAsString; }; // ---------------------------------------------------------------------------- diff --git a/src/widgets/ImageRoll.cpp b/src/widgets/ImageRoll.cpp index dd8c200..9686961 100644 --- a/src/widgets/ImageRoll.cpp +++ b/src/widgets/ImageRoll.cpp @@ -299,7 +299,7 @@ bool ImageRoll::Ok() const } void ImageRoll::DrawBitmap(wxDC &dc, wxBitmap &bitmap, - int x, int y, int logicalFunc) + int x, int y, wxRasterOperationMode logicalFunc) { if (logicalFunc == wxCOPY) dc.DrawBitmap(bitmap, x, y); @@ -311,7 +311,7 @@ void ImageRoll::DrawBitmap(wxDC &dc, wxBitmap &bitmap, } } -void ImageRoll::Draw(wxDC &dc, wxRect rect, int WXUNUSED(logicalFunc)) +void ImageRoll::Draw(wxDC &dc, wxRect rect, wxRasterOperationMode WXUNUSED(logicalFunc)) { int width = rect.width; int height = rect.height; @@ -434,7 +434,7 @@ ImageRollPanel::ImageRollPanel(wxWindow *parent, mImageRoll.GetMaxSize()); } -void ImageRollPanel::SetLogicalFunction(int func) +void ImageRollPanel::SetLogicalFunction(wxRasterOperationMode func) { mLogicalFunction = func; } diff --git a/src/widgets/ImageRoll.h b/src/widgets/ImageRoll.h index e8ed46c..4503e80 100644 --- a/src/widgets/ImageRoll.h +++ b/src/widgets/ImageRoll.h @@ -12,9 +12,18 @@ #ifndef __AUDACITY_IMAGE_ROLL__ #define __AUDACITY_IMAGE_ROLL__ +#include <wx/dc.h> +#include <wx/dcclient.h> #include <wx/defs.h> #include <wx/dynarray.h> #include <wx/panel.h> +#include <wx/version.h> + + +#if wxMAJOR_VERSION < 3 +# define wxRasterOperationMode int +#endif + WX_DECLARE_OBJARRAY(wxBitmap, BitmapArray); WX_DECLARE_OBJARRAY(wxImage, ImageArray); @@ -40,7 +49,7 @@ class ImageRoll wxSize GetMaxSize() const { return mMaxSize; } void Draw(wxDC &dc, wxRect rect, - int logicalFunc = wxCOPY); + wxRasterOperationMode logicalFunc = wxCOPY); static ImageArray SplitH(const wxImage &src, wxColour magicColor); static ImageArray SplitV(const wxImage &src, wxColour magicColor); @@ -48,7 +57,7 @@ class ImageRoll protected: void DrawBitmap(wxDC &dc, wxBitmap &bitmap, - int x, int y, int logicalFunc = wxCOPY); + int x, int y, wxRasterOperationMode logicalFunc = wxCOPY); void Init(RollType type, const wxImage &src, wxColour magicColor); @@ -72,7 +81,7 @@ class ImageRollPanel : public wxPanel const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); - void SetLogicalFunction(int func); + void SetLogicalFunction(wxRasterOperationMode func); void OnPaint(wxPaintEvent &evt); void OnSize(wxSizeEvent &evt); @@ -80,7 +89,7 @@ class ImageRollPanel : public wxPanel protected: ImageRoll mImageRoll; - int mLogicalFunction; + wxRasterOperationMode mLogicalFunction; DECLARE_EVENT_TABLE(); diff --git a/src/widgets/KeyView.cpp b/src/widgets/KeyView.cpp index 5e30e16..275e35e 100644 --- a/src/widgets/KeyView.cpp +++ b/src/widgets/KeyView.cpp @@ -1576,7 +1576,7 @@ KeyView::CmpKeyNodeByTree(KeyNode ***n1, KeyNode ***n2) else { // A "menu" node, so prepend the line number - k1.Printf(wxT("%08x%s"), t1->line, t1->label.c_str()); + k1.Printf(wxT("%08x%s"), (unsigned int) t1->line, t1->label.c_str()); } // See above for explanation @@ -1588,7 +1588,7 @@ KeyView::CmpKeyNodeByTree(KeyNode ***n1, KeyNode ***n2) else { // A "menu" node, so prepend the line number - k2.Printf(wxT("%08x%s"), t2->line, t2->label.c_str()); + k2.Printf(wxT("%08x%s"), (unsigned int) t2->line, t2->label.c_str()); } // See wxWidgets documentation for explanation of comparison results. diff --git a/src/widgets/TimeTextCtrl.cpp b/src/widgets/TimeTextCtrl.cpp index 6137354..0b2fb0b 100644 --- a/src/widgets/TimeTextCtrl.cpp +++ b/src/widgets/TimeTextCtrl.cpp @@ -168,6 +168,7 @@ different formats. #include <math.h> +#include <wx/dcclient.h> #include <wx/dcmemory.h> #include <wx/font.h> #include <wx/intl.h> @@ -1435,7 +1436,7 @@ void TimeTextCtrl::OnKeyDown(wxKeyEvent &event) nevent.SetDirection(!event.ShiftDown()); nevent.SetEventObject(parent); nevent.SetCurrentFocus(parent); - GetParent()->ProcessEvent(nevent); + GetParent()->GetEventHandler()->ProcessEvent(nevent); event.Skip(false); } @@ -1445,7 +1446,7 @@ void TimeTextCtrl::OnKeyDown(wxKeyEvent &event) if (def && def->IsEnabled()) { wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId()); - GetParent()->ProcessEvent(cevent); + GetParent()->GetEventHandler()->ProcessEvent(cevent); event.Skip(false); } } diff --git a/src/widgets/numformatter.cpp b/src/widgets/numformatter.cpp index 8277231..9104109 100644 --- a/src/widgets/numformatter.cpp +++ b/src/widgets/numformatter.cpp @@ -11,6 +11,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#include "wx/version.h" + +// on wx >= 3.0 we should use the real numformatter (instead of a backported copy) +#if !wxCHECK_VERSION(3,0,0) + // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -367,3 +372,6 @@ bool wxNumberFormatter::FromString(wxString s, double *val) RemoveThousandsSeparators(s); return s.ToDouble(val); } + +#endif // !wxCHECK_VERSION(3,0,0) + diff --git a/src/widgets/numformatter.h b/src/widgets/numformatter.h index f32306d..6123b78 100644 --- a/src/widgets/numformatter.h +++ b/src/widgets/numformatter.h @@ -11,8 +11,15 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_NUMFORMATTER_H_ -#define _WX_NUMFORMATTER_H_ +#ifndef _NUMFORMATTER_H_ +#define _NUMFORMATTER_H_ + +#include "wx/version.h" + +// on wx >= 3.0 we should use the real numformatter (instead of a backported copy) +#if wxCHECK_VERSION(3,0,0) +# include "wx/numformatter.h" +#else // wxCHECK_VERSION(3,0,0) #include "wx/string.h" @@ -84,4 +91,6 @@ private: static void RemoveThousandsSeparators(wxString& s); }; -#endif // _WX_NUMFORMATTER_H_ +#endif // wxCHECK_VERSION(3,0,0) + +#endif // _NUMFORMATTER_H_ diff --git a/src/widgets/valnum.cpp b/src/widgets/valnum.cpp index 2bde5ff..ea45613 100644 --- a/src/widgets/valnum.cpp +++ b/src/widgets/valnum.cpp @@ -11,6 +11,11 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#include "wx/version.h" + +// on wx >= 3.0 we should use the real valnum (instead of a backported copy) +#if !wxCHECK_VERSION(3,0,0) + // ============================================================================ // Declarations // ============================================================================ @@ -310,3 +315,6 @@ wxFloatingPointValidatorBase::IsCharOk(const wxString& val, } #endif // wxUSE_VALIDATORS && wxUSE_TEXTCTRL + +#endif // !wxCHECK_VERSION(3,0,0) + diff --git a/src/widgets/valnum.h b/src/widgets/valnum.h index a049eb3..c5bc3a6 100644 --- a/src/widgets/valnum.h +++ b/src/widgets/valnum.h @@ -8,8 +8,15 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_VALNUM_H_ -#define _WX_VALNUM_H_ +#ifndef _VALNUM_H_ +#define _VALNUM_H_ + +#include "wx/version.h" + +// on wx >= 3.0 we should use the real valnum (instead of a backported copy) +#if wxCHECK_VERSION(3,0,0) +# include "wx/valnum.h" +#else // wxCHECK_VERSION(3,0,0) #include "wx/defs.h" @@ -471,4 +478,6 @@ wxMakeFloatingPointValidator(int precision, T *value, int style = wxNUM_VAL_DEFA #endif // wxUSE_VALIDATORS -#endif // _WX_VALNUM_H_ +#endif // wxCHECK_VERSION(3,0,0) + +#endif // _VALNUM_H_ diff --git a/src/xml/XMLWriter.cpp b/src/xml/XMLWriter.cpp index da9971f..1838693 100644 --- a/src/xml/XMLWriter.cpp +++ b/src/xml/XMLWriter.cpp @@ -189,9 +189,9 @@ void XMLWriter::WriteAttr(const wxChar *name, long long value) void XMLWriter::WriteAttr(const wxString &name, size_t value) { - Write(wxString::Format(wxT(" %s=\"%ld\""), + Write(wxString::Format(wxT(" %s=\"%lld\""), name.c_str(), - value)); + (long long) value)); } void XMLWriter::WriteAttr(const wxChar *name, size_t value) @@ -247,7 +247,7 @@ void XMLWriter::WriteSubTree(const wxString &value) mHasKids[0] = true; } - Write(value.c_str()); + Write(value); } void XMLWriter::WriteSubTree(const wxChar *value) -- 1.9.1
_______________________________________________ pkg-multimedia-maintainers mailing list pkg-multimedia-maintainers@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-multimedia-maintainers