I am creating a game using flash cs4 as3, and need to use the datagrid component extensively.
My datagrid is being populated by a multidimensional array that is being populated by an xml file. I have a checkbox custom component, that doesnt seem to work right, the checkbox doesnt not appear.
import flash.display.MovieClip;
import flash.display.Loader;
import flash.events.Event;
import flash.events.EventDispatcher;
import fl.events.ListEvent;
import fl.events.ComponentEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.*;
import fl.controls.ScrollPolicy;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import fl.controls.DataGrid;
import fl.data.DataProvider;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.controls.ScrollPolicy;
import fl.controls.Label;
import fl.controls.List;
import fl.controls.Button;
import fl.controls.CheckBox;
import fl.controls.TextInput;
var xml:XML = new XML(); //setup initial vars to retreive xml data
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest(“mango.xml”)); //xml file is local to swf
loader.addEventListener
(Event.COMPLETE,function(evt:Event):void //wait for xml to load
{
xml = XML(evt.target.data);
var num:Number = xml.buy.length();
var num2:Number = xml.inventory.length();
trace(num);
trace(num2);
//trace(xml.buy);
var mangocity:Array = new Array();
var mangodealername:Array = new Array();
var mangovariety:Array = new Array();
var mangoripeness:Array = new Array();
var mangoquantity:Array = new Array();
var mangoprice:Array = new Array();
var mangolist:Array = new Array();
var mangoivariety:Array = new Array();
var mangoiripeness:Array = new Array();
var mangoiquantity:Array = new Array();
var mangoiprice:Array = new Array();
var mangoilist:Array = new Array();
var myAD:DataProvider = new DataProvider();
var myI:DataProvider = new DataProvider();
var myInventory:DataGrid = new DataGrid();
var myAvailableDeals:DataGrid = new DataGrid();
var itemTextInput:TextInput = new TextInput();
itemTextInput.move(1000, 800);
//itemTextInput.addEventListener(Event.CHANGE, changeHandler);
//trace(itemTextInput);
addChild(itemTextInput);
for (var i:Number = 0; i < num; i++)
{
mangocity* = xml.buy.@city*.toXMLString();
//trace(mangocity*);
mangodealername* = xml.buy.@dealername*.toXMLString();
mangovariety* = xml.buy.@variety*.toXMLString();
mangoripeness* = xml.buy.@ripeness*.toXMLString();
mangoquantity* = xml.buy.@quantity*.toXMLString();
mangoprice* = xml.buy.@price*.toXMLString();
mangolist* = [mangocity*,mangodealername*,mangovariety*,mangoripeness*,mangoquantity*,mangoprice*];
myAD.addItem(mangolist*);
//trace(mangolist*);
}
for (var j:Number = 0; j < num2; j++)
{
mangoivariety[j] = xml.inventory.@variety[j].toXMLString();
mangoiripeness[j] = xml.inventory.@ripeness[j].toXMLString();
mangoiquantity[j] = xml.inventory.@quantity[j].toXMLString();
mangoiprice[j] = xml.inventory.@price[j].toXMLString();
mangoilist[j] = [mangoivariety[j],mangoiripeness[j],mangoiquantity[j],mangoiprice[j]];
myI.addItem(mangoilist[j]);
//trace(mangolist*);
}
trace(mangolist);
myAvailableDeals.dataProvider = myAD;
myAvailableDeals.editable = true;
myAvailableDeals.getColumnAt(0).headerText = "City";
myAvailableDeals.getColumnAt(0).editable = false;
myAvailableDeals.getColumnAt(1).headerText = "Dealer Name";
myAvailableDeals.getColumnAt(1).editable = false;
myAvailableDeals.getColumnAt(2).headerText = "Variety";
myAvailableDeals.getColumnAt(2).editable = false;
myAvailableDeals.getColumnAt(3).headerText = "Ripeness";
myAvailableDeals.getColumnAt(3).editable = false;
myAvailableDeals.getColumnAt(4).headerText = "Quantity";
myAvailableDeals.getColumnAt(4).editable = false;
myAvailableDeals.getColumnAt(5).headerText = "Price";
myAvailableDeals.getColumnAt(5).editable = false;
myAvailableDeals.addColumn("Quote Price");
myAvailableDeals.addColumn("Buy");
myAvailableDeals.getColumnAt(7).editable = false;
myAvailableDeals.getColumnAt(7).cellRenderer = CustomCheckBoxCellRenderer;
//CustomCheckBoxCellRenderer;
//myAvailableDeals.mouseChildren = true;
myAvailableDeals.allowMultipleSelection = true;
myAvailableDeals.addEventListener(MouseEvent.CLICK, someFun);
//addChild(myAvailableDeals);
function someFun(eve:MouseEvent){
//trace (eve.target)
var chek:CustomCheckBoxCellRenderer = eve.target as CustomCheckBoxCellRenderer;
chek.setSel();
if (chek.data.acp == true)
{
chek.data.acp = false;
chek.selected = false;
}
else
{
chek.data.acp = true;
chek.selected = true;
}
trace ("smee " + chek.data.acp);
}
//myAvailableDeals.columns = ["City", "Dealername", "Variety", "Quantity", "Price"];
//myAvailableDeals.allowMultipleSelection = true;
//myAvailableDeals.getColumnAt(8).headerText = "Buy Price?";
//myAvailableDeals.headerText = "test test test test test test test";
//myAvailableDeals.getColumnAt(8).cellRenderer = CustomCheckBoxCellRenderer;
//myAvailableDeals.verticalScrollPolicy = ScrollPolicy.ON;
myAvailableDeals.width = 530;
myAvailableDeals.move(450, 650);
addChild(myAvailableDeals);
myInventory.dataProvider = myI;
myInventory.getColumnAt(0).headerText = "Variety";
myInventory.getColumnAt(1).headerText = "Ripeness";
myInventory.getColumnAt(2).headerText = "Quantity";
myInventory.getColumnAt(3).headerText = "Price";
myInventory.addColumn("Sell Quantity");
myInventory.addColumn("Sell Price");
myInventory.addColumn("Sell");
myInventory.allowMultipleSelection = true;
myInventory.width = 330;
myInventory.move(90, 650);
//myInventory.verticalScrollPolicy = ScrollPolicy.ON;
addChild(myInventory);
/*var resultArray:Array = new Array();
resultArray = arraySearch(mangolist,"Totapuri");
trace("result found at: "+resultArray);
// define an arrray to handle searches
function arraySearch(testArray:Array,searchString:String)
{
trace("Searching for: "+searchString);
// check all elements in the parent array
for(var r=0 in testArray)
{
//now check all elements in the current array index
for(var c=0 in testArray[r])
{
// see if we found a match
if(testArray[r][c].indexOf(searchString) != -1)
{
//now return an array holding our
return new Array(r,c);
//now quit our loops if we found something
break;
}
}
}
}*/
srin_btn.addEventListener(MouseEvent.CLICK, onClicks);
ahme_btn.addEventListener(MouseEvent.CLICK, onClicka);
pune_btn.addEventListener(MouseEvent.CLICK, onClickp);
bang_btn.addEventListener(MouseEvent.CLICK, onClickb);
chen_btn.addEventListener(MouseEvent.CLICK, onClickc);
//AllCities_mc.addEventListener(MouseEvent.CLICK, onClickall);
function onClicks(event:MouseEvent):void {
itemTextInput.text = "Srinagar";
//var arr:Array = myAD.toArray();
var filteredArr:Array = mangolist.filter(filterDataProvider);
myAvailableDeals.dataProvider = new DataProvider(filteredArr);
}
function onClicka(event:MouseEvent):void {
itemTextInput.text = "Ahmedabad";
//var arr:Array = myAD.toArray();
var filteredArr:Array = mangolist.filter(filterDataProvider);
myAvailableDeals.dataProvider = new DataProvider(filteredArr);
}
function onClickp(event:MouseEvent):void {
itemTextInput.text = "Pune";
//var arr:Array = myAD.toArray();
var filteredArr:Array = mangolist.filter(filterDataProvider);
myAvailableDeals.dataProvider = new DataProvider(filteredArr);
}
function onClickb(event:MouseEvent):void {
itemTextInput.text = "Bangalore";
//var arr:Array = myAD.toArray();
var filteredArr:Array = mangolist.filter(filterDataProvider);
myAvailableDeals.dataProvider = new DataProvider(filteredArr);
}
function onClickc(event:MouseEvent):void {
itemTextInput.text = "Chennai";
//var arr:Array = myAD.toArray();
var filteredArr:Array = mangolist.filter(filterDataProvider);
myAvailableDeals.dataProvider = new DataProvider(filteredArr);
}
function filterDataProvider(obj:Object, idx:int, arr:Array):Boolean {
var txt1:String = itemTextInput.text;
//var txt2:String;
//trace(txt1);
//var txt2:String = obj.city.substr(0, txt1.length);
var txt2:String = obj[0].substr(0, txt1.length);
//trace(txt2);
if (txt1.toLowerCase() == txt2.toLowerCase()) {
return true;
}
return false;
}
}
)
CustomCheckBox Renderer
package
{
import fl.controls.ButtonLabelPlacement;
import fl.controls.DataGrid;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.controls.listClasses.ListData;
import fl.controls.listClasses.ICellRenderer;
import fl.controls.LabelButton;
import fl.core.UIComponent;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.controls.CheckBox;
import fl.controls.listClasses.CellRenderer;
import flash.display.DisplayObject;
[Style(name="icon", type="Class")]
[Style(name="upIcon", type="Class")]
[Style(name="downIcon", type="Class")]
[Style(name="overIcon", type="Class")]
[Style(name="disabledIcon", type="Class")]
[Style(name="selectedDisabledIcon", type="Class")]
[Style(name="selectedUpIcon", type="Class")]
[Style(name="selectedDownIcon", type="Class")]
[Style(name="selectedOverIcon", type="Class")]
[Style(name="upSkin", type="Class")]
[Style(name="downSkin", type="Class")]
[Style(name="overSkin", type="Class")]
[Style(name="disabledSkin", type="Class")]
[Style(name="selectedDisabledSkin", type="Class")]
[Style(name="selectedUpSkin", type="Class")]
[Style(name="selectedDownSkin", type="Class")]
[Style(name="selectedOverSkin", type="Class")]
[Style(name="textFormat", type="flash.text.TextFormat")]
[Style(name="disabledTextFormat", type="flash.text.TextFormat")]
[Style(name="textPadding", type="Number", format="Length")]
public class CustomCheckBoxCellRenderer extends CheckBox implements ICellRenderer {
protected var _listData:ListData;
protected var _data:Object;
protected var _rowSelected:Boolean;
protected var _showLabel:Boolean = false;
public function CustomCheckBoxCellRenderer():void {
super();
focusEnabled = false;
addEventListener(MouseEvent.MOUSE_DOWN,overListener);
//addEventListener(MouseEvent.MOUSE_OUT,outListener) ;
}
private function overListener(e:MouseEvent):void
{
this.selected = true;
trace ("clicked " + e.target.name +' > > '+ this.selected);
if (this.selected == false){
this.selected=true;
}else{
e.target.selected=false;
}
}
private static var defaultStyles:Object = { icon:null,
upIcon:"CheckBox_upIcon",downIcon:"CheckBox_downIcon",overIcon:"CheckBox_overIcon",
disabledIcon:"CheckBox_disabledIcon",
selectedDisabledIcon:"CheckBox_selectedDisabledIcon",
focusRectSkin:null,
focusRectPadding:null,
selectedUpIcon:"CheckBox_selectedUpIcon",selectedDownIcon:"CheckBox_selectedDownIcon",selectedOverIcon:"CheckBox_selectedOverIcon",
upSkin:"CellRenderer_upSkin",downSkin:"CellRenderer_downSkin",overSkin:"CellRenderer_overSkin",
disabledSkin:"CellRenderer_disabledSkin",
selectedDisabledSkin:"CellRenderer_selectedDisabledSkin",
selectedUpSkin:"CellRenderer_selectedUpSkin",selectedDownSkin:"CellRenderer_selectedDownSkin",selectedOverSkin:"CellRenderer_selectedOverSkin",
textFormat:null,
disabledTextFormat:null,
embedFonts:null,
textPadding:5 };
public static function getStyleDefinition():Object { return defaultStyles; }
override public function setSize(width:Number,height:Number):void {
super.setSize(width, height);
}
public function get listData():ListData {
return _listData;
}
public function set listData(value:ListData):void {
_listData = value;
label = (_showLabel)? _listData.label : "";
setStyle("icon", _listData.icon);
}
public function get data():Object {
return _data;
}
public function set data(value:Object):void {
_data = value;
}
override public function get selected():Boolean {
return super.selected;
}
override public function set selected(value:Boolean):void {
// Get the name of the field in the data provider item associated with
// the column being rendered
var item_dg:DataGrid = this.parent.parent.parent as DataGrid;
var field_str:String = item_dg.getColumnAt(_listData.column).dataField;
// Make sure the proper boolean value is set
(_data[field_str]=="true" || _data[field_str]==1 || _data[field_str]==true)?
super.selected=true : super.selected=false;
_rowSelected = value;
trace(field_str)
}
override protected function toggleSelected(event:MouseEvent):void {
// don't set selected or dispatch change event.
}
public function setSel():void{
//trace('HOIIIIIIIIIIIIIIIIIIIIIIIII');
//this._data.acp = true;
//trace('HOIIIIIIIIIIIIIIIIIIIIIIIII ' + this._data.acp);
// option 1
if (this._data.acp == false){
this._data.acp = true;
this.selected = true;
}else{
this._data.acp = false;
this.selected = false;
}
}
override protected function drawLayout():void {
var textPadding:Number = Number(getStyleValue("textPadding"));
var textFieldX:Number = 0;
// Align icon
if (icon != null) {
icon.x = textPadding;
icon.y = Math.round((height-icon.height)>>1);
textFieldX = icon.width + textPadding;
}
// Align text
if (label.length > 0)
{
textField.visible = true;
var textWidth:Number = Math.max(0, width - textFieldX - textPadding*2);
textField.width = textWidth;
textField.height = textField.textHeight + 4;
textField.x = textFieldX + textPadding
textField.y = Math.round((height-textField.height)>>1);
}
else
{
textField.visible = false;
}
// Size background
background.width = width;
background.height = height;
}
override protected function drawBackground():void{
var styleName:String = (enabled) ? mouseState : "disabled";
if (_rowSelected){
styleName = "selected"+styleName.substr(0,1).toUpperCase()+styleName.substr(1);
}
styleName += "Skin";
var bg:DisplayObject = background;
background = getDisplayObjectInstance(getStyleValue(styleName));
addChildAt(background, 0);
if (bg != null && bg != background) { removeChild(bg); }
}
}
}
I have previously used the same code, when my datagrid was being populated by the xml directly, and it worked perfectly.
Please help if you can. its my first time using flash, and i am quiet stuck!