2010-01-25 3 views
3

Comment modifier un menu GWT - en grisant certaines entrées, en cochant les autres, en fonction de l'état de mon application?Menu Dynamic GWT

Mon application dispose d'une barre de menu en haut de la page - Fichier, Edition, Affichage, Insertion, Format, etc. J'ai un certain nombre de paragraphes, dont chacun pourrait avoir un format différent. Lorsque l'utilisateur clique sur Format, je veux que le menu Format affiche une coche à côté de l'élément de menu qui correspond au format du paragraphe actuellement sélectionné. Si certains formats sont inappropriés pour le paragraphe actuellement sélectionné, je veux griser ces menusItems. Le problème principal est de savoir quand faire la mise à jour: (a) quand on clique sur le bouton de menu Format, ou (b) chaque fois que mon utilisateur sélectionne un nouveau paragraphe?

Je trouve l'option (a) plus attrayante. Mais comment puis-je le détecter? Un MenuItem n'a aucune facilité pour ajouter des écouteurs d'événement. Il peut s'agir d'un mouseClick dont j'ai besoin, mais il peut s'agir d'un mouseOver: si l'utilisateur clique sur le menu InsertItem, le menu Insert apparaîtra, mais si le curseur est déplacé sur Format, le menu Format apparaîtra.

L'option (b) semble plus simple mais gaspille plus de temps processeur.

Pour mon menu contextuel (clic droit sur le paragraphe), c'est beaucoup plus simple, car le menu n'est construit que lorsque le clic droit se produit.

J'ai utilisé le symbole racine carrée (& # 8730) pour une coche. Est-ce que quelqu'un sait une façon plus agréable? Ai-je besoin d'utiliser HTML et d'utiliser "  Plain-Format" pour mon élément de menu?

Enfin, existe-t-il un moyen de désactiver (griser) un élément de menu afin qu'il ne puisse pas être sélectionné?

Répondre

1

L'option (a) sonne mieux du point de vue des ressources de conservation. Au lieu d'utiliser le symbole racine carrée, pourquoi n'utilisez-vous pas une image (en utilisant la classe com.google.gwt.user.client.ui.Image)?

Je pense qu'une solution plus élégante/simple pourrait être d'utiliser la classe case à cocher pour vos éléments de menu. De cette façon, vous pouvez avoir des coches/vérifications automatiques au lieu d'avoir à utiliser une image ou le symbole de la racine carrée. En outre, vous serez en mesure de "gris" éléments avec setEnabled(false). Sinon, vous devrez écrire votre propre widget ou ajouter vos propres fonctionnalités à vos étiquettes de menu afin de "griser" les éléments.

+0

Merci Prométhée. Je ne vois pas comment faire un MenuItem avec autre chose que du texte (qui pourrait être HTML). Par exemple, j'aimerais créer un Panel avec une Case à cocher et un Label, mais GWT ne semble pas le fournir. En outre, je peux 'voir n'importe quelle option setEnable() sur MenuItem. Est-ce que je ne cherche pas au bon endroit? – John

+1

Ah, je pensais que vous pouviez créer votre propre menu et ne pas utiliser MenuItem/MenuBar. Si vous voulez utiliser MenuBar, je créerais le MenuItem en utilisant html (inclure la case à cocher en utilisant une balise ) et peut-être changer la couleur de la police pour indiquer si un élément n'est pas activé. Vous pouvez étendre les classes MenuItem/MenuBar pour ajouter des méthodes simples qui vous permettraient de changer si un objet est sélectionné ou activé. En dernier recours, vous voudrez peut-être consulter la bibliothèque Smart GWT (http://www.smartclient.com/smartgwt/showcase/#main) car elle contient beaucoup de fonctionnalités que vous recherchez. –