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

Eclipse Java Discussion :

[PDE] Problème pour sauvegarder une modif dans un éditeur


Sujet :

Eclipse Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 29
    Points
    29
    Par défaut [PDE] Problème pour sauvegarder une modif dans un éditeur
    Bonjour à tous,

    Voilà j´ai réalisé un plugin Eclipse qui utilise un éditeur.
    Lorsqu´on modifie le texte dans l´éditeur, le petit icône avec la disquette se dégrise car le programme a bien observé une modification du document.
    De la même manière, j´ai une fonction qui ne fait que changer la couleur d´une partie du texte. Par contre, lorsque ce changement est effectué, l´icône de la disquette reste grisé car le programme ne considère pas cela comme une modification du document.

    Sauriez-vous donc comment faire pour que ma fonction qui change la couleur d´une partie du texte soit considérée comme une modification du document et, par conséquent, que le texte coloré soit sauvegardé ?

    Merci pour toute aide

  2. #2
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Pour savoir s'il y a eu des modifications dans le document, l'éditeur fait appel à la méthode isDirty().
    Cette méthode retourne vrai si des modifs ont eu lieu ou faux sinon.

    Une solution pour résoudre ton problème est de redéfinir cette méthode dans la classe de ton éditeur. Tu ajoutes aussi une variable booléenne indiquant si la couleur du texte a changé (tu l'initialises à faux et tu la mets à vrai dans ta méthode de changement de couleur).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class TonEditeur extends ... {
    ...
       private boolean colorChanged = false;
     
       public boolean isDirty(){
          return (colordChanged || super.isDirty());
       }
    ...
    }
    PS : n'oublie pas de remettre la variable colorChanged à faux une fois que l'enregistrement a eu lieu ! Pour ca, il faut redéfinir la méthode doSave() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void doSave(IProgressMonitor monitor){
       colorChanged = false;
       super.doSave(monitor);
    }
    J'espère que cela t'aidera ... :o

  3. #3
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Au fait, c'est le même problème que dans ton précédent post "problème de redraw" ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Oui tu as raison c´est le même problème, simplement je le trouve mieux expliqué ici

    Sinon, y a de l´amélioration avec tes tuyaux, après modification de la couleur, la disquette est toujours grisée mais quand je ferme il me demande bien si je veux sauvegarder les modifications.
    Reste cependant un seul problème : quand je sauvegarde les modifications et que je ferme le fichier, lorsque je l´ouvre à nouveau, tout le texte redevient noir et je n´ai plus les mots en couleurs sauvegardés.
    Saurais-tu d´où cela provient et un moyen d´y remédier ?

    Sinon, encore une fois merci pour ton aide, j´apprécie grandement

  5. #5
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    la disquette est toujours grisée mais quand je ferme il me demande bien si je veux sauvegarder les modifications
    Ca c'est bizarre ! Normalement, si la méthode isDirty() retourne true, la disquette ne devrait pas être grise. En plus, tu doit même avoir une petite étoile dans l'onglet de l'éditeur, juste avant le nom du fichier qui est ouvert.
    Cela provient peut-être d'un problème de rafraichissement du workbench ? Je vais regarder plus en détail et je te tiens au courant si je trouve d'où vient le problème ...

    quand je sauvegarde les modifications et que je ferme le fichier, lorsque je l´ouvre à nouveau, tout le texte redevient noir et je n´ai plus les mots en couleurs sauvegardés
    C'est normal ! Tu travailles avec un éditeur de texte classique et cela ne te permet pas de sauvegarder des informations de style telles que la couleur.
    Après ca dépend ce que tu veux faire...
    Si tu souhaite colorer des parties de ton texte en fonctions de règles bien définies, alors il existe un système de coloration syntaxique tout prêt :
    http://beuss.developpez.com/tutoriel...editor/colors/
    Sinon, si la couleur du texte dépend des choix de l'utilisateur de l'éditeur (un peu comme quand on met de la couleur dans Word), alors là j'avoue que je ne sais pas du tout comment faire !
    Une idée serait peut être de sauvegarder ces infos de couleur dans un fichier. Du coup quand tu ouvre un fichier dans ton éditeur, tu va lire ce fichier et tu peux remettre la couleur là où il faut.
    C'est juste une idée comme ça, j'avoue que mes compétences ne vont pas plus loin sur ce problème ...
    Si tu trouve la solution à ce problème, ca m'intéresse (tiens moi au courant!).
    Merci d'avance et bon courage pour ton travail.

    @+

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Ouais en fait, je stocke la place de chaque élément du texte ouvert dans l´éditeur dans une base de données. Donc pour résoudre mon problème je pense qu´à chaque ouverture de fichier je vais aller chercher dans la BD tous les éléments à colorer. C´est juste que dans le cas où il y a beaucoup d´éléments j´ai peur que ce soit long pour l´utilisateur.

    Que penses-tu de cette idée ?

  7. #7
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Oui, c'est ce genre de truc qui m'est venu à l'esprit immédiatement. Mais je ne voudrais pas trop m'avancer, si ca se trouve, il existe qqchose de beaucoup plus simple, mais je ne connais pas ...
    Essaie peut-être de lancer un nouveau Post avec comme sujet ce problème particulier. Tu verras bien ...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Toute facon je manipule une BD alors je pense c´est ce que je vais faire.

    Merci de tes conseils

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Ah si encore une chose !
    Du coup toi à quel moment tu ferais les changements de couleur grâce à la BD ?
    Parce que quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public LocalizationEditor() {
    		super();
    		getSourceViewer().setTextColor(display.getSystemColor(SWT.COLOR_RED),0,10,false);
    	}
    L´éditeur ne veut pas se lancer. Il dit :

    Exception creating editor: Unable to instantiate editor: LocalizationPlugin.editors.LocalizationEditor org.eclipse.core.runtime.CoreException: Plug-in "LocalizationPlugin" was unable to instantiate class "LocalizationPlugin.editors.LocalizationEditor".

  10. #10
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Ouais, ca c'est parce que ton sourceViewer n'a pas encore été instancié ! Sa valeur est à null, d'où l'erreur.

    Il faut que tu le fasses dans la méthode (protected) createSourceViewer de ton éditeur. C'est dans cette méthode que tu instancie ton viewer. Une fois que tu l'as créé, tu peux appeler les méthodes que tu veux dessus !

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    J´ai ajouté dans mon la classe de mon éditeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
     
    		fAnnotationAccess= createAnnotationAccess();
    		fOverviewRuler= createOverviewRuler(getSharedColors());
     
    		ISourceViewer viewer= new SourceViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
    		// ensure decoration support has been created and configured.
    		getSourceViewerDecorationSupport(viewer);
    		viewer.setTextColor(display.getSystemColor(SWT.COLOR_RED),0,10,false);
    		return viewer;
     
    	}
    Mais ca fonctionne toujours pas

  12. #12
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Je sais que ce post date un peu, mais on avait laissé un problème en suspend et à mon avis le tag résolu a été mis un peu vite !
    Simsky, depuis le temps tu as peut-être résolu ton problème de "sauvegarde de tes changements". Enfin bon, j'ai eu récemment besoin de faire la même chose que toi et j'ai eu le même problème : je faisais des changements et la disquette (icône de la toolbar) restait grisée !
    J'ai trouvé la solution :
    quand tu dois enregistrer des modifs au niveau de l'éditeur, il y a deux choses à faire :
    1 - mettre à 'true' une valeur booléenne afin d'indiquer que l'éditeur est 'dirty' (ca, normalement, tu le faisais)
    2 - voila ce qu'il manquait pour que tout fonctionne nickel : notifier un listener que des changements ont eu lieu (c'est un listener du type IPropertyListener). Voici le code à rajouter à l'endroit où tu effectues des changements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Display.getDefault().asyncExec(new Runnable(){
    	        public void run() {
    	            firePropertyChange(PROP_DIRTY);
    	        }
    	    });
    Voilà, la réponse est un peu tardive, désolé ! Je suppose que depuis le temps tu avais résolu le problème. Je mets la solution afin que d'autres puissent en profiter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Problème pour faire une boucle dans une userform
    Par Garlim dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2007, 23h10
  2. Probléme pour insérer une variable dans un champs
    Par BOUTRAIS dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 22h45
  3. Réponses: 4
    Dernier message: 09/02/2006, 15h20
  4. Réponses: 7
    Dernier message: 10/09/2005, 16h49
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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