blob: 1ac172e01d33dd10489e57897b6d6d06f499c44b [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.drawing.Drawing"]){
dojo._hasResource["dojox.drawing.Drawing"]=true;
dojo.provide("dojox.drawing.Drawing");
(function(){
var _1=false;
dojo.declare("dojox.drawing.Drawing",[],{ready:false,mode:"",width:0,height:0,constructor:function(_2,_3){
var _4=dojo.attr(_3,"defaults");
if(_4){
dojox.drawing.defaults=dojo.getObject(_4);
}
this.defaults=dojox.drawing.defaults;
this.id=_3.id;
dojox.drawing.register(this,"drawing");
this.mode=(_2.mode||dojo.attr(_3,"mode")||"").toLowerCase();
var _5=dojo.contentBox(_3);
this.width=_5.w;
this.height=_5.h;
this.util=dojox.drawing.util.common;
this.util.register(this);
this.keys=dojox.drawing.manager.keys;
this.mouse=new dojox.drawing.manager.Mouse({util:this.util,keys:this.keys,id:this.mode=="ui"?"MUI":"mse"});
this.mouse.setEventMode(this.mode);
this.tools={};
this.stencilTypes={};
this.stencilTypeMap={};
this.srcRefNode=_3;
this.domNode=_3;
var _6=dojo.attr(_3,"plugins");
if(_6){
this.plugins=eval(_6);
}else{
this.plugins=[];
}
this.widgetId=this.id;
dojo.attr(this.domNode,"widgetId",this.widgetId);
if(dijit&&dijit.registry){
dijit.registry.add(this);
}else{
dijit.registry={objs:{},add:function(_7){
this.objs[_7.id]=_7;
}};
dijit.byId=function(id){
return dijit.registry.objs[id];
};
dijit.registry.add(this);
}
var _8=dojox.drawing.getRegistered("stencil");
for(var nm in _8){
this.registerTool(_8[nm].name);
}
var _9=dojox.drawing.getRegistered("tool");
for(var nm in _9){
this.registerTool(_9[nm].name);
}
var _a=dojox.drawing.getRegistered("plugin");
for(var nm in _a){
this.registerTool(_a[nm].name);
}
this._createCanvas();
},_createCanvas:function(){
this.canvas=new dojox.drawing.manager.Canvas({srcRefNode:this.domNode,util:this.util,mouse:this.mouse,callback:dojo.hitch(this,"onSurfaceReady")});
this.initPlugins();
},resize:function(_b){
dojo.style(this.domNode,{width:_b.w+"px",height:_b.h+"px"});
if(!this.canvas){
this._createCanvas();
}else{
this.canvas.resize(_b.w,_b.h);
}
},startup:function(){
},getShapeProps:function(_c,_d){
return dojo.mixin({container:this.mode=="ui"||_d=="ui"?this.canvas.overlay.createGroup():this.canvas.surface.createGroup(),util:this.util,keys:this.keys,mouse:this.mouse,drawing:this,drawingType:this.mode=="ui"||_d=="ui"?"ui":"stencil",style:this.defaults.copy()},_c||{});
},addPlugin:function(_e){
this.plugins.push(_e);
if(this.canvas.surfaceReady){
this.initPlugins();
}
},initPlugins:function(){
if(!this.canvas||!this.canvas.surfaceReady){
var c=dojo.connect(this,"onSurfaceReady",this,function(){
dojo.disconnect(c);
this.initPlugins();
});
return;
}
dojo.forEach(this.plugins,function(p,i){
var _f=dojo.mixin({util:this.util,keys:this.keys,mouse:this.mouse,drawing:this,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas},p.options||{});
this.registerTool(p.name,dojo.getObject(p.name));
try{
this.plugins[i]=new this.tools[p.name](_f);
}
catch(e){
console.error("Failed to initilaize plugin:\t"+p.name+". Did you require it?");
}
},this);
this.plugins=[];
_1=true;
this.mouse.setCanvas();
},onSurfaceReady:function(){
this.ready=true;
this.mouse.init(this.canvas.domNode);
this.undo=new dojox.drawing.manager.Undo({keys:this.keys});
this.anchors=new dojox.drawing.manager.Anchors({drawing:this,mouse:this.mouse,undo:this.undo,util:this.util});
if(this.mode=="ui"){
this.uiStencils=new dojox.drawing.manager.StencilUI({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:this.keys});
}else{
this.stencils=new dojox.drawing.manager.Stencil({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,undo:this.undo,keys:this.keys,anchors:this.anchors});
this.uiStencils=new dojox.drawing.manager.StencilUI({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:this.keys});
}
if(dojox.gfx.renderer=="silverlight"){
try{
new dojox.drawing.plugins.drawing.Silverlight({util:this.util,mouse:this.mouse,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas});
}
catch(e){
throw new Error("Attempted to install the Silverlight plugin, but it was not found.");
}
}
dojo.forEach(this.plugins,function(p){
p.onSurfaceReady&&p.onSurfaceReady();
});
},addUI:function(_10,_11){
if(!this.ready){
var c=dojo.connect(this,"onSurfaceReady",this,function(){
dojo.disconnect(c);
this.addUI(_10,_11);
});
return false;
}
if(_11&&!_11.data&&!_11.points){
_11={data:_11};
}
if(!this.stencilTypes[_10]){
if(_10!="tooltip"){
console.warn("Not registered:",_10);
}
return null;
}
var s=this.uiStencils.register(new this.stencilTypes[_10](this.getShapeProps(_11,"ui")));
return s;
},addStencil:function(_12,_13){
if(!this.ready){
var c=dojo.connect(this,"onSurfaceReady",this,function(){
dojo.disconnect(c);
this.addStencil(_12,_13);
});
return false;
}
if(_13&&!_13.data&&!_13.points){
_13={data:_13};
}
var s=this.stencils.register(new this.stencilTypes[_12](this.getShapeProps(_13)));
this.currentStencil&&this.currentStencil.moveToFront();
return s;
},removeStencil:function(_14){
this.stencils.unregister(_14);
_14.destroy();
},removeAll:function(){
this.stencils.removeAll();
},selectAll:function(){
this.stencils.selectAll();
},toSelected:function(_15){
this.stencils.toSelected.apply(this.stencils,arguments);
},exporter:function(){
return this.stencils.exporter();
},importer:function(_16){
dojo.forEach(_16,function(m){
this.addStencil(m.type,m);
},this);
},changeDefaults:function(_17){
for(var nm in _17){
for(var n in _17[nm]){
this.defaults[nm][n]=_17[nm][n];
}
}
this.unSetTool();
this.setTool(this.currentType);
},onRenderStencil:function(_18){
this.stencils.register(_18);
this.unSetTool();
this.setTool(this.currentType);
},onDeleteStencil:function(_19){
this.stencils.unregister(_19);
},registerTool:function(_1a){
if(this.tools[_1a]){
return;
}
var _1b=dojo.getObject(_1a);
this.tools[_1a]=_1b;
var _1c=this.util.abbr(_1a);
this.stencilTypes[_1c]=_1b;
this.stencilTypeMap[_1c]=_1a;
},getConstructor:function(_1d){
return this.stencilTypes[_1d];
},setTool:function(_1e){
if(this.mode=="ui"){
return;
}
if(!this.canvas||!this.canvas.surface){
var c=dojo.connect(this,"onSurfaceReady",this,function(){
dojo.disconnect(c);
this.setTool(_1e);
});
return;
}
if(this.currentStencil){
this.unSetTool();
}
this.currentType=this.tools[_1e]?_1e:this.stencilTypeMap[_1e];
try{
this.currentStencil=new this.tools[this.currentType]({container:this.canvas.surface.createGroup(),util:this.util,mouse:this.mouse,keys:this.keys});
this.currentStencil.connect(this.currentStencil,"onRender",this,"onRenderStencil");
this.currentStencil.connect(this.currentStencil,"destroy",this,"onDeleteStencil");
}
catch(e){
console.error("dojox.drawing.setTool Error:",e);
console.error(this.currentType+" is not a constructor: ",this.tools[this.currentType]);
}
},unSetTool:function(){
if(!this.currentStencil.created){
this.currentStencil.destroy();
}
}});
})();
}