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
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 :
<?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
Cordialement
Infos
Une classe Actionscript permettant de verrouiller un onglet dans un TabNavigator.
- Niveau : Débutant
- Catégorie : Flex 3
- Publié le : 24 novembre 2009
- Dernière Mise à jour : 01 décembre 2010
- Notions abordées :