Comunidad de diseño web y desarrollo en internet online

problemas con componente dentro de treeItemRenderer

Citar            
MensajeEscrito el 06 Abr 2009 02:45 pm
Wenas,
Estoy intentando hacer un arbol que permita mostrar un checkbox y mas de un icono (todos los que se quieran).
Para ello he implementado una clase CheckBoxImage, la cual es un HBox que contiene el checkBox, un HBox images y una label. En el HBox images voy anidando todas las imágenes que recibe mi componente en el atributo Bindable listImages.

Este es mi compo, el cual funciona ok cuando no está dentro de un TreeItemRenderer:
package milcomponents
{
import flash.events.Event;
import flash.events.MouseEvent;

import mx.collections.ArrayCollection;
import mx.containers.HBox;
import mx.controls.CheckBox;
import mx.controls.Label;
import mx.events.FlexEvent;

public class CheckBoxImages extends HBox
{
public var cb:CheckBox;
public var images:HBox;
public var etiqueta:Label;

[Bindable]
public var listaImagenes:ArrayCollection = new ArrayCollection();

[Bindable]
public var labelcb:String;

public function CheckBoxImages()
{
super();
this.setStyle("horizontalGap", 10);
this.addEventListener(FlexEvent.INITIALIZE, cargar);

cb = new CheckBox;
cb.x = 0;
cb.y = 0;
addChild(cb);

images = new HBox;
images.setStyle("borderStyle","none");
images.setStyle("horizontalGap",5);
images.addEventListener(MouseEvent.CLICK, dispararClickCB);
addChild(images);

etiqueta = new Label;
etiqueta.addEventListener(MouseEvent.CLICK, dispararClickCB);
addChild(etiqueta);
}


private var _selected:Boolean;

public function get selected():Boolean{
return cb.selected;
}

public function set selected(estado:Boolean):void{
cb.selected = estado;
}


/*Agregar todos los iconos que le pasemos por el array listaImagenes*/
private function cargar(e:Event):void{
for(var ind:int = 0; ind < listaImagenes.length; ind++){
images.addChild(listaImagenes[ind]);
}
etiqueta.text = labelcb;
}

public function eliminarIcono(numIcono:int):void{
listaImagenes.removeItemAt(numIcono);
images.removeChildAt(numIcono);
}

private function dispararClickCB(e:Event):void{
cb.selected = !(cb.selected);
}

}

Este lo uso dentro de un TreeItemRender:

package milcomponents
{
import mx.controls.treeClasses.TreeItemRenderer;
import mx.controls.Tree;
import mx.controls.treeClasses.TreeListData;
import flash.events.MouseEvent;
import mx.collections.ICollectionView;
import mx.controls.treeClasses.ITreeDataDescriptor;
import mx.collections.IViewCursor;

public class CheckBoxImaTreeRenderer extends TreeItemRenderer
{
private var entrada:CheckBoxImages;


Instancio mi objeto en la funcion createChildren y lo anido:

override protected function createChildren():void
{
super.createChildren();
entrada = new CheckBoxImages();
entrada.setStyle( "verticalAlign", "middle" );
entrada.addEventListener( MouseEvent.CLICK, checkBoxImaToggleHandler );
addChild(entrada);
}

sobrecargo tb el metod para pintar mi objeto checkBoxImages:

override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void {

super.updateDisplayList(unscaledWidth, unscaledHeight);
if(super.data)
{
if (super.icon != null)
{
super.icon.visible = false;
entrada.labelcb = super.label.text;
entrada.x = super.icon.x;
entrada.y = 10;
entrada.visible = true;
super.label.visible = false;

}
else
{
super.label.visible = false;
entrada.labelcb = super.label.text;
entrada.x = super.label.x;
entrada.y = 10;
entrada.visible = true;
super.label.x = entrada.x + entrada.width + 5;
}
}
}
}

La configuracion de mi tree:

<mx:Tree id="treeClasificacion" x="10" y="189" width="285" height="94"
itemRenderer="milcomponents.CheckBoxImaTreeRenderer" dataProvider="{dataProviderClasificacion}"> </mx:Tree>

Cuando no uso este itemRenderer me funciona sin problemas, pero con este solo se ve el pico que indica si esta la carpeta abierta o no. Es normal que el icono y la label por defecto no slagan pues yo los vuelvo invisible, ya que mi componente ya los tiene, pero no se ve ni el checkbox, ni las images y etiqueta de mi CheckBoxImages.
A ver si me podeis hechar una mano, porque no consigo saber porque no los muestra.
Muchas gracias

Por RaRaton

20 de clabLevel



 

Madrid - SPAIN

firefox
Citar            
MensajeEscrito el 06 Abr 2009 03:17 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Abr 2009 09:45 pm
Fallo técnico, las prisa, lo reedito para q se lea y entienda mejor.

Wenas,
Estoy intentando hacer un arbol que permita mostrar un checkbox y mas de un icono (todos los que se quieran).
Para ello he implementado una clase CheckBoxImage, la cual es un HBox que contiene el checkBox, un HBox images y una label. En el HBox images voy anidando todas las imágenes que recibe mi componente en el atributo Bindable listImages.

Este es mi compo, el cual funciona ok cuando no está dentro de un TreeItemRenderer:

Código ActionScript :

package milcomponents
{
import flash.events.Event;
import flash.events.MouseEvent;

import mx.collections.ArrayCollection;
import mx.containers.HBox;
import mx.controls.CheckBox;
import mx.controls.Label;
import mx.events.FlexEvent;

public class CheckBoxImages extends HBox
{
public var cb:CheckBox;
public var images:HBox;
public var etiqueta:Label;

[Bindable]
public var listaImagenes:ArrayCollection = new ArrayCollection();

[Bindable]
public var labelcb:String;

public function CheckBoxImages()
{
super();
this.setStyle("horizontalGap", 10);
this.addEventListener(FlexEvent.INITIALIZE, cargar);

cb = new CheckBox;
cb.x = 0;
cb.y = 0;
addChild(cb);

images = new HBox;
images.setStyle("borderStyle","none");
images.setStyle("horizontalGap",5);
images.addEventListener(MouseEvent.CLICK, dispararClickCB);
addChild(images);

etiqueta = new Label;
etiqueta.addEventListener(MouseEvent.CLICK, dispararClickCB);
addChild(etiqueta);
}


private var _selected:Boolean;

public function get selected():Boolean{
return cb.selected;
}

public function set selected(estado:Boolean):void{
cb.selected = estado;
}


/*Agregar todos los iconos que le pasemos por el array listaImagenes*/
private function cargar(e:Event):void{
for(var ind:int = 0; ind < listaImagenes.length; ind++){
images.addChild(listaImagenes[ind]);
}
etiqueta.text = labelcb;
}

public function eliminarIcono(numIcono:int):void{
listaImagenes.removeItemAt(numIcono);
images.removeChildAt(numIcono);
}

private function dispararClickCB(e:Event):void{
cb.selected = !(cb.selected);
}

}


Este lo uso dentro de un TreeItemRender:

Código ActionScript :

package milcomponents
{
import mx.controls.treeClasses.TreeItemRenderer;
import mx.controls.Tree;
import mx.controls.treeClasses.TreeListData;
import flash.events.MouseEvent;
import mx.collections.ICollectionView;
import mx.controls.treeClasses.ITreeDataDescriptor;
import mx.collections.IViewCursor;

public class CheckBoxImaTreeRenderer extends TreeItemRenderer
{
private var entrada:CheckBoxImages;


Instancio mi objeto en la funcion createChildren y lo anido:

override protected function createChildren():void
{
super.createChildren();
entrada = new CheckBoxImages();
entrada.setStyle( "verticalAlign", "middle" );
entrada.addEventListener( MouseEvent.CLICK, checkBoxImaToggleHandler );
addChild(entrada);
}

sobrecargo tb el metod para pintar mi objeto checkBoxImages:

override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void {

super.updateDisplayList(unscaledWidth, unscaledHeight);
if(super.data)
{
if (super.icon != null)
{
super.icon.visible = false;
entrada.labelcb = super.label.text;
entrada.x = super.icon.x;
entrada.y = 10;
entrada.visible = true;
super.label.visible = false;

}
else
{
super.label.visible = false;
entrada.labelcb = super.label.text;
entrada.x = super.label.x;
entrada.y = 10;
entrada.visible = true;
super.label.x = entrada.x + entrada.width + 5;
}
}
}
}


La configuración de mi tree:

Código ActionScript :

<mx:Tree id="treeClasificacion" x="10" y="189" width="285" height="94"
itemRenderer="milcomponents.CheckBoxImaTreeRenderer" dataProvider="{dataProviderClasificacion}"> </mx:Tree>



Cuando no uso este itemRenderer me funciona sin problemas, pero con este solo se ve el pico que indica si esta la carpeta abierta o no.
Es normal que el icono y la label por defecto no salgan pues yo los vuelvo invisibles, ya que mi componente ya los tiene.
Pero no se ve ni el checkbox, ni las images y etiqueta de mi CheckBoxImages.
A ver si me podeis hechar una mano, porque no consigo saber porque no los muestra.
Muchas gracias

Por RaRaton

20 de clabLevel



 

Madrid - SPAIN

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.