Stencil.js 6.8 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.drawing.manager.Stencil"]){dojo._hasResource["dojox.drawing.manager.Stencil"]=true;dojo.provide("dojox.drawing.manager.Stencil");(function(){var _1,_2;dojox.drawing.manager.Stencil=dojox.drawing.util.oo.declare(function(_3){_1=_3.surface;this.canvas=_3.canvas;this.defaults=dojox.drawing.defaults.copy();this.undo=_3.undo;this.mouse=_3.mouse;this.keys=_3.keys;this.anchors=_3.anchors;this.stencils={};this.selectedStencils={};this._mouseHandle=this.mouse.register(this);dojo.connect(this.keys,"onArrow",this,"onArrow");dojo.connect(this.keys,"onEsc",this,"deselect");dojo.connect(this.keys,"onDelete",this,"onDelete");},{_dragBegun:false,_wasDragged:false,_secondClick:false,_isBusy:false,register:function(_4){if(_4.isText&&!_4.editMode&&_4.deleteEmptyCreate&&!_4.getText()){console.warn("EMPTY CREATE DELETE",_4);_4.destroy();return false;}this.stencils[_4.id]=_4;if(_4.execText){if(_4._text&&!_4.editMode){this.selectItem(_4);}_4.connect("execText",this,function(){if(_4.isText&&_4.deleteEmptyModify&&!_4.getText()){console.warn("EMPTY MOD DELETE",_4);this.deleteItem(_4);}else{if(_4.selectOnExec){this.selectItem(_4);}}});}_4.connect("deselect",this,function(){if(!this._isBusy&&this.isSelected(_4)){this.deselectItem(_4);}});_4.connect("select",this,function(){if(!this._isBusy&&!this.isSelected(_4)){this.selectItem(_4);}});return _4;},unregister:function(_5){if(_5){_5.selected&&this.onDeselect(_5);delete this.stencils[_5.id];}},onArrow:function(_6){if(this.hasSelected()){this.saveThrottledState();this.group.applyTransform({dx:_6.x,dy:_6.y});}},_throttleVrl:null,_throttle:false,throttleTime:400,_lastmxx:-1,_lastmxy:-1,saveMoveState:function(){var mx=this.group.getTransform();if(mx.dx==this._lastmxx&&mx.dy==this._lastmxy){return;}this._lastmxx=mx.dx;this._lastmxy=mx.dy;this.undo.add({before:dojo.hitch(this.group,"setTransform",mx)});},saveThrottledState:function(){clearTimeout(this._throttleVrl);clearInterval(this._throttleVrl);this._throttleVrl=setTimeout(dojo.hitch(this,function(){this._throttle=false;this.saveMoveState();}),this.throttleTime);if(this._throttle){return;}this._throttle=true;this.saveMoveState();},unDelete:function(_7){for(var s in _7){_7[s].render();this.onSelect(_7[s]);}},onDelete:function(_8){if(_8!==true){this.undo.add({before:dojo.hitch(this,"unDelete",this.selectedStencils),after:dojo.hitch(this,"onDelete",true)});}this.withSelected(function(m){this.anchors.remove(m);var id=m.id;m.destroy();delete this.stencils[id];});this.selectedStencils={};},deleteItem:function(_9){if(this.hasSelected()){var _a=[];for(var m in this.selectedStencils){if(this.selectedStencils.id==_9.id){if(this.hasSelected()==1){this.onDelete();return;}}else{_a.push(this.selectedStencils.id);}}this.deselect();this.selectItem(_9);this.onDelete();dojo.forEach(_a,function(id){this.selectItem(id);},this);}else{this.selectItem(_9);this.onDelete();}},removeAll:function(){this.selectAll();this._isBusy=true;this.onDelete();this.stencils={};this._isBusy=false;},setSelectionGroup:function(){this.withSelected(function(m){this.onDeselect(m,true);});if(this.group){_1.remove(this.group);this.group.removeShape();}this.group=_1.createGroup();this.group.setTransform({dx:0,dy:0});this.withSelected(function(m){this.group.add(m.container);m.select();});},setConstraint:function(){var t=Infinity;l=Infinity;this.withSelected(function(m){var o=m.getBounds();t=Math.min(o.y1,t);l=Math.min(o.x1,l);});this.constrain={l:-l,t:-t};},onDeselect:function(_b,_c){if(!_c){delete this.selectedStencils[_b.id];}this.anchors.remove(_b);_1.add(_b.container);_b.selected&&_b.deselect();_b.applyTransform(this.group.getTransform());},deselectItem:function(_d){this.onDeselect(_d);},deselect:function(){this.withSelected(function(m){this.onDeselect(m);});this._dragBegun=false;this._wasDragged=false;},onSelect:function(_e){if(!_e){console.error("null stencil is not selected:",this.stencils);}if(this.selectedStencils[_e.id]){return;}this.selectedStencils[_e.id]=_e;this.group.add(_e.container);_e.select();if(this.hasSelected()==1){this.anchors.add(_e,this.group);}},selectAll:function(){this._isBusy=true;for(var m in this.stencils){this.selectItem(m);}this._isBusy=false;},selectItem:function(_f){var id=typeof (_f)=="string"?_f:_f.id;var _10=this.stencils[id];this.setSelectionGroup();this.onSelect(_10);this.group.moveToFront();this.setConstraint();},onStencilDoubleClick:function(obj){if(this.selectedStencils[obj.id]){if(this.selectedStencils[obj.id].edit){var m=this.selectedStencils[obj.id];m.editMode=true;this.deselect();m.edit();}}},onAnchorUp:function(){this.setConstraint();},onStencilDown:function(obj,evt){if(!this.stencils[obj.id]){return;}this._isBusy=true;if(this.selectedStencils[obj.id]&&this.keys.meta){if(dojo.isMac&&this.keys.cmmd){}this.onDeselect(this.selectedStencils[obj.id]);if(this.hasSelected()==1){this.withSelected(function(m){this.anchors.add(m,this.group);});}this.group.moveToFront();this.setConstraint();return;}else{if(this.selectedStencils[obj.id]){var mx=this.group.getTransform();this._offx=obj.x-mx.dx;this._offy=obj.y-mx.dy;return;}else{if(!this.keys.meta){this.deselect();}else{}}}this.selectItem(obj.id);var mx=this.group.getTransform();this._offx=obj.x-mx.dx;this._offy=obj.y-mx.dx;this.orgx=obj.x;this.orgy=obj.y;this._isBusy=false;this.undo.add({before:function(){},after:function(){}});},onStencilUp:function(obj){},onStencilDrag:function(obj){if(!this._dragBegun){this.onBeginDrag(obj);this._dragBegun=true;}else{this.saveThrottledState();var x=obj.x-obj.last.x,y=obj.y-obj.last.y,mx=this.group.getTransform(),c=this.constrain,mz=this.defaults.anchors.marginZero;x=obj.x-this._offx;y=obj.y-this._offy;if(x<c.l+mz){x=c.l+mz;}if(y<c.t+mz){y=c.t+mz;}this.group.setTransform({dx:x,dy:y});}},onDragEnd:function(obj){this._dragBegun=false;},onBeginDrag:function(obj){this._wasDragged=true;},onDown:function(obj){this.deselect();},exporter:function(){var _11=[];for(var m in this.stencils){this.stencils[m].enabled&&_11.push(this.stencils[m].exporter());}return _11;},toSelected:function(_12){var _13=Array.prototype.slice.call(arguments).splice(1);for(var m in this.selectedStencils){var _14=this.selectedStencils[m];_14[_12].apply(_14,_13);}},withSelected:function(_15){var f=dojo.hitch(this,_15);for(var m in this.selectedStencils){f(this.selectedStencils[m]);}},withUnselected:function(_16){var f=dojo.hitch(this,_16);for(var m in this.stencils){!this.stencils[m].selected&&f(this.stencils[m]);}},withStencils:function(_17){var f=dojo.hitch(this,_17);for(var m in this.stencils){f(this.stencils[m]);}},hasSelected:function(){var ln=0;for(var m in this.selectedStencils){ln++;}return ln;},isSelected:function(_18){return !!this.selectedStencils[_18.id];}});})();}