You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ca...@apache.org on 2016/11/10 09:23:10 UTC
[03/53] git commit: [flex-asjs] [refs/heads/feature/mdl] - -
Refactored the directory structure of the example projects to be maven-style
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/MyInitialView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/MyInitialView.mxml b/examples/flexjs/MobileTrader/src/MyInitialView.mxml
deleted file mode 100755
index 0c353ff..0000000
--- a/examples/flexjs/MobileTrader/src/MyInitialView.mxml
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
--->
-<js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:local="*"
- xmlns:js="library://ns.apache.org/flexjs/basic"
- xmlns:views="views.*"
- xmlns:apache="org.apache.flex.html.beads.*"
- xmlns:html="org.apache.flex.html.*"
- xmlns:controller="controller.*"
- initComplete="onInitComplete()" xmlns:models="models.*" >
-
- <fx:Style>
- @namespace js "library://ns.apache.org/flexjs/basic";
- @namespace views "views.*";
-
- js|Container {
- background-color: #FFFFFF;
- }
-
- js|StackedViewManager {
- padding-top: 0px;
- padding-bottom: 0px;
- padding-left: 0px;
- padding-right: 0px;
- }
-
- js|TabbedViewManager {
- position : absolute ;
- height : 100% ;
- width : 100% ;
- left : 0px ;
- top : 0px ;
- border: solid 1px #444444;
- background-color: #FFFFFF;
- }
-
- .NavigationBar {
- background-image: url("assets/background.png");
- height: 55px;
- IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.HorizontalLayout");
- }
-
- .TabBar {
- background-color: #DEDEDE;
- height: 55px;
- vertical-align: middle;
- line-height: 55px;
- }
-
- .BackButton:hover {
- background-image: url('assets/arrow_left_24.png');
- }
-
- .BackButton:active {
- background-image: url('assets/arrow_left_24.png');
- }
-
- .BackButton {
- background-image: url('assets/arrow_left_24.png');
- }
-
- .AssetsInner {
- padding-top: 5px;
- background-color: #FFFFFF;
- }
-
- views|AssetsView {
- width: 100%;
- height: 100%;
- }
-
- views|WatchListView {
- width: 100%;
- height: 100%;
- IBeadController:ClassReference('controller.WatchListController');
- background-color: #FFFFFF;
- }
-
- .WatchListInner {
- height: 480px;
- width: 100%;
- background-color: #FFFFFF;
- }
-
- .WatchListDataGrid {
- height: 480px;
- width: 100%;
- }
-
- .WatchListInputArea {
- background-color: #FFFFFF;
- width: 480px;
- height: 25px;
- padding-top: 5px;
- padding-bottom: 2px;
- }
-
- views|StockView {
- width: 100%;
- height: 100%;
- }
-
- views|AlertsView {
- width: 100%;
- height: 100%;
- IBeadController:ClassReference('controller.AlertsViewController');
- }
-
- .redCell {
- color: #FF0000;
- }
-
- .greenCell {
- color: #00FF00;
- }
-
- .ViewTitle {
- font-size: 18pt;
- font-weight: bold;
- padding: 10pt;
- }
-
- .StockName {
- font-size: 14pt;
- font-weight: normal;
- padding: 10pt;
- }
-
- .StockDetailArea {
- padding: 10pt;
- }
-
- .StockLabel {
- font-size: 18pt;
- font-weight: normal;
- color: #2255DD;
- }
-
- .StockRemoveButton {
- background-color: #FF5522;
- font-size: 16pt;
- font-weight: bold;
- color: #FFFFFF;
- width: 200px;
- height: 50px;
- }
-
- .StockRemoveButton:hover {
- background-color: #DD3300;
- }
-
- .StockValue {
- font-size: 18pt;
- font-weight: normal;
- color: #999999;
- }
-
- @media -flex-flash
- {
- .NavigationBar {
- IBackgroundBead: ClassReference("org.apache.flex.html.beads.BackgroundImageBead");
- }
- }
-
- </fx:Style>
-
- <fx:Script>
- <![CDATA[
- import org.apache.flex.core.IBeadController;
- import org.apache.flex.core.IBeadModel;
- import org.apache.flex.events.Event;
- import org.apache.flex.mobile.IViewManagerView;
- import org.apache.flex.mobile.IViewManager;
- import org.apache.flex.mobile.chrome.NavigationBar;
-
- private function onInitComplete():void
- {
- }
-
- private function onAssetsNext():void
- {
-
- }
-
- private function tabbedViewChanged(event:org.apache.flex.events.Event):void
- {
- var manager:IViewManager = event.currentTarget as IViewManager;
- trace("TabbedViewChanged for "+manager);
- }
-
- private function watchListStackChanged(event:org.apache.flex.events.Event):void
- {
- trace("watchlist stack changed");
- var manager:StackedViewManager = event.currentTarget as StackedViewManager;
-
- var currentView:IViewManagerView = manager.selectedView;
- backButton.visible = manager.views.length > 1;
- }
-
- private function goBack(event:org.apache.flex.events.MouseEvent):void
- {
- if (navController.selectedIndex == 1) {
- watchListStack.pop();
- }
- }
- ]]>
- </fx:Script>
-
- <js:beads>
- <js:ViewDataBinding />
- </js:beads>
-
- <js:TabbedViewManager id="navController" width="100%" height="100%" x="0" y="0" viewChanged="tabbedViewChanged(event)">
- <js:navigationBarItems>
- <js:TextButton id="backButton" width="45" height="45" className="BackButton" visible="false" click="goBack(event)">
- <js:beads>
- <apache:ImageButtonView />
- </js:beads>
- </js:TextButton>
- <js:Image source="assets/logo.png" width="218" height="55" />
- </js:navigationBarItems>
- <js:views>
- <js:StackedViewManager title="Assets">
- <js:views>
- <views:AssetsView id="assetsView" title="Assets" next="onAssetsNext()" />
- </js:views>
- </js:StackedViewManager>
-
- <js:StackedViewManager id="watchListStack" title="Watch List" viewChanged="watchListStackChanged(event)">
- <js:views>
- <views:WatchListView id="watchListView" dataModel="{applicationModel}"/>
- </js:views>
- </js:StackedViewManager>
-
- <views:AlertsView id="alertsView" title="Alerts" dataModel="{applicationModel}" />
- </js:views>
- </js:TabbedViewManager>
-
-</js:View>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/StockDataJSONItemConverter.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/StockDataJSONItemConverter.as b/examples/flexjs/MobileTrader/src/StockDataJSONItemConverter.as
deleted file mode 100755
index 5c21c26..0000000
--- a/examples/flexjs/MobileTrader/src/StockDataJSONItemConverter.as
+++ /dev/null
@@ -1,40 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package
-{
- import org.apache.flex.collections.converters.JSONItemConverter;
-
- public class StockDataJSONItemConverter extends JSONItemConverter
- {
- public function StockDataJSONItemConverter()
- {
- super();
- }
-
- override public function convertItem(data:String):Object
- {
- var obj:Object = super.convertItem(data);
- if (obj["query"]["count"] == 0)
- return "No Data";
-
- obj = obj["query"]["results"]["quote"];
- return obj;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/assets/arrow_left_24.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/assets/arrow_left_24.png b/examples/flexjs/MobileTrader/src/assets/arrow_left_24.png
deleted file mode 100755
index a3019ba..0000000
Binary files a/examples/flexjs/MobileTrader/src/assets/arrow_left_24.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/assets/background.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/assets/background.png b/examples/flexjs/MobileTrader/src/assets/background.png
deleted file mode 100755
index 87bbd59..0000000
Binary files a/examples/flexjs/MobileTrader/src/assets/background.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/assets/logo.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/assets/logo.png b/examples/flexjs/MobileTrader/src/assets/logo.png
deleted file mode 100755
index 0fb0f21..0000000
Binary files a/examples/flexjs/MobileTrader/src/assets/logo.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/controller/AlertsViewController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/controller/AlertsViewController.as b/examples/flexjs/MobileTrader/src/controller/AlertsViewController.as
deleted file mode 100644
index f8373ca..0000000
--- a/examples/flexjs/MobileTrader/src/controller/AlertsViewController.as
+++ /dev/null
@@ -1,141 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package controller
-{
- import models.Alert;
- import models.ProductsModel;
- import models.Stock;
-
- import org.apache.flex.core.IBeadController;
- import org.apache.flex.core.IBeadModel;
- import org.apache.flex.core.IStrand;
- import org.apache.flex.events.Event;
- import org.apache.flex.events.EventDispatcher;
- import org.apache.flex.utils.Timer;
- import org.apache.flex.collections.ArrayList;
-
- import views.AlertsView;
-
- public class AlertsViewController extends EventDispatcher implements IBeadController
- {
- public function AlertsViewController()
- {
- super();
-
- timer = new Timer(updateInterval, 0);
- timer.addEventListener("timer", timerHandler);
- }
-
- public var updateInterval:Number = 5000;
-
- protected var timer:Timer;
-
- private var _strand:IStrand;
-
- public function set strand(value:IStrand):void
- {
- _strand = value;
-
- var view:AlertsView = value as AlertsView;
- view.addEventListener("alertSet", handleAlertSet);
- }
-
- private var _model:IBeadModel;
- public function set model(value:IBeadModel):void
- {
- _model = value;
- }
- public function get model():IBeadModel
- {
- return _model;
- }
-
- private function handleAlertSet(event:Event):void
- {
- var view:AlertsView = _strand as AlertsView;
-
- var sym:String = view.symbolField.text.toUpperCase();
- var value:Number = Number(view.valueField.text);
-
- var alert:Alert = new Alert();
- alert.symbol = sym;
- alert.value = value;
- alert.greaterThan = view.higherCheck.selected;
-
- // add this stock to the watch list in case it isn't there already
- alert.stock = (model as ProductsModel).addStock(sym);
-
- // set up the alert for the stock
- (model as ProductsModel).addAlert(alert);
-
- view.symbolField.text = "";
- view.valueField.text = "";
-
- subscribe();
- }
-
- public function subscribe():void
- {
- if (!timer.running)
- {
- timer.start();
- }
- }
-
- public function unsubscribe():void
- {
- if (timer.running)
- {
- timer.stop();
- }
- }
-
- /**
- * When the timer goes off, verify all of the alerts against each stocks' last
- * price.
- */
- protected function timerHandler(event:*):void
- {
- var alerts:ArrayList = (model as ProductsModel).alerts;
-
- if (alerts.length == 0) return;
-
- for (var i:int=0; i < alerts.length; i++)
- {
- var alert:Alert = alerts.getItemAt(i) as Alert;
- alert.message = "";
-
- if (alert.greaterThan) {
- if (alert.stock.last >= alert.value) {
- alert.message = "Now @"+alert.stock.last;
- }
- }
- else {
- if (alert.stock.last <= alert.value) {
- alert.message = "Now @"+alert.stock.last;
- }
- }
- alerts.itemUpdatedAt(i);
- }
-
- var newEvent:Event = new Event("alertsUpdate");
- model.dispatchEvent(newEvent);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/controller/WatchListController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/controller/WatchListController.as b/examples/flexjs/MobileTrader/src/controller/WatchListController.as
deleted file mode 100644
index 5da5b70..0000000
--- a/examples/flexjs/MobileTrader/src/controller/WatchListController.as
+++ /dev/null
@@ -1,138 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package controller
-{
- import models.ProductsModel;
- import models.Stock;
-
- import org.apache.flex.core.IBeadController;
- import org.apache.flex.core.IBeadModel;
- import org.apache.flex.core.IStrand;
- import org.apache.flex.events.Event;
- import org.apache.flex.events.EventDispatcher;
- import org.apache.flex.utils.Timer;
- import org.apache.flex.collections.ArrayList;
-
- import views.StockView;
- import views.WatchListView;
-
- public class WatchListController extends EventDispatcher implements IBeadController
- {
- public function WatchListController()
- {
- super();
-
- timer = new Timer(updateInterval, 0);
- timer.addEventListener("timer", timerHandler);
- }
-
- public var updateInterval:Number = 5000;
-
- protected var timer:Timer;
-
- private var index:Number = 0;
- private var selectedStock:Stock;
- private var _strand:IStrand;
-
- public function set strand(value:IStrand):void
- {
- _strand = value;
-
- var view:WatchListView = value as WatchListView;
- view.addEventListener("addSymbol", handleAddSymbol);
- view.addEventListener("stockSelected", handleGridSelection);
- }
-
- private var _model:IBeadModel;
- public function set model(value:IBeadModel):void
- {
- _model = value;
- }
- public function get model():IBeadModel
- {
- return _model;
- }
-
- private function handleAddSymbol(event:Event):void
- {
- var view:WatchListView = _strand as WatchListView;
- var symbol:String = view.symbolName.text.toUpperCase();
-
- view.symbolName.text = "";
-
- (model as ProductsModel).addStock(symbol);
-
- subscribe();
- }
-
- private function handleGridSelection(event:Event):void
- {
- var view:WatchListView = _strand as WatchListView;
- selectedStock = (model as ProductsModel).watchList[view.selectedStockIndex] as Stock;
- trace("Selected stock "+selectedStock.symbol);
-
- var stockView:StockView = view.showStockDetails(selectedStock);
- stockView.addEventListener("removeFromList", handleRemoveFromList);
- }
-
- public function handleRemoveFromList(event:Event):void
- {
- (model as ProductsModel).removeStock(selectedStock);
-
- var view:WatchListView = _strand as WatchListView;
- view.popView();
- }
-
- public function subscribe():void
- {
- if (!timer.running)
- {
- timer.start();
- }
- }
-
- public function unsubscribe():void
- {
- if (timer.running)
- {
- timer.stop();
- }
- }
-
- /**
- * Each time the handler goes off a different stock in the list
- * is updated. This keeps the app from sending too many requests
- * all at once.
- */
- protected function timerHandler(event:*):void
- {
- var stockList:ArrayList = (model as ProductsModel).watchList;
-
- if (stockList.length == 0) return;
-
- if (index >= stockList.length) index = 0;
-
- (model as ProductsModel).updateStockData(stockList.getItemAt(index) as Stock);
- index++;
-
- var newEvent:Event = new Event("update");
- model.dispatchEvent(newEvent);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/MobileTrader.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/MobileTrader.mxml b/examples/flexjs/MobileTrader/src/main/flex/MobileTrader.mxml
new file mode 100755
index 0000000..c76531c
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/MobileTrader.mxml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!---
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+-->
+<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:local="*"
+ xmlns:models="models.*"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:controller="controller.*"
+ >
+
+ <js:valuesImpl>
+ <js:SimpleCSSValuesImpl />
+ </js:valuesImpl>
+
+ <js:model>
+ <models:ProductsModel />
+ </js:model>
+
+ <js:initialView>
+ <local:MyInitialView width="100%" height="100%" />
+ </js:initialView>
+</js:Application>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/MyInitialView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/MyInitialView.mxml b/examples/flexjs/MobileTrader/src/main/flex/MyInitialView.mxml
new file mode 100755
index 0000000..0c353ff
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/MyInitialView.mxml
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:View xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:local="*"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:views="views.*"
+ xmlns:apache="org.apache.flex.html.beads.*"
+ xmlns:html="org.apache.flex.html.*"
+ xmlns:controller="controller.*"
+ initComplete="onInitComplete()" xmlns:models="models.*" >
+
+ <fx:Style>
+ @namespace js "library://ns.apache.org/flexjs/basic";
+ @namespace views "views.*";
+
+ js|Container {
+ background-color: #FFFFFF;
+ }
+
+ js|StackedViewManager {
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: 0px;
+ padding-right: 0px;
+ }
+
+ js|TabbedViewManager {
+ position : absolute ;
+ height : 100% ;
+ width : 100% ;
+ left : 0px ;
+ top : 0px ;
+ border: solid 1px #444444;
+ background-color: #FFFFFF;
+ }
+
+ .NavigationBar {
+ background-image: url("assets/background.png");
+ height: 55px;
+ IBeadLayout: ClassReference("org.apache.flex.html.beads.layouts.HorizontalLayout");
+ }
+
+ .TabBar {
+ background-color: #DEDEDE;
+ height: 55px;
+ vertical-align: middle;
+ line-height: 55px;
+ }
+
+ .BackButton:hover {
+ background-image: url('assets/arrow_left_24.png');
+ }
+
+ .BackButton:active {
+ background-image: url('assets/arrow_left_24.png');
+ }
+
+ .BackButton {
+ background-image: url('assets/arrow_left_24.png');
+ }
+
+ .AssetsInner {
+ padding-top: 5px;
+ background-color: #FFFFFF;
+ }
+
+ views|AssetsView {
+ width: 100%;
+ height: 100%;
+ }
+
+ views|WatchListView {
+ width: 100%;
+ height: 100%;
+ IBeadController:ClassReference('controller.WatchListController');
+ background-color: #FFFFFF;
+ }
+
+ .WatchListInner {
+ height: 480px;
+ width: 100%;
+ background-color: #FFFFFF;
+ }
+
+ .WatchListDataGrid {
+ height: 480px;
+ width: 100%;
+ }
+
+ .WatchListInputArea {
+ background-color: #FFFFFF;
+ width: 480px;
+ height: 25px;
+ padding-top: 5px;
+ padding-bottom: 2px;
+ }
+
+ views|StockView {
+ width: 100%;
+ height: 100%;
+ }
+
+ views|AlertsView {
+ width: 100%;
+ height: 100%;
+ IBeadController:ClassReference('controller.AlertsViewController');
+ }
+
+ .redCell {
+ color: #FF0000;
+ }
+
+ .greenCell {
+ color: #00FF00;
+ }
+
+ .ViewTitle {
+ font-size: 18pt;
+ font-weight: bold;
+ padding: 10pt;
+ }
+
+ .StockName {
+ font-size: 14pt;
+ font-weight: normal;
+ padding: 10pt;
+ }
+
+ .StockDetailArea {
+ padding: 10pt;
+ }
+
+ .StockLabel {
+ font-size: 18pt;
+ font-weight: normal;
+ color: #2255DD;
+ }
+
+ .StockRemoveButton {
+ background-color: #FF5522;
+ font-size: 16pt;
+ font-weight: bold;
+ color: #FFFFFF;
+ width: 200px;
+ height: 50px;
+ }
+
+ .StockRemoveButton:hover {
+ background-color: #DD3300;
+ }
+
+ .StockValue {
+ font-size: 18pt;
+ font-weight: normal;
+ color: #999999;
+ }
+
+ @media -flex-flash
+ {
+ .NavigationBar {
+ IBackgroundBead: ClassReference("org.apache.flex.html.beads.BackgroundImageBead");
+ }
+ }
+
+ </fx:Style>
+
+ <fx:Script>
+ <![CDATA[
+ import org.apache.flex.core.IBeadController;
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.mobile.IViewManagerView;
+ import org.apache.flex.mobile.IViewManager;
+ import org.apache.flex.mobile.chrome.NavigationBar;
+
+ private function onInitComplete():void
+ {
+ }
+
+ private function onAssetsNext():void
+ {
+
+ }
+
+ private function tabbedViewChanged(event:org.apache.flex.events.Event):void
+ {
+ var manager:IViewManager = event.currentTarget as IViewManager;
+ trace("TabbedViewChanged for "+manager);
+ }
+
+ private function watchListStackChanged(event:org.apache.flex.events.Event):void
+ {
+ trace("watchlist stack changed");
+ var manager:StackedViewManager = event.currentTarget as StackedViewManager;
+
+ var currentView:IViewManagerView = manager.selectedView;
+ backButton.visible = manager.views.length > 1;
+ }
+
+ private function goBack(event:org.apache.flex.events.MouseEvent):void
+ {
+ if (navController.selectedIndex == 1) {
+ watchListStack.pop();
+ }
+ }
+ ]]>
+ </fx:Script>
+
+ <js:beads>
+ <js:ViewDataBinding />
+ </js:beads>
+
+ <js:TabbedViewManager id="navController" width="100%" height="100%" x="0" y="0" viewChanged="tabbedViewChanged(event)">
+ <js:navigationBarItems>
+ <js:TextButton id="backButton" width="45" height="45" className="BackButton" visible="false" click="goBack(event)">
+ <js:beads>
+ <apache:ImageButtonView />
+ </js:beads>
+ </js:TextButton>
+ <js:Image source="assets/logo.png" width="218" height="55" />
+ </js:navigationBarItems>
+ <js:views>
+ <js:StackedViewManager title="Assets">
+ <js:views>
+ <views:AssetsView id="assetsView" title="Assets" next="onAssetsNext()" />
+ </js:views>
+ </js:StackedViewManager>
+
+ <js:StackedViewManager id="watchListStack" title="Watch List" viewChanged="watchListStackChanged(event)">
+ <js:views>
+ <views:WatchListView id="watchListView" dataModel="{applicationModel}"/>
+ </js:views>
+ </js:StackedViewManager>
+
+ <views:AlertsView id="alertsView" title="Alerts" dataModel="{applicationModel}" />
+ </js:views>
+ </js:TabbedViewManager>
+
+</js:View>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/StockDataJSONItemConverter.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/StockDataJSONItemConverter.as b/examples/flexjs/MobileTrader/src/main/flex/StockDataJSONItemConverter.as
new file mode 100755
index 0000000..5c21c26
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/StockDataJSONItemConverter.as
@@ -0,0 +1,40 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package
+{
+ import org.apache.flex.collections.converters.JSONItemConverter;
+
+ public class StockDataJSONItemConverter extends JSONItemConverter
+ {
+ public function StockDataJSONItemConverter()
+ {
+ super();
+ }
+
+ override public function convertItem(data:String):Object
+ {
+ var obj:Object = super.convertItem(data);
+ if (obj["query"]["count"] == 0)
+ return "No Data";
+
+ obj = obj["query"]["results"]["quote"];
+ return obj;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/assets/arrow_left_24.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/assets/arrow_left_24.png b/examples/flexjs/MobileTrader/src/main/flex/assets/arrow_left_24.png
new file mode 100755
index 0000000..a3019ba
Binary files /dev/null and b/examples/flexjs/MobileTrader/src/main/flex/assets/arrow_left_24.png differ
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/assets/background.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/assets/background.png b/examples/flexjs/MobileTrader/src/main/flex/assets/background.png
new file mode 100755
index 0000000..87bbd59
Binary files /dev/null and b/examples/flexjs/MobileTrader/src/main/flex/assets/background.png differ
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/assets/logo.png
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/assets/logo.png b/examples/flexjs/MobileTrader/src/main/flex/assets/logo.png
new file mode 100755
index 0000000..0fb0f21
Binary files /dev/null and b/examples/flexjs/MobileTrader/src/main/flex/assets/logo.png differ
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/controller/AlertsViewController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/controller/AlertsViewController.as b/examples/flexjs/MobileTrader/src/main/flex/controller/AlertsViewController.as
new file mode 100644
index 0000000..f8373ca
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/controller/AlertsViewController.as
@@ -0,0 +1,141 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package controller
+{
+ import models.Alert;
+ import models.ProductsModel;
+ import models.Stock;
+
+ import org.apache.flex.core.IBeadController;
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.utils.Timer;
+ import org.apache.flex.collections.ArrayList;
+
+ import views.AlertsView;
+
+ public class AlertsViewController extends EventDispatcher implements IBeadController
+ {
+ public function AlertsViewController()
+ {
+ super();
+
+ timer = new Timer(updateInterval, 0);
+ timer.addEventListener("timer", timerHandler);
+ }
+
+ public var updateInterval:Number = 5000;
+
+ protected var timer:Timer;
+
+ private var _strand:IStrand;
+
+ public function set strand(value:IStrand):void
+ {
+ _strand = value;
+
+ var view:AlertsView = value as AlertsView;
+ view.addEventListener("alertSet", handleAlertSet);
+ }
+
+ private var _model:IBeadModel;
+ public function set model(value:IBeadModel):void
+ {
+ _model = value;
+ }
+ public function get model():IBeadModel
+ {
+ return _model;
+ }
+
+ private function handleAlertSet(event:Event):void
+ {
+ var view:AlertsView = _strand as AlertsView;
+
+ var sym:String = view.symbolField.text.toUpperCase();
+ var value:Number = Number(view.valueField.text);
+
+ var alert:Alert = new Alert();
+ alert.symbol = sym;
+ alert.value = value;
+ alert.greaterThan = view.higherCheck.selected;
+
+ // add this stock to the watch list in case it isn't there already
+ alert.stock = (model as ProductsModel).addStock(sym);
+
+ // set up the alert for the stock
+ (model as ProductsModel).addAlert(alert);
+
+ view.symbolField.text = "";
+ view.valueField.text = "";
+
+ subscribe();
+ }
+
+ public function subscribe():void
+ {
+ if (!timer.running)
+ {
+ timer.start();
+ }
+ }
+
+ public function unsubscribe():void
+ {
+ if (timer.running)
+ {
+ timer.stop();
+ }
+ }
+
+ /**
+ * When the timer goes off, verify all of the alerts against each stocks' last
+ * price.
+ */
+ protected function timerHandler(event:*):void
+ {
+ var alerts:ArrayList = (model as ProductsModel).alerts;
+
+ if (alerts.length == 0) return;
+
+ for (var i:int=0; i < alerts.length; i++)
+ {
+ var alert:Alert = alerts.getItemAt(i) as Alert;
+ alert.message = "";
+
+ if (alert.greaterThan) {
+ if (alert.stock.last >= alert.value) {
+ alert.message = "Now @"+alert.stock.last;
+ }
+ }
+ else {
+ if (alert.stock.last <= alert.value) {
+ alert.message = "Now @"+alert.stock.last;
+ }
+ }
+ alerts.itemUpdatedAt(i);
+ }
+
+ var newEvent:Event = new Event("alertsUpdate");
+ model.dispatchEvent(newEvent);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/controller/WatchListController.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/controller/WatchListController.as b/examples/flexjs/MobileTrader/src/main/flex/controller/WatchListController.as
new file mode 100644
index 0000000..5da5b70
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/controller/WatchListController.as
@@ -0,0 +1,138 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package controller
+{
+ import models.ProductsModel;
+ import models.Stock;
+
+ import org.apache.flex.core.IBeadController;
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.utils.Timer;
+ import org.apache.flex.collections.ArrayList;
+
+ import views.StockView;
+ import views.WatchListView;
+
+ public class WatchListController extends EventDispatcher implements IBeadController
+ {
+ public function WatchListController()
+ {
+ super();
+
+ timer = new Timer(updateInterval, 0);
+ timer.addEventListener("timer", timerHandler);
+ }
+
+ public var updateInterval:Number = 5000;
+
+ protected var timer:Timer;
+
+ private var index:Number = 0;
+ private var selectedStock:Stock;
+ private var _strand:IStrand;
+
+ public function set strand(value:IStrand):void
+ {
+ _strand = value;
+
+ var view:WatchListView = value as WatchListView;
+ view.addEventListener("addSymbol", handleAddSymbol);
+ view.addEventListener("stockSelected", handleGridSelection);
+ }
+
+ private var _model:IBeadModel;
+ public function set model(value:IBeadModel):void
+ {
+ _model = value;
+ }
+ public function get model():IBeadModel
+ {
+ return _model;
+ }
+
+ private function handleAddSymbol(event:Event):void
+ {
+ var view:WatchListView = _strand as WatchListView;
+ var symbol:String = view.symbolName.text.toUpperCase();
+
+ view.symbolName.text = "";
+
+ (model as ProductsModel).addStock(symbol);
+
+ subscribe();
+ }
+
+ private function handleGridSelection(event:Event):void
+ {
+ var view:WatchListView = _strand as WatchListView;
+ selectedStock = (model as ProductsModel).watchList[view.selectedStockIndex] as Stock;
+ trace("Selected stock "+selectedStock.symbol);
+
+ var stockView:StockView = view.showStockDetails(selectedStock);
+ stockView.addEventListener("removeFromList", handleRemoveFromList);
+ }
+
+ public function handleRemoveFromList(event:Event):void
+ {
+ (model as ProductsModel).removeStock(selectedStock);
+
+ var view:WatchListView = _strand as WatchListView;
+ view.popView();
+ }
+
+ public function subscribe():void
+ {
+ if (!timer.running)
+ {
+ timer.start();
+ }
+ }
+
+ public function unsubscribe():void
+ {
+ if (timer.running)
+ {
+ timer.stop();
+ }
+ }
+
+ /**
+ * Each time the handler goes off a different stock in the list
+ * is updated. This keeps the app from sending too many requests
+ * all at once.
+ */
+ protected function timerHandler(event:*):void
+ {
+ var stockList:ArrayList = (model as ProductsModel).watchList;
+
+ if (stockList.length == 0) return;
+
+ if (index >= stockList.length) index = 0;
+
+ (model as ProductsModel).updateStockData(stockList.getItemAt(index) as Stock);
+ index++;
+
+ var newEvent:Event = new Event("update");
+ model.dispatchEvent(newEvent);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/models/Alert.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/models/Alert.as b/examples/flexjs/MobileTrader/src/main/flex/models/Alert.as
new file mode 100644
index 0000000..7b9dc8b
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/models/Alert.as
@@ -0,0 +1,94 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package models
+{
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+
+ public class Alert extends EventDispatcher
+ {
+ public function Alert()
+ {
+ super();
+ message = "";
+ }
+
+ private var _symbol:String;
+ private var _value:Number;
+ private var _greaterThan:Boolean;
+ private var _message:String;
+ private var _stock:Stock;
+
+ [Binding("symbolChanged")]
+ public function get symbol():String
+ {
+ return _symbol;
+ }
+ public function set symbol(value:String):void
+ {
+ _symbol = value;
+ dispatchEvent(new Event("symbolChanged"));
+ }
+
+ [Binding("messageChanged")]
+ public function get message():String
+ {
+ return _message;
+ }
+ public function set message(value:String):void
+ {
+ _message = value;
+ dispatchEvent(new Event("messageChanged"));
+ }
+
+ [Binding("valueChanged")]
+ public function get value():Number
+ {
+ return _value;
+ }
+ public function set value(newValue:Number):void
+ {
+ _value = newValue;
+ dispatchEvent(new Event("valueChanged"));
+ }
+
+ [Binding("greaterThanChanged")]
+ public function get greaterThan():Boolean
+ {
+ return _greaterThan;
+ }
+ public function set greaterThan(value:Boolean):void
+ {
+ _greaterThan = value;
+ dispatchEvent(new Event("greaterThanChanged"));
+ }
+
+ [Binding("stockChanged")]
+ public function get stock():Stock
+ {
+ return _stock;
+ }
+ public function set stock(value:Stock):void
+ {
+ _stock = value;
+ dispatchEvent(new Event("stockChanged"));
+ }
+
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/models/Asset.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/models/Asset.as b/examples/flexjs/MobileTrader/src/main/flex/models/Asset.as
new file mode 100644
index 0000000..050e2bf
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/models/Asset.as
@@ -0,0 +1,77 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package models
+{
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+
+ public class Asset extends EventDispatcher
+ {
+ private var _label:String;
+ private var _value:Number;
+ private var _netChange:Number;
+
+ public function Asset(newLabel:String, newValue:Number, newNetChange:Number)
+ {
+ _label = newLabel;
+ _value = newValue;
+ _netChange = newNetChange;
+ }
+
+ [Bindable("labelChanged")]
+ public function get label():String
+ {
+ return _label;
+ }
+ public function set label(value:String):void
+ {
+ if (value != _label) {
+ _label = value;
+ dispatchEvent(new Event("labelChanged"));
+ }
+ }
+
+ [Bindable("valueChanged")]
+ public function get value():Number
+ {
+ return _value;
+ }
+ public function set value(newValue:Number):void
+ {
+ if (_value != newValue) {
+ _value = newValue;
+ dispatchEvent(new Event("valueChanged"));
+ }
+ }
+
+ [Bindable("netChangeChanged")]
+ public function get netChange():Number
+ {
+ return _netChange;
+ }
+ public function set netChange(value:Number):void
+ {
+ if (_netChange != value) {
+ _netChange = value;
+ dispatchEvent(new Event("netChangeChanged"));
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/models/AssetsModel.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/models/AssetsModel.as b/examples/flexjs/MobileTrader/src/main/flex/models/AssetsModel.as
new file mode 100755
index 0000000..3d72137
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/models/AssetsModel.as
@@ -0,0 +1,57 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package models
+{
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.collections.ArrayList;
+
+ public class AssetsModel extends EventDispatcher implements IBeadModel
+ {
+ public function AssetsModel()
+ {
+ super();
+ _assetsData = new ArrayList();
+ _assetsData.source = source;
+ }
+ private var source:Array = [
+ new Asset("NetWorth:", 161984, 2.36),
+ new Asset("Last Month:", 165915, 10.98),
+ new Asset("6 Months Ago:", 145962, 16.56),
+ new Asset("Last Year:", 138972, 8.36)
+ ];
+ private var _assetsData:ArrayList;
+
+ public function get assetsData():ArrayList
+ {
+ return _assetsData;
+ }
+
+ public function get assetsDataAsArray():Array
+ {
+ return source;
+ }
+
+ public function set strand(value:IStrand):void
+ {
+ // not used
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/models/ProductsModel.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/models/ProductsModel.as b/examples/flexjs/MobileTrader/src/main/flex/models/ProductsModel.as
new file mode 100755
index 0000000..f4b2008
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/models/ProductsModel.as
@@ -0,0 +1,165 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package models
+{
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.core.IStrand;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+ import org.apache.flex.net.HTTPService;
+ import org.apache.flex.collections.parsers.JSONInputParser;
+ import org.apache.flex.collections.LazyCollection;
+ import org.apache.flex.collections.ArrayList;
+
+ public class ProductsModel extends EventDispatcher implements IBeadModel
+ {
+ public function ProductsModel()
+ {
+ super();
+
+ service = new HTTPService();
+ collection = new LazyCollection;
+ collection.inputParser = new JSONInputParser();
+ collection.itemConverter = new StockDataJSONItemConverter();
+
+ _watchList = new ArrayList();
+ _alerts = new ArrayList();
+ }
+
+ private var service:HTTPService;
+ private var collection:LazyCollection;
+ private var queryBegin:String = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22";
+ private var queryEnd:String = "%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json";
+
+ private var _strand:IStrand;
+ public function set strand(value:IStrand):void
+ {
+ _strand = value;
+
+ service.addBead(collection);
+ _strand.addBead(service);
+ }
+
+ private var _tabList:Array = ["Assets", "Watch", "Alerts"];
+ public function get tabList():Array
+ {
+ return _tabList;
+ }
+
+ private var _labelFields:Array = [ "id", "title", "detail" ];
+ public function get labelFields():Array
+ {
+ return _labelFields;
+ }
+
+ private var _watchList:ArrayList;
+
+ public function get watchList():ArrayList
+ {
+ return _watchList;
+ }
+
+ private var _alerts:ArrayList;
+
+ public function get alerts():ArrayList
+ {
+ return _alerts;
+ }
+
+ public function addAlert(value:Alert):void
+ {
+ for (var i:int =0; i < _alerts.length; i++)
+ {
+ var alert:Alert = _alerts.getItemAt(i) as Alert;
+ if (alert.symbol == value.symbol) {
+ _alerts.setItemAt(value, i);
+ return;
+ }
+ }
+
+ _alerts.addItem(value);
+ dispatchEvent(new Event("alertsUpdate"));
+ }
+
+ public function addStock(symbol:String):Stock
+ {
+ for (var i:int=0; i < _watchList.length; i++)
+ {
+ var stock:Stock = _watchList.getItemAt(i) as Stock;
+ if (stock.symbol == symbol) return stock;
+ }
+
+ stock = new Stock(symbol);
+
+ _watchList.addItem(stock);
+ // dispatchEvent(new Event("update"));
+
+ updateStockData(stock);
+ return stock;
+ }
+
+ public function updateStockData(value:Stock):void
+ {
+ var sym:String = value.symbol;
+ service.url = queryBegin + sym + queryEnd;
+ service.send();
+ service.addEventListener("complete", completeHandler);
+ }
+
+ public function removeStock(stock:Stock):void
+ {
+ for (var i:int=0; i < alerts.length; i++)
+ {
+ var alert:Alert = alerts.getItemAt(i) as Alert;
+ if (stock.symbol == alert.symbol) {
+ alerts.removeItemAt(i);
+ break;
+ }
+ }
+
+ for (i=0; i < _watchList.length; i++)
+ {
+ var s:Stock = _watchList.getItemAt(i) as Stock;
+ if (stock.symbol == s.symbol) {
+ _watchList.removeItemAt(i);
+ break;
+ }
+ }
+
+ dispatchEvent(new Event("alertsUpdate"));
+ dispatchEvent(new Event("update"));
+ }
+
+ private function completeHandler(event:Event):void
+ {
+ var responseData:Object = collection.getItemAt(0);
+
+ var sym:String = responseData["Symbol"];
+ for (var i:int=0; i < _watchList.length; i++)
+ {
+ var stock:Stock = _watchList.getItemAt(i) as Stock;
+ if (stock.symbol == sym) {
+ stock.updateFromData(responseData);
+ _watchList.itemUpdatedAt(i);
+ break;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/models/Stock.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/models/Stock.as b/examples/flexjs/MobileTrader/src/main/flex/models/Stock.as
new file mode 100755
index 0000000..c06790d
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/models/Stock.as
@@ -0,0 +1,148 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package models
+{
+ import org.apache.flex.events.Event;
+ import org.apache.flex.events.EventDispatcher;
+
+ public class Stock extends EventDispatcher
+ {
+ public var history:Array;
+
+ public function Stock(symbol:String=null, last:Number=0)
+ {
+ this.symbol = symbol;
+ this.last = last;
+ this.low = last;
+ this.high = last;
+ this.open = last;
+ this.change = 0;
+ this.name = "";
+ }
+
+ public function updateFromData(obj:Object):void
+ {
+ name = obj["Name"];
+ low = obj["DaysLow"];
+ high = obj["DaysHigh"];
+ open = obj["Open"];
+ change = obj["Change"];
+ symbol = obj["Symbol"];
+ last = obj["LastTradePriceOnly"];
+ }
+
+ private var _symbol:String;
+ private var _name:String;
+ private var _low:Number;
+ private var _high:Number;
+ private var _open:Number;
+ private var _last:Number;
+ private var _change:Number;
+ private var _date:Date;
+
+ [Bindable("symbolChanged")]
+ public function get symbol():String
+ {
+ return _symbol;
+ }
+ public function set symbol(value:String):void
+ {
+ _symbol = value;
+ dispatchEvent(new Event("symbolChanged"));
+ }
+
+ [Bindable("nameChanged")]
+ public function get name():String
+ {
+ return _name;
+ }
+ public function set name(value:String):void
+ {
+ _name = value;
+ dispatchEvent(new Event("nameChanged"));
+ }
+
+ [Bindable("lowChanged")]
+ public function get low():Number
+ {
+ return _low;
+ }
+ public function set low(value:Number):void
+ {
+ _low = value;
+ dispatchEvent(new Event("lowChanged"));
+ }
+
+ [Bindable("highChanged")]
+ public function get high():Number
+ {
+ return _high;
+ }
+ public function set high(value:Number):void
+ {
+ _high = value;
+ dispatchEvent(new Event("highChanged"));
+ }
+
+ [Bindable("openChanged")]
+ public function get open():Number
+ {
+ return _open;
+ }
+ public function set open(value:Number):void
+ {
+ _open = value;
+ dispatchEvent(new Event("openChanged"));
+ }
+
+ [Bindable("lastChanged")]
+ public function get last():Number
+ {
+ return _last;
+ }
+ public function set last(value:Number):void
+ {
+ _last = value;
+ dispatchEvent(new Event("lastChanged"));
+ }
+
+ [Bindable("changeChanged")]
+ public function get change():Number
+ {
+ return _change;
+ }
+ public function set change(value:Number):void
+ {
+ _change = value;
+ dispatchEvent(new Event("changeChanged"));
+ }
+
+ [Bindable("dateChanged")]
+ public function get date():Date
+ {
+ return _date;
+ }
+ public function set date(value:Date):void
+ {
+ _date = value;
+ dispatchEvent(new Event("dateChanged"));
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/renderers/AlertRenderer.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/renderers/AlertRenderer.as b/examples/flexjs/MobileTrader/src/main/flex/renderers/AlertRenderer.as
new file mode 100644
index 0000000..e683020
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/renderers/AlertRenderer.as
@@ -0,0 +1,44 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package renderers
+{
+ import org.apache.flex.html.supportClasses.StringItemRenderer;
+
+ public class AlertRenderer extends StringItemRenderer
+ {
+ public function AlertRenderer()
+ {
+ super();
+ }
+
+ override public function set data(value:Object):void
+ {
+ super.data = value;
+
+ if (labelField == "greaterThan") {
+ if (Boolean(value[labelField])) {
+ text = "when over "+value["value"];
+ }
+ else {
+ text = "when under "+value["value"];
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/renderers/StockRenderer.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/renderers/StockRenderer.as b/examples/flexjs/MobileTrader/src/main/flex/renderers/StockRenderer.as
new file mode 100755
index 0000000..afba26f
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/renderers/StockRenderer.as
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package renderers
+{
+ import org.apache.flex.html.supportClasses.StringItemRenderer;
+
+ public class StockRenderer extends StringItemRenderer
+ {
+ public function StockRenderer()
+ {
+ super();
+ }
+
+ override public function set data(value:Object):void
+ {
+ super.data = value;
+
+ var n1:Number = Number(value[labelField]);
+ if (!isNaN(n1)) {
+ n1 = Math.round(n1*100)/100.0;
+
+ // something to keep in mind when using FlexJS for cross-platform
+ // use: make sure that public properties are used versus protected
+ // functions or properties. in most cases, internal vars and functions
+ // will be platform-specific whereas public properties and function
+ // should be cross-platform.
+ text = String(n1);
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/views/AlertsView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/views/AlertsView.mxml b/examples/flexjs/MobileTrader/src/main/flex/views/AlertsView.mxml
new file mode 100755
index 0000000..f06dd65
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/views/AlertsView.mxml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+ title="Alerts"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:local="*"
+ className="AlertsView" xmlns:renderers="renderers.*">
+
+ <fx:Metadata>
+ [Event("next")]
+ </fx:Metadata>
+
+ <fx:Script>
+ <![CDATA[
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.core.IBeadController;
+ import org.apache.flex.events.Event;
+ import controller.AlertsViewController;
+
+ public function set dataModel(value:IBeadModel):void
+ {
+ var cm:IBeadController = controller;
+ (cm as AlertsViewController).model = value;
+ }
+ public function get dataModel():IBeadModel
+ {
+ var cm:IBeadController = controller;
+ return (cm as AlertsViewController).model;
+ }
+
+ private function onAlertSet():void
+ {
+ dispatchEvent(new org.apache.flex.events.Event("alertSet"));
+ }
+ ]]>
+ </fx:Script>
+
+ <js:Container x="4" y="10" >
+ <js:beads>
+ <js:HorizontalLayout />
+ </js:beads>
+ <js:Label text="Symbol:" />
+ <js:TextInput id="symbolField" width="50" />
+ <js:Label text="Value:" />
+ <js:TextInput id="valueField" width="50" />
+ <js:CheckBox text="Higher?" id="higherCheck" />
+ <js:TextButton text="Set" click="onAlertSet()" />
+ </js:Container>
+
+ <js:DataGrid id="dataGrid" x="0" y="40" width="100%" height="200">
+ <js:beads>
+ <js:DataProviderChangeNotifier sourceID="dataModel" propertyName="alerts" />
+ <js:SimpleBinding
+ eventName="alertsUpdate"
+ sourceID="dataModel"
+ sourcePropertyName="alerts"
+ destinationPropertyName="dataProvider" />
+ </js:beads>
+ <js:columns>
+ <js:DataGridColumn label="Symbol" dataField="symbol">
+ <js:itemRenderer>
+ <fx:Component>
+ <js:StringItemRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ <js:DataGridColumn label="Alert" dataField="greaterThan">
+ <js:itemRenderer>
+ <fx:Component>
+ <renderers:AlertRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ <js:DataGridColumn label="Message" dataField="message">
+ <js:itemRenderer>
+ <fx:Component>
+ <js:StringItemRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ </js:columns>
+ </js:DataGrid>
+
+</js:TitleView>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/views/AssetsView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/views/AssetsView.mxml b/examples/flexjs/MobileTrader/src/main/flex/views/AssetsView.mxml
new file mode 100755
index 0000000..2929a3e
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/views/AssetsView.mxml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+ title="Assets"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:models="models.*"
+ xmlns:local="*"
+ className="AssetsView">
+ <fx:Script>
+ <![CDATA[
+
+ ]]>
+ </fx:Script>
+
+ <fx:Metadata>
+ [Event("next")]
+ </fx:Metadata>
+
+ <js:beads>
+ <js:VerticalLayout />
+ </js:beads>
+
+ <js:model>
+ <models:AssetsModel />
+ </js:model>
+
+ <js:Label text="Summary" height="10%" />
+
+ <js:DataGrid height="150" width="100%">
+ <js:style>
+ <js:SimpleCSSStyles top="0" left="0" right="0" />
+ </js:style>
+ <js:beads>
+ <js:ConstantBinding
+ sourceID="model"
+ sourcePropertyName="assetsData"
+ destinationPropertyName="dataProvider" />
+ </js:beads>
+ <js:columns>
+ <js:DataGridColumn label="Type" dataField="label" />
+ <js:DataGridColumn label="Value" dataField="value" />
+ <js:DataGridColumn label="Change" dataField="netChange" />
+ </js:columns>
+ </js:DataGrid>
+
+ <js:Label text="Performance History" height="10%" />
+
+ <js:BarChart id="barChart" width="100%" height="40%">
+ <js:beads>
+ <js:ConstantBinding
+ sourceID="model"
+ sourcePropertyName="assetsDataAsArray"
+ destinationPropertyName="dataProvider" />
+ <js:VerticalCategoryAxisBead categoryField="label" />
+ <js:HorizontalLinearAxisBead valueField="netChange" />
+ </js:beads>
+ <js:series>
+ <js:BarSeries xField="netChange">
+ <js:itemRenderer>
+ <fx:Component>
+ <js:BoxItemRenderer>
+ <js:fill>
+ <js:SolidColor color="#FF964D" alpha="1.0" />
+ </js:fill>
+ </js:BoxItemRenderer>
+ </fx:Component>
+ </js:itemRenderer>
+ </js:BarSeries>
+ </js:series>
+ </js:BarChart>
+
+</js:TitleView>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/views/SearchView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/views/SearchView.mxml b/examples/flexjs/MobileTrader/src/main/flex/views/SearchView.mxml
new file mode 100755
index 0000000..0348fba
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/views/SearchView.mxml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:apache="org.apache.flex.html.beads.*"
+ xmlns:local="*"
+ className="StockView">
+
+ <fx:Script>
+ <![CDATA[
+ import org.apache.flex.mobile.StackedViewManager;
+ private function onBackClick() : void
+ {
+ (viewManager as StackedViewManager).pop();
+ }
+ ]]>
+ </fx:Script>
+
+ <js:Label text="Search View" x="20" y="100" />
+</js:TitleView>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/views/StockView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/views/StockView.mxml b/examples/flexjs/MobileTrader/src/main/flex/views/StockView.mxml
new file mode 100755
index 0000000..95b8992
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/views/StockView.mxml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:apache="org.apache.flex.html.beads.*"
+ xmlns:local="*"
+ className="StockView">
+
+ <fx:Script>
+ <![CDATA[
+ import models.Stock;
+
+ import org.apache.flex.events.Event;
+ import org.apache.flex.mobile.StackedViewManager;
+
+ private var _stock:Stock;
+
+ [Bindable("stockChanged")]
+ public function get stock():Stock
+ {
+ return _stock;
+ }
+ public function set stock(value:Stock):void
+ {
+ _stock = value;
+ dispatchEvent(new org.apache.flex.events.Event("stockChanged"));
+ }
+
+ private function onBackClick() : void
+ {
+ (viewManager as StackedViewManager).pop();
+ }
+
+ override public function addedToParent():void
+ {
+ super.addedToParent();
+
+ stockSymbol.text = stock.symbol;
+ stockName.text = stock.name;
+ lastPrice.text = String(stock.last);
+ openPrice.text = String(stock.open);
+ lowPrice.text = String(stock.low);
+ highPrice.text = String(stock.high);
+ changeAmount.text = String(stock.change);
+ }
+
+ private function removeFromList():void
+ {
+ dispatchEvent(new org.apache.flex.events.Event("removeFromList"));
+ }
+ ]]>
+ </fx:Script>
+
+ <js:Container>
+ <js:beads>
+ <js:VerticalLayout />
+ </js:beads>
+ <js:style>
+ <js:SimpleCSSStyles top="10px" left="10px" />
+ </js:style>
+
+ <js:Label id="stockSymbol" text="{stock.symbol}" className="ViewTitle" />
+ <js:Label id="stockName" text="{stock.name}" className="StockName" />
+
+ <js:Container className="StockDetailArea">
+ <js:beads>
+ <js:VerticalColumnLayout numColumns="2" />
+ </js:beads>
+
+ <js:Label text="Last Price:" className="StockLabel" /> <js:Label id="lastPrice" className="StockValue" />
+ <js:Label text="Open Price:" className="StockLabel" /> <js:Label id="openPrice" className="StockValue" />
+ <js:Label text="Low Price:" className="StockLabel" /> <js:Label id="lowPrice" className="StockValue" />
+ <js:Label text="High Price:" className="StockLabel" /> <js:Label id="highPrice" className="StockValue" />
+ <js:Label text="Change: " className="StockLabel" /> <js:Label id="changeAmount" className="StockValue" />
+ </js:Container>
+
+ <js:Container className="StockDetailArea">
+ <js:TextButton text="Remove From List" width="200" className="StockRemoveButton" click="removeFromList()" />
+ </js:Container>
+ </js:Container>
+</js:TitleView>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/flex/views/WatchListView.mxml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/flex/views/WatchListView.mxml b/examples/flexjs/MobileTrader/src/main/flex/views/WatchListView.mxml
new file mode 100755
index 0000000..aa9da04
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/flex/views/WatchListView.mxml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<js:TitleView xmlns:fx="http://ns.adobe.com/mxml/2009"
+ title="Watch List"
+ xmlns:js="library://ns.apache.org/flexjs/basic"
+ xmlns:controller="controller.*"
+ xmlns:local="*"
+ className="WatchListView"
+ xmlns:renderers="renderers.*">
+
+ <fx:Script>
+ <![CDATA[
+ import controller.WatchListController;
+
+ import models.ProductsModel;
+ import models.Stock;
+
+ import org.apache.flex.binding.SimpleBinding;
+ import org.apache.flex.core.IBeadController;
+ import org.apache.flex.core.IBeadModel;
+ import org.apache.flex.events.Event;
+ import org.apache.flex.mobile.IViewManager;
+ import org.apache.flex.mobile.StackedViewManager;
+
+ public function set dataModel(value:IBeadModel):void
+ {
+ var cm:IBeadController = controller;
+ (cm as WatchListController).model = value;
+ }
+ public function get dataModel():IBeadModel
+ {
+ var cm:IBeadController = controller;
+ return (cm as WatchListController).model;
+ }
+
+ private function onSelectStock():void
+ {
+ var stockView:StockView = new StockView();
+ var svm:IViewManager = viewManager;
+ (viewManager as StackedViewManager).push(stockView);
+ }
+
+ private function addSymbol():void
+ {
+ dispatchEvent(new org.apache.flex.events.Event("addSymbol"));
+ }
+
+ public var selectedStockIndex:Number;
+
+ private function selectRow():void
+ {
+ selectedStockIndex = dataGrid.selectedIndex;
+ dispatchEvent(new org.apache.flex.events.Event("stockSelected"));
+ }
+
+ public function showStockDetails(stock:Stock):StockView
+ {
+ var stockView:StockView = new StockView();
+ stockView.stock = stock;
+ (viewManager as StackedViewManager).push(stockView);
+
+ var cm:IBeadController = controller;
+
+ return stockView;
+ }
+
+ public function popView():void
+ {
+ (viewManager as StackedViewManager).pop();
+ }
+ ]]>
+ </fx:Script>
+
+ <js:beads>
+ <js:VerticalLayout />
+ </js:beads>
+
+ <js:HContainer className="WatchListInputArea" width="100%" height="10%">
+ <js:Label text="Symbol:" />
+ <js:TextInput id="symbolName" />
+ <js:TextButton text="Add" click="addSymbol()" />
+ </js:HContainer>
+
+ <js:Spacer height="10" />
+
+ <js:DataGrid id="dataGrid" width="100%" height="85%" change="selectRow()" className="WatchListDataGrid">
+ <js:beads>
+ <js:DataProviderChangeNotifier sourceID="dataModel" propertyName="watchList" />
+ <js:SimpleBinding
+ eventName="update"
+ sourceID="dataModel"
+ sourcePropertyName="watchList"
+ destinationPropertyName="dataProvider" />
+ </js:beads>
+ <js:columns>
+ <js:DataGridColumn label="Symbol" dataField="symbol">
+ <js:itemRenderer>
+ <fx:Component>
+ <js:StringItemRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ <js:DataGridColumn label="Open" dataField="open">
+ <js:itemRenderer>
+ <fx:Component>
+ <renderers:StockRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ <js:DataGridColumn label="Last" dataField="last" >
+ <js:itemRenderer>
+ <fx:Component>
+ <renderers:StockRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ <js:DataGridColumn label="High" dataField="high" >
+ <js:itemRenderer>
+ <fx:Component>
+ <renderers:StockRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ <js:DataGridColumn label="Low" dataField="low" >
+ <js:itemRenderer>
+ <fx:Component>
+ <renderers:StockRenderer />
+ </fx:Component>
+ </js:itemRenderer>
+ </js:DataGridColumn>
+ </js:columns>
+ </js:DataGrid>
+
+</js:TitleView>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/main/resources/config.xml
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/main/resources/config.xml b/examples/flexjs/MobileTrader/src/main/resources/config.xml
new file mode 100644
index 0000000..00b9f64
--- /dev/null
+++ b/examples/flexjs/MobileTrader/src/main/resources/config.xml
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<widget id="${groupId}.${artifactId}" version="${version}" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+ <name>${artifactId}</name>
+ <description>
+ ${description}
+ </description>
+ <author email="dev@flex.apache.org" href="http://flex.apache.org">
+ Apache Flex Team
+ </author>
+ <content src="index.html" />
+ <plugin name="cordova-plugin-whitelist" version="1" />
+ <access origin="*" />
+ <allow-intent href="http://*/*" />
+ <allow-intent href="https://*/*" />
+ <allow-intent href="tel:*" />
+ <allow-intent href="sms:*" />
+ <allow-intent href="mailto:*" />
+ <allow-intent href="geo:*" />
+ <platform name="android">
+ <allow-intent href="market:*" />
+ </platform>
+ <platform name="ios">
+ <allow-intent href="itms:*" />
+ <allow-intent href="itms-apps:*" />
+ </platform>
+</widget>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/models/Alert.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/models/Alert.as b/examples/flexjs/MobileTrader/src/models/Alert.as
deleted file mode 100644
index 7b9dc8b..0000000
--- a/examples/flexjs/MobileTrader/src/models/Alert.as
+++ /dev/null
@@ -1,94 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package models
-{
- import org.apache.flex.events.Event;
- import org.apache.flex.events.EventDispatcher;
-
- public class Alert extends EventDispatcher
- {
- public function Alert()
- {
- super();
- message = "";
- }
-
- private var _symbol:String;
- private var _value:Number;
- private var _greaterThan:Boolean;
- private var _message:String;
- private var _stock:Stock;
-
- [Binding("symbolChanged")]
- public function get symbol():String
- {
- return _symbol;
- }
- public function set symbol(value:String):void
- {
- _symbol = value;
- dispatchEvent(new Event("symbolChanged"));
- }
-
- [Binding("messageChanged")]
- public function get message():String
- {
- return _message;
- }
- public function set message(value:String):void
- {
- _message = value;
- dispatchEvent(new Event("messageChanged"));
- }
-
- [Binding("valueChanged")]
- public function get value():Number
- {
- return _value;
- }
- public function set value(newValue:Number):void
- {
- _value = newValue;
- dispatchEvent(new Event("valueChanged"));
- }
-
- [Binding("greaterThanChanged")]
- public function get greaterThan():Boolean
- {
- return _greaterThan;
- }
- public function set greaterThan(value:Boolean):void
- {
- _greaterThan = value;
- dispatchEvent(new Event("greaterThanChanged"));
- }
-
- [Binding("stockChanged")]
- public function get stock():Stock
- {
- return _stock;
- }
- public function set stock(value:Stock):void
- {
- _stock = value;
- dispatchEvent(new Event("stockChanged"));
- }
-
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e75059f7/examples/flexjs/MobileTrader/src/models/Asset.as
----------------------------------------------------------------------
diff --git a/examples/flexjs/MobileTrader/src/models/Asset.as b/examples/flexjs/MobileTrader/src/models/Asset.as
deleted file mode 100644
index 869ba72..0000000
--- a/examples/flexjs/MobileTrader/src/models/Asset.as
+++ /dev/null
@@ -1,77 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package models
-{
- import org.apache.flex.events.Event;
- import org.apache.flex.events.EventDispatcher;
-
- public class Asset extends EventDispatcher
- {
- private var _label:String;
- private var _value:Number;
- private var _netChange:Number;
-
- public function Asset(newLabel:String, newValue:Number, newNetChange:Number)
- {
- _label = newLabel;
- _value = newValue;
- _netChange = newNetChange;
- }
-
- [Bindable("labelChanged")]
- public function get label():String
- {
- return _label;
- }
- public function set label(value:String):void
- {
- if (value != _label) {
- _label = value;
- dispatchEvent(new Event("labelChanged"));
- }
- }
-
- [Bindable("valueChanged")]
- public function get value():Number
- {
- return _value;
- }
- public function set value(newValue:Number):void
- {
- if (_value != newValue) {
- _value = newValue;
- dispatchEvent(new Event("valueChanged"));
- }
- }
-
- [Bindable("netChangeChanged")]
- public function get netChange():Number
- {
- return _netChange;
- }
- public function set netChange(value:Number):void
- {
- if (_netChange != value) {
- _netChange = value;
- dispatchEvent(new Event("netChangeChanged"));
- }
- }
- }
-
-}