Hi There,

this is Arthur, im new to flex & have created a small CHART app, where
a user based on the selection from the list box can display the line
series..
Im able to display a line series based on a user's selection of a list
box item, but im facing problems in displaying multiple line series
based on multiple LIST selection.

For. eg. if u select item "1001"  from the listbox & select the above
checkboxes like temperature etc.  it shall show temperature for the
Line Series (1001), but if u want to see the temperature for id 1001,
1002 & 1003, basically, in  3 different line series, its not coming,
hence would appreciate any help in this. im posting the code & xml
file which u can try & execute for reference


(xml & mxml file for reference):


XML FILE:
_____________________________________________________________________
 <mote i="1001" ts="Fri Dec 01 09:47:43 GMT-07:00 2006" t="78.42"
h="41.2761" htc="41.3192" m="2.31080992E8" a="-253.8"/>
 <mote i="1001" ts="Sat Dec 02 09:51:16 GMT-07:00 2006" t="71.958"
h="43.2858" htc="42.927" m="2.71912E8" a="-265.1"/>
 <mote i="1001" ts="Tue Dec 12 14:17:09 GMT-07:00 2006" t="75.756"
h="47.4731" htc="47.3407" m="2.71912E8" a="-265.1"/>
 <mote i="1001" ts="Tue Dec 12 14:17:09 GMT-07:00 2006" t="75.756"
h="47.4731" htc="47.3407" m="2.71912E8" a="-265.1"/>
 <mote i="1001" ts="Tue Dec 12 14:17:09 GMT-07:00 2006" t="75.756"
h="47.4731" htc="47.3407" m="2.71912E8" a="-265.1"/>
 <mote i="1002" ts="Tue Dec 12 14:22:09 GMT-07:00 2006" t="76.404"
h="32.6505" htc="32.5874" m="1.13968E8" a="-263.2"/>
 <mote i="1002" ts="Tue Dec 12 14:27:09 GMT-07:00 2006" t="76.44"
h="32.9308" htc="32.8691" m="1.96078E8" a="-261.9"/>
 <mote i="1002" ts="Tue Dec 12 14:32:09 GMT-07:00 2006" t="76.656"
h="32.7206" htc="32.6697" m="1.28732E8" a="-275.6"/>
 <mote i="1003" ts="Tue Dec 12 14:37:09 GMT-07:00 2006" t="76.71"
h="32.9308" htc="32.8823" m="1.82054E8" a="-277.0"/>
 <mote i="1003" ts="Tue Dec 12 14:42:09 GMT-07:00 2006" t="76.53"
h="33.0009" htc="32.9434" m="9.0637296E7" a="-242.5"/>
 <mote i="1003" ts="Tue Dec 12 14:47:09 GMT-07:00 2006" t="76.404"
h="33.2808" htc="33.2167" m="1.1554E8" a="-253.8"/>
 <mote i="1003" ts="Tue Dec 12 14:52:09 GMT-07:00 2006" t="76.35"
h="33.0009" htc="32.9346" m="1.22549E8" a="-118.8"/>
 <mote i="1003" ts="Tue Dec 12 14:57:09 GMT-07:00 2006" t="76.26"
h="33.2108" htc="33.1397" m="2.3778E8" a="-284.7"/>
 <mote i="1004" ts="Tue Dec 12 15:02:09 GMT-07:00 2006" t="76.242"
h="33.3507" htc="33.2785" m="1.21603E8" a="-269.0"/>
 <mote i="1004" ts="Tue Dec 12 15:07:09 GMT-07:00 2006" t="76.098"
h="33.1409" htc="33.0619" m="1.28732E8" a="-275.6"/>
 <mote i="1004" ts="Tue Dec 12 15:12:09 GMT-07:00 2006" t="76.044"
h="33.1409" htc="33.0593" m="1.38648E8" a="-290.6"/>
 <mote i="1004" ts="Tue Dec 12 15:17:10 GMT-07:00 2006" t="75.9"
h="33.5604" htc="33.4707" m="1.96078E8" a="-261.9"/>
 <mote i="1004" ts="Tue Dec 12 15:22:10 GMT-07:00 2006" t="75.864"
h="33.4206" htc="33.3295" m="1.35956E8" a="-242.5"/>
 <mote i="1004" ts="Tue Dec 12 15:27:10 GMT-07:00 2006" t="75.918"
h="33.4206" htc="33.3322" m="1.55014E8" a="-227.2"/>


THE CONTENT OF MXML FILE :
________________________________________________________________________

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
         backgroundColor="#ffffff" xmlns:mx="http://www.adobe.com/2006/mxml"; 
         creationComplete="initApp()"   
        horizontalAlign="left" 
        width="780"  height="450" layout="absolute"     >

