Tutoriaux /
CanvasLockable : Vérouiller un TabNavigator, la classe
Niveau : Novice
Notions : TabBar ~ TabNavigator
Suite à un ancien billet consacré au même sujet, je vous propose aujourd’hui une petite classe très simple permettant de créer des Canvas que l’on peut bloquer dans un TabNavigator.
Voici la classe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package com.jacksay.jckflexlib { import flash.events.Event; import flash.events.MouseEvent; import mx.containers.Canvas; import mx.containers.TabNavigator; import mx.controls.TabBar; /** * Cette classe permet de gérer le verouillage du canvas dans un * TabNavigator. */ public class CanvasLockable extends Canvas { //---------------------------------------------------------------------- // locked //---------------------------------------------------------------------- /** * Définit / permet de savoir si le canvas est vérrouillé / ou pas * * @default false */ [Bindable('lockedChange')] [Inspectable(defaultValue=false, enumeration='true,false', type='Boolean')] public function get locked() :Boolean { return _locked; } /** * @private */ private var _locked:Boolean = false; /** * @private */ public function set locked( value:Boolean ) :void { if( _locked != value ){ _locked = value; dispatchEvent(new Event("lockedChange")); } } public function CanvasLockable() { super(); } //---------------------------------------------------------------------- // initializationComplete //---------------------------------------------------------------------- override protected function initializationComplete():void { listenTabBar(null); } //---------------------------------------------------------------------- // listenTabBar //---------------------------------------------------------------------- /** * Si le noeud parent est un TabNavigator, ajoute un système d'écoute * pour intercepter les clicks. * * @param e Event */ protected function listenTabBar( e:Event ) :void { if( parent is TabNavigator ) { var tab:TabNavigator = parent as TabNavigator; tab.addEventListener(MouseEvent.CLICK, interceptClick, true); } } //---------------------------------------------------------------------- // interceptClick //---------------------------------------------------------------------- /** * Empèche la propagation des MouseEvent.CLICK si ces derniers * proviennent bien de la TabBar et que l'onglet actif est bien un * LockableCanvas et est bien locké. * * @param e MouseEvent */ private function interceptClick( e:MouseEvent ) :void { if( e.currentTarget is TabNavigator && e.target.parent is TabBar ){ if( e.currentTarget.selectedChild is CanvasLockable && e.currentTarget.selectedChild.locked){ e.stopImmediatePropagation(); } } } } } |
Pour la tester, vous pouvez utiliser ce code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:jckflexlib="com.jacksay.jckflexlib.*"> <mx:Script> <![CDATA[ import mx.controls.Alert; ]]> </mx:Script> <mx:TabNavigator width="100%" height="100%"> <jckflexlib:CanvasLockable id="tab1" label="TAB 1" locked="false" width="100%" height="100%"> <mx:CheckBox id="controlLock1" selected="{tab1.locked}" change="tab1.locked = controlLock1.selected" /> </jckflexlib:CanvasLockable> <jckflexlib:CanvasLockable id="tab2" label="TAB 1" locked="true" width="100%" height="100%"> <mx:Button label="{(tab2.locked)?'Dévérouiller':'Vérouiller'}" click="tab2.locked = !tab2.locked;Alert.show(tab2.locked.toString(),'test');" /> </jckflexlib:CanvasLockable> </mx:TabNavigator> </mx:Application> |
Voilà, si vous avez des idées d’amélioration / optimisation elles sont les bien-venues. Vous êtes libre d’utiliser / adapter / copié complètement ou partiellement ce code à des fin privé ou commerciale
Exemple à télécharger : studio.jacksay.com – CanvasLockable
Cordialement
Pas de commentaire »
Pas encore de commentaire.
Flux RSS des commentaires de cet article. TrackBack URL