TWaver图形之道(七)TWaver开发流程

news/2024/5/19 18:00:58 标签: 图形, function, callback, flex, network, string

TWaver开发流程

TWaver是一种前台解决方案,它的地位在系统多层结构的UI层,开发的过程通常是:数据采集,数据转化,视图关联,界面交互,业务操作,然后重复这个过程。

下面用代码来说明这个过程,以TWaver Flex为例:

整体结构

首先看示例代码的整体结构,创建了一个拓扑图组件,设置好宽高布局,在程序初始化完成后,调用init()函数,注册了两个图片,然后进行网元数据的填充,对于实际应用可能是通过一次HTTPService请求,得到数据后再进行数据的添加。

TWaver Flex开发流程 - 示例代码

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:twaver="http://www.servasoftware.com/2009/twaver/flex"

pageTitle="Development Process" applicationComplete="init()">

<mx:Script>

<![CDATA[

import component.InputDialog;

import twaver.*;

import twaver.network.Network;

import twaver.network.interaction.InteractionEvent;

import twaver.network.layout.AutoLayouter;

[Embed(source="images/device.png")]

public static const deviceImage:Class;

[Embed(source="images/router.png")]

public static const routerImage:Class;

private var box:ElementBox;

private function init():void{

Utils.registerImageByClass('router', routerImage);

Utils.registerImageByClass('device', deviceImage);

...//代码片段A

}

...//代码片段B

]]>

</mx:Script>

<twaver:Network id="network" backgroundColor="0xFFFFFF" width="100%" height="100%"/>

</mx:Application>

数据填充

下面看如何添加网元数据,代码片段A中模拟了开发流程的步骤,分数据采集;数据转换;网元布局;添加交互四步骤:

首先是数据采集,这里模拟了一堆设备和关系的集合,真实系统数据通常从后台获取而来。模拟数据包含业务属性,比如名称,图标,性能参数等,需要转换成TWaver网元对象才能在拓扑图中呈现;

然后进行数据转换,将这些模拟的数据转换成TWaver的网元对象,设备转换成Node类型,关系转换成Link类型,并添加到ElementBox数据容器;

接下来我们执行了一次自动布局,将网元位置分布开,当然你也可以使用后台存储的位置信息;

最后一步添加交互,双击网元时,弹出修改网元名称的对话框,模拟的是数据修改的一个过程,真实系统中,可能需要作入库存储操作。

box = network.elementBox;

//数据采集

var devices:Array = getDevicesFromOSS();

var relationships:Array = getDevicesRelationshipFromOSS();

//数据转换

translateToTWaverNode(box, devices, relationships);

//网元布局

var layouter:AutoLayouter = new AutoLayouter(network);

layouter.animate = false;

layouter.doLayout(Consts.LAYOUT_SYMMETRY);

//添加交互

network.addInteractionListener(function(evt:InteractionEvent):void{

if(evt.kind != InteractionEvent.DOUBLE_CLICK_ELEMENT){

return;

}

var element:IElement = evt.element;

//InputDialog是定制的输入对话框组件,详见

InputDialog.show(network, "Rename", element.name, function(text:String):void{

element.name = text;

//入库操作

}, evt.mouseEvent.stageX, evt.mouseEvent.stageY);

});

TWaver Flex开发流程 - 代码片段A

上面的用到了一个自定的Flex控件InputDialog.MXML,继承于TitleWindow,是一个模式对话框,包含一个文本输入框和一个确认按钮,使用上类似Java Swing的JOptionPane.showInputDialog(...)

InputDialog.show(network, "Rename", element.name, function(text:String):void{

element.name = text;

//入库操作

}, evt.mouseEvent.stageX, evt.mouseEvent.stageY);

TWaver Flex开发流程 - InputDialog.MXML使用示例

InputDialog.MXML代码如下:

<?xml version="1.0" encoding="utf-8"?>

<mx:TitleWindow xmlns:fx="<a href="http://ns.adobe.com/mxml/2009">http://ns.adobe.com/mxml/2009</a>"

xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/mx" >

<fx:Script>

<![CDATA[

import mx.controls.Text;

import mx.managers.PopUpManager;

var callback:Function = null;

// Event handler for the OK button.

private function onOK():void {

if(this.callback){

this.callback(inputText.text);

}

PopUpManager.removePopUp(this);

}

private function init(title:String, value:String, callback:Function):void{

this.title = title;

inputText.text = value;

this.callback = callback;

}

public static function show(frame: DisplayObject, title:String, value:String, callback:Function, x:int = 0, y:int = 0):void{

var dialog:InputDialog = InputDialog(PopUpManager.createPopUp( frame, InputDialog , true));

if(x && y){

dialog.x = x;

dialog.y = y;

}else{

PopUpManager.centerPopUp(dialog);

}

dialog.init(title, value, callback);

}

]]>

