Galileo MacOSX ColorDialog
Bonjour,
j'ai récemment fait un nouveau Wizard avec un bouton qui affiche le ColorDialog. Tout marchait nickel sous Windows jusqu'aux tests Mac.
Tout d'abord, je précise que je suis sous Galileo/java 1.5, et que les tests sont fait sur MountainLion.
Donc, sur mac, l'appel de dialog.open() renvoit toujours null. En cherchant sur le forum Eclipse/SWT, il semble que le bug est signalé et qu'il serait dû au changement de nature du dialogue (passé de modal à popup).
Je suppose que tout ça est corrigé dans les versions plus récente de SWT mais moi ça m’embête bien. Pas trop de solution (la migration de l’environnement étant exclue pour le moment, raison que je suis charette jusqu'en 2015) autres que d'utiliser le dialogue de swing (que je trouve laid personnellement) ou écrire mon propre dialogue.
Soit me dis-je. Sauf que là vient à mon esprit que j'ai des écrans de préférences avec des ColorFieldEditor : donc là aussi il doit y avoir un problème.
Donc je vais tester : et là, non, ça marche : le dialogue retourne bien un RGB non null qui correspond à la saisie (Entre parenthèses, ça marche pas si nickel que ça, parce que je me suis aperçu que en quittant l'appli, le dialogue n'était pas bien fermé, et que si on relance, il repasse en top, et que si on va à nouveau dans les prefs, il cafouille complètement si on ne le ferme pas avant de recliquer sur le bouton du ColorFieldEditor).
Donc là je regarde les différents sources des classes concernées de jface, swt et du workbench, et je tente de reproduire au plus près le code : genre je vois qu'il utilise un ColorSelector et pas moi, donc j'utilise un ColorSelector et je vois différentes différences sur la façon de déterminer le shell parent du bouton. J'ai aussi regardé la stacktrace de l'appel et tout se passe normalement (passage par le callback dans le display, etc.)
Rien n'y fait : mon dialogue ne fonctionne toujours pas.
Bon, je me dis soit, quitte à faire un nouveau dialogue de choix de couleurs, je peux bien refaire un ColorFieldEditor qui utilise ce nouveau dialogue.
Mais, il y a le ColorsAndFontsPreferencePage ! Je teste donc aussi et là, miracle, ça marche parfaitement bien.
Et là du coup, je n'y comprends plus rien 8O : comment ça fait pour fonctionner dans cet écran de preférences et pas dans mon wizard. J'ai reproduit le code, à l'identique (sauf les noms de variables et quelques détails annexes, comme le layout que j'ai forcément différent), et j'ai même testé en initialisant mon wizard avec le même shell que celui qui utilisé par le WorkbenchPreferenceDialog à tout hasard (donc par le activeShell du workbench alors que j'utilisais celui du display.
Est ce que ça interpelle quelqu'un qui aurait une idée de ce qui ne va pas dans mon wizard avec l'invocation du ColorDialog ? Qui aurait déjà rencontré le problème et/ou qui connaîtrait un workaround.
Pour l'instant je reste fixé sur l'idée que ça vient du fait que la méthode changeColor de ColorDialog n'est pas pas invoquée et que donc ça pourrait être lié au Display, mais j'ai tout essayé, pour forcer le display : rien n'y fait. Donc ce n'est probablement pas ça, mais j'ai pas d'autre idée. :?
5 pièce(s) jointe(s)
Diffusion du composant ColorPicker
Salut Marc,
Je ne comprends pas ce que tu veux dire par contribuer ma solution.
En tout cas, voici ci-joint, le composant, qu'il m'a fallut déconnecter de toute la pelote de dépendances diverses avec Eclipse RCP, les nombreuses bibliothèques internes et tierces. J'ai fait quelques modifications pour la compiler en java 1.7, mais je suis en mesure de fournir une version 1.5 à ceux qui le voudrait. Je le diffuse sous forme de 2 jars, incluant les sources.
Il faudra bien sûr, pour le faire fonctionner, avoir soit les jar de SWT et JFACE, soit l'inclure dans un plugin RCP de contribution à l'UI.
Le composant est composé de 3 onglets de base (dont le visuel est visible en pièces jointes), désactivables, mais peut être enrichis d'autres onglets de type catalogue. Il est loin d'être terminé en ce qui concerne mes ambitions, mais déjà bien fonctionnel. Je déplore le fait que la documentation ne soit pas complète, mais je n'ai pas le temps de la compléter dans l'immédiat. N’hésitez pas à me demander des précisions, si nécessaire. Pour un quickstart, j'ai fourni un exemple d'utilisation.
Voilà. A toi de me dire si le composant est valable :P
Joël