PixKey – Pixlib et les raccourcis claviers

Nouvelle petite extension pour Pixlib avec PixKey, permettant une gestion rapide et facile des raccourcis clavier dans vos applications Flash.

PixKey permet de créer des groupes de raccourcis clavier que vous pouvez activer tous en même temps dans votre application ou bien activer à la demande, groupe par groupe, suivant vos besoins.

Voyons comment utiliser cette extension.

Dans sa forme la plus simple, PixKey permet de gérer des raccourcis clavier (avec une touche ou une combinaison de touches) de manière très simple :

package
{
	import net.pixlib.commands.PXDelegate;
	import net.pixlib.core.PXBaseDocument;
	import net.pixlib.key.PXKey;
	import net.pixlib.key.PXKeyBundle;
	import net.pixlib.key.PXKeyShortcutEvent;
	import net.pixlib.log.PXDebug;
	import net.pixlib.log.PXTraceLayout;
	import net.pixlib.log.addLogListener;
 
	public class Sample extends PXBaseDocument
	{
		override protected function onDocumentReady() : void
		{
			//On rajoute une sortie pour les messages de Pixlib, ici le classique "trace" de Flash
			addLogListener(PXTraceLayout.getInstance());
 
			//On créé un groupe de raccourci clavier identifié sous le nom "UserPanel"
			var bundle : PXKeyBundle = new PXKeyBundle("UserPanel");
			bundle.pushCommand(new PXDelegate(_test), PXKey.Y);
			bundle.pushCommand(new PXDelegate(_test), PXKey.CONTROL, PXKey.Y);
 
			//Par défaut les raccourcis clavier créés ne sont pas activés
			//dans l'application; on charge donc notre groupe ici.
			bundle.load();
 
			//On envoie un raccourci clavier
			bundle.fire(PXKey.Y);
		}
 
		private function _test(event : PXKeyShortcutEvent) : void
		{
			//Un message apparait à chaque fois que le raccourci clavier est activé,
			//soit par l'utilisateur, soit par la méthode "fire()"
			PXDebug.DEBUG("Activated " + event.shortcut, this);
		}
	}
}

L’utilisation est simple, on crée un groupe avec un identifiant unique auquel nous affectons une combinaison de “raccourcis clavier / commandes”.
Par défaut un groupe de raccourcis n’est pas activé, il faut utiliser la méthode “load()“. Une fois chargé, à chaque fois que l’utilisateur utilisera la combinaison de raccourci clavier définie, la commande associée sera exécutée.
On peut aussi, comme cela est illustré dans l’exemple, forcer l’activation d’un raccourci clavier via la méthode “fire()” de notre groupe.

Maintenant, voyons la gestion de groupes multiples.
Par le biais de la classe PXKeyBundleManager, nous allons pouvoir contrôler différents groupes de raccourcis clavier.
De manière globale ou de manière unique suivant l’utilisation et le comportement dont aurons besoin dans notre application.

1. Utilisation simultanée
Dans ce cas, tous les groupes enregistrés dans le gestionnaire PXKeyBundleManager sont activés dans notre application.

package
{
	import net.pixlib.commands.PXDelegate;
	import net.pixlib.core.PXBaseDocument;
	import net.pixlib.key.PXKey;
	import net.pixlib.key.PXKeyBundle;
	import net.pixlib.key.PXKeyBundleManager;
	import net.pixlib.key.PXKeyShortcutEvent;
	import net.pixlib.log.PXDebug;
	import net.pixlib.log.PXTraceLayout;
	import net.pixlib.log.addLogListener;
 
	public class Sample extends PXBaseDocument
	{
		override protected function onDocumentReady() : void
		{
			//On rajoute une sortie pour les messages de Pixlib, ici le classique "trace" de Flash
			addLogListener(PXTraceLayout.getInstance());
 
			//On créé un nouveau groupe de définition de raccourci clavier à gérer.
			//Ici, notre groupe sera défini pour des interactions nommées "UserPanel"
			var userBundle : PXKeyBundle = new PXKeyBundle("UserPanel");
			userBundle.pushCommand(new PXDelegate(_bundleUserHandler), PXKey.O);
			userBundle.pushCommand(new PXDelegate(_bundleUserHandler), PXKey.CONTROL, PXKey.S);
 
			//On créé un nouveau groupe de raccourcis clavier qui seront utilisés
			//et référencés pour les "Dialog".
			var dialogBundle : PXKeyBundle = new PXKeyBundle("Dialog");
			dialogBundle.pushCommand(new PXDelegate(_bundleDialogHandler), PXKey.Y);
			dialogBundle.pushCommand(new PXDelegate(_bundleDialogHandler), PXKey.N);
			dialogBundle.pushCommand(new PXDelegate(_bundleDialogHandler), PXKey.ESCAPE);
 
			//Notre manager va pouvoir traiter tous les paquets simultanément
			PXKeyBundleManager.getInstance().mode = PXKeyBundleManager.MULTI_BUNDLE;
 
			//On enregistre ici nos deux groupes précédemment créés
			PXKeyBundleManager.getInstance().register(userBundle, true);
			PXKeyBundleManager.getInstance().register(dialogBundle, true);
 
			//Maintenant, les deux groupes sont activés en même temps. Tous
			//les raccourcis clavier (dans "UserPanel" ou "Dialog") sont disponibles
		}
 
		private function _bundleUserHandler(event : PXKeyShortcutEvent) : void
		{
			//On affiche un message quand un raccourci du groupe "UserPanel"
			//est activé
			PXDebug.DEBUG("Activated " + event.shortcut, this);
		}
 
		private function _bundleDialogHandler(event : PXKeyShortcutEvent) : void
		{
			//On affiche un message quand un raccourci du groupe "Dialog"
			//est activé
			PXDebug.DEBUG("Activated " + event.shortcut, this);
		}
	}
}