</fx:Script>

<mx:HBox>

<mx:TextInput id="inputText" width="100%"/>

</mx:HBox>

<mx:HBox horizontalAlign="right" defaultButton="{okButton}">

<mx:Button label="OK" id="okButton" click="onOK();" />

<mx:Button label="Cancel" click="PopUpManager.removePopUp(this);"/>

</mx:HBox>

</mx:TitleWindow>

TWaver Flex开发流程 - InputDialog.mxml

下面是示例代码片段B的内容,包含模拟数据和转换成TWaver网元类型的代码处理:

private function getDevicesFromOSS():Array{

return [{name:'R1', type: 'router'}, {name:'R2', type: 'router'}, {name:'S1', type: 'device'}, {name:'S2', type: 'device'}] ;

}

private function getDevicesRelationshipFromOSS():Array{

return [{name:'1l', from:'R1', to:'R2'}, {name:'2l', from:'R1', to:'S2'}];

}

private function translateToTWaverNode(box:ElementBox, devices:Array, relationships:Array):void{

devices.forEach(function(device:*, index:int, arr:*):void{

var node:Node = new Node(device.name);

node.name = device.name;

node.image = device.type;

box.add(node);

});

relationships.forEach(function(relationship:*, index:int, arr:*):void{

var link:Link = new Link(box.getElementByID(relationship.from) as Node, box.getElementByID(relationship.to) as Node);

link.name = relationship.name;

box.add(link);

});

}
TWaver Flex开发流程 - 代码片段B运行的效果:


http://www.niftyadmin.cn/n/1765844.html

相关文章

2015-J. PUMA

描述 &#xff08;题名来源&#xff1a;2009年校队出战合肥现场赛曾用队名&#xff09; PUMA是全球著名的运动品牌&#xff0c;PUMA的鞋与服饰在嘻哈涂鸦文化中受到全球各地年轻人的极度欢迎&#xff0c;同时PUMA与adidas更是1970与1980年代嘻哈文化的代表。PUMA公司是德国一家…

用Swing定制流动的Link样式

想想Java2D中给我们提供的线的样式着实很少&#xff0c;除了直线&#xff0c;虚线&#xff0c;好像就没有其他的什么样式了&#xff0c;如果细心的童鞋还会发现&#xff0c;TWaver中倒是提供了一种比较特殊的连线&#xff0c;波浪曲折式的连线。 这种波浪曲折的连线如果让我们自…

我的modelsim常用DO文件设置

在modelsim中使用do文件是非常方便的进行仿真的一种方法&#xff0c;原来接触到的一些项目不是很大&#xff0c;用modelsim仿真只需要仿真单独的一些模块&#xff0c;最近接触的项目比较大&#xff0c;是几个人分开做的&#xff0c;所以前后模块的联合仿真比较重要&#xff0c;…

UI定制总结

TWaver本身提供的丰富的设置选项,可以帮助我们快速实现各种绚丽的效果&#xff0c;但是在某些情况下,我们需要在网元上绘制一些图形来表示某种状态或业务信息&#xff0c;没问题&#xff0c;只需要一点点2D知识可以很容易实现这样的需求。 假设一种需求(仅仅是假设)&#xff1…

让Swing表格支持远程后台数据翻页

TWaver Java不但提供了TTable、TElementTable这些表格组件&#xff0c;而且还提供了表格翻页器TPageNavigator。让表格和翻页器结合工作&#xff0c;可以立刻做出一个非常标准的可翻页的表格界面&#xff0c;如下图。 要让这两个组件一起工作&#xff0c;直接这样new一个实例&a…

详解JMeter正则表达式

详解JMeter正则表达式&#xff08;1&#xff09; 1&#xff0e;概览 JMeter中包含范本匹配软件Apache Jakarta ORO 。在Jakarta网站上有一些关于它的文档&#xff0c;例如a summary of the pattern matching characters &#xff1a; http://jakarta.apache.org/oro/api/org/ap…

GeoServer快速发布地图数据

TWaver GIS提供了WMS的客户端支持&#xff0c;可以访问地图服务器的相关服务。在平时的中小项目中&#xff0c;购买一套GIS服务实在是一个很大的成本负担&#xff0c;在不降低地图发布能力的前提下&#xff0c;减少成本支出成为各个项目的一个重要方面。在用户手中已经持有地图…

python 负数转为无符号整数

>>> a -1 >>> a &0xffffffff >>> a 4294967295L 转载于:https://www.cnblogs.com/jeesezhang/p/3443240.html