void OpenMaEditorTask::open() { if (stateInfo.hasError() || (maObject.isNull() && documentsToLoad.isEmpty())) { return; } if (maObject.isNull()) { Document* doc = documentsToLoad.first(); if(!doc){ stateInfo.setError(tr("Documet removed from project")); return; } if (unloadedReference.isValid()) { GObject* obj = doc->findGObjectByName(unloadedReference.objName); if (obj!=NULL && obj->getGObjectType() == type) { maObject = qobject_cast<MultipleAlignmentObject*>(obj); } } else { QList<GObject*> objects = doc->findGObjectByType(type, UOF_LoadedAndUnloaded); maObject = objects.isEmpty() ? NULL : qobject_cast<MultipleAlignmentObject*>(objects.first()); } if (maObject.isNull()) { stateInfo.setError(tr("Multiple alignment object not found")); return; } } viewName = GObjectViewUtils::genUniqueViewName(maObject->getDocument(), maObject); uiLog.details(tr("Opening MSA editor for object: %1").arg(maObject->getGObjectName())); MaEditor* v = getEditor(viewName, maObject); GObjectViewWindow* w = new GObjectViewWindow(v, viewName, false); MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager(); mdiManager->addMDIWindow(w); }
QList<Task*> DefaultConvertFileTask::onSubTaskFinished(Task *subTask) { QList<Task*> result; CHECK(!subTask->hasError() && !subTask->isCanceled(), result); CHECK(!hasError() && !isCanceled(), result); if (saveTask == subTask) { return result; } SAFE_POINT_EXT(loadTask == subTask, setError("Unknown subtask"), result); bool mainThread = false; Document *srcDoc = loadTask->getDocument(mainThread); SAFE_POINT_EXT(NULL != srcDoc, setError("NULL document"), result); DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry(); DocumentFormat *df = dfr->getFormatById(targetFormat); SAFE_POINT_EXT(NULL != df, setError("NULL document format"), result); QSet<GObjectType> selectedFormatObjectsTypes = df->getSupportedObjectTypes(); QSet<GObjectType> inputFormatObjectTypes; QListIterator<GObject*> objectsIterator(srcDoc->getObjects()); while (objectsIterator.hasNext()) { GObject *obj = objectsIterator.next(); inputFormatObjectTypes << obj->getGObjectType(); } inputFormatObjectTypes.intersect(selectedFormatObjectsTypes); if (inputFormatObjectTypes.empty()) { setError(tr("The formats are not compatible: %1 and %2").arg(srcDoc->getDocumentFormatId()).arg(targetFormat)); return result; } QString ext = targetFormat; if (!df->getSupportedDocumentFileExtensions().isEmpty()) { ext = df->getSupportedDocumentFileExtensions().first(); } if (targetUrl.isEmpty()) { QString fileName = srcDoc->getName() + "." + ext; targetUrl = GUrlUtils::rollFileName(workingDir + fileName, QSet<QString>()); } else { if (QFileInfo(targetFormat).suffix() != ext) { targetUrl += "." + ext; } targetUrl = GUrlUtils::rollFileName(targetUrl, QSet<QString>()); } IOAdapterFactory *iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(srcDoc->getURL())); Document *dstDoc = srcDoc->getSimpleCopy(df, iof, srcDoc->getURL()); saveTask = new SaveDocumentTask(dstDoc, iof, targetUrl); result << saveTask; return result; }
Task::ReportResult GTest_CompareTreesInTwoObjects::report() { Document* doc = getContext<Document>(this, docContextName); if (doc == NULL) { stateInfo.setError(QString("document not found %1").arg(docContextName)); return ReportResult_Finished; } Document* doc2 = getContext<Document>(this, secondDocContextName); if (doc2 == NULL) { stateInfo.setError(QString("document not found %1").arg(secondDocContextName)); return ReportResult_Finished; } const QList<GObject*>& objs = doc->getObjects(); const QList<GObject*>& objs2 = doc2->getObjects(); for (int i = 0; i < objs.size() && i < objs2.size(); ++i){ GObject *obj = objs.at(i), *obj2 = objs2.at(i); PhyTreeObject *treeObj = NULL, *treeObj2 = NULL; if (obj->getGObjectType() == GObjectTypes::PHYLOGENETIC_TREE){ treeObj = qobject_cast<PhyTreeObject*>(obj); } if (obj2->getGObjectType() == GObjectTypes::PHYLOGENETIC_TREE){ treeObj2 = qobject_cast<PhyTreeObject*>(obj2); } if (treeObj == NULL){ stateInfo.setError(QString("can't cast to tree from: %1 in position %2").arg(obj->getGObjectName()).arg(i)); return ReportResult_Finished; } if (treeObj2 == NULL){ stateInfo.setError(QString("can't cast to tree from: %1 in position %2").arg(obj2->getGObjectName()).arg(i)); return ReportResult_Finished; } if (!PhyTreeObject::treesAreAlike(treeObj->getTree(), treeObj2->getTree())) { stateInfo.setError(QString("trees in position %1 are different").arg(i)); return ReportResult_Finished; } } return ReportResult_Finished; }