bool LayoutExtension::isInUse(SBMLDocument *doc) const { if (doc == NULL || doc->getModel() == NULL) return false; LayoutModelPlugin* plugin = (LayoutModelPlugin*)doc->getModel()->getPlugin("layout"); if (plugin == NULL) return false; return (plugin->getNumLayouts() > 0); }
bool RenderExtension::isInUse(SBMLDocument *doc) const { if (doc == NULL || doc->getModel() == NULL) return false; LayoutModelPlugin* plugin = (LayoutModelPlugin*)doc->getModel()->getPlugin("layout"); if (plugin == NULL || plugin->getNumLayouts() == 0) return false; RenderListOfLayoutsPlugin* lolPlugin = (RenderListOfLayoutsPlugin*) plugin->getListOfLayouts()->getPlugin("render"); if (lolPlugin != NULL && lolPlugin->getNumGlobalRenderInformationObjects() > 0) return true; for(int i = 0; i < plugin->getNumLayouts(); i++) { Layout* layout = plugin->getLayout(i); RenderLayoutPlugin* rPlugin = (RenderLayoutPlugin*)layout->getPlugin("render"); if (rPlugin != NULL && rPlugin->getNumLocalRenderInformationObjects() > 0) return true; } return false; }
/** * This method tries to import CellDesigner annotations. */ void DataModelGUI::importCellDesigner() { // add code to check for CellDesigner annotations // ask the user if the annotations should be imported CCopasiDataModel* pDataModel = (*CCopasiRootContainer::getDatamodelList())[0]; assert(pDataModel != NULL); if (pDataModel != NULL) { SBMLDocument* pSBMLDocument = pDataModel->getCurrentSBMLDocument(); if (pSBMLDocument != NULL && pSBMLDocument->getModel() != NULL && pSBMLDocument->getModel()->getAnnotation() != NULL) { // check for the CellDesigner namespace std::pair<bool, std::string> foundNamespace = CCellDesignerImporter::findCellDesignerNamespace(pSBMLDocument); if (foundNamespace.first == true) { const XMLNode* pAnno = CCellDesignerImporter::findCellDesignerAnnotation(pSBMLDocument, pSBMLDocument->getModel()->getAnnotation()); // first we check if there are supported cell designer annotations if (pAnno != NULL) { // check if the file contains the correct version double version = CCellDesignerImporter::determineVersion(pAnno); if (version < 4.0) { CCopasiMessage(CCopasiMessage::RAW, "CellDesigner annotation was found in the file, but the version is not supported.\nPlease open the file in the latest version of CellDesigner and save it again."); } else { bool importCD = false; #if LIBSBML_VERSION >= 50400 // if we don't have a layout import it! LayoutModelPlugin* mplugin = (LayoutModelPlugin*)pSBMLDocument->getModel()->getPlugin("layout"); if (mplugin == NULL || (mplugin != NULL && mplugin->getNumLayouts() == 0)) importCD = true; #endif // ask the user if the CellDesigner annotation should be imported if (importCD || CQMessageBox::question(NULL, "CellDesigner import", "A CellDesigner diagram was found in this file.\nDo you want to import the diagram?" , QMessageBox::Yes | QMessageBox::No , QMessageBox::No) == QMessageBox::Yes) { // do the import CCellDesignerImporter cd_importer(pSBMLDocument); if (cd_importer.getLayout() == NULL) { CCopasiMessage(CCopasiMessage::WARNING, "Sorry, CellDesigner annotations could not be importet."); } else { // now we have to import the created layout // create the model map std::string s1, s2; std::map<std::string, std::string> modelmap; std::map<CCopasiObject*, SBase*>::const_iterator it; std::map<CCopasiObject*, SBase*>::const_iterator itEnd = pDataModel->getCopasi2SBMLMap().end(); for (it = pDataModel->getCopasi2SBMLMap().begin(); it != itEnd; ++it) { s1 = SBMLUtils::getIdFromSBase(it->second); if (it->first) { s2 = it->first->getKey(); } else { s2 = ""; } if ((s1 != "") && (s2 != "")) { modelmap[s1] = s2; } } // the layout map and the id to key map can be empty std::map<std::string, std::string> layoutmap; std::map<std::string, std::string> idToKeyMap; #ifdef USE_CRENDER_EXTENSION CLayout* pLayout = SBMLDocumentLoader::createLayout(*cd_importer.getLayout(), modelmap, layoutmap, idToKeyMap); #else CLayout* pLayout = SBMLDocumentLoader::createLayout(*cd_importer.getLayout(), modelmap, layoutmap); #endif /* USE_CRENDER_EXTENSION */ // add the layout to the DataModel if (pLayout != NULL && pDataModel->getListOfLayouts() != NULL) { // the addLayout methods expects a map as the second argument which currently is // ignored, so we just pass an empty one // TODO maybe the methods actually expects one of the maps above (layoutmap or idToKeyMap), but // TODO this is not documented in CListOfLayouts std::map<std::string, std::string> tmp; pDataModel->getListOfLayouts()->addLayout(pLayout, tmp); } else { CCopasiMessage(CCopasiMessage::WARNING, "Sorry, Layout from CellDesigner annotations could not be created."); } } } } } else { CCopasiMessage(CCopasiMessage::RAW, "CellDesigner annotation was found in the file, but the version is not supported.\nPlease open the file in the latest version of CellDesigner and save it again."); } } } } }