void SWS_TrackListView::GetItemText(SWS_ListItem* item, int iCol, char* str, int iStrMax) { MediaTrack* tr = (MediaTrack*)item; if (tr) { switch (iCol) { case COL_NUM: // # _snprintf(str, iStrMax, "%d", CSurf_TrackToID(tr, false)); break; case COL_NAME: // Name lstrcpyn(str, (char*)GetSetMediaTrackInfo(tr, "P_NAME", NULL), iStrMax); break; case COL_TCP: // TCP lstrcpyn(str, GetTrackVis(tr) & 2 ? UTF8_BULLET : UTF8_CIRCLE, iStrMax); break; case COL_MCP: // MCP lstrcpyn(str, GetTrackVis(tr) & 1 ? UTF8_BULLET : UTF8_CIRCLE, iStrMax); break; case COL_ARM: lstrcpyn(str, *(int*)GetSetMediaTrackInfo(tr, "I_RECARM", NULL) ? UTF8_BULLET : UTF8_CIRCLE, iStrMax); break; case COL_MUTE: lstrcpyn(str, *(bool*)GetSetMediaTrackInfo(tr, "B_MUTE", NULL) ? UTF8_BULLET : UTF8_CIRCLE, iStrMax); break; case COL_SOLO: lstrcpyn(str, *(int*)GetSetMediaTrackInfo(tr, "I_SOLO", NULL) ? UTF8_BULLET : UTF8_CIRCLE, iStrMax); break; // case COL_INPUT: // _snprintf(str, iStrMax, "%d", *(int*)GetSetMediaTrackInfo(tr, "I_RECINPUT", NULL) + 1); // break; } } }
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 SWS_TrackListView::OnItemBtnClk(SWS_ListItem* item, int iCol, int iKeyState) { MediaTrack* tr = (MediaTrack*)item; // Always non-null if (iCol == COL_TCP || iCol == COL_MCP) { bool bClickedStar = ((iCol == COL_TCP && GetTrackVis(tr) & 2) || (iCol == COL_MCP && GetTrackVis(tr) & 1)); m_bDisableUpdates = true; if (m_pTrackListWnd->Linked() && !(iKeyState & LVKF_SHIFT)) { if (iKeyState & LVKF_CONTROL && iKeyState & LVKF_ALT) ShowSelOnly(); else if (bClickedStar) HideTracks(); else ShowInMCPandTCP(); } else if (iCol == COL_TCP) { if (iKeyState & LVKF_CONTROL && iKeyState & LVKF_ALT) ShowInTCPEx(); else if (bClickedStar) HideFromTCP(); else ShowInTCP(); } else // iCol == COL_MCP { if (iKeyState & LVKF_CONTROL && iKeyState & LVKF_ALT) ShowInMCPEx(); else if (bClickedStar) HideFromMCP(); else ShowInMCP(); } m_bDisableUpdates = false; m_pTrackListWnd->Update(); } else if (iCol == COL_MUTE) Main_OnCommand(6, 0); else if (iCol == COL_SOLO) Main_OnCommand(7, 0); else if (iCol == COL_ARM) Main_OnCommand(9, 0); }
HMENU SWS_TrackListWnd::OnContextMenu(int x, int y, bool* wantDefaultItems) { HMENU contextMenu = CreatePopupMenu(); AddToMenu(contextMenu, __LOCALIZE("Snapshot current track visibility","tracklistmenu"), SWSGetCommandID(NewVisSnapshot)); Snapshot* s; int i = 0; while((s = GetSnapshotPtr(i++)) != NULL) { if (s->m_iMask == VIS_MASK) { char cMenu[50]; int iCmd = SWSGetCommandID(GetSnapshot, s->m_iSlot); if (!iCmd) iCmd = LOADSNAP_MSG + s->m_iSlot; _snprintf(cMenu, 50, __LOCALIZE_VERFMT("Recall snapshot %s","tracklistmenu"), s->m_cName); AddToMenu(contextMenu, cMenu, iCmd); } } AddToMenu(contextMenu, __LOCALIZE("Show all tracks","tracklistmenu"), SWSGetCommandID(ShowAll)); AddToMenu(contextMenu, __LOCALIZE("Show SWS Snapshots","tracklistmenu"), SWSGetCommandID(OpenSnapshotsDialog)); SWS_ListItem* item = m_pLists.Get(0)->GetHitItem(x, y, NULL); if (item) { m_trLastTouched = (MediaTrack*)item; AddToMenu(contextMenu, SWS_SEPARATOR, 0); AddToMenu(contextMenu, __LOCALIZE("Rename","tracklistmenu"), RENAME_MSG); AddToMenu(contextMenu, SWS_SEPARATOR, 0); AddToMenu(contextMenu, __LOCALIZE("Show only in MCP","tracklistmenu"), SWSGetCommandID(ShowInMCPOnly)); AddToMenu(contextMenu, __LOCALIZE("Show only in TCP","tracklistmenu"), SWSGetCommandID(ShowInTCPOnly)); AddToMenu(contextMenu, __LOCALIZE("Show in both MCP and TCP","tracklistmenu"), SWSGetCommandID(ShowInMCPandTCP)); AddToMenu(contextMenu, __LOCALIZE("Hide in both MCP and TCP","tracklistmenu"), SWSGetCommandID(HideTracks)); AddToMenu(contextMenu, SWS_SEPARATOR, 0); AddToMenu(contextMenu, __LOCALIZE("Invert selection","tracklistmenu"), SWSGetCommandID(TogTrackSel)); AddToMenu(contextMenu, __LOCALIZE("Hide unselected","tracklistmenu"), SWSGetCommandID(HideUnSel)); HMENU fxSubMenu; if(AddFXSubMenu(&fxSubMenu, m_trLastTouched)) { AddToMenu(contextMenu, SWS_SEPARATOR, 0); AddSubMenu(contextMenu, fxSubMenu, __LOCALIZE("FX","tracklistmenu")); } // Check current state switch(GetTrackVis(m_trLastTouched)) { case 0: CheckMenuItem(contextMenu, SWSGetCommandID(HideTracks), MF_BYCOMMAND | MF_CHECKED); break; case 1: CheckMenuItem(contextMenu, SWSGetCommandID(ShowInMCPOnly), MF_BYCOMMAND | MF_CHECKED); break; case 2: CheckMenuItem(contextMenu, SWSGetCommandID(ShowInTCPOnly), MF_BYCOMMAND | MF_CHECKED); break; case 3: CheckMenuItem(contextMenu, SWSGetCommandID(ShowInMCPandTCP), MF_BYCOMMAND | MF_CHECKED); break; } } return contextMenu; }
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 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 ShowInTCP(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) | 2); } TrackList_AdjustWindows(MAJORADJUST); UpdateTimeline(); Undo_OnStateChangeEx(__LOCALIZE("Show selected tracks in TCP","sws_undo"), UNDO_STATE_TRACKCFG, -1); }
void SetTrackVis(MediaTrack* tr, int vis) // &1 == mcp, &2 == tcp { int iTrack = CSurf_TrackToID(tr, false); if (iTrack == 0) { // TODO - obey master in mcp if ((vis & 2) != (*(int*)GetConfigVar("showmaintrack") ? 2 : 0)) Main_OnCommand(40075, 0); } else if (iTrack > 0) { if (vis != GetTrackVis(tr)) { GetSetMediaTrackInfo(tr, "B_SHOWINTCP", vis & 2 ? &g_bTrue : &g_bFalse); GetSetMediaTrackInfo(tr, "B_SHOWINMIXER", vis & 1 ? &g_bTrue : &g_bFalse); } } }