<mx:Script>
        <![CDATA[
      

import mx.graphics.Stroke;
import mx.charts.series.LineSeries;
import mx.charts.LineChart 
import mx.collections.ArrayCollection; // very first step of defining
class
import mx.rpc.events.*;
import mx.charts.HitData;
import mx.events.*;
import mx.controls.Alert;
import mx.charts.chartClasses.ChartBase;
import mx.collections.*;
import mx.charts.chartClasses.IAxis
import mx.collections.SortField;
import mx.collections.Sort;
import mx.utils.ObjectUtil;
    

///////////////////////////////
        [Bindable]   public var slicedmoteData:ArrayCollection;
                         public var moteData:Array;
    [Bindable] public var statesx: Array;
  
 private function initApp():void // this function initates the http
service & the arrays
        {
srv.send();
slicedmoteData = new ArrayCollection(moteData);
slicedmoteData.filterFunction=processFilter;
sortAC()
        }
        
public function processFilter(item:Object):Boolean
   {
     var result:Boolean=false;
      // If no filter text, or a match, then true
/* if(item.i!=list.selectedItem)
{
         result=false;
            
}  */    
        if(list.selectedItem)
      {
                
                for(var z:uint; z<list.selectedIndices.length;z++)
                {
                                  if (item.i==list.selectedItems[z])
                                  {     
                                                        
                                                 result=true;
                                  }
                                 
                        }
      
      }  
return result;

 }
 
public function sortAC():void {
                var sortA:Sort = new Sort();
                sortA.fields=[new SortField("i",true),new
SortField("ts",false)];
                slicedmoteData.sort=sortA;
                //Refresh the collection view to show the sort.
                slicedmoteData.refresh();
            } 

private function formatDataTip(hitData:HitData):String
        {
          var date:String = hitData.item.ts
          var ID:String=hitData.item.i
         var Temperature:Number = hitData.item.t
         var Humidity:Number = hitData.item.h
         var PercentDegradation:Number = hitData.item.m
          var SensorOutput:Number = hitData.item.a
                return "<b>ID: "+ID+"</b><br><b>Date:
"+date+"</b><br>Temperature: "+Temperature+"<br>Humidity:
"+Humidity+"<br>% Degradation: "+PercentDegradation+"<br>Sensor
Output: "+SensorOutput;
        }
private function resultHandler(event:ResultEvent):void 
        { // this is another way of defining http result receipt 
            moteData = event.result.list.mote.source as Array; // http
service as array
                        slider.maximum = moteData.length - 1;
                        slider.values = [0, moteData.length - 1];
                        //slider.minimum= moteData.length + 1;
            //slicedmoteData.source = moteData;
statesx=new Array("1001","1002","1003","1004");
statesx.sort()
        }

        private function getSliderLabel(value:String):String
        {
             
            return moteData[parseInt(value)].ts;
            
        }

        private function rangeChange():void
        {
                        if (moteData != null)
                    slicedmoteData.source = moteData.slice(slider.values[0],
slider.values[1] + 5);
 mypanel.title="Mote:"+list.selectedItems.sort()
        }

      

public function addSeries(series:Array, yField:String, id:String,
color:uint):void
                {
                        var ls:LineSeries = new LineSeries();
            ls.yField=yField
            ls.displayName = id 
            var stroke:Stroke = new Stroke();
                stroke.color = color;
            stroke.weight = 1;
                ls.setStyle("lineStroke", stroke);
                series.push(ls);
                }
                        
private function setSeries():void
                {
                        var series:Array = new Array();
                        if (cbTemperature.selected)
                        addSeries(series, "t", "Temperature", 0xFF0000);
                        if (cbHumidity.selected)
                        {
                        addSeries(series, "h", "Humidity", 0x009900);
                        }
                        if (cbPercentDegradation.selected)
                        {
                        addSeries(series, "m", "Percent Degradation", 0xFF9900);
                        }
                if (cbSensorOutput.selected)
                        {
                        addSeries(series, "a", "Sensor Output", 0x00FF90);
                        }
            mychart.series = series;
                }
        ]]>

    </mx:Script>

    <mx:HTTPService  showBusyCursor="true"  useProxy="false" id="srv"
url="exportXML.xml"  result="resultHandler(event)"/>
    <mx:SeriesInterpolate id="interpolate" elementOffset="10"/>

<mx:Panel id="mypanel"   width="100%"  left="0"  top="0"   title="
Portal Chart"  height="100%" >

 <mx:ApplicationControlBar height="5%"   width="100%"> 
               <mx:HBox>
