private void GenerateToolbar()
    {
        Toolbar l_toolbar = new Toolbar();

        Button l_nodeButton = new Button();                                     //boton para crear un nodo tipo "Room", el clickEvent especifica que debe hacer el boton cuando es clicado

        l_nodeButton.text = "Create Room";                                      //nombre del boton
        l_nodeButton.clickable.clicked += () => m_graphView.createNode("Room"); //evento de clickar -> llamamos a la funcion createNode del graphView
        l_toolbar.Add(l_nodeButton);                                            //añadimos el boton a la toolbar

        //campo de texto con el nombre para guardar archivo
        TextField l_fileNameText = new TextField();//campo para guardar el nombre

        l_fileNameText.transform.position = new Vector3(60, 0, 0);
        l_fileNameText.SetValueWithoutNotify(m_ruleFileName);                              //guardar el valor por defecto
        l_fileNameText.MarkDirtyRepaint();                                                 //actualizar el nuevo valor en el siguiente frame
        l_fileNameText.RegisterValueChangedCallback(evt => m_ruleFileName = evt.newValue); //callback para cambiar el nombre del archivo
        l_toolbar.Add(l_fileNameText);                                                     //añadimos la variable donde se cambia el nombre del archivo a la toolbar


        Button l_saveRuleButton = new Button(); //boton para crear un nodo tipo "Room", el clickEvent especifica que debe hacer el boton cuando es clicado

        l_saveRuleButton.transform.position = new Vector3(60, 0, 0);
        l_saveRuleButton.clickable.clicked += () => SaveGrammarData(m_ruleFileName, false); //evento al clickar
        l_saveRuleButton.text = "Save Rule";                                                //nombre del boton
        l_toolbar.Add(l_saveRuleButton);                                                    //añadimos el boton a la toolbar

        Button l_loadRuleButton = new Button();                                             //boton para crear un nodo tipo "Room", el clickEvent especifica que debe hacer el boton cuando es clicado

        l_loadRuleButton.transform.position = new Vector3(60, 0, 0);
        l_loadRuleButton.clickable.clicked += () => LoadGrammarData(m_ruleFileName, false); //evento al clickar
        l_loadRuleButton.text = "Load Rule";                                                //nombre del boton
        l_toolbar.Add(l_loadRuleButton);                                                    //añadimos el boton a la toolbar


        Button l_expandRoomButton = new Button(); //boton para

        l_expandRoomButton.transform.position = new Vector3(130, 0, 0);
        l_expandRoomButton.clickable.clicked += () => ExpandNonTerminalNodes(); //evento al clickar
        l_expandRoomButton.text = "Expand NonTerminal";                         //nombre del boton
        l_toolbar.Add(l_expandRoomButton);                                      //añadimos el boton a la toolbar

        //campo de texto con el nombre para guardar el grafico final
        TextField l_finalGraphNameText = new TextField();//campo para guardar el nombre

        l_finalGraphNameText.transform.position = new Vector3(180, 0, 0);
        l_finalGraphNameText.SetValueWithoutNotify(m_finalGraphName);                              //guardar el valor por defecto
        l_finalGraphNameText.MarkDirtyRepaint();                                                   //actualizar el nuevo valor en el siguiente frame
        l_finalGraphNameText.RegisterValueChangedCallback(evt => m_finalGraphName = evt.newValue); //callback para cambiar el nombre del archivo
        l_toolbar.Add(l_finalGraphNameText);                                                       //añadimos la variable donde se cambia el nombre del archivo a la toolbar


        Button l_saveFinalGraphButton = new Button();

        l_saveFinalGraphButton.transform.position = new Vector3(180, 0, 0);
        l_finalGraphNameText.SetValueWithoutNotify(m_finalGraphName);                              //guardar el valor por defecto
        l_saveFinalGraphButton.clickable.clicked += () => SaveGrammarData(m_finalGraphName, true); //evento al clickar
        l_saveFinalGraphButton.text = "Save Final Graph";                                          //nombre del boton
        l_toolbar.Add(l_saveFinalGraphButton);                                                     //añadimos el boton a la toolbar

        Button l_loadFinalGraphButton = new Button();

        l_loadFinalGraphButton.transform.position = new Vector3(180, 0, 0);
        l_loadFinalGraphButton.clickable.clicked += () => LoadGrammarData(m_finalGraphName, true); //evento al clickar
        l_loadFinalGraphButton.text = "Load Final Graph";                                          //nombre del boton
        l_toolbar.Add(l_loadFinalGraphButton);                                                     //añadimos el boton a la toolbar

        rootVisualElement.Add(l_toolbar);                                                          //finalmente añadimos la toolbar a la ventana del editor
    }//generar la barra de botones de la ventana del editor