void SpaceNavigatorPluginForm::SetEnableSpaceNavigator( bool enable )
{
	vrOSGWidget* osgWidget = vrOSGWidget::getMGLW(-1);

	if(enable)
	{		
		// add this class to the VRED loop
		addLoop();

		osgWidget->getNavigator().setMode(vrNavigator::WALK);

		if(osgWidget->getNavigator().getCameraZUp())
			_heightOverZero = osgWidget->getNavigator().getFrom().z();
		else
			_heightOverZero = osgWidget->getNavigator().getFrom().y();
	}
	else
	{
		// sub this class to the VRED loop
		subLoop();

		osgWidget->getNavigator().setMode(vrNavigator::TRACKBALL);
	}

	EnableCheckBox->setChecked(enable);	// for command line
}
Esempio n. 2
0
Parents::Parents(GobEngine *vm, const Common::String &seq, const Common::String &gct,
                 const Common::String &childName, uint8 house, const Font &font,
                 const byte *normalPalette, const byte *brightPalette, uint paletteSize) :
	SEQFile(vm, seq),
	_gct(0), _house(house), _font(&font),
	_paletteSize(paletteSize), _normalPalette(normalPalette), _brightPalette(brightPalette) {

	// Load sounds
	for (int i = 0; i < kSoundCount; i++)
		_vm->_sound->sampleLoad(&_sounds[i], SOUND_SND, kSound[i]);

	// Load GCT
	Common::SeekableReadStream *gctStream = _vm->_dataIO->getFile(gct);
	if (gctStream) {
		_gct = new GCTFile(*gctStream, _vm->_rnd);

		delete gctStream;
	} else
		error("Parents::Parents(): Failed to open \"%s\"", gct.c_str());

	_gct->setArea(17, 18, 303, 41);
	_gct->setText(1, childName);

	_gct->selectLine(2, _house);
	_gct->selectLine(4, _house);

	for (uint i = 0; i < kLoopCount; i++)
		_loopID[i] = addLoop(kLoop[i][0], kLoop[i][1], kLoop[i][2]);
}
Esempio n. 3
0
SwitchPlugin::SwitchPlugin(void)
  : vrModuleBase("Switch", NULL, VRED_MSG_SELECTED_NODE),
    _mainWidget(NULL)
{
  _mainWidget = new SwitchPluginForm(vrController::getModuleManager(), "SwitchPluginForm");
  
  vrController::getModuleManager()->add("Switch", _mainWidget);
  
  addLoop();
}
Esempio n. 4
0
void UContainerTag::menu(QMenu &menu)
{
    QMenu *m;
    if(isIndependent())
    {
        m=menu.addMenu("Insert within");
    }else
        m=&menu;
    m->addAction("  - Insert -")->setEnabled(false);
    m->addAction("Condition",this,SLOT(addCondition()));
    m->addAction("Traverse",this,SLOT(addTraverse()));
    m->addAction("Loop",this,SLOT(addLoop()));
    m->addAction("Break loop",this,SLOT(addBreak()));
    m->addAction("Continue loop",this,SLOT(addContinue()));
    m->addAction("Function call",this,SLOT(addFunction()));
    m->addAction("Variable assign",this,SLOT(addAssign()));
    m->addAction("Return",this,SLOT(addReturn()));
    m->addAction("Python command",this,SLOT(addExec()));
    m->addAction("Comment",this,SLOT(addComment()));
}
Esempio n. 5
0
/* orthoEdges:
 * For edges without position information, construct an orthogonal routing.
 * If doLbls is true, use edge label info when available to guide routing, 
 * and set label pos for those edges for which this info is not available.
 */
