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

Laisser un commentaire