Ejemplo n.º 1
0
bool TrackMatchesGuid(MediaTrack* tr, const GUID* g)
{
	if (tr && g)
	{
		if (GuidsEqual(GetTrackGUID(tr), g))
			return true;
		// 2nd try for the master
		if (tr == GetMasterTrack(NULL))
			return GuidsEqual(g, &GUID_NULL);
	}
	return false;
}
Ejemplo n.º 2
0
bool RprTrack::operator==(RprTrack &rhs)
{
    GUID *lhsGuid = getGUID();
    GUID *rhsGuid = rhs.getGUID();

    return GuidsEqual(lhsGuid,rhsGuid);
}
Ejemplo n.º 3
0
void ActiveTakeTrack::Restore(MediaTrack* tr)
{
	// TODO : if no matched items, return false and delete from level above???
	if (m_items.GetSize() == 0 || !GetTrackNumMediaItems(tr))
		return;

	bool* bUsed = new bool[m_items.GetSize()];
	memset(bUsed, 0, sizeof(bool) * m_items.GetSize());

	for (int i = 0; i < GetTrackNumMediaItems(tr); i++)
	{
		MediaItem* mi = GetTrackMediaItem(tr, i);
		GUID* g = (GUID*)GetSetMediaItemInfo(mi, "GUID", NULL);
		for (int j = 0; j < m_items.GetSize(); j++)
		{
			if (!bUsed[j] && GuidsEqual(g, &m_items.Get(j)->m_item))
			{
				// TODO check this logic under a bunch of situs
				if (!m_items.Get(j)->Restore(mi))
					m_items.Delete(j--, true);
				else
					bUsed[j] = true;
				break;
			}
		}
	}

	delete[] bUsed;
}
Ejemplo n.º 4
0
bool ActiveTake::Restore(MediaItem* mi)
{
	int i;
	for (i = 0; i < GetMediaItemNumTakes(mi); i++)
		if (GuidsEqual(&m_activeTake, (GUID*)GetSetMediaItemTakeInfo(GetMediaItemTake(mi, i), "GUID", NULL)))
		{
			GetSetMediaItemInfo(mi, "I_CURTAKE", &i);
			return true;
		}

	return false;
}
Ejemplo n.º 5
0
void TrackSends::Build(MediaTrack* tr)
{
	// Get the HW sends from the track object string
	const char* trackStr = SWS_GetSetObjectState(tr, NULL);
	char line[4096];
	int pos = 0;
	while (GetChunkLine(trackStr, line, 4096, &pos, false))
	{
		if (strncmp(line, "HWOUT", 5) == 0)
			m_hwSends.Add(new WDL_FastString(line));
	}
	SWS_FreeHeapPtr(trackStr);

	// Get the track sends from the cooresponding track object string
	MediaTrack* pDest;
	int idx = 0;
	char searchStr[20];
	sprintf(searchStr, "AUXRECV %d ", CSurf_TrackToID(tr, false) - 1);
	while ((pDest = (MediaTrack*)GetSetTrackSendInfo(tr, 0, idx++, "P_DESTTRACK", NULL)))
	{
		GUID guid = *(GUID*)GetSetMediaTrackInfo(pDest, "GUID", NULL);
		// Have we already parsed this particular dest track string?
		bool bParsed = false;
		for (int i = 0; i < m_sends.GetSize(); i++)
			if (GuidsEqual(m_sends.Get(i)->GetGuid(), &guid))
			{
				bParsed = true;
				break;
			}
		if (bParsed)
			break;

		// We haven't parsed yet!
		trackStr = SWS_GetSetObjectState(pDest, NULL);
		pos = 0;
		while (GetChunkLine(trackStr, line, 4096, &pos, false))
		{
			if (strncmp(line, searchStr, strlen(searchStr)) == 0)
				m_sends.Add(new TrackSend(&guid, line));
		}
		SWS_FreeHeapPtr(trackStr);
	}
}
Ejemplo n.º 6
0
// bUsed is an array of bools with size == m_selItems.GetSize(), used to "check off" when an item from that list is used
// caller initializes bUsed
void SelItems::Match(MediaTrack* tr, bool* bUsed)
{
	PreventUIRefresh(1);
	int nbitems=GetTrackNumMediaItems(tr);
	for (int i = 0; i < nbitems; i++)
	{
		MediaItem* mi = GetTrackMediaItem(tr, i);
		GetSetMediaItemInfo(mi, "B_UISEL", &g_bFalse);
		GUID* g = (GUID*)GetSetMediaItemInfo(mi, "GUID", NULL);
		for (int j = 0; j < m_selItems.GetSize(); j++)
			if (!bUsed[j] && GuidsEqual(m_selItems.Get(j), g))
			{
				bUsed[j] = true;
				GetSetMediaItemInfo(mi, "B_UISEL", &g_bTrue);
				break;
			}
	}
	PreventUIRefresh(-1);
}
Ejemplo n.º 7
0
void RestoreLastSelItemTrack(COMMAND_T* ct)
{
	PreventUIRefresh(1);
	for (int i = 1; i <= GetNumTracks(); i++)
	{
		MediaTrack* tr = CSurf_TrackFromID(i, false);
		if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL))
		{
			GUID* g = (GUID*)GetSetMediaTrackInfo(tr, "GUID", NULL);
			for (int j = 0; j < g_selItemsTrack.Get()->GetSize(); j++)
				if (GuidsEqual(g, &g_selItemsTrack.Get()->Get(j)->m_guid))
				{
					g_selItemsTrack.Get()->Get(j)->PreviousSelection(tr);
					break;
				}
		}
	}
	PreventUIRefresh(-1);
	Undo_OnStateChangeEx(SWS_CMD_SHORTNAME(ct), UNDO_STATE_ITEMS, -1);
	UpdateArrange();
}
Ejemplo n.º 8
0
//*****************************************************
// Global functions
void SaveSelTrackSelItems(int iSlot)
{
	for (int i = 1; i <= GetNumTracks(); i++)
	{
		MediaTrack* tr = CSurf_TrackFromID(i, false);
		if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL))
		{
			GUID* g = (GUID*)GetSetMediaTrackInfo(tr, "GUID", NULL);
			int j;
			for (j = 0; j < g_selItemsTrack.Get()->GetSize(); j++)
				if (GuidsEqual(g, &g_selItemsTrack.Get()->Get(j)->m_guid))
				{
					g_selItemsTrack.Get()->Get(j)->Save(tr, iSlot);
					break;
				}
			if (j == g_selItemsTrack.Get()->GetSize())
			{
				g_selItemsTrack.Get()->Add(new SelItemsTrack(tr));
				g_selItemsTrack.Get()->Get(g_selItemsTrack.Get()->GetSize()-1)->Save(tr, iSlot);
			}
		}
	}
}
Ejemplo n.º 9
0
void RestoreSelTrackSelItems(int iSlot)
{
	PreventUIRefresh(1);
	for (int i = 1; i <= GetNumTracks(); i++)
	{
		MediaTrack* tr = CSurf_TrackFromID(i, false);
		if (*(int*)GetSetMediaTrackInfo(tr, "I_SELECTED", NULL))
		{
			GUID* g = (GUID*)GetSetMediaTrackInfo(tr, "GUID", NULL);
			for (int j = 0; j < g_selItemsTrack.Get()->GetSize(); j++)
				if (GuidsEqual(g, &g_selItemsTrack.Get()->Get(j)->m_guid))
				{
					g_selItemsTrack.Get()->Get(j)->Restore(tr, iSlot);
					break;
				}
		}
	}
	PreventUIRefresh(-1);

	char cUndoText[256];
	sprintf(cUndoText, __LOCALIZE_VERFMT("Restore selected track(s) selected item(s), slot %d","sws_undo"), iSlot+1);
	Undo_OnStateChangeEx(cUndoText, UNDO_STATE_ITEMS, -1);
	UpdateArrange();
}
Ejemplo n.º 10
0
void TrackSends::UpdateReaper(MediaTrack* tr, WDL_PtrList<TrackSendFix>* pFix)
{
	// First replace all the hw sends with the stored
	const char* trackStr = SWS_GetSetObjectState(tr, NULL);
	WDL_FastString newTrackStr;
	char line[4096];
	int pos = 0;
	bool bChanged = false;
	while (GetChunkLine(trackStr, line, 4096, &pos, true))
	{
		if (strncmp(line, "HWOUT", 5) != 0)
			newTrackStr.Append(line);
		else
			bChanged = true;
	}
	for (int i = 0; i < m_hwSends.GetSize(); i++)
	{
		bChanged = true;
		AppendChunkLine(&newTrackStr, m_hwSends.Get(i)->Get());
	}

	SWS_FreeHeapPtr(trackStr);
	if (bChanged)
		SWS_GetSetObjectState(tr, &newTrackStr);

	// Check for destination track validity
	for (int i = 0; i < m_sends.GetSize(); i++)
		if (!GuidToTrack(m_sends.Get(i)->GetGuid()))
		{
			bool bFixed = false;
			if (pFix)
			{
				for (int j = 0; j < pFix->GetSize(); j++)
					if (GuidsEqual(&pFix->Get(j)->m_oldGuid, m_sends.Get(i)->GetGuid()))
					{
						m_sends.Get(i)->SetGuid(&pFix->Get(j)->m_newGuid);
						bFixed = true;
						break;
					}
			}
			if (!bFixed)
			{
				GUID newGuid = GUID_NULL;
				int iRet = ResolveMissingRecv(tr, i, m_sends.Get(i), pFix);
				if (iRet == 1) // Success!
					m_sends.Get(i)->SetGuid(&newGuid);
				else if (iRet == 2) // Delete
				{
					m_sends.Delete(i, true);
					i--;
				}
			}
		}

	// Now, delete any existing sends and add as necessary
	// Loop through each track
	char searchStr[20];
	sprintf(searchStr, "AUXRECV %d", CSurf_TrackToID(tr, false) - 1);
	WDL_FastString sendStr;
	GUID* trGuid = (GUID*)GetSetMediaTrackInfo(tr, "GUID", NULL);
	for (int i = 1; i <= GetNumTracks(); i++)
	{
		MediaTrack* pDest = CSurf_TrackFromID(i, false);
		newTrackStr.Set("");
		trackStr = NULL;
		MediaTrack* pSrc;
		int idx = 0;
		while ((pSrc = (MediaTrack*)GetSetTrackSendInfo(pDest, -1, idx++, "P_SRCTRACK", NULL)))
			if (pSrc == tr)
			{
				trackStr = SWS_GetSetObjectState(pDest, NULL);
				pos = 0;
				// Remove existing recvs from the src track
				while (GetChunkLine(trackStr, line, 4096, &pos, true))
				{
					if (strncmp(line, searchStr, strlen(searchStr)) != 0)
						newTrackStr.Append(line);
				}
				break;
			}

		GUID guid = *(GUID*)GetSetMediaTrackInfo(pDest, "GUID", NULL);
		for (int i = 0; i < m_sends.GetSize(); i++)
		{
			if (GuidsEqual(&guid, m_sends.Get(i)->GetGuid()) && !GuidsEqual(&guid, trGuid))
			{
				if (!trackStr)
				{
					trackStr = SWS_GetSetObjectState(pDest, NULL);
					newTrackStr.Set(trackStr);
				}
				AppendChunkLine(&newTrackStr, m_sends.Get(i)->AuxRecvString(tr, &sendStr)->Get());
			}
		}

		if (trackStr)
		{
			SWS_GetSetObjectState(pDest, &newTrackStr);
			SWS_FreeHeapPtr(trackStr);
		}
	}
}