/** * Crée l'élément DOM correspondant à l'affichage, si nécessaire en créant l'élément DOM parent. */ private void creerNoeud(final MyCompoundEdit cedit) { if (attribut) { Element elparent = (Element) affParent.getNoeud(); if (elparent == null) { affParent.creerNoeud(cedit); elparent = (Element) affParent.getNoeud(); } final String nom = cfg.nomAttribut(refNoeud); final String espace = cfg.espaceAttribut(refNoeud); elparent.setAttributeNS(espace, nom, ""); noeud = elparent.getAttributeNodeNS(espace, nom); cedit.addEdit(new FormUndoableEdit(FormUndoableEdit.TypeEdition.AJOUTER, this)); } else { noeud = JaxeElement.nouvelElementDOM(doc, refNoeud); Element elparent = (Element) affParent.getNoeud(); if (elparent == null) { affParent.creerNoeud(cedit); elparent = (Element) affParent.getNoeud(); elparent.appendChild(noeud.getOwnerDocument().createTextNode("\n")); } final Element suivant = affParent.trouverSuivant(refNoeud); final Node textnode = noeud.getOwnerDocument().createTextNode("\n"); if (suivant == null) { elparent.appendChild(noeud); elparent.appendChild(textnode); } else { elparent.insertBefore(noeud, suivant); elparent.insertBefore(textnode, suivant); } cedit.addEdit(new FormUndoableEdit(FormUndoableEdit.TypeEdition.AJOUTER, this)); } affParent.lireEnfants(); doc.textPane.miseAJourArbre(); }
/** Enregistre un changement dans le DOM. */ private void enregistrerChangement() { String valeur = getValeur(); if ((valeur == null || "".equals(valeur)) && noeud == null) { // arrive si enregistrerChangement est appelé 2 fois lors d'un effacement // il n'y a rien à changer return; } if (valeur == null) valeur = ""; doc.setModif(true); MyCompoundEdit cedit = null; if (noeud == null && !"".equals(valeur)) { cedit = new MyCompoundEdit(); creerNoeud(cedit); } else if (noeud != null && "".equals(valeur) && affParent != null) { effacerNoeud(false, null); return; } if (!attribut) { final Element el = (Element) noeud; final Node firstChild = el.getFirstChild(); if (firstChild == null) { final FormUndoableEdit fedit = new FormUndoableEdit(this, "", valeur); if (cedit != null) cedit.addEdit(fedit); else doc.textPane.addEdit(fedit); final Node textnode = el.getOwnerDocument().createTextNode(valeur); el.appendChild(textnode); } else if (firstChild.getNodeType() == Node.TEXT_NODE) { final FormUndoableEdit fedit = new FormUndoableEdit(this, firstChild.getNodeValue(), valeur); if (cedit != null) cedit.addEdit(fedit); else doc.textPane.addEdit(fedit); firstChild.setNodeValue(valeur); } else LOG.error( "AffichageFormulaire.enregistrerChangement : pas de noeud texte pour enregistrer le champ"); } else { final FormUndoableEdit fedit = new FormUndoableEdit(this, noeud.getNodeValue(), valeur); if (cedit != null) cedit.addEdit(fedit); else doc.textPane.addEdit(fedit); final Element elparent = (Element) affParent.getNoeud(); final String nom = cfg.nomAttribut(refNoeud); final String espace = cfg.espaceAttribut(refNoeud); elparent.setAttributeNS(espace, nom, valeur); } if (cedit != null) { cedit.end(); doc.textPane.addEdit(cedit); } if ("".equals(valeur)) setValidite(true); else { if (attribut) setValidite(cfg.attributValide(refNoeud, valeur)); else setValidite(cfg.valeurElementValide(refNoeud, valeur)); } }
public void undoableEditHappened(UndoableEditEvent e) { UndoableEdit edit = e.getEdit(); if (edit instanceof AbstractDocument.DefaultDocumentEvent) { AbstractDocument.DefaultDocumentEvent event = (AbstractDocument.DefaultDocumentEvent) edit; int start = event.getOffset(); int len = event.getLength(); Debug.log(9, "undoableEditHappened " + start + "," + len); boolean isNeedStart = false; if (event.getType().equals(DocumentEvent.EventType.CHANGE) || event.getType().equals(DocumentEvent.EventType.INSERT)) { try { String text = event.getDocument().getText(start, len); if (text.contains("\n")) isNeedStart = true; } catch (BadLocationException e1) { e1.printStackTrace(); } } if (current == null) { isNeedStart = true; } else if (lastEditName == null || !lastEditName.equals(edit.getPresentationName())) { isNeedStart = true; } while (pointer < edits.size() - 1) { edits.remove(edits.size() - 1); isNeedStart = true; } if (isNeedStart) { createCompoundEdit(); } current.addEdit(edit); lastEditName = edit.getPresentationName(); refreshControls(); } }