Ici nous avons créé 2 groupes distincts de raccourcis clavier et indiqué au gestionnaire de prendre en charge tous les groupes (PXKeyBundleManager.MULTI_BUNDLE).
Si l’utilisateur réalise un raccourci clavier défini dans l’un ou l’autre de nos groupes (“UserPanel” et “Dialog“) la commande associée sera alors exécutée.

2. Utilisation unique

Nous allons réaliser pratiquement la même chose, mais notre gestionnaire ne prendra en compte qu’un seul groupe à la fois (PXKeyBundleManager.SINGLE_BUNDLE).

package
{
	import net.pixlib.commands.PXDelegate;
	import net.pixlib.core.PXBaseDocument;
	import net.pixlib.key.PXKey;
	import net.pixlib.key.PXKeyBundle;
	import net.pixlib.key.PXKeyBundleManager;
	import net.pixlib.key.PXKeyShortcutEvent;
	import net.pixlib.log.PXDebug;
	import net.pixlib.log.PXTraceLayout;
	import net.pixlib.log.addLogListener;
 
	public class Sample extends PXBaseDocument
	{
		override protected function onDocumentReady() : void
		{
			//On rajoute une sortie pour les messages de Pixlib, ici le classique "trace" de Flash
			addLogListener(PXTraceLayout.getInstance());
 
			//On créé un nouveau groupe de définition de raccourci clavier à gérer.
			//Ici, notre groupe sera défini pour des interactions nommées "UserPanel"
			var userBundle : PXKeyBundle = new PXKeyBundle("UserPanel");
			userBundle.pushCommand(new PXDelegate(_bundleUserHandler), PXKey.O);
			userBundle.pushCommand(new PXDelegate(_bundleUserHandler), PXKey.CONTROL, PXKey.S);
 
			//On créé un nouveau groupe de raccourcis clavier qui seront utilisés
			//et référencés pour les "Dialog".
			var dialogBundle : PXKeyBundle = new PXKeyBundle("Dialog");
			dialogBundle.pushCommand(new PXDelegate(_bundleDialogHandler), PXKey.Y);
			dialogBundle.pushCommand(new PXDelegate(_bundleDialogHandler), PXKey.N);
			dialogBundle.pushCommand(new PXDelegate(_bundleDialogHandler), PXKey.ESCAPE);
 
			//Notre manager ne pourra traiter qu'un groupe à la fois.
			PXKeyBundleManager.getInstance().mode = PXKeyBundleManager.SINGLE_BUNDLE;
 
			//On enregistre ici nos deux groupes précédemment créés
			PXKeyBundleManager.getInstance().register(userBundle);
			PXKeyBundleManager.getInstance().register(dialogBundle);
 
			//On charge le groupe de raccourcis "UserPanel"
			PXKeyBundleManager.getInstance().load("UserPanel");
		}
 
		private function _bundleUserHandler(event : PXKeyShortcutEvent) : void
		{
			//On affiche un message quand un raccourci du groupe "UserPanel"
			//est activé
			PXDebug.DEBUG("Activated " + event.shortcut, this);
 
			//On charge le groupe de raccourcis "Dialog". Maintenant, seul ce groupe
			//est activé, les anciens raccourcis du groupe "UserPanel" ne sont plus
			//écoutés.
			PXKeyBundleManager.getInstance().load("Dialog");
		}
 
		private function _bundleDialogHandler(event : PXKeyShortcutEvent) : void
		{
			//On affiche un message quand un raccourci du groupe "Dialog"
			//est activé
			PXDebug.DEBUG("Activated " + event.shortcut, this);
 
			//On charge le groupe de raccourcis "UserPanel". Maintenant, seul ce groupe
			//est activé, les anciens raccourcis du groupe "Dialog" ne sont plus
			//écoutés.
			PXKeyBundleManager.getInstance().load("UserPanel");
		}
	}
}

Au début de notre application, seul le groupe “UserPanel” est activé et donc seuls les raccourcis définis dans ce groupe peuvent être réalisés.
Mais une fois déclenché, comme illustré dans notre exemple, on active l’autre groupe “Dialog” et à ce moment-là, seuls les raccourcis du groupe “Dialog” peuvent être réalisés.

Voilà un outil simple et complet qui vous permettra de rajouter rapidement une couche d’”interactivité clavier” dans vos applications Flash.

Les différents liens pour les téléchargements:

Happy coding with Pixlib !

This entry was posted in Extension, Framework, Tutorial and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">