bool InsertSilence(const char* _undoTitle, double _pos, double _len) { if (_pos>=0.0 && _len>0.0 && _pos<SNM_GetProjectLength()) { if (_undoTitle) Undo_BeginBlock2(NULL); PreventUIRefresh(1); double timeSel1, timeSel2, d=_pos+_len; GetSet_LoopTimeRange2(NULL, false, false, &timeSel1, &timeSel2, false); GetSet_LoopTimeRange2(NULL, true, false, &_pos, &d, false); Main_OnCommand(40200, 0); // insert space at time sel // restore time sel, enlarge if needed (mimic native behavior) if (timeSel1>_pos) timeSel1+=_len; if (_pos<timeSel2) timeSel2+=_len; GetSet_LoopTimeRange2(NULL, true, false, &timeSel1, &timeSel2, false); PreventUIRefresh(-1); if (_undoTitle) Undo_EndBlock2(NULL, _undoTitle, UNDO_STATE_ALL); return true; } return false; }
void GetTimeSegmentPositions(TimeSegment timeSegment, double &dStartPos, double &dEndPos, MediaItem* item) { double dOrgCursorPos = GetCursorPositionEx(0); bool bRefreshCurPos = false; switch(timeSegment) { case eTIMESEGMENT_TIMESEL: //Main_OnCommandEx(ID_GOTO_TIMESEL_END, 0, 0); //dEndPos = GetCursorPositionEx(0); //Main_OnCommandEx(ID_GOTO_TIMESEL_START, 0, 0); //dStartPos = GetCursorPositionEx(0); GetSet_LoopTimeRange2(0, false, false, &dStartPos, &dEndPos, false); break; case eTIMESEGMENT_SELITEM: if(item != NULL) { dStartPos = GetMediaItemInfo_Value(item, "D_POSITION"); dEndPos = dStartPos + GetMediaItemInfo_Value(item, "D_LENGTH"); } else { Main_OnCommandEx(ID_GOTO_SELITEM_END, 0, 0); dEndPos = GetCursorPositionEx(0); Main_OnCommandEx(ID_GOTO_SELITEM_START, 0, 0); dStartPos = GetCursorPositionEx(0); bRefreshCurPos = true; } break; case eTIMESEGMENT_LOOP: //Main_OnCommandEx(ID_GOTO_LOOP_END, 0, 0); //dEndPos = GetCursorPositionEx(0); //Main_OnCommandEx(ID_GOTO_LOOP_START, 0, 0); //dStartPos = GetCursorPositionEx(0); GetSet_LoopTimeRange2(0, false, true, &dStartPos, &dEndPos, false); break; case eTIMESEGMENT_PROJECT: Main_OnCommandEx(ID_GOTO_PROJECT_END, 0, 0); dEndPos = GetCursorPositionEx(0); //Main_OnCommandEx(ID_GOTO_PROJECT_START, 0, 0); //dStartPos = GetCursorPositionEx(0); dStartPos = *(int*)GetConfigVar("projtimeoffs"); bRefreshCurPos = true; break; //case eTIMESEGMENT_CURRENTMEASURE: // Main_OnCommandEx(ID_GOTO_CURMEASURE_START, 0, 0); // dStartPos = GetCursorPositionEx(0); // Main_OnCommandEx(ID_GOTO_NEXTMEASURE_START, 0, 0); // dEndPos = GetCursorPositionEx(0); //break; default: break; } if(bRefreshCurPos) SetEditCurPos2(0, dOrgCursorPos, true, false); }
bool GotoMarkerRegion(ReaProject* _proj, int _num, int _flags, bool _select = false) { bool isrgn; double pos, end; int x=0, n; while ((x = EnumProjectMarkers3(_proj, x, &isrgn, &pos, &end, NULL, &n, NULL))) if (n == _num && ((!isrgn && _flags&SNM_MARKER_MASK) || (isrgn && _flags&SNM_REGION_MASK))) { PreventUIRefresh(1); if (_select && isrgn && (_flags&SNM_REGION_MASK)) GetSet_LoopTimeRange2(NULL, true, true, &pos, &end, false); // seek is managed below int* opt = (int*)GetConfigVar("smoothseek"); // obeys smooth seek SetEditCurPos2(_proj, pos, true, opt && *opt); // includes an undo point, if enabled in prefs PreventUIRefresh(-1); return true; } return false; }