<mx:CheckBox id="cbTemperature" label="Temperature" 
click="setSeries()" color="#FF0000"/>
<mx:CheckBox id="cbHumidity" label="Humidity"  click="setSeries()"
color="#009900"/>
<mx:CheckBox id="cbPercentDegradation" label="% Degradation"
click="setSeries()" color="#FF9900"/>
<mx:CheckBox id="cbSensorOutput" label="Sensor Output"
click="setSeries()" color="#00FF90"/>
</mx:HBox>
<mx:Label  text="Select Dates From:" width="80" height="20"/>
        <mx:HSlider id="slider" width="125" thumbCount="2" 
tickInterval="15" 
                 snapInterval="2"   dataTipPlacement="bottom" 
            dataTipFormatFunction="getSliderLabel"
change="rangeChange()"/>
<mx:ToggleButtonBar width="50"  dataProvider="{vs}"/>   
              
  </mx:ApplicationControlBar>
<!--/////////////////////////////////// view stack area -->
    <mx:ViewStack backgroundColor="#ffffff" id="vs" width="750"
height="100%">

        <mx:VBox  id="chartVBox" width="100%" height="100%"
icon="@Embed('icon_chart.png')" toolTip="View in Chart"
hideEffect="Fade" showEffect="Fade">
        <!-- chart IDeferredInstance will go here -->
        
        
         <mx:HBox>

        <mx:VBox>
            
        <!-- <mx:Label width="100%" text="Select option to display
from the right, you can use the CTRL and SHIFT keys to select multiple
options."/> -->


            <mx:LineChart dataTipFunction="formatDataTip"  
id="mychart" dataProvider="{slicedmoteData}" showDataTips="true"
width="670" height="365"    > <!--height affects width -->
               <mx:horizontalAxis >
                    <mx:CategoryAxis  id="hl"  labelFunction="hlabel"
title="Dates" padding="0"  displayName="Date" 
dataProvider="{slicedmoteData}" categoryField="date"/>
                </mx:horizontalAxis>
<mx:horizontalAxisRenderer>
        <mx:AxisRenderer  fontSize="8" />
</mx:horizontalAxisRenderer>
        <mx:verticalAxis>
                                        <mx:LinearAxis  title="Temperature[F] / 
Humidity [%] /
PercentDegradation / Sensor Output"  />
                                </mx:verticalAxis>
        
                     <!--used o remove formattiung for lines   -->   
                                
        <mx:seriesFilters> 
                            <mx:Array/>
                    </mx:seriesFilters> 

                        <mx:backgroundElements>
                                <mx:Array>
                                
                                <mx:GridLines   direction="both">
                                                <mx:verticalStroke>
                                                        <mx:Stroke weight="1" 
color="#F4F4F4"/>
                                                </mx:verticalStroke>
                                                <mx:horizontalStroke>
                                                        <mx:Stroke weight="1" 
color="#F4F4F4"/>
                                                </mx:horizontalStroke>
                                        </mx:GridLines>
                                </mx:Array>

                        </mx:backgroundElements>
 

            </mx:LineChart>
            </mx:VBox>
            <mx:HBox width="100%" />
            <mx:VBox height="100%">
                <mx:Label text="Motes:" /><mx:List fontFamily="Verdana" 
fontSize="10" fontWeight="bold" id="list" dataProvider="{statesx}"
allowMultipleSelection="true" height="100%" width="60" 
click="rangeChange()" themeColor="#00ff00" color="#0000a0"
textAlign="left"/>
            </mx:VBox>

  </mx:HBox>
         </mx:VBox>
        <mx:VBox width="50%" height="50%"
icon="@Embed('icon_grid.png')" toolTip="View in Grid"
hideEffect="Fade" showEffect="Fade">
            <mx:DataGrid dataProvider="{slicedmoteData}" width="100%"
height="100%"                   >
                <mx:columns>
                    <mx:Array>
<mx:DataGridColumn dataField="i" headerText="ID"     />
 <mx:DataGridColumn dataField="ts" headerText="Date"   />
 <mx:DataGridColumn dataField="t"  headerText="Temperature"    />
  <mx:DataGridColumn dataField="h" headerText="Humidity"       />
  <mx:DataGridColumn  dataField="m" headerText="% Degradation" />
  <mx:DataGridColumn  dataField="a" headerText="Sensor Output"    />
                    </mx:Array>
                </mx:columns>
            </mx:DataGrid>
        </mx:VBox>

        </mx:ViewStack>

</mx:Panel>
   
</mx:Application>

Reply via email to