void ColorTimer() { static int iRulerLaneCol[3]; static bool bRecording = false; if (!bRecording && g_bRecRedRuler && GetPlayState() & 4) { int iSize; ColorTheme* colors = (ColorTheme*)GetColorThemeStruct(&iSize); for (int i = 0; i < 3; i++) { iRulerLaneCol[i] = colors->ruler_lane_bgcolor[i]; colors->ruler_lane_bgcolor[i] = RGB(0xFF, 0, 0); } UpdateTimeline(); bRecording = true; } else if (bRecording && (!g_bRecRedRuler || !(GetPlayState() & 4))) { int iSize; ColorTheme* colors = (ColorTheme*)GetColorThemeStruct(&iSize); for (int i = 0; i < 3; i++) colors->ruler_lane_bgcolor[i] = iRulerLaneCol[i]; UpdateTimeline(); bRecording = false; } }
void RMSNormalizeAll(double dTargetDb, double dWindowSize) { WDL_TypedBuf<MediaItem*> items; SWS_GetSelectedMediaItems(&items); double dMaxRMS = -DBL_MAX; ANALYZE_PCM a; memset(&a, 0, sizeof(a)); a.dWindowSize = dWindowSize; for (int i = 0; i < items.GetSize(); i++) { MediaItem* mi = items.Get()[i]; MediaItem_Take* take = GetMediaItemTake(mi, -1); if (take && AnalyzeItem(mi, &a) && a.dRMS != 0.0 && a.dRMS > dMaxRMS) dMaxRMS = a.dRMS; } if (dMaxRMS > -DBL_MAX) { for (int i = 0; i < items.GetSize(); i++) { MediaItem* mi = items.Get()[i]; MediaItem_Take* take = GetMediaItemTake(mi, -1); if (take) { double dVol = *(double*)GetSetMediaItemTakeInfo(take, "D_VOL", NULL); dVol *= DB2VAL(dTargetDb) / dMaxRMS; GetSetMediaItemTakeInfo(take, "D_VOL", &dVol); } } UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Normalize items to RMS","sws_undo"), UNDO_STATE_ITEMS, -1); } }
void SelULItem(COMMAND_T* = NULL) { UnselOnTracks(); for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); int iNumItems = GetTrackNumMediaItems(tr); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL) && iNumItems) { MediaItem* pUL = GetTrackMediaItem(tr, 0); double dFirstPos = *(double*)GetSetMediaItemInfo(pUL, "D_POSITION", NULL); float fFIPMy = *(float*)GetSetMediaItemInfo(pUL, "F_FREEMODE_Y", NULL); for (int j = 1; j < iNumItems; j++) { if (dFirstPos != *(double*)GetSetMediaItemInfo(GetTrackMediaItem(tr, j), "D_POSITION", NULL)) break; if (fFIPMy > *(float*)GetSetMediaItemInfo(GetTrackMediaItem(tr, j), "F_FREEMODE_Y", NULL)) { pUL = GetTrackMediaItem(tr, j); fFIPMy = *(float*)GetSetMediaItemInfo(pUL, "F_FREEMODE_Y", NULL); } } GetSetMediaItemInfo(pUL, "B_UISEL", &g_bTrue); } } UpdateTimeline(); }
void SelPrevItem(COMMAND_T* ctx) { // Find the last selected MediaItem* prevMi = NULL; for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (GetTrackVis(tr) & 2) { for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) { if (prevMi) { if (ctx->user == 0) Main_OnCommand(40289, 0); // Unselect all items GetSetMediaItemInfo(prevMi, "B_UISEL", &g_bTrue); UpdateTimeline(); return; } } prevMi = mi; } } } }
void ItemGradient(COMMAND_T* = NULL) { int iCurPos = 0; int iNumSel = 0; // First, must count the number of selected items for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) if (*(bool*)GetSetMediaItemInfo(GetTrackMediaItem(tr, j), "B_UISEL", NULL)) iNumSel++; } // Now, set the colors for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) { COLORREF cr = CalcGradient(g_crGradStart, g_crGradEnd, (double)iCurPos++ / (iNumSel-1)) | 0x1000000; GetSetMediaItemInfo(mi, "I_CUSTOMCOLOR", &cr); } } } Undo_OnStateChange(__LOCALIZE("Set selected item(s) to color gradient","sws_undo")); UpdateTimeline(); }
void CustomColorAll(COMMAND_T*) { // Get the first selected track for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) { Undo_BeginBlock(); Main_OnCommand(40357, 0); // Set track(s) to one custom color // Assume the user clicked 'OK' in the color picker! COLORREF cr = *(COLORREF*)GetSetMediaTrackInfo(tr, "I_CUSTOMCOLOR", NULL); for (int i = 1; i <= GetNumTracks(); i++) { tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) GetSetMediaItemInfo(mi, "I_CUSTOMCOLOR", &cr); } } UpdateTimeline(); Undo_EndBlock(__LOCALIZE("Set selected track(s)/item(s) to custom color","sws_undo"), UNDO_STATE_ALL); return; } } // No tracks selected so just run the item action Main_OnCommand(40704, 0); // Set item(s) to one custom color }
void TakeRandomCols(COMMAND_T* = NULL) { COLORREF cr; // All black check if (AllBlack()) return; for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) { for (int h = 0; h < CountTakes(mi); h++) { while (!(cr = g_custColors[rand() % 16])); cr |= 0x1000000; GetSetMediaItemTakeInfo(GetTake(mi, h), "I_CUSTOMCOLOR", &cr); } } } } Undo_OnStateChange(__LOCALIZE("Set takes in selected item(s) to random custom color(s)","sws_undo")); UpdateTimeline(); }
void RegionsFromItems(COMMAND_T* ct) { // Ignore the fact that the user may have items selected with the exact same times. Just blindly create regions! WDL_TypedBuf<MediaItem*> items; SWS_GetSelectedMediaItems(&items); bool bUndo = false; for (int i = 0; i < items.GetSize(); i++) { MediaItem_Take* take = GetActiveTake(items.Get()[i]); if (take) { char* cName = (char*)GetSetMediaItemTakeInfo(take, "P_NAME", NULL); double dStart = *(double*)GetSetMediaItemInfo(items.Get()[i], "D_POSITION", NULL); double dEnd = *(double*)GetSetMediaItemInfo(items.Get()[i], "D_LENGTH", NULL) + dStart; AddProjectMarker(NULL, true, dStart, dEnd, cName, -1); bUndo = true; } else if (!CountTakes(items.Get()[i])) /* In case of an empty item there is no take so process item instead */ { double dStart = *(double*)GetSetMediaItemInfo(items.Get()[i], "D_POSITION", NULL); double dEnd = *(double*)GetSetMediaItemInfo(items.Get()[i], "D_LENGTH", NULL) + dStart; AddProjectMarker(NULL, true, dStart, dEnd, NULL, -1); bUndo = true; } } if (bUndo) { UpdateTimeline(); Undo_OnStateChangeEx(SWS_CMD_SHORTNAME(ct), UNDO_STATE_MISCCFG, -1); } }
void HideAll(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) SetTrackVis(CSurf_TrackFromID(i, false), 0); TrackList_AdjustWindows(MAJORADJUST); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Hide all tracks","sws_undo"), UNDO_STATE_TRACKCFG, -1); }
bool FilteredVisState::UpdateReaper(bool bHideFiltered) { bool bChanged = false; // Remove tracks from filteredOut that aren't in the project for (int i = 0; i < m_filteredOut.GetSize(); i++) if (CSurf_TrackToID(m_filteredOut.Get(i)->tr, false) <= 0) m_filteredOut.Delete(i--, true); for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); int iVis = GetTrackVis(tr); int iNewVis = iVis; bool bShow = !bHideFiltered || MatchesFilter(tr); // Is this track in the filteredOut list? int j; for (j = 0; j < m_filteredOut.GetSize(); j++) if (m_filteredOut.Get(j)->tr == tr) break; if (j < m_filteredOut.GetSize()) { if (bShow) { iNewVis = m_filteredOut.Get(j)->iVis; m_filteredOut.Delete(j, true); } else iNewVis = 0; } else if (!bShow) { iNewVis = 0; TrackVisState* tvs = m_filteredOut.Add(new TrackVisState); tvs->tr = tr; tvs->iVis = iVis; } if (iVis != iNewVis) { SetTrackVis(tr, iNewVis); bChanged = true; } } if (bChanged) { TrackList_AdjustWindows(false); UpdateTimeline(); } return bChanged; }
void MinimizeTracks(COMMAND_T* = NULL) { for (int i = 0; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) GetSetMediaTrackInfo(tr, "I_HEIGHTOVERRIDE", &g_i1); } TrackList_AdjustWindows(false); UpdateTimeline(); }
void UnselOnTracks(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) for (int j = 0; j < GetTrackNumMediaItems(tr); j++) GetSetMediaItemInfo(GetTrackMediaItem(tr, j), "B_UISEL", &g_bFalse); } UpdateTimeline(); }
void ShowAllTCP(COMMAND_T*) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); SetTrackVis(tr, GetTrackVis(tr) | 2); } TrackList_AdjustWindows(MAJORADJUST); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Show all tracks in TCP","sws_undo"), UNDO_STATE_TRACKCFG, -1); }
void ToggleHide(COMMAND_T*) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) SetTrackVis(tr, GetTrackVis(tr) ? 0 : 3); } TrackList_AdjustWindows(MAJORADJUST); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Toggle selected tracks fully visible/hidden","sws_undo"), UNDO_STATE_TRACKCFG, -1); }
void HideUnSel(COMMAND_T*) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (!*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) SetTrackVis(tr, 0); } TrackList_AdjustWindows(MAJORADJUST); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Hide unselected tracks","sws_undo"), UNDO_STATE_TRACKCFG, -1); }
void SelMutedItems(COMMAND_T* ct) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); bool sel = *(bool*)GetSetMediaItemInfo(mi, "B_MUTE", NULL); if ((int)ct->user == 0) sel = !sel; GetSetMediaItemInfo(mi, "B_UISEL", &sel); } } UpdateTimeline(); }
void MarkerList::UpdateReaper() { // Function to take content of list and update Reaper environment // First delete all markers/regions, then regen from list bool bReg; int iID; while (EnumProjectMarkers(0, &bReg, NULL, NULL, NULL, &iID)) DeleteProjectMarker(NULL, iID, bReg); SWS_SectionLock lock(&m_mutex); for (int i = 0; i < m_items.GetSize(); i++) m_items.Get(i)->AddToProject(); UpdateTimeline(); }
void OrganizeByVol(COMMAND_T* ct) { for (int iTrack = 1; iTrack <= GetNumTracks(); iTrack++) { WDL_TypedBuf<MediaItem*> items; SWS_GetSelectedMediaItemsOnTrack(&items, CSurf_TrackFromID(iTrack, false)); if (items.GetSize() > 1) { double dStart = *(double*)GetSetMediaItemInfo(items.Get()[0], "D_POSITION", NULL); double* pVol = new double[items.GetSize()]; ANALYZE_PCM a; memset(&a, 0, sizeof(a)); if (ct->user == 2) { // Windowed mode, set the window size char str[100]; GetPrivateProfileString(SWS_INI, SWS_RMS_KEY, "-20,0.1", str, 100, get_ini_file()); char* pWindow = strchr(str, ','); a.dWindowSize = pWindow ? atof(pWindow+1) : 0.1; } for (int i = 0; i < items.GetSize(); i++) { pVol[i] = -1.0; if (AnalyzeItem(items.Get()[i], &a)) pVol[i] = ct->user ? a.dRMS : a.dPeakVal; } // Sort and arrange items from min to max RMS while (true) { int iItem = -1; double dMinVol = 1e99; for (int i = 0; i < items.GetSize(); i++) if (pVol[i] >= 0.0 && pVol[i] < dMinVol) { dMinVol = pVol[i]; iItem = i; } if (iItem == -1) break; pVol[iItem] = -1.0; GetSetMediaItemInfo(items.Get()[iItem], "D_POSITION", &dStart); dStart += *(double*)GetSetMediaItemInfo(items.Get()[iItem], "D_LENGTH", NULL); } delete [] pVol; UpdateTimeline(); Undo_OnStateChangeEx(SWS_CMD_SHORTNAME(ct), UNDO_STATE_ITEMS, -1); } } }
void SelLockedItems(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(char*)GetSetMediaItemInfo(mi, "C_LOCK", NULL)) GetSetMediaItemInfo(mi, "B_UISEL", &g_i1); else GetSetMediaItemInfo(mi, "B_UISEL", &g_i0); } } UpdateTimeline(); }
void ShowInTCPEx(COMMAND_T*) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); int iVis = GetTrackVis(tr); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) SetTrackVis(tr, iVis | 2); else SetTrackVis(tr, iVis & 1); } TrackList_AdjustWindows(MAJORADJUST); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Show selected tracks in TCP, hide others","sws_undo"), UNDO_STATE_TRACKCFG, -1); }
void BlackItem(COMMAND_T* = NULL) { int iBlack = 0x1000000 | RGB(0, 0, 0); for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) GetSetMediaItemInfo(mi, "I_CUSTOMCOLOR", &iBlack); } } Undo_OnStateChange(__LOCALIZE("Set item(s) color black","sws_undo")); UpdateTimeline(); }
EnvelopeProcessor::ErrorCode EnvelopeProcessor::processTakeEnv(MediaItem_Take* take, double dStartPos, double dEndPos, TakeEnvType tTakeEnvType, EnvModType envModType, double dStrength, double dOffset) { double dValMin = 0.0; double dValMax = 1.0; bool bNeedUpdate = false; switch(tTakeEnvType) { case eTAKEENV_VOLUME : dValMax = 2.0; bNeedUpdate = ShowTakeEnvVol(take); break; case eTAKEENV_PAN : dValMin = -1.0; bNeedUpdate = ShowTakeEnvPan(take); break; case eTAKEENV_MUTE : bNeedUpdate = ShowTakeEnvMute(take); break; case eTAKEENV_PITCH : dValMax = (double)GetPitchTakeEnvRangeFromPrefs(); dValMin = dValMax * (-1); bNeedUpdate = ShowTakeEnvPitch(take); break; default: break; } if(bNeedUpdate) UpdateTimeline(); TrackEnvelope* envelope = SWS_GetTakeEnvelopeByName(take, GetTakeEnvelopeStr(tTakeEnvType)); if(!envelope) return eERRORCODE_NOENVELOPE; char* envState = PadresGetEnvelopeState(envelope); string newState; ErrorCode res = processPoints(envState, newState, dStartPos, dEndPos, dValMin, dValMax, envModType, dStrength, dOffset); free(envState); if(!newState.size() || !GetSetEnvelopeState(envelope, (char*)newState.c_str(), (int)newState.size())) res = eERRORCODE_UNKNOWN; /*JFB Undo_OnStateChangeEx("Take Envelope LFO", UNDO_STATE_ALL, -1); */ return res; }
void ShrinkSelectedTakes(int nbSamples, bool bActiveOnly) { list<MediaItem*> items; MidiItemProcessor::getSelectedMediaItems(items); for(list<MediaItem*>::iterator item = items.begin(); item != items.end(); item++) { double itemLength = *(double*)GetSetMediaItemInfo(*item, "D_LENGTH", NULL); int itemLengthSamples = (int)(MIDIITEMPROC_DEFAULT_SAMPLERATE * itemLength); itemLengthSamples -= nbSamples; itemLength = (double)(itemLengthSamples)/MIDIITEMPROC_DEFAULT_SAMPLERATE; GetSetMediaItemInfo(*item, "D_LENGTH", &itemLength); UpdateItemInProject(*item); } Undo_OnStateChangeEx(__LOCALIZE("Item Processor: shrink","sws_undo"), UNDO_STATE_ITEMS, -1); UpdateTimeline(); }
void ItemToTrackCol(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); COLORREF cr = *(COLORREF*)GetSetMediaTrackInfo(tr, "I_CUSTOMCOLOR", NULL); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) GetSetMediaItemInfo(mi, "I_CUSTOMCOLOR", &cr); } } Undo_OnStateChange(__LOCALIZE("Set selected item(s) to respective track color","sws_undo")); UpdateTimeline(); }
void UnselNotRender(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (GetMediaItemNumTakes(mi)) { PCM_source* src = (PCM_source*)GetSetMediaItemTakeInfo(GetMediaItemTake(mi, -1), "P_SOURCE", NULL); if (src && src->GetFileName() && !strstr(src->GetFileName(), "render")) GetSetMediaItemInfo(mi, "B_UISEL", &g_bFalse); } } } UpdateTimeline(); }
void TogItemSel(COMMAND_T* = NULL) { // Toggle item's selection states on selected tracks bool bSel; MediaTrack* tr; MediaItem* mi; for (int i = 1; i <= GetNumTracks(); i++) { tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { mi = GetTrackMediaItem(tr, j); bSel = !*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL); GetSetMediaItemInfo(mi, "B_UISEL", &bSel); } } UpdateTimeline(); }
void InsertTrkAbove(COMMAND_T* = NULL) { for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL)) { InsertTrackAtIndex(i-1, false); ClearSelected(); tr = CSurf_TrackFromID(i, false); TrackList_AdjustWindows(false); GetSetMediaTrackInfo(tr, "I_SELECTED", &g_i1); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Insert track above selected track","sws_undo"), UNDO_STATE_ALL, -1); return; } } }
void RenumberRegions(COMMAND_T* ct) { MarkerList ml(NULL, true); DeleteAllRegions(); int iID = 1; for (int i = 0; i < ml.m_items.GetSize(); i++) { MarkerItem* mi = ml.m_items.Get(i); if (mi->IsRegion()) { mi->SetNum(iID++); mi->AddToProject(); } } g_pMarkerList->Update(); UpdateTimeline(); Undo_OnStateChangeEx2(NULL, SWS_CMD_SHORTNAME(ct), UNDO_STATE_MISCCFG, -1); }
void ItemCustomColor(int iCustColor) { COLORREF cr; UpdateCustomColors(); cr = g_custColors[iCustColor] | 0x1000000; for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) GetSetMediaItemInfo(mi, "I_CUSTOMCOLOR", &cr); } } char cUndoText[100]; sprintf(cUndoText, __LOCALIZE_VERFMT("Set item(s) to custom color %d","sws_undo"), iCustColor+1); Undo_OnStateChange(cUndoText); UpdateTimeline(); }
void ItemOrderedCol(COMMAND_T* = NULL) { int iCurPos = 0; UpdateCustomColors(); for (int i = 1; i <= GetNumTracks(); i++) { MediaTrack* tr = CSurf_TrackFromID(i, false); for (int j = 0; j < GetTrackNumMediaItems(tr); j++) { MediaItem* mi = GetTrackMediaItem(tr, j); if (*(bool*)GetSetMediaItemInfo(mi, "B_UISEL", NULL)) { COLORREF cr = g_custColors[iCurPos++ % 16] | 0x1000000; GetSetMediaItemInfo(mi, "I_CUSTOMCOLOR", &cr); } } } Undo_OnStateChange(__LOCALIZE("Set selected item(s) to ordered custom colors","sws_undo")); UpdateTimeline(); }