|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : août 2012 Messages : 10 ![]() |
Bonjour à tous,
Je dispose d'un POJO que je voudrais pouvoir exploiter avec un Editor. Un binding est effectué entre tous les champs affichés à l'écran et les attributs de mon POJO. Je cherche à afficher la petite étoile qui permet de voir que mon POJO a été modifié. J'ai donc défini la méthode isDirty() sur mon EditorPart qui compare le hashCode du POJO et le hashCode référence du POJO récupéré dans l'init de l'EditorPart. Mon problème se situe là : - isDirty() est bien appelé quand je veux fermer l'Editor, me permettant d'enregistrer le POJO - mais je souhaiterais qu'il soit appelé automatiquement dès que l'on modifie un champ (un attribut de mon POJO), pour afficher la petite étoile qui va bien Du coup je pense que je n'ai pas saisi correctement le fonctionnement du isDirty()... Si vous avez une idée, merci d'avance pour votre aide. |
|
|
00
|
|
|
#2 |
![]() ![]() Marc Développeur Java Inscription : mai 2007 Messages : 1 567 ![]() |
Salut,
Pour que la plateforme soit informé qu'il y a eu un changement au niveau de l'état de ton éditeur, il faut que tu la tiennes au courant. Pour cela, il te suffit d'appeler la méthode firePropertyChange(PROP_DIRTY); lorsqu'une modification intervient dans ton éditeur. Et le tour est joué. Si tu implémentes un mécanisme d'undo/redo, pense à mettre à jour cet état (quand toutes les modifications ont été défaites par exemple). Voilà, à+ Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça. Le 5 et 6 juin à Toulouse, la première EclipseCon France ! |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : août 2012 Messages : 10 ![]() |
Merci pour ta réponse Gueritarish !
J'ai mis en place ce que tu proposes et ça marche parfaitement Le seul hic c'est que je ne vois pas comment faire dans le cas de données bindées (via le DataBindingContext). Faut-il que ce soient les POJOs qui tiennent au courant la plateforme de leur changement, ou bien y a t-il moyen de passer par le dataBindingContext ? J'ai lu une discussion autour de ce point ici même, mais la mise en place des solutions proposées me paraissent un peu lourdes... mais en même temps le undo/redo semble être aussi pris en charge automatiquement. Si tu as (ou d'autres personnes) déjà réalisé ce genre de chose ou si tu as un peu d'aide à m'apporter, merci ! |
|
|
00
|
|
|
#4 | ||
![]() ![]() Marc Développeur Java Inscription : mai 2007 Messages : 1 567 ![]() |
Un article de Lars Vogel t'indique la façon de faire. Il te suffit d'ajouter un listener au bindings de ton contexte:
Code :
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça. Le 5 et 6 juin à Toulouse, la première EclipseCon France ! |
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : août 2012 Messages : 10 ![]() |
Merci, j'ai mis en place cette mécanique et ça fonctionne parfaitement, même le undo (limité à une action mais ça me suffit).
Mais j'ai encore une question : Mon éditeur possède un bouton qui entraine une modification de mon modèle. J'aimerais du coup que suite au clic sur le bouton les informations affichées à l'écran reflètent les nouvelles données du modèle. Je pensais que le fait de mettre en place le binding et le listener global sur tous les bindings devait suffire... mais à priori non. Faut-il que ce soit mon bouton qui déclenche un rafraichissement? J'ai essayé via le firePropertyChange(PROP_INPUT), mais sans succès. Je pense que mon problème vient des UpdateValueStrategy mises en place sur mes binding. J'ai généré le binding à partir de l'onglet bindings du WindowBuilder, et toutes mes UpdateValueStrategy sont à null. Si quelqu'un peut me confirmer que ça vient de là ou bien que je me trompe complètement ? Merci d'avance. |
|
|
00
|
|
|
#6 | ||||||
|
Membre du Club
![]() Inscription : juillet 2012 Messages : 32 ![]() |
J'ai géré ça de cette façon :
dans l'init de ton editeur tu ajoutes un listener sur les opérations qui va déclencher le rafraichissement de ton éditeur et positionner la valeur de dirty : Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Ingénieur développement logiciels Inscription : août 2012 Messages : 10 ![]() |
En fait c'est bon j'ai trouvé comment actualiser mes champs suite au clic : je fais appel à la méthode updateTargets() sur mon contexte de binding dans le selectionListener de mon bouton.
Mais il me reste quand même un problème : cette mécanique n'a pas l'air de fonctionner sur les labels... J'ai fait un binding entre un attribut de mon modèle et un label, mais lors de l'updateTarget ce dernier n'est pas pris en compte. Une solution consisterait à faire des champs inaccessibles avec une cosmétique comme un label, mais je ne sais pas si c'est une bonne idée, il y a sûrement un autre moyen de faire ! Merci d'avance pour vos idées et conseils ! |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com