Fix for bug 558

This commit is contained in:
Steve Daulton 2015-08-12 14:19:01 +01:00
parent 133b97feb6
commit 2cb32c763f
5 changed files with 33 additions and 17 deletions

View File

@ -2014,10 +2014,10 @@ bool Effect::TrackProgress(int whichTrack, double frac, wxString msg)
return (updateResult != eProgressSuccess);
}
bool Effect::TrackGroupProgress(int whichGroup, double frac)
bool Effect::TrackGroupProgress(int whichGroup, double frac, wxString msg)
{
int updateResult = (mProgress ?
mProgress->Update(whichGroup + frac, (double) mNumGroups) :
mProgress->Update(whichGroup + frac, (double) mNumGroups, msg) :
eProgressSuccess);
return (updateResult != eProgressSuccess);
}

View File

@ -313,7 +313,7 @@ protected:
// Pass a fraction between 0.0 and 1.0, for the current track group
// (when doing stereo groups at a time)
bool TrackGroupProgress(int whichGroup, double frac);
bool TrackGroupProgress(int whichGroup, double frac, wxString = wxT(""));
int GetNumWaveTracks() { return mNumTracks; }

View File

@ -423,6 +423,18 @@ bool NyquistEffect::Process()
mTrackIndex = 0;
mNumSelectedChannels = 0;
SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks);
for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) {
mNumSelectedChannels++;
if (mT1 >= mT0) {
if (t->GetLinked()) {
mNumSelectedChannels++;
sel.Next();
}
}
}
mDebugOutput.Clear();
if (mVersion >= 4)
@ -522,24 +534,14 @@ bool NyquistEffect::Process()
mProps += wxString::Format(wxT("(putprop '*PROJECT* (float %s) 'PREVIEW-DURATION)\n"),
Internat::ToString(previewLen).c_str());
SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks);
int numChannels = 0;
for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) {
numChannels++;
if (mT1 >= mT0) {
if (t->GetLinked()) {
numChannels++;
sel.Next();
}
}
}
mProps += wxString::Format(wxT("(putprop '*SELECTION* (float %s) 'START)\n"),
Internat::ToString(mT0).c_str());
mProps += wxString::Format(wxT("(putprop '*SELECTION* (float %s) 'END)\n"),
Internat::ToString(mT1).c_str());
mProps += wxString::Format(wxT("(putprop '*SELECTION* (list %s) 'TRACKS)\n"), waveTrackList.c_str());
mProps += wxString::Format(wxT("(putprop '*SELECTION* %d 'CHANNELS)\n"), numChannels);
mProps += wxString::Format(wxT("(putprop '*SELECTION* %d 'CHANNELS)\n"), mNumSelectedChannels);
}
// Keep track of whether the current track is first selected in its sync-lock group
@ -967,6 +969,19 @@ bool NyquistEffect::ProcessOne()
rval = nyx_eval_expression(cmd.mb_str(wxConvUTF8));
// Audacity has no idea how long Nyquist processing will take, but
// can monitor audio being returned.
// Anything other than audio should be returmed almost instantly
// so notify the user that process has completed (bug 558)
if ((rval != nyx_audio) && ((mCount + mCurNumChannels) == mNumSelectedChannels)) {
if (mCurNumChannels == 1) {
TrackProgress(mCount, 1.0, _("Processing complete."));
}
else {
TrackGroupProgress(mCount, 1.0, _("Processing complete."));
}
}
if (!rval) {
wxLogWarning(wxT("Nyquist returned NIL"));
return true;

View File

@ -209,6 +209,7 @@ private:
bool mFirstInGroup;
double mOutputTime;
int mCount;
int mNumSelectedChannels;
double mProgressIn;
double mProgressOut;
double mProgressTot;

View File

@ -1233,8 +1233,8 @@ ProgressDialog::Update(int value, const wxString & message)
mLastValue = value;
}
// Only update if a full second has passed.
if (now - mLastUpdate > 1000)
// Only update if a full second has passed.or track progress is complete
if ((now - mLastUpdate > 1000) || (value == 1000))
{
wxTimeSpan tsElapsed(0, 0, 0, elapsed);
wxTimeSpan tsRemains(0, 0, 0, remains);