Example #1
0
/**
 * \brief Charge un espace de travail
 * \details Charge un espace de travail. Si le dossier spécifié n'était pas un espace de travail, ce dernier est transformé en espace de travail
 * \param path chemin vers le dosier de l'espace de travail
 */
void Workspace::load(const QString& path){
    clear();
    wspath = path;

    QFile xml_doc(path + "\\.workspace");

    if(xml_doc.exists()){
        if(!xml_doc.open(QIODevice::ReadOnly)){
            xml_doc.close();
            NoteException ne("Le fichier .workspace n'a pas pu être ouvert.");
            throw ne;
        }

        if (!dom->setContent(&xml_doc)){
            xml_doc.close();
            NoteException ne("Le fichier .workspace est corrompu.");
            throw ne;
        }

        loadMaps();
        check();
        xml_doc.close();

    } else { // create the .workspace file
        xml_doc.open(QIODevice::ReadWrite);
        QTextStream out(&xml_doc);
        out.setCodec("UTF-8");
        out << "<?xml version='1.0' encoding='UTF-8'?>\n<workspace>\n  <notes></notes>\n  <trash_notes></trash_notes>\n  <tags></tags>\n</workspace>";
        xml_doc.close();
        dom->setContent(&xml_doc);
    }
}
Example #2
0
///////////////////////////////////////////////////////////////////////
//! \author BONNIER David
//!
//! \brief Fonction appeler par tout les contructeurs héritant de la classe (Regle, Equerre, Compas, Crayon).
//!
//! Fonction qui initialise toutes les données membres d'Instrument avec le XML.
//! Nom des fichiers XML données dans les constructeurs spécifiques des classes filles.
//! Les 3 paramètres avant de l'appeler sont : m_nomFichierXML, m_nomDocument, m_nomElement.
//!
//! \date 01/02/2014
///////////////////////////////////////////////////////////////////////
void Instrument::Initialisation()
{
    QFile xml_doc(*m_nomFichierXML);// On choisit le fichier contenant les informations XML.
    if(!xml_doc.open(QIODevice::ReadOnly))// Si l'on n'arrive pas à ouvrir le fichier XML.
    {
         QMessageBox::warning(this,"Erreur a l'ouverture du document XML","Le document XML n'a pas pu etre ouvert. Verifiez que le nom est le bon et que le document est bien place");
         return;
    }
    QDomDocument dom(*m_nomDocument); // Création de l'objet DOM
    if (!dom.setContent(&xml_doc)) // Si l'on n'arrive pas à associer le fichier XML à l'objet DOM.
    {
         xml_doc.close();
         QMessageBox::warning(this,"Erreur a l'ouverture du document XML","Le document XML n'a pas pu etre attribue a l'objet QDomDocument.");
         return;
    }
    QDomElement dom_element = dom.documentElement();
    QDomNode noeud = dom_element.firstChild();
    while(!noeud.isNull()) //Parours du fichier
    {
        QDomElement element = noeud.toElement(); // On utilise cette propriété afin de transformer le nœud en éléments.
                                                 //Cela nous permet aussi de récupérer l'élément ou nœud courant.
        if(!element.isNull()) //S'il y a un élément dans le noeud
        {
            //Boolean
            if (element.tagName() == "transparence")
                m_transparence = element.text().toInt();
            if (element.tagName() == "moveSelected")
                m_moveSelected = element.text().toInt();
            if (element.tagName() == "rotateSelected")
                m_rotateSelected = element.text().toInt();

            //Variable
            if (element.tagName() == "positionX")
                m_position.setX(element.text().toInt());
            if (element.tagName() == "positionY")
                m_position.setY(element.text().toInt());
            if (element.tagName() == "angle")
                m_angle = element.text().toDouble();
            if (element.tagName() == "offsetX")
                m_offset.setX(element.text().toInt());
            if (element.tagName() == "offsetY")
                m_offset.setY(element.text().toInt());
            if (element.tagName() == "posClicX")
                m_posClic.setX(element.text().toInt());
            if (element.tagName() == "posClicY")
                m_posClic.setY(element.text().toInt());

            //Constantes
            if (element.tagName() == "longueur")
                m_longueur = element.text().toInt();
            if (element.tagName() == "largeur")
                m_largeur = element.text().toInt();
        }
        noeud = noeud.nextSibling(); //Ce code permet d'aller à l'élément suivant.
    }
    xml_doc.close();
	m_ecartSelected = false;
	m_traceSelected = false;
}
/**
* \brief Fill the QDomDocument with the data of a XML file.
* \author Jules Gorny - ALCoV team, ISIT, UMR 6284 UdA – CNRS
* \param doc : QDomDocument to fill
* \param xmlPath : path of the file of data
*/
void fillDomDocFromXmlFile(QDomDocument &doc, QString xmlPath, Ui::MainWindow *ui)
{
	doc = QDomDocument();
	QFile xml_doc(xmlPath);

	if( xml_doc.open(QIODevice::ReadOnly) )
	{		
		if ( !doc.setContent(&xml_doc) )
			addProgressMessage(ui,"QDomDocument can't manage to read the XML file.\n", Qt::red, "", true);
	}
	else
		addProgressMessage(ui,"XML file can't be open.\n", Qt::red, "", true);

	xml_doc.close();
}
Example #4
0
void xml::ouvrir_xml(QString fichier_xml, QString path_xml, QDomDocument *xml)
{
        QFile xml_doc(path_xml + fichier_xml + ".xml");// On choisit le fichier contenant les informations XML.
        if(!xml_doc.open(QIODevice::ReadOnly))// Si l'on n'arrive pas à ouvrir le fichier XML.
        {
            QMessageBox::warning(this,"Erreur à l'ouverture du document XML","Le document XML n'a pas pu être ouvert. Vérifiez que le nom est le bon et que le document est bien placé :\n Chemin du fichier :" + path_xml + fichier_xml + ".xml");
            return;
        }
        if (!xml->setContent(&xml_doc)) // Si l'on n'arrive pas à associer le fichier XML à l'objet DOM.
        {
                xml_doc.close();
                QMessageBox::warning(this,"Erreur à l'ouverture du document XML","Le document XML n'a pas pu être attribué à l'objet QDomDocument.");
                return;
        }
    xml_doc.close(); // Dans tous les cas, on doit fermer le document XML : on n'en a plus besoin, tout est compris dans l'objet DOM.

}
Example #5
0
void Scene::read(const char *filename)
{
    QString path;
    if(!filename)
        path = QString("./data/scenes/open/");
    else
        path = "./data/scenes/"+QString(filename)+"/";

    //Parsing XML document.
    QDomDocument dom("config");
    QFile xml_doc(path+"config.xml");
    if(!xml_doc.open(QIODevice::ReadOnly))
    {
        QMessageBox::warning(NULL, QString("Read ")+filename+QString(" config"), QString("Can't open the file config.xml of ")+filename);
        return;
    }
    if (!dom.setContent(xml_doc.readAll()))
    {
        xml_doc.close();
        QMessageBox::warning(NULL, QString("Read ")+filename+QString(" config"), "Le document XML n'a pas pu être attribué à l'objet QDomDocument.");
        return;
    }
    xml_doc.close();

    //Count layers
    QDomNode node = dom.documentElement().firstChild();
    while(!node.isNull())
    {
        QDomElement element = node.toElement();
        if(element.tagName() == "layer")
            m_nbLayer++;
        if(element.tagName() == "copy")
            m_nbCopy++;
        node = node.nextSibling();
    }

    //Init new layers & copyers
    m_layer = new Layer[m_nbLayer];
    for(int i=0; i<m_nbLayer; i++)
    {
        m_layer[i].shader = NULL;
        m_layer[i].buffer = NULL;
        m_layer[i].backBuffer = NULL;
        m_layer[i].tmpBuffer = NULL;
        m_layer[i].mode = DEFAULT;
        for(int j=0; j<4; j++)
        {
            m_layer[i].channel[j] = NULL;
        }
    }
    m_copy = new Copy[m_nbCopy];
    for(int i=0; i<m_nbCopy; i++)
    {
        m_copy[i].src = NULL;
        m_copy[i].dest = NULL;
    }

    //Read the xml file
    node = dom.documentElement().firstChild();
    int textureID=0;
    while(!node.isNull())
    {
        QDomElement element = node.toElement();

        if(element.tagName() == "copy")
        {
            int id = element.attribute("id", "0").toInt();
            int src = element.attribute("src", "0").toInt();
            int dest = element.attribute("dest", "0").toInt();
            m_copy[id].src = m_layer[src].buffer;
            m_copy[id].dest = m_layer[dest].backBuffer;
        }
        else if(element.tagName() == "layer")
        {
            //Get infos ..
            int id = element.attribute("id", "0").toInt();
            QString format = element.attribute("format", "rgba");

            QString blend = element.attribute("mode", "default");
            m_layer[id].width = element.attribute("width", "-1").toInt();
            m_layer[id].height = element.attribute("height", "-1").toInt();

            QString type = element.attribute("type", "pixel");
            if(type == "pixel")
                m_layer[id].type = PIXEL;
            else if(type == "particle")
            {
                m_layer[id].type = PARTICLE;
                m_nbParticles = element.attribute("count", "0").toInt();
                generateParticles();
            }

            m_layer[id].iterate = element.attribute("iterate", "0").toInt();

            if(m_layer[id].width == -1)
                m_layer[id].width = Core::instance()->getResX();
            if(m_layer[id].height == -1)
                m_layer[id].height = Core::instance()->getResY();

            if(blend != "default")
            {
                m_layer[id].tmpBuffer = new FBO();
                m_layer[id].tmpBuffer->setSize(m_layer[id].width, m_layer[id].height);
            }
            //Select format
            GLint bufferFormat = GL_RGBA;
            if(format == "rgb")
                bufferFormat = GL_RGB;
            else if(format == "rgba")
                bufferFormat = GL_RGBA;
            else if(format == "rgba32")
                bufferFormat = GL_RGBA32F_ARB; //work ?
            else if(format == "rgba32")
                bufferFormat = GL_RGBA32F_ARB; //work ?
            else if(format == "rgba32half")
                bufferFormat = GL_RGBA16F_ARB; //work ?
            else if(format == "luminance")
                bufferFormat = GL_LUMINANCE;
            else
                QMessageBox::warning(NULL, QString("Scene ")+filename, QString("This layer format doesn't exist : ")+format);

            //Select mode
            if(blend == "default")
                m_layer[id].mode = DEFAULT;
            else if(blend == "alpha")
                m_layer[id].mode = BLEND_ALPHA;
            else if(blend == "add")
                m_layer[id].mode = BLEND_ADD;
            else if(blend == "none")
                m_layer[id].mode = NONE;
            else
                QMessageBox::warning(NULL, QString("Scene ")+filename, QString("This layer mode doesn't exist : ")+blend);

            //Compute shader
            QString filePath = element.attribute("value", "none");
            m_layer[id].name = filePath;
            int ok;
            if(filePath != "none")
            {
                QFile file(path+filePath);
                QString strings;
                if (file.open(QIODevice::ReadOnly | QIODevice::Text))
                {
                    QTextStream in(&file);
                    while (!in.atEnd()) {
                        strings += in.readLine()+"\n";
                    }
                }
                Core::instance()->writeInfo( QString("Compiling ") + m_layer[id].name + QString(".. ") );
                m_layer[id].shader = new Shader();
                if( m_layer[id].type == PIXEL)
                    ok = m_layer[id].shader->compil(Core::instance()->getVertexShader(),strings.toStdString().c_str());
                else if( m_layer[id].type == PARTICLE)
                    ok = m_layer[id].shader->compil(Core::instance()->getVertexShaderParticle(),strings.toStdString().c_str());

                if(ok == SHADER_SUCCESS)
                    Core::instance()->writeInfo( QString("[Done]\n"), false );
                file.close();
            }


            //Generate buffers !
            if(ok == SHADER_SUCCESS)
            {
                m_layer[id].buffer = new FBO();
                m_layer[id].buffer->setSize(m_layer[id].width, m_layer[id].height);
                m_layer[id].buffer->setFormat(bufferFormat);
                if(element.attribute("backbuffer", "false") == "true" || m_layer[id].iterate > 0)
                {
                    m_layer[id].backBuffer = new FBO();
                    m_layer[id].backBuffer->setSize(m_layer[id].width, m_layer[id].height);
                    m_layer[id].backBuffer->setFormat(bufferFormat);
                }
            }
            else
            {
                return;
            }

            //Load channel
            textureID=0;
            QDomNode n = element.firstChild();
            while(!n.isNull())
            {
                QDomElement e = n.toElement();
                if(e.tagName() == "channel")
                {
                    if(textureID<4)
                    {
                        m_layer[id].channelName[textureID] = e.attribute("id", "tex");
                        if( e.attribute("type", "") == "image" )
                        {
                            m_layer[id].channel[textureID] = new Texture();
                            m_layer[id].channel[textureID]->load("./data/textures/"+e.attribute("value", "none").toStdString());
                        }
                        else if( e.attribute("type", "") == "layer" )
                        {
                            m_layer[id].channel[textureID] = m_layer[e.attribute("value", "0").toInt()].buffer;
                            m_layer[e.attribute("value", "0").toInt()].buffer->bind();
                        }
                        textureID++;
                    }
                    else
                        QMessageBox::warning(NULL, QString("Read ")+filename+QString(" config"), QString("Too many textures (max is 4)"));
                }
                n = n.nextSibling();
            }
        }
        else if(element.tagName() == "param")
        {
            m_param[element.attribute("id", "0").toInt()] = element.attribute("value","none");
        }
        node = node.nextSibling();
    }

}