void c_graph_item::setSolutionTransColor_(m_transition * trans){ trans->isNonParcouru = false; trans->isActif = false; trans->isParcouru = false; trans->isSolution = true; //instruction de suppression des item dans la QgraphicsView QGraphicsItem * drawedLine = trans->getLineItem(); QGraphicsItem * drawedArrow = trans->getArrowItem(); this->model_graph->view_graph->scene()->removeItem(drawedLine); this->model_graph->view_graph->scene()->removeItem(drawedArrow); //instruction pour la suppression dans le tableau de transition de la class model /*std::vector<m_transition *> * listDrawedTransitions = model_graph->getTransitions(); int positionOfThatTransition = model_graph->getTransitionPositionInVector(rightClickedTransition); listDrawedTransitions->erase(listDrawedTransitions->begin()+ positionOfThatTransition);*/ //change la couleur a l'interieur de la classe m_transition trans->setColorSolution(); //reajoute la transition dans la view (transition qui a changer de couleur avec l'instruction précedente) drawedLine = trans->getLineItem(); drawedArrow = trans->getArrowItem(); this->model_graph->view_graph->scene()->addItem(drawedLine); this->model_graph->view_graph->scene()->addItem(drawedArrow); //remet l'event filter sur la transition std::vector<QGraphicsItem *> * items = trans->getItems(); for(int i=0;i<(int)items->size();i++){ QGraphicsItem * item = items->at(i); this->scene()->addItem(item); item->installSceneEventFilter(this); } //a voir si on supprime le label aussi ... }
v_graph * m_savemanager::xmlToGraph(QString xml,v_graph * graph){ graph->getGraphicsScene()->clear(); //vide le graph graph->getModelGraph()->getNodes()->clear(); //vide le tableau de noeuds graph->getModelGraph()->getTransitions()->clear(); //vide le tableau de transitions QDomDocument * dom_document = new QDomDocument(); dom_document->setContent(xml); QDomElement dom_element = dom_document->documentElement(); QDomElement dom_graph_element = dom_element.elementsByTagName("graph").item(0).toElement(); QDomElement dom_nodes_element = dom_graph_element.elementsByTagName("nodes").item(0).toElement(); QDomNodeList nodeListe_nodelist = dom_nodes_element.elementsByTagName("node"); //liste des elements noeuds for(int i=0;i<nodeListe_nodelist.size();i++){ int x = nodeListe_nodelist.item(i).toElement().elementsByTagName("x").item(0).toElement().text().toInt(); int y = nodeListe_nodelist.item(i).toElement().elementsByTagName("y").item(0).toElement().text().toInt(); QString name = nodeListe_nodelist.item(i).toElement().elementsByTagName("name").item(0).toElement().text(); m_node * newNode = new m_node(x,y,name,NULL); newNode->setParentScene(graph->getGraphicsScene()); newNode->installEventFilter(graph->getControllerGraph()); graph->getModelGraph()->addNode(newNode); graph->getGraphicsScene()->addWidget(newNode); } //creee un nouveau controller d'item car l'ancien provoque un segfault c_graph_item * controller_graph_item = new c_graph_item(graph->getModelGraph(),graph->getGraphicsScene()->views().at(0)); graph->setNewControllerItem(controller_graph_item); graph->getGraphicsScene()->addItem(controller_graph_item); QDomElement dom_transitions_element = dom_graph_element.elementsByTagName("transitions").item(0).toElement(); QDomNodeList transListe_nodelist = dom_transitions_element.elementsByTagName("transition"); for(int i=0;i<transListe_nodelist.size();i++){ //ajout de la transition QString nameN1 = transListe_nodelist.item(i).toElement().elementsByTagName("node1").item(0).toElement().text(); QString nameN2 = transListe_nodelist.item(i).toElement().elementsByTagName("node2").item(0).toElement().text(); QString name = transListe_nodelist.item(i).toElement().elementsByTagName("name").item(0).toElement().text(); m_transition * tmp_trans = new m_transition(graph->getModelGraph()->getNode(nameN1),graph->getModelGraph()->getNode(nameN2),name,NULL); graph->getModelGraph()->addTransition(tmp_trans); std::vector<QGraphicsItem *> * items = tmp_trans->getItems(); for(int i=0;i<(int)items->size();i++){ QGraphicsItem * item = items->at(i); graph->scene()->addItem(item); item->installSceneEventFilter(controller_graph_item); } graph->scene()->addWidget(tmp_trans->getLabelEdit()); } return graph; }