void
orthoEdges (Agraph_t* g, int doLbls)
{
    sgraph* sg;
    maze* mp;
    int n_edges;
    route* route_list;
    int i, gstart;
    Agnode_t* n;
    Agedge_t* e;
    snode* sn;
    snode* dn;
    epair_t* es = N_GNEW(agnedges(g), epair_t);
    cell* start;
    cell* dest;
    PointSet* ps;
    textlabel_t* lbl;

    if (Concentrate) 
	ps = newPS();

#ifdef DEBUG
    {
	char* s = agget(g, "odb");
        char c;
	odb_flags = 0;
	if (s && (*s != '\0')) {
	    while ((c = *s++)) {
		switch (c) {
		case 'c' :
		    odb_flags |= ODB_CHANG;     // emit channel graph 
		    break;
		case 'i' :
		    odb_flags |= (ODB_SGRAPH|ODB_IGRAPH);  // emit search graphs
		    break;
		case 'm' :
		    odb_flags |= ODB_MAZE;      // emit maze
		    break;
		case 'r' :
		    odb_flags |= ODB_ROUTE;     // emit routes in maze
		    break;
		case 's' :
		    odb_flags |= ODB_SGRAPH;    // emit search graph 
		    break;
		}
	    }
	}
    }
#endif
    if (doLbls) {
	agerr(AGWARN, "Orthogonal edges do not currently handle edge labels. Try using xlabels.\n");
	doLbls = 0;
    }
    mp = mkMaze (g, doLbls);
    sg = mp->sg;
#ifdef DEBUG
    if (odb_flags & ODB_SGRAPH) emitSearchGraph (stderr, sg);
#endif

    /* store edges to be routed in es, along with their lengths */
    n_edges = 0;
    for (n = agfstnode (g); n; n = agnxtnode(g, n)) {
        for (e = agfstout(g, n); e; e = agnxtout(g,e)) {
	    if ((Nop == 2) && ED_spl(e)) continue;
	    if (Concentrate) {
		int ti = AGID(agtail(e));
		int hi = AGID(aghead(e));
		if (ti <= hi) {
		    if (isInPS (ps,ti,hi)) continue;
		    else addPS (ps,ti,hi);
		}
		else {
		    if (isInPS (ps,hi,ti)) continue;
		    else addPS (ps,hi,ti);
		}
	    }
	    es[n_edges].e = e;
	    es[n_edges].d = edgeLen (e);
	    n_edges++;
	}
    }

    route_list = N_NEW (n_edges, route);

    qsort((char *)es, n_edges, sizeof(epair_t), (qsort_cmpf) edgecmp);

    gstart = sg->nnodes;
    PQgen (sg->nnodes+2);
    sn = &sg->nodes[gstart];
    dn = &sg->nodes[gstart+1];
    for (i = 0; i < n_edges; i++) {
#ifdef DEBUG
	if ((i > 0) && (odb_flags & ODB_IGRAPH)) emitSearchGraph (stderr, sg);
#endif
	e = es[i].e;
        start = CELL(agtail(e));
        dest = CELL(aghead(e));

	if (doLbls && (lbl = ED_label(e)) && lbl->set) {
	}
	else {
	    if (start == dest)
		addLoop (sg, start, dn, sn);
	    else {
       		addNodeEdges (sg, dest, dn);
		addNodeEdges (sg, start, sn);
	    }
       	    if (shortPath (sg, dn, sn)) goto orthofinish;
	}
	    
       	route_list[i] = convertSPtoRoute(sg, sn, dn);
       	reset (sg);
    }
    PQfree ();

    mp->hchans = extractHChans (mp);
    mp->vchans = extractVChans (mp);
    assignSegs (n_edges, route_list, mp);
    if (setjmp(jbuf))
	goto orthofinish;
    assignTracks (n_edges, route_list, mp);
#ifdef DEBUG
    if (odb_flags & ODB_ROUTE) emitGraph (stderr, mp, n_edges, route_list, es);
#endif
    attachOrthoEdges (g, mp, n_edges, route_list, &sinfo, es, doLbls);

orthofinish:
    if (Concentrate)
	freePS (ps);

    for (i=0; i < n_edges; i++)
	free (route_list[i].segs);
    free (route_list);
    freeMaze (mp);
}
Esempio n. 6
0
/*******************************************************************
  Submits all relevant run information to the run table
*******************************************************************/
bool commitSimulation( Simulation* s )
{
	// do nothing if database is not configured
	if( DB::connectionInfo.dbname == "" ){
		return true;
	}

	// set up thread-dependent db connection
	QSqlDatabase* db;
	dbLock.lock();
	if( !dbStore.contains(QThread::currentThreadId()) ){
		db = new QSqlDatabase();
		*db = QSqlDatabase::addDatabase("QMYSQL", QString::number(QThread::currentThreadId()));
		db->setHostName(DB::connectionInfo.host);
		db->setDatabaseName(DB::connectionInfo.dbname);
		db->setUserName(DB::connectionInfo.user);
		db->setPassword(DB::connectionInfo.password);
		dbStore.insert(QThread::currentThreadId(), db);

		// make sure the database exists and the credentials are good
		if( !db->open() ){
			qCritical() << "Could not open database";
			return false;
		}
	}
	else {
		db = dbStore[QThread::currentThreadId()];
	}
	dbLock.unlock();

	// prepare queries
	QSqlQuery testState(*db), addState(*db), addSim(*db), updateSim(*db);
	QSqlQuery addLoop(*db), incrementLoop(*db), termLoopFromState(*db);

	testState.prepare(
		"SELECT COUNT(state_def) AS count, loop_id, sim_id FROM states "
		"WHERE state_def=:id;");
	addState.prepare(
		"INSERT INTO states (state_def, next_state, stepnum, sim_id, loop_id) "
		"VALUES (:statedef, :nextstate, :stepnum, :simid, :loopid);");
	addSim.prepare(
		"INSERT INTO simulations (sim_id, length) VALUES (:simid, :length);");
	updateSim.prepare(
		"UPDATE simulations SET final_state=:final, term_loop_id=:termloopid "
		"WHERE sim_id=:id;");
	addLoop.prepare(
		"INSERT INTO loops (loop_id, length, instance_cnt) "
		"VALUES (:loopid, :length, 0);");
	incrementLoop.prepare(
		"UPDATE loops SET instance_cnt=instance_cnt+1 WHERE loop_id=:id;");
	termLoopFromState.prepare(
		"SELECT simulations.term_loop_id AS termloop FROM states JOIN simulations "
		"ON states.sim_id=simulations.sim_id WHERE states.state_def=:id;");

	State* i;
	State* initial = s->getInitialState();
	ull loopState = 0;
	bool loopFlag = false;

	// make sure the simulation has been run
	if( initial == NULL || initial->next == NULL ){
		qCritical() << "Cannot commit an incomplete simulation.";
		return false;
	}

	// lock simulation
	//QMutexLocker locker( &DB::simLock );

	// start transaction
	db->transaction();

	// loop over states
	for( i = initial; i!=NULL; i = i->next )
	{
		// check if current state is in the db
		testState.bindValue( ":id", QVariant(i->pack()) );
		if( !testState.exec() ){
			qCritical() << "Cannot query state table!" << endl
				<< testState.lastError().text();
			db->rollback();
			return false;
		}
		testState.first();

		// if state IS NOT in db
		if( testState.record().value("count").toInt() == 0 )
		{
			// initial state is fresh
			if( i == initial )
			{
				// commit new simulation entry
				addSim.bindValue(":simid", QVariant(initial->pack()));
				addSim.bindValue(":length", QVariant(s->getTotalLength()));
				if( !addSim.exec() ){
					qCritical() << "Cannot add new simulation to database!" << endl
						<< addSim.lastError().text();
					db->rollback();
					return false;
				}
			}

			// state is the start of the loop
			if( *i == *(s->getLoopState()) )
			{
				// set the loop id flag for future commits
				loopFlag = true;
				loopState = i->pack();

				// create new entry in the loop table
				addLoop.bindValue(":id", QVariant(loopState));
				addLoop.bindValue(":length", QVariant(s->getLoopLength()));
				if( !addLoop.exec() ){
					qCritical() << "Cannot add new loop to database!" << endl
						<< addLoop.lastError().text();
					db->rollback();
					return false;
				}

			}

			// commit state to db
			addState.bindValue(":statedef", QVariant(i->pack()));
			addState.bindValue(":nextstate", QVariant(i->next->pack()));
			addState.bindValue(":stepnum", QVariant(i->stepNum));
			addState.bindValue(":simid", QVariant(initial->pack()));
			addState.bindValue(":loopid", loopFlag ? QVariant(loopState) : QVariant() );
			if( !addState.exec() ){
				qCritical() << "Cannot add new state to database!" << endl
					<< addState.lastError().text();
				db->rollback();
				return false;
			}
		}

		// state IS in db
		else
		{
			// initial state has already been checked
			if( i == initial )
			{
				// our work here is done
				db->rollback();
				return true;
			}

			// get the db state's loop id
			ull termLoop = 0;
			if( testState.record().value("loop_id").isNull() )
			{
				// join a non-loop state
				termLoopFromState.bindValue(":id", QVariant(i->pack()));
				if( !termLoopFromState.exec() ){
					qCritical() << "Cannot retrieve terminal loop from state!" << endl
						<< termLoopFromState.lastError().text();
					db->rollback();
					return false;
				}
				termLoop = termLoopFromState.record().value("termloop").toLongLong();
			}
			else
			{
				// join a loop state
				termLoop = testState.record().value("loop_id").toLongLong();
			}

			// update simulation table with merger point and term loop id
			updateSim.bindValue(":final", QVariant(i->pack()));
			updateSim.bindValue(":termloopid", QVariant(termLoop));
			updateSim.bindValue(":id", QVariant(initial->pack()));
			if( !updateSim.exec() ){
				qCritical() << "Cannot update sim with terminal info!" << endl
					<< updateSim.lastError().text();
				db->rollback();
				return false;
			}

			// increment term loop instance count
			incrementLoop.bindValue(":id", termLoop);
			if( !incrementLoop.exec() ){
				qCritical() << "Cannot increment loop instance count!" << endl
					<< incrementLoop.lastError().text();
				db->rollback();
				return false;
			}

			// default case: break, complete the transaction, return true
			// includes self-looping state case
			break;

		} // end state presence branch

	} // end state loop


	// commit transaction
	db->commit();

	// unlock simulation
	//locker.unlock();

	return true;
}
Esempio n. 7
0
void LoopMachine::setPreset(const char* const presetFilename) {
//    std::cout << "MPD: CPP: LoopMachine::setPreset: setting looper preset to: " << presetFilename << std::endl;
    
    File presetFile(presetFilename);
    File presetDir = presetFile.getParentDirectory();
    var preset = JSON::parse(presetFile);
    
//    std::cout << "MPD: CPP: LoopMachine::setPreset: preset json: " << preset.toString() << std::endl;
    
    auto& obj = *preset.getDynamicObject();
	jassert(&obj != nullptr);
    
//    std::cout << "MPD: CPP: LoopMachine::setPreset: preset name: " << obj.getProperty("preset").toString()
//    << "; created by: " << obj.getProperty("createdBy").toString() << ", orig bpm: "
//    << obj.getProperty("origBpm").toString() << std::endl;
    
    fixedBpmTransport.setBpm(obj.getProperty("origBpm"));

    var groups = obj.getProperty("groups");
    
    for (int i = 0; i < groups.size(); i++) {
        var group = groups[i];
        auto& obj = *group.getDynamicObject();
        String groupName = obj.getProperty("name");
//        std::cout << "MPD: CPP: LoopMachine::setPreset: adding loops for " << groupName << std::endl;
		
        var loops = obj.getProperty("loops");
        for (int j = 0; j < loops.size(); j++) {
			var sampleInfoObj = loops[j];
			auto& sampleInfo = *sampleInfoObj.getDynamicObject();
			
			float gain = sampleInfo.getProperty("gain");
			String typeStr = sampleInfo.getProperty("type");
			LoopType type = typeStr == "one-shot" ? LoopType::ONE_SHOT : LoopType::LOOP;
			int length = type == LoopType::LOOP ? (int) sampleInfo.getProperty("length") : -1;
            File sample = presetDir.getChildFile(sampleInfo.getProperty("file").toString());
            
//            std::cout << "MPD: CPP: LoopMachine::setPreset: adding sample: "
//            << sample.getFullPathName() << std::endl;
            
            addLoop(groupName, sample, gain, type, length);
        }
    }
	
	var scenes = obj.getProperty("scenes");
	
	for (int i = 0; i < scenes.size(); i++) {
		var scene = scenes[i];
		auto& obj = *scene.getDynamicObject();
		
		String name = obj.getProperty("name");
		int sceneIx = addScene(name);
		
		var loops = obj.getProperty("loops");
		for (int j = 0; j < loops.size(); j++) {
			var obj2 = loops[j];
			auto& info = *obj2.getDynamicObject();
			
			String group = info.getProperty("group");
			int groupIx = groupNameToIx[group];
			int loopIx = info.getProperty("loopIx");
			
			addSceneLoop(sceneIx, groupIx, loopIx);
		}
		
	}
    
    prepareToPlay(expectedBufferSize, audioEngine.getTransport().getSampleRate());
}