flex 开发卡片主类一
2008-11-11 10:09
162 查看
package code
{
/**
* 产品开发基本类
*/
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.net.URLRequest;
import module.TextEditview;
import module.photEditview;
import mx.containers.Canvas;
import mx.controls.Image;
import mx.controls.TextArea;
import mx.core.Container;
import mx.managers.PopUpManager;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.mxml.HTTPService;
public class ProductHandlerBasic extends Container
{
/*当前所编辑产品*/
private var _currentStage:Container ;
private var _productID:Number ;
/*所保存作品的ID,如果此产品没保存过这为-1*/
private var _recordID:Number=-1 ; ;
/*用户选择的模板图片,在进入操作页面之前,用户需要选择模板*/
private var _defaulModuleUrl:String ;
/*保存产品所以页面的内容,例如模板,照片,文字。以xml到形式存放*/
private var _productDataContent:XML ;
/*产品信息数据,每个型号所对应的价格,名称等等*/
private var _productInfo:XML ;
public var _testTextArea:TextArea ;
/*当前主题的所有数据坐标数据*/
private var _photoCoordinateData:XML ;
private var _httpservice:HTTPService ;
/*照片在模板上的位置(顺序)*/
private var _currentphotoNum:Number =0 ; ;
/*每一张的顺序,如:上一张,下一张*/
private var _currentpageNum:Number =0 ;
/*当前页面内容数据,由版式,照片文件组成*/
private var _currentpageData:XML ;
/*当前页面的坐标数据*/
private var _currentcoordinateData:XMLList ;
/*显示模板,照片及一些操作*/
private var _userstage:Canvas ;
/*当前的模板图片*/
private var _backgroundImage:Image= new Image() ;
/*产品innerNumber*/
private var _productInnerNum:Number = 0 ;
public function ProductHandlerBasic()
{
_httpservice = new HTTPService();
_httpservice.showBusyCursor = true ;
_httpservice.method = "post" ;
_httpservice.url = "/HttpServiceSlt";
_httpservice.resultFormat="xml";
_httpservice.addEventListener(ResultEvent.RESULT,createEditProudctContent);
/*加入事件监听,照片切换及照片编辑时,要用到此*/
_backgroundImage.addEventListener(MouseEvent.CLICK,photoClickHandler);
_backgroundImage.addEventListener(MouseEvent.DOUBLE_CLICK,photoDoubleClickHandler);
_backgroundImage.doubleClickEnabled = true ;
}
/**
* 作品封面图片地址
*/
public function get previewURL():String{
return _productInfo.product.(@id==_productID).previewURL ;
}
/**
* 产品单价
*/
public function get price():Number{
return _productInfo.product.(@id==_productID).price ;
}
/**
* 价格单位
*/
public function get unit():String{
return _productInfo.product.(@id==_productID).unit ;
}
/**
* 得到型号的总页数
*/
public function get pages():Number{
return _productInfo.product.(@id==_productID)..label.length();
}
/**
* 增加邮票或信封的价格
*/
public function get stepPrice():Number{
return _productInfo.product.(@id==_productID)..stepprice;
}
/**
* 复合价格。例如加上信封和邮票的价格。
* 计算方法:基价+步价*innernumber
*/
public function get duplexPrice():Number{
return Math.round((this.productInnerNum*stepPrice+price)*100)/100 ;
}
/**
* 获取型号下的主题信息.包括名称,数量等等.
*/
public function get mbClass():XMLList{
return _productInfo.product.(@id==_productID)..subject;
}
/**
* 型号。如:明星片,长贺卡
*
*/
public function get typename():String{
return _productInfo.product.(@id==_productID).file ;
}
public function get productInnerNum():Number{
return _productDataContent.innernumber;
}
public function set productInnerNum(p:Number):void{
_productDataContent.innernumber = p;
}
/**
* 产品所属类别
*/
public function get classid():String{
return _productInfo.classid.@id ;
}
public function set currentStage(c:Container):void{
this._currentStage = c ;
}
public function get currentStage():Container{
return this._currentStage ;
}
public function set productID(p:Number):void{
this._productID = p ;
}
public function get productID():Number{
return this._productID ;
}
public function set recordID(r:Number):void{
this._recordID= r ;
}
public function get recordID():Number{
return this._recordID ;
}
public function set defaulModuleUrl(url:String):void{
this._defaulModuleUrl = url ;
}
public function get defaulModuleUrl():String{
return this._defaulModuleUrl ;
}
public function set productInfo(info:XML):void{
this._productInfo = info ;
}
public function get productInfo():XML{
return this._productInfo ;
}
public function set httpservice(h:HTTPService):void{
this._httpservice = h ;
}
public function get httpservice():HTTPService{
return this._httpservice ;
}
public function set photoCoordinateData(p:XML):void{
this._photoCoordinateData = p ;
}
public function get photoCoordinateData():XML{
return this._photoCoordinateData ;
}
public function set userstage(s:Canvas):void{
this._userstage = s ;
}
public function get userstage():Canvas{
return this._userstage ;
}
public function set currentpageNum(c:Number):void{
this._currentpageNum = c ;
}
public function get currentpageNum():Number{
return this._currentpageNum ;
}
public function set currentphotoNum(p:Number):void{
this.currentphotoNum = p ;
}
public function get currentphotoNum():Number{
return this._currentphotoNum ;
}
public function set productDataContent(p:XML):void{
this.productDataContent = p ;
}
public function get productDataContent():XML{
return this._productDataContent ;
}
/**
* 模板单击处理,检测鼠标的位置计算出,具体单击的照片
*/
private function photoClickHandler(e:MouseEvent):void{
var img :Image = null ;
for(var i:int=0;i<this._currentcoordinateData.pic.length();i++){
img = this._userstage.getChildAt(i) as Image ;
revertPhotoAlpha();
if(img.hitTestPoint(mouseX,mouseY)){
this._currentphotoNum = i ;//当前照片的号码
img.alpha = 0.5 ;
break ;
}
}
}
/**
* 双击照片,弹出照片编辑窗口
*/
private function photoDoubleClickHandler(e:MouseEvent):void{
var img_ :Image = null ;
for(var i:int=0;i<this._currentcoordinateData.pic.length();i++){
img_ = this._userstage.getChildAt(i) as Image ;
revertPhotoAlpha();
if(img_.hitTestPoint(mouseX,mouseY)){
this._currentphotoNum = i ;
this.revertPhotoAlpha() ;
var url_:String = this._productDataContent.item[_currentpageNum]..img[i].@url ;
var x_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@x ;
var y_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@y ;
var w_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@width ;
var h_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@height ;
/*照片编辑框*/
var photoEdit_:photEditview = new photEditview();
photoEdit_.producthandlerBase = this ;
PopUpManager.addPopUp(photoEdit_,this._currentStage,true);
photoEdit_.initphotoEditParams(img_,url_,x_,y_,w_,h_);
break ;
}
}
}
/**
* 恢复照片透明度。用户单击照片,改变单击的照片的透明度 ,以此来做标识 。
* 当用户切换照片时,恢复照片透明度,再改变所选照片的透明度。
*/
private function revertPhotoAlpha():void{
var img:Image = null ;
for(var i:int=0;i<this._currentcoordinateData.pic.length();i++){
img = this._userstage.getChildAt(i) as Image ;
if(img.alpha==0.5){
img.alpha = 1 ;
break ;
}
}
}
/**
* 生成默认的产品内容,没过型号都不相同,所以动态生成。
* 如果产品已经保存过的话,内容从服务端加载过来
*/
public function createProductContent():void{
if(this._recordID==-1){
this.createNewProudctContent() ;
return ;
}
//编辑产品
var params:Object = new Object() ;
params.methodName = "getProductContent" ;
params.random= Math.random() ;
params.pid= this._recordID ;
//this._testTextArea.text = "recordid=="+this._recordID ;
this._httpservice.send(params) ;
}
/*创建默认产品数据结构*/
private function createNewProudctContent():void{
_productDataContent = <wdxc></wdxc> ;
/*得到此种型号的产品有多少页数*/
var xmllist_t:XML = new XML(this._productInfo.product.(@id==_productID));
var count:Number = xmllist_t.count ;
for(var i:int=0;i<count;i++){
/*每一张记录节点*/
var itemNode:XML = <item></item>;
var photoNode:XML =<photo></photo>;
for(var j:int=0;j<13;j++){
photoNode.appendChild(<img url="" x="-1" y="" width="" height=""/>);
}
/*豪华折叠卡没办法,这能这样*/
if(this._productID==598){
itemNode.appendChild(<bs>{_defaulModuleUrl.replace(".gif","_"+(i+1)+".gif")}</bs>);
}else{
itemNode.appendChild(<bs>{this._defaulModuleUrl}</bs>);
}
itemNode.appendChild(photoNode) ;
itemNode.appendChild(<txt><info></info></txt>);
_productDataContent.appendChild(itemNode);
}
_productDataContent.appendChild(<innernumber>0</innernumber>);
//创建是否需要邮票和信封组件
createOtherCom();
this.initCurrentPageInfoToStage(true);
}
/**如果产品已经保存,将从productRecord表中,加载数据。
* 而不是用订单表中取得信息【编辑产品时】
*/
private function createEditProudctContent(e:ResultEvent):void{
_productDataContent = new XML(e.result);
createOtherCom();
this.initCurrentPageInfoToStage(false);
}
private var _defaultText:String = "单击此处输入文字" ;
/**
* 初始化当前参数信息
* 1:加载模板图片
* 2:加载对应的图片
* @param recompute
* 左边是否重新计算
*/
public function initCurrentPageInfoToStage(recompute:Boolean):void{
this._currentphotoNum = 0 ;
/*得到当前页的数据信息.*/
_currentpageData = new XML(this._productDataContent.item[this._currentpageNum]) ;
this._userstage.removeAllChildren();
/*根据图片在模板那的坐标,生成容器,可单击图片而放入容器中*/
for(var i:int=0;i<getCurrentPhotoCount(_currentpageNum);i++){
var img1_t:Image = new Image() ;
this._userstage.addChild(img1_t);
img1_t.name="img_"+i;
img1_t.x = _currentcoordinateData.pic[i].@x ;
img1_t.y = _currentcoordinateData.pic[i].@y ;
img1_t.width = _currentcoordinateData.pic[i].@width ;
img1_t.height = _currentcoordinateData.pic[i].@height ;
img1_t.scaleContent = true ;
/*加载图片到模板相应的位置*/
this.loadphotoToStage(img1_t,i,recompute,_productDataContent.item[_currentpageNum].photo.img[i].@url);
}
_backgroundImage.source = (this._productDataContent.item[this._currentpageNum].bs).toString();
this._userstage.addChild(_backgroundImage);
/*加入用户输入的文字信息*/
for(var k:int=0;k<_currentcoordinateData.txt.length();k++){
var textInfo_:TextArea = new TextArea() ;
textInfo_.alpha = 0 ;
textInfo_.setStyle("fontSize","12");
textInfo_.name = "txt_"+k ;
textInfo_.x = _currentcoordinateData.txt[k].@x ;
textInfo_.y = _currentcoordinateData.txt[k].@y ;
textInfo_.width= _currentcoordinateData.txt[k].@width ;
textInfo_.height = _currentcoordinateData.txt[k].@height ;
textInfo_.editable = false ;
if(_productDataContent.item[_currentpageNum].txt.info[k]==""||
_productDataContent.item[_currentpageNum].txt.info[k]==null){
textInfo_.text = _defaultText ;
}else{
textInfo_.htmlText = _productDataContent.item[_currentpageNum].txt.info[k] ;
}
textInfo_.addEventListener(MouseEvent.CLICK,openTextEditview) ;
this._userstage.addChild(textInfo_);
}
}
/**
* 打开文字编辑窗口
*
*/
public function openTextEditview(e:MouseEvent):void{
var textInfo_:TextArea = TextArea(e.currentTarget);
var tev_ :TextEditview = new TextEditview() ;
PopUpManager.addPopUp(tev_,_currentStage,true,null);
tev_.targetLabelName = textInfo_.name ;
tev_.phander = this ;
var n_:Number = textInfo_.name.split("_")[1]; ;
/*打开文字编辑窗口*/
tev_.my_rte.htmlText =_productDataContent.item[_currentpageNum].txt.info[n_] ;
tev_.my_rte.width = textInfo_.width ;
tev_.my_rte.height =textInfo_.height ;
tev_.my_rte.maxWidth = textInfo_.width ;
tev_.my_rte.maxHeight = textInfo_.height ;
tev_.x = 100 ;
tev_.y = 100 ;
}
/**
* 文字编辑完毕保存用户输入的文字 。
*
*/
public function saveUserInputText(html_:String,txt_:String,labelname_:String):void{
var lab_:TextArea = this._userstage.getChildByName(labelname_) as TextArea;
if(txt_==null||txt_.length==0||txt_==""){
lab_.text= _defaultText ;
} else{
lab_.htmlText = html_ ;
var n_:Number = labelname_.split("_")[1]; ;
_productDataContent.item[_currentpageNum].txt.info[n_] = html_ ;
}
}
/**
* 当前模板最大能填充照片的张数。 自动填充照片时,需要用此 。
*/
public function getCurrentPhotoCount(num_:Number):Number{
/*得到当前的模板名称,通过此查询其坐标数据*/
var a1:Array = this._productDataContent.item[num_].bs.split("/");
var picname:String = a1[a1.length-1];
/*得到当前的坐标数据.例如:<pic x="98" y="10" width="112" height="111"/>*/
_currentcoordinateData=_photoCoordinateData.subject.mb.(@picname==picname);
return this._currentcoordinateData.pic.length();
}
/**
* 当前模板文字输入框坐标个数。
*/
public function getCurrentTextCount(num_:Number):Number{
/*得到当前的模板名称,通过此查询其坐标数据*/
var a1:Array = this._productDataContent.item[num_].bs.split("/");
var picname:String = a1[a1.length-1];
/*得到当前的坐标数据.例如:<pic x="98" y="10" width="112" height="111"/>*/
_currentcoordinateData=_photoCoordinateData.subject.mb.(@picname==picname);
return this._currentcoordinateData.txt.length();
}
/**
* 加载图片到舞台上,图片显示区域由模板框大小决定。模板的最大边为准。
* 用户照片显示区域的坐标.照片编辑对照片裁剪的坐标,首次没有坐标,则
* 取用户图片的中心位置如果用户已经裁剪,则有坐标,根据坐标裁剪图片。
* @param img:当前操作的图片对象。相册列表中所选择的照片将在此显示
* @param num:当前图片在模板上的顺序号码。
* @param recompute 坐标是否需要重新计算。如:改变模板时,许重算
* @param targerurl 用户在相册列表选择的图片地址。
*
*/
public function loadphotoToStage(targetimg:Image,num:Number,recompute:Boolean,targerurl:String):void{
if(targerurl==null||targerurl==""){
return ;
}
/*把当前的所操作的图片地址放入产品内容xml中*/
//this._testTextArea.text ="url=="+targerurl+"targerurl.length"+targerurl.length;
/*得到当前的对象的.以在匿名函数中使用*/
var ph_t:ProductHandlerBasic = this ;
var loader_t:Loader = new Loader();
loader_t.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{
/*从产品内容数据中取得裁剪框在图片上的坐标*/
var width1:Number=0 ;
var height1:Number=0;
var x1:Number =0 ;
var y1:Number =0 ;
x1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@x ;
y1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@y ;
width1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@width ;
height1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@height ;
/*图片原始数据*/
var oldbitmap_t:Bitmap = new Bitmap() ;
var l:Loader = e.target.loader as Loader;
var oldbitmap_tdata:BitmapData = new BitmapData (l.width,l.height) ;
oldbitmap_tdata.draw(l);
/*是否需要重新计算坐标*/
if(recompute||x1==-1){
/*计算出模板中图片框的比例。根据此比例才能算出裁剪框的最大值*/
var scale_t:Number =targetimg.width/targetimg.height ;
/*根据比例求出高*/
var h2:Number = l.width/scale_t ;
if(h2<=l.height){
height1 = h2 ;
width1 = l.width ;
}else{
height1 = l.height ;
width1 = height1*scale_t ;
}
/*裁剪框在照片的坐标*/
x1 = (l.width-width1)/2 ;
y1 = (l.height-height1)/2;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@x = x1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@y = y1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@width = width1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@height =height1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@url = targerurl ;
}
/*存放从原始图片数据里裁剪出来的图片数据*/
var newbitmap_t:BitmapData = new BitmapData(width1,height1);
//坐标转化,把坐标移到裁剪区域的位置,宽度和高度在cutbitmapdata里指定。
var matrix:Matrix = new Matrix(1, 0, 0, 1, -x1, -y1);
newbitmap_t.draw(oldbitmap_tdata, matrix);
oldbitmap_t.bitmapData = newbitmap_t ;
targetimg.source = oldbitmap_t ;
targetimg.scaleContent = true ;
ph_t._currentphotoNum++ ;
});
loader_t.load(new URLRequest(targerurl));
}
/**
* 更换模板,改变之后重新导入当前页面信息
* 先改变内容数据,再重新加载
*/
public function moduleChange(url:String):void{
//豪华折叠卡一次换3张
if(this.typename=="replicatecard"){
this._productDataContent.item[0].bs = url.replace(".gif","_1.gif") ;
this._productDataContent.item[1].bs = url.replace(".gif","_2.gif") ;
this._productDataContent.item[2].bs = url.replace(".gif","_3.gif") ;
} else{
this._productDataContent.item[this._currentpageNum].bs = url ;
}
initCurrentPageInfoToStage(true);
}
/**
* 单击相册照片,按顺序填充照片到模板相应的位置 。
* @param url :被单击照片url
*/
public function albumPhotoClickHandler(url:String):void{
//======当前模板的图片个数
var t:Number = _currentcoordinateData.pic.length();
if(this._currentphotoNum>t-1){
this._currentphotoNum = 0 ;
}
var img:Image = this._userstage.getChildByName("img_"+this._currentphotoNum) as Image ;
if(img==null){
return ;
}
this.loadphotoToStage(img,this._currentphotoNum,true,url);
}
/**
* 保存当前页数据,如:图片坐标
* @param p1_ 当前页号码
* @param p2_ 当前照片号码
* @param x_ 起点坐标
* @param y
* @param w_
* @param h_
*/
public function saveCurrentPageData(p1_:Number,p2_:Number,url_:String,x_:Number,y_:Number,w_:Number,h_:Number):void{
_productDataContent.item[p1_]..img[p2_].@x =x_ ;
_productDataContent.item[p1_]..img[p2_].@y =y_ ;
_productDataContent.item[p1_]..img[p2_].@width =w_ ;
_productDataContent.item[p1_]..img[p2_].@height =h_ ;
_productDataContent.item[p1_]..img[p2_].@url=url_ ;
}
/**
* 创建其他额外的组件,此处初始化信封和邮件列表
*/
public function createOtherCom():void{
//card.MAIN.right_id.sendAlbumInfoRequest();
if(this.productInnerNum==1){
card.MAIN.radbut1.selected = true ;
}else{
card.MAIN.radbut2.selected = true ;
}
card.MAIN.header_id.recomputePrice();
card.MAIN.right_id.initAlbum();
}
}
}
{
/**
* 产品开发基本类
*/
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.net.URLRequest;
import module.TextEditview;
import module.photEditview;
import mx.containers.Canvas;
import mx.controls.Image;
import mx.controls.TextArea;
import mx.core.Container;
import mx.managers.PopUpManager;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.mxml.HTTPService;
public class ProductHandlerBasic extends Container
{
/*当前所编辑产品*/
private var _currentStage:Container ;
private var _productID:Number ;
/*所保存作品的ID,如果此产品没保存过这为-1*/
private var _recordID:Number=-1 ; ;
/*用户选择的模板图片,在进入操作页面之前,用户需要选择模板*/
private var _defaulModuleUrl:String ;
/*保存产品所以页面的内容,例如模板,照片,文字。以xml到形式存放*/
private var _productDataContent:XML ;
/*产品信息数据,每个型号所对应的价格,名称等等*/
private var _productInfo:XML ;
public var _testTextArea:TextArea ;
/*当前主题的所有数据坐标数据*/
private var _photoCoordinateData:XML ;
private var _httpservice:HTTPService ;
/*照片在模板上的位置(顺序)*/
private var _currentphotoNum:Number =0 ; ;
/*每一张的顺序,如:上一张,下一张*/
private var _currentpageNum:Number =0 ;
/*当前页面内容数据,由版式,照片文件组成*/
private var _currentpageData:XML ;
/*当前页面的坐标数据*/
private var _currentcoordinateData:XMLList ;
/*显示模板,照片及一些操作*/
private var _userstage:Canvas ;
/*当前的模板图片*/
private var _backgroundImage:Image= new Image() ;
/*产品innerNumber*/
private var _productInnerNum:Number = 0 ;
public function ProductHandlerBasic()
{
_httpservice = new HTTPService();
_httpservice.showBusyCursor = true ;
_httpservice.method = "post" ;
_httpservice.url = "/HttpServiceSlt";
_httpservice.resultFormat="xml";
_httpservice.addEventListener(ResultEvent.RESULT,createEditProudctContent);
/*加入事件监听,照片切换及照片编辑时,要用到此*/
_backgroundImage.addEventListener(MouseEvent.CLICK,photoClickHandler);
_backgroundImage.addEventListener(MouseEvent.DOUBLE_CLICK,photoDoubleClickHandler);
_backgroundImage.doubleClickEnabled = true ;
}
/**
* 作品封面图片地址
*/
public function get previewURL():String{
return _productInfo.product.(@id==_productID).previewURL ;
}
/**
* 产品单价
*/
public function get price():Number{
return _productInfo.product.(@id==_productID).price ;
}
/**
* 价格单位
*/
public function get unit():String{
return _productInfo.product.(@id==_productID).unit ;
}
/**
* 得到型号的总页数
*/
public function get pages():Number{
return _productInfo.product.(@id==_productID)..label.length();
}
/**
* 增加邮票或信封的价格
*/
public function get stepPrice():Number{
return _productInfo.product.(@id==_productID)..stepprice;
}
/**
* 复合价格。例如加上信封和邮票的价格。
* 计算方法:基价+步价*innernumber
*/
public function get duplexPrice():Number{
return Math.round((this.productInnerNum*stepPrice+price)*100)/100 ;
}
/**
* 获取型号下的主题信息.包括名称,数量等等.
*/
public function get mbClass():XMLList{
return _productInfo.product.(@id==_productID)..subject;
}
/**
* 型号。如:明星片,长贺卡
*
*/
public function get typename():String{
return _productInfo.product.(@id==_productID).file ;
}
public function get productInnerNum():Number{
return _productDataContent.innernumber;
}
public function set productInnerNum(p:Number):void{
_productDataContent.innernumber = p;
}
/**
* 产品所属类别
*/
public function get classid():String{
return _productInfo.classid.@id ;
}
public function set currentStage(c:Container):void{
this._currentStage = c ;
}
public function get currentStage():Container{
return this._currentStage ;
}
public function set productID(p:Number):void{
this._productID = p ;
}
public function get productID():Number{
return this._productID ;
}
public function set recordID(r:Number):void{
this._recordID= r ;
}
public function get recordID():Number{
return this._recordID ;
}
public function set defaulModuleUrl(url:String):void{
this._defaulModuleUrl = url ;
}
public function get defaulModuleUrl():String{
return this._defaulModuleUrl ;
}
public function set productInfo(info:XML):void{
this._productInfo = info ;
}
public function get productInfo():XML{
return this._productInfo ;
}
public function set httpservice(h:HTTPService):void{
this._httpservice = h ;
}
public function get httpservice():HTTPService{
return this._httpservice ;
}
public function set photoCoordinateData(p:XML):void{
this._photoCoordinateData = p ;
}
public function get photoCoordinateData():XML{
return this._photoCoordinateData ;
}
public function set userstage(s:Canvas):void{
this._userstage = s ;
}
public function get userstage():Canvas{
return this._userstage ;
}
public function set currentpageNum(c:Number):void{
this._currentpageNum = c ;
}
public function get currentpageNum():Number{
return this._currentpageNum ;
}
public function set currentphotoNum(p:Number):void{
this.currentphotoNum = p ;
}
public function get currentphotoNum():Number{
return this._currentphotoNum ;
}
public function set productDataContent(p:XML):void{
this.productDataContent = p ;
}
public function get productDataContent():XML{
return this._productDataContent ;
}
/**
* 模板单击处理,检测鼠标的位置计算出,具体单击的照片
*/
private function photoClickHandler(e:MouseEvent):void{
var img :Image = null ;
for(var i:int=0;i<this._currentcoordinateData.pic.length();i++){
img = this._userstage.getChildAt(i) as Image ;
revertPhotoAlpha();
if(img.hitTestPoint(mouseX,mouseY)){
this._currentphotoNum = i ;//当前照片的号码
img.alpha = 0.5 ;
break ;
}
}
}
/**
* 双击照片,弹出照片编辑窗口
*/
private function photoDoubleClickHandler(e:MouseEvent):void{
var img_ :Image = null ;
for(var i:int=0;i<this._currentcoordinateData.pic.length();i++){
img_ = this._userstage.getChildAt(i) as Image ;
revertPhotoAlpha();
if(img_.hitTestPoint(mouseX,mouseY)){
this._currentphotoNum = i ;
this.revertPhotoAlpha() ;
var url_:String = this._productDataContent.item[_currentpageNum]..img[i].@url ;
var x_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@x ;
var y_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@y ;
var w_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@width ;
var h_ :Number = this._productDataContent.item[_currentpageNum]..img[i].@height ;
/*照片编辑框*/
var photoEdit_:photEditview = new photEditview();
photoEdit_.producthandlerBase = this ;
PopUpManager.addPopUp(photoEdit_,this._currentStage,true);
photoEdit_.initphotoEditParams(img_,url_,x_,y_,w_,h_);
break ;
}
}
}
/**
* 恢复照片透明度。用户单击照片,改变单击的照片的透明度 ,以此来做标识 。
* 当用户切换照片时,恢复照片透明度,再改变所选照片的透明度。
*/
private function revertPhotoAlpha():void{
var img:Image = null ;
for(var i:int=0;i<this._currentcoordinateData.pic.length();i++){
img = this._userstage.getChildAt(i) as Image ;
if(img.alpha==0.5){
img.alpha = 1 ;
break ;
}
}
}
/**
* 生成默认的产品内容,没过型号都不相同,所以动态生成。
* 如果产品已经保存过的话,内容从服务端加载过来
*/
public function createProductContent():void{
if(this._recordID==-1){
this.createNewProudctContent() ;
return ;
}
//编辑产品
var params:Object = new Object() ;
params.methodName = "getProductContent" ;
params.random= Math.random() ;
params.pid= this._recordID ;
//this._testTextArea.text = "recordid=="+this._recordID ;
this._httpservice.send(params) ;
}
/*创建默认产品数据结构*/
private function createNewProudctContent():void{
_productDataContent = <wdxc></wdxc> ;
/*得到此种型号的产品有多少页数*/
var xmllist_t:XML = new XML(this._productInfo.product.(@id==_productID));
var count:Number = xmllist_t.count ;
for(var i:int=0;i<count;i++){
/*每一张记录节点*/
var itemNode:XML = <item></item>;
var photoNode:XML =<photo></photo>;
for(var j:int=0;j<13;j++){
photoNode.appendChild(<img url="" x="-1" y="" width="" height=""/>);
}
/*豪华折叠卡没办法,这能这样*/
if(this._productID==598){
itemNode.appendChild(<bs>{_defaulModuleUrl.replace(".gif","_"+(i+1)+".gif")}</bs>);
}else{
itemNode.appendChild(<bs>{this._defaulModuleUrl}</bs>);
}
itemNode.appendChild(photoNode) ;
itemNode.appendChild(<txt><info></info></txt>);
_productDataContent.appendChild(itemNode);
}
_productDataContent.appendChild(<innernumber>0</innernumber>);
//创建是否需要邮票和信封组件
createOtherCom();
this.initCurrentPageInfoToStage(true);
}
/**如果产品已经保存,将从productRecord表中,加载数据。
* 而不是用订单表中取得信息【编辑产品时】
*/
private function createEditProudctContent(e:ResultEvent):void{
_productDataContent = new XML(e.result);
createOtherCom();
this.initCurrentPageInfoToStage(false);
}
private var _defaultText:String = "单击此处输入文字" ;
/**
* 初始化当前参数信息
* 1:加载模板图片
* 2:加载对应的图片
* @param recompute
* 左边是否重新计算
*/
public function initCurrentPageInfoToStage(recompute:Boolean):void{
this._currentphotoNum = 0 ;
/*得到当前页的数据信息.*/
_currentpageData = new XML(this._productDataContent.item[this._currentpageNum]) ;
this._userstage.removeAllChildren();
/*根据图片在模板那的坐标,生成容器,可单击图片而放入容器中*/
for(var i:int=0;i<getCurrentPhotoCount(_currentpageNum);i++){
var img1_t:Image = new Image() ;
this._userstage.addChild(img1_t);
img1_t.name="img_"+i;
img1_t.x = _currentcoordinateData.pic[i].@x ;
img1_t.y = _currentcoordinateData.pic[i].@y ;
img1_t.width = _currentcoordinateData.pic[i].@width ;
img1_t.height = _currentcoordinateData.pic[i].@height ;
img1_t.scaleContent = true ;
/*加载图片到模板相应的位置*/
this.loadphotoToStage(img1_t,i,recompute,_productDataContent.item[_currentpageNum].photo.img[i].@url);
}
_backgroundImage.source = (this._productDataContent.item[this._currentpageNum].bs).toString();
this._userstage.addChild(_backgroundImage);
/*加入用户输入的文字信息*/
for(var k:int=0;k<_currentcoordinateData.txt.length();k++){
var textInfo_:TextArea = new TextArea() ;
textInfo_.alpha = 0 ;
textInfo_.setStyle("fontSize","12");
textInfo_.name = "txt_"+k ;
textInfo_.x = _currentcoordinateData.txt[k].@x ;
textInfo_.y = _currentcoordinateData.txt[k].@y ;
textInfo_.width= _currentcoordinateData.txt[k].@width ;
textInfo_.height = _currentcoordinateData.txt[k].@height ;
textInfo_.editable = false ;
if(_productDataContent.item[_currentpageNum].txt.info[k]==""||
_productDataContent.item[_currentpageNum].txt.info[k]==null){
textInfo_.text = _defaultText ;
}else{
textInfo_.htmlText = _productDataContent.item[_currentpageNum].txt.info[k] ;
}
textInfo_.addEventListener(MouseEvent.CLICK,openTextEditview) ;
this._userstage.addChild(textInfo_);
}
}
/**
* 打开文字编辑窗口
*
*/
public function openTextEditview(e:MouseEvent):void{
var textInfo_:TextArea = TextArea(e.currentTarget);
var tev_ :TextEditview = new TextEditview() ;
PopUpManager.addPopUp(tev_,_currentStage,true,null);
tev_.targetLabelName = textInfo_.name ;
tev_.phander = this ;
var n_:Number = textInfo_.name.split("_")[1]; ;
/*打开文字编辑窗口*/
tev_.my_rte.htmlText =_productDataContent.item[_currentpageNum].txt.info[n_] ;
tev_.my_rte.width = textInfo_.width ;
tev_.my_rte.height =textInfo_.height ;
tev_.my_rte.maxWidth = textInfo_.width ;
tev_.my_rte.maxHeight = textInfo_.height ;
tev_.x = 100 ;
tev_.y = 100 ;
}
/**
* 文字编辑完毕保存用户输入的文字 。
*
*/
public function saveUserInputText(html_:String,txt_:String,labelname_:String):void{
var lab_:TextArea = this._userstage.getChildByName(labelname_) as TextArea;
if(txt_==null||txt_.length==0||txt_==""){
lab_.text= _defaultText ;
} else{
lab_.htmlText = html_ ;
var n_:Number = labelname_.split("_")[1]; ;
_productDataContent.item[_currentpageNum].txt.info[n_] = html_ ;
}
}
/**
* 当前模板最大能填充照片的张数。 自动填充照片时,需要用此 。
*/
public function getCurrentPhotoCount(num_:Number):Number{
/*得到当前的模板名称,通过此查询其坐标数据*/
var a1:Array = this._productDataContent.item[num_].bs.split("/");
var picname:String = a1[a1.length-1];
/*得到当前的坐标数据.例如:<pic x="98" y="10" width="112" height="111"/>*/
_currentcoordinateData=_photoCoordinateData.subject.mb.(@picname==picname);
return this._currentcoordinateData.pic.length();
}
/**
* 当前模板文字输入框坐标个数。
*/
public function getCurrentTextCount(num_:Number):Number{
/*得到当前的模板名称,通过此查询其坐标数据*/
var a1:Array = this._productDataContent.item[num_].bs.split("/");
var picname:String = a1[a1.length-1];
/*得到当前的坐标数据.例如:<pic x="98" y="10" width="112" height="111"/>*/
_currentcoordinateData=_photoCoordinateData.subject.mb.(@picname==picname);
return this._currentcoordinateData.txt.length();
}
/**
* 加载图片到舞台上,图片显示区域由模板框大小决定。模板的最大边为准。
* 用户照片显示区域的坐标.照片编辑对照片裁剪的坐标,首次没有坐标,则
* 取用户图片的中心位置如果用户已经裁剪,则有坐标,根据坐标裁剪图片。
* @param img:当前操作的图片对象。相册列表中所选择的照片将在此显示
* @param num:当前图片在模板上的顺序号码。
* @param recompute 坐标是否需要重新计算。如:改变模板时,许重算
* @param targerurl 用户在相册列表选择的图片地址。
*
*/
public function loadphotoToStage(targetimg:Image,num:Number,recompute:Boolean,targerurl:String):void{
if(targerurl==null||targerurl==""){
return ;
}
/*把当前的所操作的图片地址放入产品内容xml中*/
//this._testTextArea.text ="url=="+targerurl+"targerurl.length"+targerurl.length;
/*得到当前的对象的.以在匿名函数中使用*/
var ph_t:ProductHandlerBasic = this ;
var loader_t:Loader = new Loader();
loader_t.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{
/*从产品内容数据中取得裁剪框在图片上的坐标*/
var width1:Number=0 ;
var height1:Number=0;
var x1:Number =0 ;
var y1:Number =0 ;
x1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@x ;
y1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@y ;
width1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@width ;
height1 = ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@height ;
/*图片原始数据*/
var oldbitmap_t:Bitmap = new Bitmap() ;
var l:Loader = e.target.loader as Loader;
var oldbitmap_tdata:BitmapData = new BitmapData (l.width,l.height) ;
oldbitmap_tdata.draw(l);
/*是否需要重新计算坐标*/
if(recompute||x1==-1){
/*计算出模板中图片框的比例。根据此比例才能算出裁剪框的最大值*/
var scale_t:Number =targetimg.width/targetimg.height ;
/*根据比例求出高*/
var h2:Number = l.width/scale_t ;
if(h2<=l.height){
height1 = h2 ;
width1 = l.width ;
}else{
height1 = l.height ;
width1 = height1*scale_t ;
}
/*裁剪框在照片的坐标*/
x1 = (l.width-width1)/2 ;
y1 = (l.height-height1)/2;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@x = x1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@y = y1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@width = width1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@height =height1 ;
ph_t._productDataContent.item[ph_t._currentpageNum]..img[num].@url = targerurl ;
}
/*存放从原始图片数据里裁剪出来的图片数据*/
var newbitmap_t:BitmapData = new BitmapData(width1,height1);
//坐标转化,把坐标移到裁剪区域的位置,宽度和高度在cutbitmapdata里指定。
var matrix:Matrix = new Matrix(1, 0, 0, 1, -x1, -y1);
newbitmap_t.draw(oldbitmap_tdata, matrix);
oldbitmap_t.bitmapData = newbitmap_t ;
targetimg.source = oldbitmap_t ;
targetimg.scaleContent = true ;
ph_t._currentphotoNum++ ;
});
loader_t.load(new URLRequest(targerurl));
}
/**
* 更换模板,改变之后重新导入当前页面信息
* 先改变内容数据,再重新加载
*/
public function moduleChange(url:String):void{
//豪华折叠卡一次换3张
if(this.typename=="replicatecard"){
this._productDataContent.item[0].bs = url.replace(".gif","_1.gif") ;
this._productDataContent.item[1].bs = url.replace(".gif","_2.gif") ;
this._productDataContent.item[2].bs = url.replace(".gif","_3.gif") ;
} else{
this._productDataContent.item[this._currentpageNum].bs = url ;
}
initCurrentPageInfoToStage(true);
}
/**
* 单击相册照片,按顺序填充照片到模板相应的位置 。
* @param url :被单击照片url
*/
public function albumPhotoClickHandler(url:String):void{
//======当前模板的图片个数
var t:Number = _currentcoordinateData.pic.length();
if(this._currentphotoNum>t-1){
this._currentphotoNum = 0 ;
}
var img:Image = this._userstage.getChildByName("img_"+this._currentphotoNum) as Image ;
if(img==null){
return ;
}
this.loadphotoToStage(img,this._currentphotoNum,true,url);
}
/**
* 保存当前页数据,如:图片坐标
* @param p1_ 当前页号码
* @param p2_ 当前照片号码
* @param x_ 起点坐标
* @param y
* @param w_
* @param h_
*/
public function saveCurrentPageData(p1_:Number,p2_:Number,url_:String,x_:Number,y_:Number,w_:Number,h_:Number):void{
_productDataContent.item[p1_]..img[p2_].@x =x_ ;
_productDataContent.item[p1_]..img[p2_].@y =y_ ;
_productDataContent.item[p1_]..img[p2_].@width =w_ ;
_productDataContent.item[p1_]..img[p2_].@height =h_ ;
_productDataContent.item[p1_]..img[p2_].@url=url_ ;
}
/**
* 创建其他额外的组件,此处初始化信封和邮件列表
*/
public function createOtherCom():void{
//card.MAIN.right_id.sendAlbumInfoRequest();
if(this.productInnerNum==1){
card.MAIN.radbut1.selected = true ;
}else{
card.MAIN.radbut2.selected = true ;
}
card.MAIN.header_id.recomputePrice();
card.MAIN.right_id.initAlbum();
}
}
}
相关文章推荐
- flex 开发卡片保存产品(四)
- flex开发卡片文字编辑(五)
- flex开发卡片加入购物车(六)
- flex 开发卡片相册处理(七)
- flex 开发冲印池一:主类
- flex 开发卡片照片编辑篇(二)
- flex 开发卡片模板处理(三)
- Flex Air应用开发:Rss阅读器制作(1)
- flex 联机游戏开发 - 四国军棋游戏:(二)棋盘棋子
- web开发弹性盒模型flexbox新旧比较
- ArcGIS for Java_ArcGIS API for Flex 开发环境的配置
- 安卓开发进阶之弹性布局FlexboxLayout--Part2(翻译)
- arcgis api for flex 开发入门(二)map 的创建
- Flex和java开发的参考书
- java开发人员为什么要学习flex和blazeds
- 通过J2EE Web工程添加Flex项目,进行BlazeDS开发
- 关于Flex+json+Java的整合开发【连载二】- Java处理Json数据
- Flex项目开发-序
- EBS OAF开发中的弹性域(Flexfields)(二)--关键性弹性域及其它
- Flex开发自定义控件(基础篇)