IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Undo / Redo. Peut-on enregistrer que certaines actions ?


Sujet :

Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Undo / Redo. Peut-on enregistrer que certaines actions ?
    Bonjour à tous,

    Je suis en train de développer un éditeur de texte dédié à un langage particulier (interne à ma boîte).
    Cet éditeur doit pouvoir supporter les opérations les plus usuelles : couper/copier/coller, coloration syntaxique et undo/redo.

    J'ai donc choisi un JTextPane pour faire ceci.
    Pour la coloration syntaxique j'utilise un DefautStyledDocument sur lequel je surcharge les méthodes insertString, remove et replace.
    Sur l'appel de ces méthodes, je parse mon texte et je colorise les différents tokens trouvés.

    Le problème survient lors de la gestion du undo/redo.
    Il existe dans Swing une implémentation toute faite du undo/redo via UndoableEditListener et UndoManager.
    Mais lorsque je dépile les évènements enregistrés lors de la saisie de mon texte, je m'aperçois qu'il prend en compte également les évènements de parsing et de coloration.

    Exemple concret :
    Si on considère que le mot 'IF' est un mot-clé que l'éditeur doit coloriser en rouge.
    J'éxécute la séquence suivante :
    - je tape la lettre I
    - je tape la lettre F => l'éditeur parse le texte, détecte le mot-clé et colorise le texte 'IF' en rouge.
    - je fais UNDO (via un raccourci-clavier) => l'éditeur décolorise le texte.
    - je refais UNDO => l'éditeur bouge le curseur (caret) vers la gauche (il dépile l'action parsing)
    - je refais UNDO => l'éditeur supprime enfin la lettre 'F'.

    Ma question est donc la suivante :
    y'a t-il un moyen de filtrer les évènements que le undoListener doit enregistrer. Quand je fais UNDO après avoir entré une lettre, je veux qu'il supprime la lettre tout simplement.

    J'espère avoir été assez clair dans mes explications

    Merci de vos réponses.
    When the seagulls follow the troiler, it's because they think that sardins will be thrown into the sea.
    [ EC ]

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Ce que tu dis n'est pas tout à fait juste. Ce n'est pas le parsing que tu annules c'est simplement l'insertion du texte.
    Les actions annulables concernent essentiellement la modification du texte (ajout, suppression, etc) et la modification des styles.
    Et c'est bien ce qui se passe dans ton cas : tu annules la modification du style puis l'insertion caractères par caractères.

    Je sais qu'il y a un moyen de modifié la structure interne du document java sans déclenché la création d'UndoableEdit (je l'ai fait pour la numérotation automatique de styles de titre).
    Pour cela regarde le code source des méthodes setCharacterAttributes et setParagraphAttributes de la classe DefaultstyledDocument, ça pourrait te donner des idées.

    Mais ça ne répondra pas à ton problème pour autant. En faisant ça, tu gagneras juste une étape. Lorsque tu feras Undo, tu auras encore le 'I' de IF en couleur alors que ce n'est pas ce que tu souhaites.

    Tu pourrais bien sûr parser ton document à chaque modification du document mais ça risque d'être un petit peu couteux.
    Regarde du coté de la classe ViewFactory et des classes View responsable du rendu à l'écran (en particulier de la classe LabelView qui s'occupe de dessiner les fragments de texte). ça serait peut-être une bonne solution pour ne pas parser le document et ne pas mettre des styles partout dans ton document. (restera à regler la fragmentation des mots clés en plusieurs élèments dans ton document).

    jettes un coup d'oeil à ça aussi : http://java.sun.com/products/jfc/tsc/articles/text/editor_kit/index.html
    C'est une autre méthode.

    En espérant que ça t'aideras un peu.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci de ton aide,

    je vais explorer les différentes pistes que tu me suggères.
    When the seagulls follow the troiler, it's because they think that sardins will be thrown into the sea.
    [ EC ]

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/05/2011, 18h19
  2. StyledText action raccourcis Undo/Redo
    Par DaveShot dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 02/12/2009, 13h07
  3. Librairie Undo /Redo (si ca peut aider)
    Par theMonz31 dans le forum C#
    Réponses: 4
    Dernier message: 17/12/2007, 09h36
  4. Réponses: 5
    Dernier message: 31/03/2006, 18h12
  5. [Oracle 8i] ne garder que certains enregistrements (COUNT ?)
    Par delphim dans le forum Langage SQL
    Réponses: 13
    Dernier message: 23/02/2005, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo