EnvelopeProcessor::ErrorCode EnvelopeProcessor::processSelectedTrackEnv() { TrackEnvelope* envelope = GetSelectedTrackEnvelope(0); if(!envelope) return eERRORCODE_NOENVELOPE; Undo_BeginBlock2(0); double dStartPos, dEndPos; GetTimeSegmentPositions(_envModParams.timeSegment, dStartPos, dEndPos); if(dStartPos==dEndPos) return eERRORCODE_NULLTIMESELECTION; double dValMin, dValMax; ErrorCode res = getTrackEnvelopeMinMax(envelope, dValMin, dValMax); if(res != eERRORCODE_OK) return res; char* envState = GetSetObjectState(envelope, ""); string newState; res = processPoints(envState, newState, dStartPos, dEndPos, dValMin, dValMax, _envModParams.type, _envModParams.strength, _envModParams.offset); if(GetSetObjectState(envelope, newState.c_str())) res = eERRORCODE_UNKNOWN; else FreeHeapPtr(envState); //UpdateTimeline(); /* JFB "recursive" undo point, enabled at top level Undo_OnStateChangeEx("Envelope Processor", UNDO_STATE_ALL, -1); */ Undo_EndBlock2(NULL, __LOCALIZE("Track envelope processor","sws_undo"), UNDO_STATE_TRACKCFG); return res; }
// native assumption: only 1 env selected at a time (v4.13) MediaTrack* GetTrackWithSelEnv() { if (TrackEnvelope* env = GetSelectedTrackEnvelope(NULL)) for (int i=0; i <= GetNumTracks(); i++) // incl. master if (MediaTrack* tr = CSurf_TrackFromID(i, false)) for (int j=0; j < CountTrackEnvelopes(tr); j++) if (env == GetTrackEnvelope(tr, j)) return tr; return NULL; }
EnvelopeProcessor::ErrorCode EnvelopeProcessor::generateSelectedTrackEnvLfo() { TrackEnvelope* envelope = GetSelectedTrackEnvelope(0); if(!envelope) return eERRORCODE_NOENVELOPE; Undo_BeginBlock2(0); //! \todo: use insert/goto actions AFTER error returns double dStartPos, dEndPos; GetTimeSegmentPositions(_parameters.timeSegment, dStartPos, dEndPos); if(dStartPos==dEndPos) return eERRORCODE_NULLTIMESELECTION; double dOrgCursorPos = GetCursorPositionEx(0); SetEditCurPos2(0, dStartPos-EPSILON_TIME, false, false); Main_OnCommandEx(ID_ENVELOPE_INSERT_POINT, 0, 0); SetEditCurPos2(0, dEndPos+EPSILON_TIME, false, false); Main_OnCommandEx(ID_ENVELOPE_INSERT_POINT, 0, 0); SetEditCurPos2(0, dOrgCursorPos, false, false); //Main_OnCommandEx(ID_MOVE_TIMESEL_NUDGE_LEFTEDGE_LEFT, 0, 0); //Main_OnCommandEx(ID_MOVE_TIMESEL_NUDGE_RIGHTEDGE_RIGHT, 0, 0); //Main_OnCommandEx(ID_GOTO_TIMESEL_START, 0, 0); //Main_OnCommandEx(ID_ENVELOPE_INSERT_POINT, 0, 0); //Main_OnCommandEx(ID_GOTO_TIMESEL_END, 0, 0); //Main_OnCommandEx(ID_ENVELOPE_INSERT_POINT, 0, 0); //Main_OnCommandEx(ID_MOVE_TIMESEL_NUDGE_LEFTEDGE_RIGHT, 0, 0); //Main_OnCommandEx(ID_MOVE_TIMESEL_NUDGE_RIGHTEDGE_LEFT, 0, 0); //Main_OnCommandEx(ID_ENVELOPE_DELETE_ALL_POINTS_TIMESEL, 0, 0); ErrorCode res = generateTrackLfo(envelope, dStartPos, dEndPos, _parameters.waveParams, _parameters.precision); //UpdateTimeline(); Undo_EndBlock2(NULL, __LOCALIZE("Track envelope LFO","sws_undo"), UNDO_STATE_TRACKCFG); return res; }