Ejemplo n.º 1
0
// Constructor.
qtractorPluginParamCommand::qtractorPluginParamCommand (
	qtractorPluginParam *pParam, float fValue, bool bUpdate )
	: qtractorCommand(QString(pParam->name()).toLower()),
		m_pParam(pParam), m_fValue(fValue), m_bUpdate(bUpdate),
		m_fPrevValue(pParam->value())
{
	setRefresh(false);

	// Try replacing an previously equivalent command...
	static qtractorPluginParamCommand *s_pPrevParamCommand = NULL;
	if (s_pPrevParamCommand) {
		qtractorSession *pSession = qtractorSession::getInstance();
		qtractorCommand *pLastCommand
			= (pSession->commands())->lastCommand();
		qtractorCommand *pPrevCommand
			= static_cast<qtractorCommand *> (s_pPrevParamCommand);
		if (pPrevCommand == pLastCommand
			&& s_pPrevParamCommand->param() == pParam) {
			qtractorPluginParamCommand *pLastParamCommand
				= static_cast<qtractorPluginParamCommand *> (pLastCommand);
			if (pLastParamCommand) {
				// Equivalence means same (sign) direction too...
				const float fPrevValue = pLastParamCommand->prevValue();
				const float fLastValue = pLastParamCommand->value();
				const int   iPrevSign  = (fPrevValue > fLastValue ? +1 : -1);
				const int   iCurrSign  = (fPrevValue < m_fValue   ? +1 : -1);
				if (iPrevSign == iCurrSign || m_fValue == m_fPrevValue) {
					m_fPrevValue = fLastValue;
					(pSession->commands())->removeLastCommand();
				}
			}
		}
	}
	s_pPrevParamCommand = this;
}
Ejemplo n.º 2
0
CCopasiTimer::CCopasiTimer(const Type & type,
                           const CCopasiContainer * pParent):
    CCopasiObject((type == CCopasiTimer::WALL) ? "Wall Clock Time" : "CPU Time",
                  pParent, "Timer", CCopasiObject::ValueDbl),
    mType(type),
    mStartTime(),
    mElapsedTime(0),
    mElapsedTimeSeconds(0)
{
  switch (mType)
    {
      case WALL:
        mStartTime = CCopasiTimeVariable::getCurrentWallTime();
        break;

      case PROCESS:
        mStartTime = CCopasiTimeVariable::getProcessTime();
        break;

      case THREAD:
        mStartTime = CCopasiTimeVariable::getThreadTime();
        break;

    }

  setRefresh(this, &CCopasiTimer::refresh);
}
Ejemplo n.º 3
0
// Constructor.
qtractorTrackMonitorCommand::qtractorTrackMonitorCommand (
	qtractorTrack *pTrack, bool bMonitor, bool bMidiControl )
	: qtractorTrackControlCommand(
		QObject::tr("track monitor"), pTrack, bMidiControl)
{
	m_bMonitor = bMonitor;

	// Toggle/update all other?
	qtractorMainForm *pMainForm = qtractorMainForm::getInstance();
	if (pMainForm) {
		qtractorTracks *pTracks = pMainForm->tracks();
		if (pTracks) {
			const Qt::KeyboardModifiers& modifiers
				= QApplication::keyboardModifiers();
			const bool bAllTracks
				= (modifiers & (Qt::ShiftModifier | Qt::ControlModifier));
			if (modifiers & Qt::ControlModifier)
				bMonitor = !bMonitor;
			const QList<qtractorTrack *>& tracks
				= pTracks->trackList()->selectedTracks(track(), bAllTracks);
			QListIterator<qtractorTrack *> iter(tracks);
			while (iter.hasNext())
				m_tracks.append(new TrackItem(iter.next(), bMonitor));
		}
	}

	setRefresh(false);
}
Ejemplo n.º 4
0
void ServoClass::writeMicroseconds(uint8_t index, unsigned long value)
{
	if ((MIN_SERVO_PULSE_WIDTH <= value) && (value <= MAX_SERVO_PULSE_WIDTH) && (index < SERVOS_PER_TIMER))
		g_ulServoPulse[index] = value;

	setRefresh();
}
Ejemplo n.º 5
0
// Constructor.
qtractorPluginCommand::qtractorPluginCommand ( const QString& sName,
	qtractorPlugin *pPlugin ) : qtractorCommand(sName)
{
	if (pPlugin)
		m_plugins.append(pPlugin);	

	setRefresh(false);
}
Ejemplo n.º 6
0
CCopasiTimer::CCopasiTimer(const CCopasiTimer & src,
                           const CCopasiContainer * pParent):
    CCopasiObject(src, pParent),
    mType(src.mType),
    mStartTime(src.mStartTime),
    mElapsedTime(src.mElapsedTime),
    mElapsedTimeSeconds(src.mElapsedTimeSeconds)
{setRefresh(this, &CCopasiTimer::refresh);}
Ejemplo n.º 7
0
// Constructor.
qtractorPluginPropertyCommand::qtractorPluginPropertyCommand (
	qtractorPlugin *pPlugin, unsigned long iProperty, const QVariant& value )
	: qtractorPluginCommand(QObject::tr("plugin property"), pPlugin)
{
	m_iProperty = iProperty;
	m_value = value;

	setRefresh(false);
}
Ejemplo n.º 8
0
void ServoClass::detach(uint8_t index)
{
	if (index < SERVOS_PER_TIMER)
	{
		digitalWrite(g_ulServoPins[index], LOW);
		g_ulServoPins[index] = INVALID_SERVO_PIN;
		g_ulServoPulse[index] = DEFAULT_SERVO_PULSE_WIDTH;

		setRefresh();
	}
}
Ejemplo n.º 9
0
ServoClass::ServoClass()
{
	ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|
	                SYSCTL_OSC_MAIN);

	// Initialize variables of the class

	g_ulPeriod = 0;

	for(int il_iter = 0; il_iter < SERVOS_PER_TIMER; il_iter++)
	{
		g_ulServoPins[il_iter] = INVALID_SERVO_PIN;
		g_ulServoPulse[il_iter] = DEFAULT_SERVO_PULSE_WIDTH;
	}

	g_iServoNo = 0;
	g_ulPulseWidth = 0;
	g_ulTicksPerMicrosecond = 0;

	setRefresh();

	//	for(int il_iter = 0; il_iter < SERVOS_PER_TIMER; il_iter++)
	//	{
	//		if (g_ulServoPins[il_iter] != INVALID_SERVO_PIN)
	//		{
	//			pinMode(g_ulServoPins[il_iter], OUTPUT);
	//			digitalWrite(g_ulServoPins[il_iter], LOW);
	//		}
	//	}

	// Enable TIMER
	ROM_SysCtlPeripheralEnable(SERVO_TIMER_PERIPH);

	// Enable processor interrupts.
	ROM_IntMasterEnable();

	// Configure the TIMER
	ROM_TimerConfigure(SERVO_TIMER, SERVO_TIME_CFG);

	// Calculate the number of timer counts/microsecond
	g_ulTicksPerMicrosecond = ROM_SysCtlClockGet() / 1000000;
	g_ulPeriod = g_ulTicksPerMicrosecond * REFRESH_INTERVAL;   // 20ms = Standard Servo refresh delay

	// Initially load the timer with 20ms interval time
	ROM_TimerLoadSet(SERVO_TIMER, SERVO_TIMER_A, g_ulPeriod);

	// Setup the interrupt for the TIMER1A timeout.
	ROM_IntEnable(SERVO_TIMER_INTERRUPT);
	ROM_TimerIntEnable(SERVO_TIMER, SERVO_TIMER_TRIGGER);

	// Enable the timer.
	ROM_TimerEnable(SERVO_TIMER, SERVO_TIMER_A);
}
Ejemplo n.º 10
0
// Constructor.
qtractorTrackStateCommand::qtractorTrackStateCommand ( qtractorTrack *pTrack,
	qtractorTrack::ToolType toolType, bool bOn, bool bMidiControl )
	: qtractorTrackControlCommand(QString(), pTrack, bMidiControl)
{
	m_toolType = toolType;
	m_bOn = bOn;

	m_pClipCommand = NULL;
	m_iRecordCount = 0;

	switch (m_toolType) {
	case qtractorTrack::Record:
		qtractorTrackCommand::setName(QObject::tr("track record"));
		break;
	case qtractorTrack::Mute:
		qtractorTrackCommand::setName(QObject::tr("track mute"));
		break;
	case qtractorTrack::Solo:
		qtractorTrackCommand::setName(QObject::tr("track solo"));
		break;
	}

	// Toggle/update all other?
	if (m_toolType != qtractorTrack::Record) {
		qtractorMainForm *pMainForm = qtractorMainForm::getInstance();
		if (pMainForm) {
			qtractorTracks *pTracks = pMainForm->tracks();
			if (pTracks) {
				const Qt::KeyboardModifiers& modifiers
					= QApplication::keyboardModifiers();
				const bool bAllTracks
					= (modifiers & (Qt::ShiftModifier | Qt::ControlModifier));
				if (modifiers & Qt::ControlModifier)
					bOn = !bOn;
				const QList<qtractorTrack *>& tracks
					= pTracks->trackList()->selectedTracks(track(), bAllTracks);
				QListIterator<qtractorTrack *> iter(tracks);
				while (iter.hasNext())
					m_tracks.append(new TrackItem(iter.next(), bOn));
			}
		}
	}

	setRefresh(m_toolType != qtractorTrack::Record);
}
Ejemplo n.º 11
0
void CMoiety::initObjects()
{
  setRefresh(this, &CMoiety::refreshDependentNumber);

  mpINumberReference = new CTotalNumberReference("InitialValue", this, mINumber);
  mpINumberReference->setRefresh(this, &CMoiety::refreshInitialValue);

  mpNumberReference = new CTotalNumberReference("Value", this, mNumber);
  mpNumberReference->setRefresh(this, &CMoiety::refreshValue);

  mpDNumberReference = new CDependentNumberReference("DependentValue", this, mNumber);
  mpDNumberReference->addDirectDependency(this);

  CCopasiObject * pObject = addObjectReference("Amount", mIAmount, CCopasiObject::ValueDbl);
  pObject->setRefresh(this, &CMoiety::refreshAmount);
  pObject->addDirectDependency(mpNumberReference);

  return;
}
Ejemplo n.º 12
0
void Drawing::eventHandler() {
	//Event handler
	SDL_Event e;

	//While application is running
	while( Quit == false)
	{
		//Handle events on queue

		//update surface
		if(refresh) {
			SDL_UpdateWindowSurface( getWindowPointer());//Window );

			// similarly event driven
			refresh = false;
		}
		while( SDL_PollEvent( &e ) != 0 )
		{
			//User requests quit
			if( e.type == SDL_QUIT )
			{
				Quit = true;
				//break;
			}
			else if( e.type == SDL_KEYDOWN) {
				// for test
				if(e.key.keysym.sym == SDLK_a) {
					cout << "A" << endl;
					for(int i = 0; i < ScreenHeight/10; i++) {
						for(int j = 0; j < ScreenWidth/10; j++) {
							//cout << getPixel(i*10, j*10) << ' ';
							setPixel(i*10, j*10, (0xff << 16));
						}
					}
					setRefresh(true);
					restart = true;
				}
			}
		}
	}
}
Ejemplo n.º 13
0
// Constructor.
qtractorBusCommand::qtractorBusCommand ( const QString& sName,
	qtractorBus *pBus, qtractorBus::BusMode busMode )
	: qtractorCommand(sName), m_pBus(pBus), m_busMode(busMode),
		m_busType(qtractorTrack::None), m_bMonitor(false),
		m_iChannels(0), m_bAutoConnect(false)
{
	setRefresh(false);

	// Set initial bus properties if any...
	if (m_pBus && m_busMode == qtractorBus::None) {
		m_busMode  = m_pBus->busMode();
		m_busType  = m_pBus->busType();
		m_sBusName = m_pBus->busName();
		m_bMonitor = m_pBus->isMonitor();
		// Special case typed buses...
		switch (m_pBus->busType()) {
		case qtractorTrack::Audio: {
			qtractorAudioBus *pAudioBus
				= static_cast<qtractorAudioBus *> (m_pBus);
			if (pAudioBus) {
				m_iChannels = pAudioBus->channels();
				m_bAutoConnect = pAudioBus->isAutoConnect();
			}
			break;
		}
		case qtractorTrack::Midi: {
			qtractorMidiBus *pMidiBus
				= static_cast<qtractorMidiBus *> (m_pBus);
			if (pMidiBus) {
				m_sInstrumentName = pMidiBus->instrumentName();
			}
			break;
		}
		case qtractorTrack::None:
		default:
			break;
		}
	}
}
Ejemplo n.º 14
0
// Constructor.
qtractorTrackPanningCommand::qtractorTrackPanningCommand (
	qtractorTrack *pTrack, float fPanning, bool bMidiControl )
	: qtractorTrackControlCommand(
		QObject::tr("track pan"), pTrack, bMidiControl)
{
	m_fPanning = fPanning;
	m_fPrevPanning = pTrack->prevPanning();

	setRefresh(false);

	// Try replacing an previously equivalent command...
	static qtractorTrackPanningCommand *s_pPrevPanningCommand = NULL;
	if (s_pPrevPanningCommand) {
		qtractorSession *pSession = qtractorSession::getInstance();
		qtractorCommand *pLastCommand
			= (pSession->commands())->lastCommand();
		qtractorCommand *pPrevCommand
			= static_cast<qtractorCommand *> (s_pPrevPanningCommand);
		if (pPrevCommand == pLastCommand
			&& s_pPrevPanningCommand->track() == pTrack) {
			qtractorTrackPanningCommand *pLastPanningCommand
				= static_cast<qtractorTrackPanningCommand *> (pLastCommand);
			if (pLastPanningCommand) {
				// Equivalence means same (sign) direction too...
				const float fPrevPanning = pLastPanningCommand->prevPanning();
				const float fLastPanning = pLastPanningCommand->panning();
				const int   iPrevSign    = (fPrevPanning > fLastPanning ? +1 : -1);
				const int   iCurrSign    = (fPrevPanning < m_fPanning   ? +1 : -1);
				if (iPrevSign == iCurrSign || m_fPanning == m_fPrevPanning) {
					m_fPrevPanning = fLastPanning;
					(pSession->commands())->removeLastCommand();
				}
			}
		}
	}
	s_pPrevPanningCommand = this;
}
Ejemplo n.º 15
0
// Constructor.
qtractorPluginParamValuesCommand::qtractorPluginParamValuesCommand (
	const QString& sName ) : qtractorCommand(sName)
{
	setRefresh(false);
}
Ejemplo n.º 16
0
// Track-button command method.
bool qtractorTrackStateCommand::redo (void)
{
	qtractorTrack *pTrack = track();
	if (pTrack == NULL)
		return false;

	qtractorSession *pSession = pTrack->session();
	if (pSession == NULL)
		return false;

	qtractorMainForm *pMainForm = qtractorMainForm::getInstance();
	if (pMainForm == NULL)
		return false;

	bool bOn = false;
	qtractorMmcEvent::SubCommand scmd = qtractorMmcEvent::TRACK_NONE;
	qtractorMidiControl::Command ccmd = qtractorMidiControl::Command(0);

	switch (m_toolType) {
	case qtractorTrack::Record:
		scmd = qtractorMmcEvent::TRACK_RECORD;
		ccmd = qtractorMidiControl::TRACK_RECORD;
		// Special stuffing if currently recording at first place...
		bOn = pTrack->isRecord();
		if (bOn && !m_bOn
			&& m_pClipCommand == NULL && m_iRecordCount == 0) {
			m_pClipCommand = new qtractorClipCommand(QString());
			// Do all the record stuffing here...
			const unsigned long iFrameTime = pSession->frameTimeEx();
			if (m_pClipCommand->addClipRecord(pTrack, iFrameTime)) {
				// Yes, we've recorded something...
				setRefresh(true);
			} else {
				// nothing was actually recorded...
				delete m_pClipCommand;
				m_pClipCommand = NULL;
			}
		}
		// Was it before (skip undos)?
		if (m_pClipCommand && (m_iRecordCount % 2) == 0)
			m_pClipCommand->redo();
		++m_iRecordCount;
		// Carry on...
		pTrack->setRecord(m_bOn);
		break;
	case qtractorTrack::Mute:
		scmd = qtractorMmcEvent::TRACK_MUTE;
		ccmd = qtractorMidiControl::TRACK_MUTE;
		bOn = pTrack->isMute();
		pTrack->setMute(m_bOn);
		break;
	case qtractorTrack::Solo:
		scmd = qtractorMmcEvent::TRACK_SOLO;
		ccmd = qtractorMidiControl::TRACK_SOLO;
		bOn = pTrack->isSolo();
		pTrack->setSolo(m_bOn);
		break;
	default:
		// Whaa?
		return false;
	}

	// Send MMC MASKED_WRITE command...
	qtractorMidiEngine *pMidiEngine = pSession->midiEngine();
	int iTrack = pSession->tracks().find(pTrack);
	if (pMidiEngine)
		pMidiEngine->sendMmcMaskedWrite(scmd, iTrack, m_bOn);

	// Send MIDI controller command...
	if (midiControlFeedback()) {
		qtractorMidiControl *pMidiControl = qtractorMidiControl::getInstance();
		if (pMidiControl)
			pMidiControl->processTrackCommand(ccmd, iTrack, m_bOn);
	}

	// Update track list item...
	qtractorTrackList *pTrackList = pMainForm->tracks()->trackList();
	pTrackList->updateTrack(pTrack);

	// Reset for undo.
	m_bOn = bOn;

	// Toggle/update all other?
	if (!m_tracks.isEmpty()) {
		// Exclusive mode.
		qtractorMidiControl *pMidiControl = qtractorMidiControl::getInstance();
		QListIterator<TrackItem *> iter(m_tracks);
		while (iter.hasNext()) {
			TrackItem *pTrackItem = iter.next();
			pTrack = pTrackItem->track;
			bOn = false;
			if (m_toolType == qtractorTrack::Mute) {
				bOn = pTrack->isMute();
				pTrack->setMute(pTrackItem->on);
			}
			else
			if (m_toolType == qtractorTrack::Solo) {
				bOn = pTrack->isSolo();
				pTrack->setSolo(pTrackItem->on);
			}
			// Send MMC MASKED_WRITE command...
			iTrack = pTrackList->trackRow(pTrack);
			if (pMidiEngine)
				pMidiEngine->sendMmcMaskedWrite(scmd, iTrack, pTrackItem->on);
			// Send MIDI controller command...
			if (pMidiControl)
				pMidiControl->processTrackCommand(ccmd, iTrack, pTrackItem->on);
			// Update track list item...
			pTrackList->updateTrack(pTrack);
			// Swap for undo...
			pTrackItem->on = bOn;
		}
		// Done with exclusive mode.
	}

	return true;
}