示例#1
0
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 ...
}
示例#2
0
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;
}