void MainWindow::saveSelected(const QString &filename) { if (_analyses->count() > 0) { QWebElement element = ui->webViewResults->page()->mainFrame()->documentElement(); QString qHTML = element.toOuterXml(); _package->analysesHTML = fq(qHTML); Json::Value analysesData = Json::arrayValue; for (Analyses::iterator itr = _analyses->begin(); itr != _analyses->end(); itr++) { Analysis *analysis = *itr; if (analysis != NULL && analysis->visible()) { Json::Value analysisData = analysis->asJSON(); analysisData["options"] = analysis->options()->asJSON(); analysesData.append(analysisData); } } _package->analysesData = analysesData; _package->hasAnalyses = true; } _loader.save(filename, _package); _alert->show(); }
void Engine::receiveMessages(int timeout) { string data; if (_channel->receive(data, timeout)) { Value jsonRequest; Reader r; r.parse(data, jsonRequest, false); string analysisName = jsonRequest.get("name", nullValue).asString(); int id = jsonRequest.get("id", -1).asInt(); bool run = jsonRequest.get("perform", "run").asString() == "run"; Value jsonOptions = jsonRequest.get("options", nullValue); if (_currentAnalysis != NULL && _currentAnalysis->id() == id) { _currentAnalysis->options()->set(jsonOptions); if (run) _currentAnalysis->setStatus(Analysis::Running); else _currentAnalysis->setStatus(Analysis::Empty); } else if (_nextAnalysis != NULL && _nextAnalysis->id() == id) { _nextAnalysis->options()->set(jsonOptions); if (run) _nextAnalysis->setStatus(Analysis::Running); else _nextAnalysis->setStatus(Analysis::Empty); } else { Analysis *analysis = AnalysisLoader::load(id, analysisName); analysis->options()->set(jsonOptions); if (run) analysis->setStatus(Analysis::Running); if (_dataSet == NULL) { managed_shared_memory *mem = SharedMemory::get(); _dataSet = mem->find<DataSet>(boost::interprocess::unique_instance).first; _R.setDataSet(_dataSet); } analysis->setDataSet(_dataSet); analysis->setRInterface(&_R); analysis->resultsChanged.connect(boost::bind(&Engine::analysisResultsChanged, this, _1)); if (_nextAnalysis != NULL) delete _nextAnalysis; _nextAnalysis = analysis; if (_currentAnalysis != NULL) _currentAnalysis->setStatus(Analysis::Aborted); } } }
Analysis *Analyses::create(string name, int id) { Analysis *analysis = AnalysisLoader::load(id, name); if (_defaults.find(name) != _defaults.end()) { Json::Value opt = _defaults[name]->options()->asJSON(); analysis->options()->set(opt); } while (id >= _analyses.size()) _analyses.push_back(NULL); _analyses[id] = analysis; analysis->optionsChanged.connect(boost::bind(&Analyses::analysisOptionsChangedHandler, this, _1)); analysis->resultsChanged.connect(boost::bind(&Analyses::analysisResultsChangedHandler, this, _1)); analysisAdded(analysis); return analysis; }