<?xml version="1.0" encoding="utf-8"?> <s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:parsley="http://www.spicefactory.org/parsley" title="Market Movers" width="790" height="500" xmlns:analytics="au.com.tabcorp.neo.analytics.*" xmlns:components="au.com.tabcorp.neo.common.components.*" windowMoving="onWindowMovingHandler(event)" currentState="{marketMoversPM.dataLoaded?'normal':'loading'}"> <fx:Script> <![CDATA[ import embeddedAssets.EmbeddedResourceModel; import mx.events.FlexEvent; import spark.events.TitleWindowBoundsEvent; [Bindable] public var marketMoversPM:MarketMoversPopupPM; /** * windowMovig event handler */ protected function onWindowMovingHandler(event:TitleWindowBoundsEvent):void { // code to restrict at left and right if (event.afterBounds.left < marketMoversPM.PANEL_MOVE_RESTRICTION_LEFT) { event.afterBounds.left = marketMoversPM.PANEL_MOVE_RESTRICTION_LEFT - 50; } else if (event.afterBounds.right > systemManager.stage.stageWidth + marketMoversPM.PANEL_MOVE_RESTRICTION_RIGHT) { event.afterBounds.left = systemManager.stage.stageWidth - 75; } // code to restrict at Top and Bottom if (event.afterBounds.top < 0) { event.afterBounds.top = 0; } else if (event.afterBounds.bottom > systemManager.stage.stageHeight + marketMoversPM.PANEL_MOVE_RESTRICTION_BOTTOM) { event.afterBounds.top = this.height + 75; } } ]]> </fx:Script> <fx:Declarations> <parsley:FastInject property="marketMoversPM" type="{MarketMoversPopupPM}" injectionComplete="marketMoversPM.onInjectionComplete()" /> <analytics:LocationProvider location="{marketMoversPM.marketMoversTabLocation}" > <analytics:EventListenerActivationWatcher /> </analytics:LocationProvider> </fx:Declarations> <s:states> <s:State name="normal"/> <s:State name="loading"/> </s:states> <s:Scroller id="scorllbar" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="auto"> <s:VGroup gap="0" width="100%" height="100%" paddingLeft="{scorllbar.visible?5:0}" visible="true" visible.loading="false" includeInLayout.normal="true" includeInLayout.loading="false"> <!-- Date, Help and Print buttons--> <s:HGroup width="760" height="47" verticalAlign="middle"> <components:DateLabel id="dateLabel" date="{marketMoversPM.serverTimeModel.currentTimeDate}" dateTimePattern="EEE dd MMM yyyy" timeZoneOffset="{marketMoversPM.serverTimeModel.globalTimeZoneOffset}" styleName="header1"/> <mx:Spacer width="100%"/> <s:Button label="Print" buttonMode="true" useHandCursor="true" click="marketMoversPM.printClickHandler(this)" styleName="printButton"/> <s:Button click="marketMoversPM.helpClickHandler()" buttonMode="true" useHandCursor="true" skinClass="au.com.tabcorp.neo.common.presentation.skins.InfoButtonSkin" height="18" width="18"/> </s:HGroup> <s:Line width="760"> <s:stroke> <s:SolidColorStroke color="#DDDDDD" weight="2"/> </s:stroke> </s:Line> <s:HGroup width="100%" height="70" verticalAlign="middle" horizontalAlign="center"> <s:ButtonBar id="buttonBarMarketMovers" dataProvider="{marketMoversPM.ac}" selectedItem="{marketMoversPM.selectedRaceOption}" selectedIndex="@{marketMoversPM.selectedIndexButtonBar}" change="marketMoversPM.onChangeMarketMoversButtonBar(event)" enabled="{marketMoversPM.enableButtonBar}"/> </s:HGroup> <!-- DataGrid DataGroup --> <s:DataGroup dataProvider="{marketMoversPM.model.marketMovers}" height="100%"> <s:layout> <s:VerticalLayout /> </s:layout> <s:itemRenderer> <fx:Component> <presentation:MarketMoversIRv2 marketMoversPM="{outerDocument.marketMoversPM}" /> </fx:Component> </s:itemRenderer> </s:DataGroup> </s:VGroup> </s:Scroller> <s:HGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle" visible="false" visible.loading="true" includeInLayout="false" includeInLayout.loading="true"> <mx:SWFLoader source="{EmbeddedResourceModel.loadingIcon}" /> </s:HGroup> </s:TitleWindow>
package au.com.tabcorp.neo.racing.marketmovers.presentation { import flash.display.DisplayObject; import flash.events.Event; import flash.net.URLRequest; import flash.net.navigateToURL; import mx.collections.ArrayCollection; import mx.collections.ListCollectionView; import mx.core.FlexGlobals; import mx.core.IFlexDisplayObject; import mx.core.UIComponent; import mx.managers.PopUpManager; import org.spicefactory.lib.reflect.types.Void; import spark.collections.Sort; import spark.collections.SortField; import spark.events.IndexChangeEvent; import spark.events.TitleWindowBoundsEvent; public class MarketMoversPopupPM extends Broadcaster { [Inject] [Bindable] public var serverTimeModel:ServerTimeModel; [Inject] [Bindable] public var model:MarketMoversModel; /** * DG column widths so we can match footer to DG */ public const SMALL_COLUMN_WIDTH:int = 30; public const MEDIUM_COLUMN_WIDTH:int = 70; public const MEDIUM_COLUMN_WIDTH_2:int = 85; public const MEDIUM_COLUMN_WIDTH_3:int = 100; public const LARGE_COLUMN_WIDTH:int = 160; public const LARGE_COLUMN_WIDTH_2:int = 170; public const PANEL_WIDTH:int = 760; public const PANEL_MOVE_RESTRICTION_LEFT:int = -660; public const PANEL_MOVE_RESTRICTION_RIGHT:int = 660; public const PANEL_MOVE_RESTRICTION_BOTTOM:int = 450; [Bidnable] public var marketMoversListView:ListCollectionView; [Bindable] public var selectedRaceOption:Object; [Bindable] public var ac:ArrayCollection; [Bindable] public var arrRaceNos:ArrayCollection; [Bindable] public var marketMoversTabLocation : String = MARKET_MOVERS_LOCATION; [Bindable] public var dataLoaded:Boolean; private static const MARKET_MOVERS_LOCATION:String = "informational:market movers"; private static const NEXT_3_RACES_TO_GO:String = "informational:next 3 races to go"; private static const INDEX_VIEW_CURRENT_RACE : int = 0; private static const INDEX_VIEW_NEXT_THREE_RACE : int = 1; /** * variable to store the currentRace Details at PM level only - not into to model */ private var _currentRacingCode : String; private var _currentMeetingName : String; private var _currentMeetingDateRaw : Date; private var _currentRaceNumber : int; private var _enableButtonBar : Boolean; private var _todayDate:Date; private var _numberSortField:SortField; private var _numberSort:Sort; private var _runnerNameSortField : SortField; private var _runnerNameSort : Sort; private var _oddsSortField : SortField; private var _oddsSort : Sort; private var _percentChangeSortField : SortField; private var _percentChangeSort : Sort; private var _selectedIndexButtonBar : int; private var callFromExternal : Boolean = true; public function MarketMoversPopupPM() { ac = new ArrayCollection([ {value: MarketMoversModel.MARKET_MOVERS_CURRENT_VIEW, label: "CURRENT RACE"}, {value: MarketMoversModel.MARKET_MOVERS_NEXT_3_RACES, label: "NEXT 3 RACES"} ]); // sort fields _numberSortField = new SortField(); _numberSortField.name = 'runnerNumber'; _numberSortField.numeric = true; _numberSort = new Sort(); _numberSort.fields = [_numberSortField]; _runnerNameSortField = new SortField(); _runnerNameSortField.name = 'runnerName'; _runnerNameSort = new Sort(); _runnerNameSort.fields = [_runnerNameSortField]; _oddsSortField = new SortField(); _oddsSortField.name = RacingConstants.SORT_LABEL_OPENING_ODDS; _oddsSort = new Sort(); _oddsSort.fields = [_oddsSortField]; _percentChangeSortField = new SortField(); _percentChangeSortField.name = RacingConstants.SORT_LABEL_PERCENT_CHANGE; _percentChangeSort = new Sort(); _percentChangeSort.fields = [_percentChangeSortField]; } [Init] public function onInjectionComplete() : void { todayDate = serverTimeModel.currentTimeDate; marketMoversListView = new ListCollectionView(model.marketMovers); dataLoaded = true; } [Init] public function init():void { var source:Array = new Array(1, 2, 3); arrRaceNos = new ArrayCollection(source); if(serverTimeModel.currentTimeDate) onInjectionComplete(); } public function onWeatherIcon_clickHandler(meetingMNC3:String, meetingName:String):void { broadcast(new GetWeatherInfoMessage(meetingMNC3, meetingName)); } public function onTrackClickHandler(source:MarketMoversVO):void { var trackRequest:TrackRequest = new TrackRequest(); trackRequest.meetingCode = source.meetingCode; trackRequest.meetingName = source.meetingName; trackRequest.raceNumber = source.raceNumber; trackRequest.racingCode = source.racingCode; trackRequest.meetingDateRaw = source.raceStartTime;//race.meeting.meetingDate; broadcast(new GetTrackEvent(trackRequest)); } /////////////////////////////////////////////////////////////////////// // handlers // /////////////////////////////////////////////////////////////////////// public function onChangeMarketMoversButtonBar(event:IndexChangeEvent):void { selectedRaceOption = event.currentTarget.selectedItem; //model.changeRaceListView(selectedRaceOption.value); getMarketMoversData(selectedIndexButtonBar); // TODO : show loader - while getting new data //analytics: track the market movers/next 3 races to go location if(selectedRaceOption.value == MarketMoversModel.MARKET_MOVERS_NEXT_3_RACES) marketMoversTabLocation = NEXT_3_RACES_TO_GO; else marketMoversTabLocation = MARKET_MOVERS_LOCATION; dispatchEvent(new LocationChangeEvent()); } // ---------------------------------------------------------- // PUBLIC METHODS // ---------------------------------------------------------- private function getMarketMoversData(selectedIndex:int) : void { callFromExternal = false; if(selectedIndex == INDEX_VIEW_CURRENT_RACE) { dataLoaded = false; // call to a specific race MarketMovers ( current race ) var request:MarketMoversRequest = new MarketMoversRequest(); request.racingCode = this._currentRacingCode; request.raceNumber = this._currentRaceNumber; request.meetingName = this._currentMeetingName; request.meetingDateRaw = this._currentMeetingDateRaw; broadcast(new MarketMoversMessage(request)); } else if(selectedIndex == INDEX_VIEW_NEXT_THREE_RACE) { dataLoaded = false; // for the default market movers call - like the RacingOverview var mmRequest : MarketMoversRequest = new MarketMoversRequest(); var msg:CallMarketMoversMessage = new CallMarketMoversMessage(mmRequest); broadcast(msg); } } public function storeCurrentRaceDetails(req : MarketMoversRequest) : void { this._currentRacingCode = req.racingCode; this._currentMeetingName = req.meetingName; this._currentMeetingDateRaw = req.meetingDateRaw; this._currentRaceNumber = req.raceNumber; } public function removeCurrentRaceDetails() : void { this._currentRacingCode = null; this._currentMeetingName = null; this._currentMeetingDateRaw = new Date(); this._currentRaceNumber = 0; } public function printClickHandler(component:UIComponent):void { var printReceipt:PrintPreviewPopUp = new PrintPreviewPopUp(); PopUpManager.addPopUp(printReceipt as IFlexDisplayObject, FlexGlobals.topLevelApplication as DisplayObject, true); if(component.height>0 && component.width>0) { printReceipt.toBePrintData = component; printReceipt.x = FlexGlobals.topLevelApplication.width/2 - component.width/2; printReceipt.y = FlexGlobals.topLevelApplication.height/2 - component.height/2; PopUpManager.bringToFront(printReceipt as IFlexDisplayObject ); } } public function navigateToRacePage(marketMoversVO:MarketMoversVO) : void { var request:RaceDetailsRequestV2 = new RaceDetailsRequestV2(); request.meetingName = marketMoversVO.meetingName; request.meetingCode = marketMoversVO.meetingCode; request.meetingDateRaw = marketMoversVO.raceStartTime; request.racingCode = marketMoversVO.racingCode; request.raceNumber = String(marketMoversVO.raceNumber); broadcast(new RacingNavigatorMessage(RacingNavigatorModel.BETTING_PAGE, null, false, request)); closeMarketMovers(); } /** * to close the market movers popup */ [MessageHandler] public function messageHandlerCloseMarketMoversPopup( message : CloseMarketMoversPopupMessage) : void { // next call will be from external only callFromExternal = true; } public function closeMarketMovers() : void { callFromExternal = true; var message : CloseMarketMoversPopupMessage = new CloseMarketMoversPopupMessage( CloseMarketMoversPopupMessage.Close_Market_Movers_Popup_Message); broadcast(message); } // ---------------------------------------------------------- // SUBSCRIBE HANDLER // ---------------------------------------------------------- private var _requestedRaceNo:int; private var _marketMoversRequest:MarketMoversRequest; public function get marketMoversRequest():MarketMoversRequest { return _marketMoversRequest } public function get requestedRaceNo():int { return _requestedRaceNo; } [Subscribe] public function set marketMoversRequest(value:MarketMoversRequest):void { _marketMoversRequest = value; if (marketMoversRequest) { _requestedRaceNo = marketMoversRequest.raceNumber; broadcast(new MarketMoversMessage(marketMoversRequest)); } } public function viewToBeShown(showCurrentRace:Boolean = false) : void { if(callFromExternal) { if(showCurrentRace) { // show current race button enableButtonBar = true; callFromExternal = true; selectedIndexButtonBar = INDEX_VIEW_CURRENT_RACE; selectedRaceOption = ac.getItemAt(INDEX_VIEW_CURRENT_RACE); } else { selectedIndexButtonBar = INDEX_VIEW_NEXT_THREE_RACE; selectedRaceOption = ac.getItemAt(INDEX_VIEW_NEXT_THREE_RACE); enableButtonBar = false; } } } // Getter / Setter [Bindable(event="todayDateChanged")] public function get todayDate():Date { return _todayDate; } public function set todayDate(value:Date):void { _todayDate = value; dispatchEvent(new Event("todayDateChanged")); } [Bindable(event="selectedIndexButtonBarChange")] public function get selectedIndexButtonBar():int { return _selectedIndexButtonBar; } public function set selectedIndexButtonBar(value:int):void { _selectedIndexButtonBar = value; dispatchEvent(new Event("selectedIndexButtonBarChange")); } [Bindable(event="enableButtonBarChange")] public function get enableButtonBar():Boolean { return _enableButtonBar; } public function set enableButtonBar(value:Boolean):void { if( _enableButtonBar !== value) { _enableButtonBar = value; dispatchEvent(new Event("enableButtonBarChange")); } } } }
相关推荐
1. 当窗口尝试移动到左侧(x轴坐标为负值)时,会将其位置设置为0,防止窗口移出屏幕。 2. 当窗口右侧超出屏幕宽度时,会计算窗口应当停留在的位置,保证窗口右侧不超出屏幕边缘。如果屏幕宽度小于窗口宽度,窗口将...
"flex 窗体拖拽,可以自由拖拽,最大化,最小化等等"这一主题涉及到Flex中如何实现窗口的各种动态操作,包括但不限于窗体的移动、大小调整、最大化与最小化的功能。以下是对这些知识点的详细说明: 1. **窗体拖拽**...
实训商业源码-咻一咻抽奖V4.3.1 开源版-毕业设计.zip
有线网调试demo源码和apk.zip 有线网demo 的简单说明: 1、Android 原生没有有线网开关状态,需要自定义属性进行开关记忆;所以默认没设置switch开关控件; 2、有线网开关状态之前方案都是使用Settings.Global.ethernet 开关记录的,3588 AN15 使用的是prop属性记录; 3、静态ip设置:要和自动获取的ip在同一个网段;网关一般设置成X.X.X.1,设置错误会导致无法上网; 4、代理设置:端口号有范围:1-65535,以前好像遇到过311D2 wifi设置端口号范围超出数值会导致系统重启。 5、有些方案设置静态ip或者代理需要关开一次有线网才能生效。 6、有线网接入状态是导入了定制包的,只针对特定系统,其他系统不适用,直接使用估计会崩溃, 其他系统调试需要去除判断有线网接入部分代码,重新编译apk使用; 底层是如何实现判断有线网接入的,没有去研究分析,大概是通过io是否接入判断的。
实训商业源码-掌上题库V1.2.2全开源版本-毕业设计.zip
实训商业源码-梦昂图文10.2.14 公众号版-毕业设计.zip
985研究生,Matlab领域优质创作者 (1)如需代码 加腾讯企鹅号,见评论区或私信; (2)代码运行版本 Matlab 2019b (3)其他仿真咨询 1 完整代码包运行+运行有问题可咨询 2 期刊或论文复现; 3 程序定制; 4 期刊写作或指导; 5 科研合作;
毕业论文-二次元应用下载页源码 带弹幕-整站商业源码.zip
毕业论文-老虎-微信淘宝客V6.0.7-整站商业源码.zip
毕业论文-方熊表单V1.0.0 开源版-整站商业源码.zip
基于深度学习图像分割Unet的肿瘤区域识别辅助诊断系统的Python源码及全部数据(高分项目)。该项目经导师指导并认可,获得98分,适合计算机相关专业学生进行课程设计、期末大作业或项目实战练习。。内容来源于网络分享,如有侵权请联系我删除。
内容概要 本文介绍了一个用 Python 编写的微信自动回复程序。通过安装特定依赖,配置config.xlsx文件中的关键词和回复内容,运行auto_reply.py程序,即可实现微信自动回复功能。程序会持续监测微信新消息,满足特定条件时,依据关键词匹配回复内容进行自动回复。 适用人群 适合微信消息较多,希望节省回复时间的人群,尤其是经常被重复性消息打扰的办公族、客服人员等,也适合对 Python 编程感兴趣,想要尝试开发简单自动化工具的初学者。 使用场景及目标 在工作场景中,能自动回复常见问题,提高沟通效率;生活里,可快速回应亲友的常用问候,避免遗漏消息。目标是减少手动回复的繁琐,解放双手,让信息处理更高效。 其他说明 运行前需确保正确安装依赖,可修改config.xlsx来自定义回复规则。运行程序后,按Ctrl+C可停止。若遇到问题,可从依赖安装、文件配置等方面排查。
实训商业源码-全新开源贫穷网打赏源码-毕业设计.zip
实训商业源码-智云物业2.3.9-毕业设计.zip
CAD技术在农业机械工程设计中的运用研究.pdf
内容概要:本文介绍了Dify——一个用于开发大型语言模型(LLM)应用程序的开源平台。Dify融合了后端即服务(BaaS)和LLMOps理念,使开发者能快速构建生产级别的生成式AI应用。它支持多种LLM模型,包括GPT、Mistral、Llama3等,并兼容多种推理提供商。Dify内置了高质量的检索增强生成(RAG)引擎和灵活的Agent框架,支持聊天助手、文本生成、Agent应用和工作流等多种应用类型。通过丰富的功能组件,如数据集管理、可视化Prompt编排、应用运营工具和插件生态系统,Dify极大简化了AI应用的开发过程。文章还展示了Dify在电商智能客服、新媒体内容生成和企业办公自动化等实际场景中的应用案例,并与FastGPT进行了对比,突出了Dify在模型接入、应用构建和用户友好度等方面的优势。 适合人群:对AI应用开发感兴趣的研发人员,尤其是希望快速构建和部署AI应用的开发者和企业。 使用场景及目标:①通过Dify的强大模型支持和RAG引擎,快速构建智能客服、内容生成等AI应用;②利用Agent框架和工作流功能,实现复杂任务的自动化处理;③通过丰富的功能组件和插件生态系统,提升应用的灵活性和功能性。 其他说明:Dify不仅提供了便捷的安装和使用指南,还展望了未来的发展前景,强调其在降低AI应用开发门槛和推动AI技术创新方面的巨大潜力。
实训商业源码-深蓝AI智能名片小程序1.7.1-毕业设计.zip
【研华科技】以数智融合打造可持续管理的企业未来.pdf
“平台+生态”打造产业数字化新引擎.pdf
实训商业源码-柚子社区团购 1.3.17-毕业设计.zip