/**
  * 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();
 }
예제 #2
0
  public void redo() throws CannotUndoException {
    if (!canRedo()) {
      throw new CannotUndoException();
    }

    pointer++;
    MyCompoundEdit u = edits.get(pointer);
    u.redo();

    refreshControls();
  }
예제 #3
0
  public void undo() throws CannotUndoException {
    if (!canUndo()) {
      throw new CannotUndoException();
    }

    MyCompoundEdit u = edits.get(pointer);
    u.undo();
    pointer--;

    refreshControls();
  }
 /** 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));
   }
 }
예제 #5
0
  public void createCompoundEdit() {
    if (current == null) {
      current = new MyCompoundEdit();
    } else if (current.getLength() > 0) {
      current = new MyCompoundEdit();
    }

    edits.add(current);
    pointer++;
  }
예제 #6
0
  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();
    }
  }