Exemplo n.º 1
0
void MoveCursorAndSel(COMMAND_T* ct)
{
	double dStart, dEnd, dPos = GetCursorPosition();
	int iEdge; // -1 for left, 1 for right
	GetSet_LoopTimeRange(false, false, &dStart, &dEnd, false);
	if (dStart == dEnd)
	{
		iEdge = (int)ct->user;
		dStart = dEnd = dPos;
	}
	else if (dPos <= dStart)
		iEdge = -1;
	else if (dPos >= dEnd)
		iEdge = 1;
	else if (dPos - dStart < dEnd - dPos)
		iEdge = -1;
	else
		iEdge = 1;

	// Set edit cursor
	dPos = ((int)ct->user == -1) ? GetPrevGridDiv(dPos) : GetNextGridDiv(dPos);
	SetEditCurPos(dPos, true, false);

	// Extend the time sel
	if (iEdge == -1)
		dStart = dPos;
	else
		dEnd = dPos;
	GetSet_LoopTimeRange(true, false, &dStart, &dEnd, false);

}
Exemplo n.º 2
0
void SelPrevRegion(COMMAND_T*)
{
	double dCurPos, d2;
	GetSet_LoopTimeRange(false, true, &dCurPos, &d2, false);
	if (dCurPos == d2)
		dCurPos = GetCursorPosition();

	int x = 0;
	bool bReg;
	double d1, dRegStart, dRegEnd;
	bool bFound = false;
	bool bRegions = false;
	while ((x = EnumProjectMarkers(x, &bReg, &d1, &d2, NULL, NULL)))
	{
		if (bReg)
		{
			bRegions = true;
			if (dCurPos > d1)
			{
				dRegStart = d1;
				dRegEnd = d2;
				bFound = true;
			}
		}
	}
	if (bFound)
		GetSet_LoopTimeRange(true, true, &dRegStart, &dRegEnd, false);
	else if (bRegions)
		GetSet_LoopTimeRange(true, true, &d1, &d2, false);
}
Exemplo n.º 3
0
void SelNextRegion(COMMAND_T*)
{
	double dCurPos, d2;
	GetSet_LoopTimeRange(false, true, &dCurPos, &d2, false);
	if (dCurPos == d2)
		dCurPos = GetCursorPosition();

	int x = 0;
	bool bReg;
	double dRegStart;
	double dRegEnd;
	while ((x = EnumProjectMarkers(x, &bReg, &dRegStart, &dRegEnd, NULL, NULL)))
	{
		if (bReg && dRegStart > dCurPos)
		{
			GetSet_LoopTimeRange(true, true, &dRegStart, &dRegEnd, false);
			return;
		}
	}
	// Nothing found, loop again and set to first region
	while ((x = EnumProjectMarkers(x, &bReg, &dRegStart, &dRegEnd, NULL, NULL)))
	{
		if (bReg)
		{
			GetSet_LoopTimeRange(true, true, &dRegStart, &dRegEnd, false);
			return;
		}
	}
}
Exemplo n.º 4
0
void SafeTiemSel(COMMAND_T*)
{
	double t1, t2;
	GetSet_LoopTimeRange(false, false, &t1, &t2, false);
	if (t1 == t2)
		Main_OnCommand(40290, 0);
}
Exemplo n.º 5
0
void MarkerList::CropToTimeSel(bool bOffset)
{
	double dStart, dEnd;
	GetSet_LoopTimeRange(false, false, &dStart, &dEnd, false);
	// If no time sel just return
	if (dStart == dEnd)
		return;

	// Don't crop the end of regions
	for (int i = 0; i < m_items.GetSize(); i++)
	{
		MarkerItem* item = m_items.Get(i);
		if (item->GetPos() > dEnd ||
			(!item->IsRegion() && item->GetPos() < dStart) ||
			(item->IsRegion()  && item->GetRegEnd() < dStart))
		{ // delete the item
			m_items.Delete(i, true);
			i--;
		}
		else
		{
			if (item->IsRegion() && item->GetPos() < dStart && item->GetRegEnd() >= dStart)
				item->SetPos(dStart);
			
			if (bOffset)
			{
				item->SetPos(item->GetPos() - dStart);
				if (item->IsRegion())
					item->SetRegEnd(item->GetRegEnd() - dStart);
			}
		}
	}
}
Exemplo n.º 6
0
void SmartSplit(COMMAND_T*)
{
	double t1, t2;
	GetSet_LoopTimeRange(false, false, &t1, &t2, false);
	if (AreThereSelItemsInTimeSel() || (t1 != t2 && !CountSelectedMediaItems(0)))
		Main_OnCommand(40061, 0); // Split at time sel
	else
		Main_OnCommand(40012, 0); // Std split at cursor
}
Exemplo n.º 7
0
void SelNextMarkerOrRegion(COMMAND_T*)
{
	double dCurPos = GetCursorPosition();
	double dCurStart, dCurEnd, dRegStart, dRegEnd;
	GetSet_LoopTimeRange(false, false, &dCurStart, &dCurEnd, false);
	int x = 0;
	bool bReg;
	while ((x = EnumProjectMarkers(x, &bReg, &dRegStart, &dRegEnd, NULL, NULL)))
	{
		bool bSelMatches = dCurStart == dRegStart && dCurEnd == dRegEnd;
		if (dRegStart > dCurPos || (bReg && dRegStart >= dCurPos && !bSelMatches))
		{
			GetSet_LoopTimeRange(true, false, &dRegStart, bReg ? &dRegEnd : &dRegStart, false);
			SetEditCurPos(dRegStart, true, true);
			return;
		}
	}
	// Currently no wraparound, if needed add "go to first" here.
}
Exemplo n.º 8
0
void SelPrevMarkerOrRegion(COMMAND_T*)
{
	// Save the current marker list so we can traverse the list bacwards
	MarkerList ml(NULL, true);

	double dCurPos = GetCursorPosition();
	double dCurStart, dCurEnd;
	GetSet_LoopTimeRange(false, false, &dCurStart, &dCurEnd, false);
	bool bCurSel = dCurStart != dCurEnd;
	for (int i = ml.m_items.GetSize()-1; i >= 0; i--)
	{
		MarkerItem* mi = ml.m_items.Get(i);
		if (mi->GetPos() < dCurPos || (!mi->IsRegion() && mi->GetPos() <= dCurPos && bCurSel))
		{
			double dNewStart = mi->GetPos(), dNewEnd = mi->GetRegEnd();
			GetSet_LoopTimeRange(true, false, &dNewStart, mi->IsRegion() ? &dNewEnd : &dNewStart, false);
			SetEditCurPos(mi->GetPos(), true, true);
			return;
		}
	}
}
Exemplo n.º 9
0
void MoveCursorAndSel(COMMAND_T* ct)
{
	double dStart, dEnd, dPos = GetCursorPosition();
	int iEdge; // -1 for left, 1 for right
	GetSet_LoopTimeRange(false, false, &dStart, &dEnd, false);
	if (dStart == dEnd)
	{
		iEdge = (int)ct->user;
		dStart = dEnd = dPos;
	}
	else if (dPos <= dStart)
		iEdge = -1;
	else if (dPos >= dEnd)
		iEdge = 1;
	else if (dPos - dStart < dEnd - dPos)
		iEdge = -1;
	else
		iEdge = 1;

	// Move the edit cursor position
	double dQN = TimeMap2_timeToQN(NULL, dPos);
	// Special case for left move and on grid already
	int iQN = (int)(dQN + SWS_ADJACENT_ITEM_THRESHOLD);
	if (ct->user == -1 && fabs(dQN - iQN) < SWS_ADJACENT_ITEM_THRESHOLD)
		--iQN;
	else if (ct->user == 1)
		++iQN;
	dPos = TimeMap2_QNToTime(NULL, (double)iQN);

	// Extend the time sel
	if (iEdge == -1)
		dStart = dPos;
	else
		dEnd = dPos;
	GetSet_LoopTimeRange(true, false, &dStart, &dEnd, false);

	// Set the play cursor
	SetEditCurPos(dPos, true, false);
}
Exemplo n.º 10
0
bool AreThereSelItemsInTimeSel()
{
	double t1, t2;
	GetSet_LoopTimeRange(false, false, &t1, &t2, false);
	if (t1 != t2)
	{
		// see if sel items are in the time selection
		for (int i = 0; i < CountSelectedMediaItems(0); i++)
		{
			MediaItem* item = GetSelectedMediaItem(0, i);
			double dItemPos = *(double*)GetSetMediaItemInfo(item, "D_POSITION", NULL);
			double dItemLen = *(double*)GetSetMediaItemInfo(item, "D_LENGTH", NULL);
			if ((dItemPos >= t1 && dItemPos < t2) || (dItemPos < t1 && dItemLen > t1 - dItemPos))
				return true;
		}
	}
	return false;
}