Drawing.js
6.17 KB
//>>built
define("dojo ./defaults ./manager/_registry ./manager/keys ./manager/Mouse ./manager/Canvas ./manager/Undo ./manager/Anchors ./manager/Stencil ./manager/StencilUI ./util/common".split(" "),function(d,k,h,f,l,m,n,p,q,r,e){return d.declare("dojox.drawing.Drawing",[],{ready:!1,mode:"",width:0,height:0,constructor:function(a,b){var c=d.attr(b,"defaults");this.defaults=c?"string"===typeof c?d.getObject(c):c:k;this.id=b.id||dijit.getUniqueId("dojox_drawing_Drawing");h.register(this,"drawing");this.mode=
(a.mode||d.attr(b,"mode")||"").toLowerCase();c=d.contentBox(b);this.width=a.width||c.w;this.height=a.height||c.h;e.register(this);this.mouse=new l({util:e,keys:f,id:"ui"==this.mode?"MUI":"mse"});this.mouse.setEventMode(this.mode);this.tools={};this.stencilTypes={};this.stencilTypeMap={};this.domNode=this.srcRefNode=b;this.plugins=a.plugins?eval(a.plugins):[];this.widgetId=this.id;d.attr(this.domNode,"widgetId",this.widgetId);dijit&&dijit.registry?(dijit.registry.add(this),console.log("using dijit")):
(dijit.registry={objs:{},add:function(a){this.objs[a.id]=a}},dijit.byId=function(a){return dijit.registry.objs[a]},dijit.registry.add(this));a=h.getRegistered("stencil");for(var g in a)this.registerTool(a[g].name);a=h.getRegistered("tool");for(g in a)this.registerTool(a[g].name);a=h.getRegistered("plugin");for(g in a)this.registerTool(a[g].name);this._createCanvas()},_createCanvas:function(){console.info("drawing create canvas...");this.canvas=new m({srcRefNode:this.domNode,util:e,mouse:this.mouse,
width:this.width,height:this.height,callback:d.hitch(this,"onSurfaceReady")});this.initPlugins()},resize:function(a){a&&d.style(this.domNode,{width:a.w+"px",height:a.h+"px"});this.canvas?a&&this.canvas.resize(a.w,a.h):this._createCanvas()},startup:function(){},getShapeProps:function(a,b){var c=a.stencilType;b="ui"==this.mode||"ui"==b;return d.mixin({container:b&&!c?this.canvas.overlay.createGroup():this.canvas.surface.createGroup(),util:e,keys:f,mouse:this.mouse,drawing:this,drawingType:b&&!c?"ui":
"stencil",style:this.defaults.copy()},a||{})},addPlugin:function(a){this.plugins.push(a);this.canvas.surfaceReady&&this.initPlugins()},initPlugins:function(){if(this.canvas&&this.canvas.surfaceReady)d.forEach(this.plugins,function(a,c){var b=d.mixin({util:e,keys:f,mouse:this.mouse,drawing:this,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas},a.options||{});this.registerTool(a.name,d.getObject(a.name));try{this.plugins[c]=new this.tools[a.name](b)}catch(t){console.error("Failed to initilaize plugin:\t"+
a.name+". Did you require it?")}},this),this.plugins=[],this.mouse.setCanvas();else var a=d.connect(this,"onSurfaceReady",this,function(){d.disconnect(a);this.initPlugins()})},onSurfaceReady:function(){this.ready=!0;this.mouse.init(this.canvas.domNode);this.undo=new n({keys:f});this.anchors=new p({drawing:this,mouse:this.mouse,undo:this.undo,util:e});"ui"!=this.mode&&(this.stencils=new q({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,undo:this.undo,keys:f,anchors:this.anchors}));
this.uiStencils=new r({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:f});if("silverlight"==dojox.gfx.renderer)try{new dojox.drawing.plugins.drawing.Silverlight({util:e,mouse:this.mouse,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas})}catch(a){throw Error("Attempted to install the Silverlight plugin, but it was not found.");}d.forEach(this.plugins,function(a){a.onSurfaceReady&&a.onSurfaceReady()})},addUI:function(a,b){if(!this.ready){var c=d.connect(this,"onSurfaceReady",
this,function(){d.disconnect(c);this.addUI(a,b)});return!1}!b||b.data||b.points||(b={data:b});return this.stencilTypes[a]?this.uiStencils.register(new this.stencilTypes[a](this.getShapeProps(b,"ui"))):("tooltip"!=a&&console.warn("Not registered:",a),null)},addStencil:function(a,b){if(!this.ready){var c=d.connect(this,"onSurfaceReady",this,function(){d.disconnect(c);this.addStencil(a,b)});return!1}!b||b.data||b.points||(b={data:b});var g=this.stencils.register(new this.stencilTypes[a](this.getShapeProps(b)));
this.currentStencil&&this.currentStencil.moveToFront();return g},removeStencil:function(a){this.stencils.unregister(a);a.destroy()},removeAll:function(){this.stencils.removeAll()},selectAll:function(){this.stencils.selectAll()},toSelected:function(a){this.stencils.toSelected.apply(this.stencils,arguments)},exporter:function(){console.log("this.stencils",this.stencils);return this.stencils.exporter()},importer:function(a){d.forEach(a,function(a){this.addStencil(a.type,a)},this)},changeDefaults:function(a,
b){if(void 0!=b&&b)for(var c in a)this.defaults[c]=a[c];else for(c in a)for(var d in a[c])this.defaults[c][d]=a[c][d];void 0==this.currentStencil||this.currentStencil.created&&!this.defaults.clickMode||(this.unSetTool(),this.setTool(this.currentType))},onRenderStencil:function(a){this.stencils.register(a);this.unSetTool();this.defaults.clickMode?this.defaults.clickable=!0:this.setTool(this.currentType)},onDeleteStencil:function(a){this.stencils.unregister(a)},registerTool:function(a){if(!this.tools[a]){var b=
d.getObject(a);this.tools[a]=b;var c=e.abbr(a);this.stencilTypes[c]=b;this.stencilTypeMap[c]=a}},getConstructor:function(a){return this.stencilTypes[a]},setTool:function(a){if("ui"!=this.mode)if(this.canvas&&this.canvas.surface){this.currentStencil&&this.unSetTool();this.currentType=this.tools[a]?a:this.stencilTypeMap[a];try{this.currentStencil=new this.tools[this.currentType]({container:this.canvas.surface.createGroup(),util:e,mouse:this.mouse,keys:f}),console.log("new tool is:",this.currentStencil.id,
this.currentStencil),this.defaults.clickMode&&(this.defaults.clickable=!1),this.currentStencil.connect(this.currentStencil,"onRender",this,"onRenderStencil"),this.currentStencil.connect(this.currentStencil,"destroy",this,"onDeleteStencil")}catch(c){console.error("dojox.drawing.setTool Error:",c),console.error(this.currentType+" is not a constructor: ",this.tools[this.currentType])}}else var b=d.connect(this,"onSurfaceReady",this,function(){d.disconnect(b);this.setTool(a)})},set:function(a,b){console.info("Attempting to set ",
a," to: ",b,". Set currently not fully supported in Drawing")},get:function(a){},unSetTool:function(){this.currentStencil.created||this.currentStencil.destroy()}})});