| New file |
| | |
| | | /** |
| | | * 所有工具的基类,自定义工具必需继承于此。BaseTool定义了工具的所有必需方法,有必要时,请重写。 |
| | | * @author 温杨彪 2015-9-12 |
| | | **/ |
| | | define([ |
| | | "dojo", |
| | | "dojo/_base/declare", |
| | | "dijit/_WidgetBase", |
| | | "dijit/_TemplatedMixin", |
| | | "dojo/text!controls/toolbar/tools/template.html", |
| | | "dojo/dom-construct", |
| | | "dojo/dom-attr", |
| | | "dojo/dom-style", |
| | | "dojo/_base/lang", |
| | | "dojo/on", |
| | | "dojo/dom-class" |
| | | ], function( |
| | | dojo, |
| | | declare, |
| | | _WidgetBase, |
| | | _TemplatedMixin, |
| | | template, |
| | | domConstruct, |
| | | domAttr, |
| | | domStyle, |
| | | lang, |
| | | on, |
| | | domClass |
| | | ) { |
| | | var RL = declare([_WidgetBase, _TemplatedMixin], { |
| | | templateString: template, |
| | | _activated: false, |
| | | map: null, |
| | | _graphicsLayer: null, |
| | | _label: "", |
| | | _toolCursor: null, |
| | | /** |
| | | * 正常的样式类 |
| | | */ |
| | | _normalClass: "toolbar-item-normal", |
| | | |
| | | /** |
| | | * 正常的图标样式类 |
| | | */ |
| | | _normalIconClass: "", |
| | | /** |
| | | * 鼠标上浮的图标样式类 |
| | | */ |
| | | _overIconClass: "", |
| | | /** |
| | | * 鼠标上浮的样式类 |
| | | */ |
| | | _overClass: "toolbar-item-over", |
| | | /** |
| | | * 工具激活的样式类 |
| | | */ |
| | | _selectedClass: "toolbar-item-select", |
| | | /** |
| | | * 工具激活的图标样式类 |
| | | */ |
| | | _selectedIconClass: "", |
| | | _config: null, |
| | | _status: "", |
| | | /** |
| | | * 工具不可用的样式类 |
| | | */ |
| | | _disableClass: "", |
| | | _enable: true, |
| | | mapEvents: [], |
| | | /** |
| | | * |
| | | */ |
| | | constructor: function(args) { |
| | | if (args) { |
| | | declare.safeMixin(this, args); |
| | | } |
| | | this.tooltip = "工具" |
| | | }, |
| | | postCreate: function() { |
| | | domClass.add(this.tool, this._normalClass); |
| | | domClass.add(this.toolicon, this._normalIconClass); |
| | | }, |
| | | _onClick: function(evt) { |
| | | evt.stopPropagation(); |
| | | if (!this._enable) { |
| | | return; |
| | | } |
| | | }, |
| | | _onMouseOverHandler: function(evt) { |
| | | evt.stopPropagation(); |
| | | if (this._enable && this._activated == false) { |
| | | domClass.add(this.tool, this._overClass); |
| | | domClass.add(this.toolicon, this._overIconClass); |
| | | } |
| | | }, |
| | | _onMouseOutHandler: function(evt) { |
| | | evt.stopPropagation(); |
| | | if (this._enable && this._activated == false) { |
| | | domClass.remove(this.tool, this._overClass); |
| | | domClass.remove(this.toolicon, this._overIconClass); |
| | | } |
| | | }, |
| | | _onMouseDownHandler: function(evt) { |
| | | evt.stopPropagation(); |
| | | if (!this._enable) |
| | | return; |
| | | if (this._activated) { |
| | | this.deactivate(null); |
| | | this.ondeactivate(); |
| | | } else { |
| | | this.activate(null); |
| | | } |
| | | }, |
| | | _onMouseUpHandler: function(evt) { |
| | | evt.stopPropagation(); |
| | | if (!this._enable) |
| | | return; |
| | | if (!this._activated) { |
| | | domClass.remove(this.toolicon, this._selectedIconClass); |
| | | domClass.remove(this.tool, this._selectedClass); |
| | | } |
| | | domClass.add(this.toolicon, this._overIconClass); |
| | | domClass.add(this.tool, this._overClass); |
| | | }, |
| | | disable:function(){ |
| | | this._enable=false; |
| | | domStyle.set(this.domNode,"background-color","#DBDBDB"); |
| | | }, |
| | | enable:function(){ |
| | | this._enable=true; |
| | | domStyle.set(this.domNode,"background-color",""); |
| | | }, |
| | | activate: function(args) { |
| | | if (this._activated || !this._enable) |
| | | return; |
| | | this._activated = true; |
| | | domClass.add(this.toolicon, this._selectedIconClass); |
| | | domClass.add(this.tool, this._selectedClass); |
| | | if (this.map != null) { |
| | | var map = this.map; |
| | | var events = this.mapEvents; |
| | | events.push(map.on("click", this._onMapClickHandler)); |
| | | events.push(map.on("mouse-down", this._onMapMouseDownHandler)); |
| | | events.push(map.on("mouse-up", this._onMapMouseUpHandler)); |
| | | events.push(map.on("mouse-move", this._onMapMouseMoveHandler)); |
| | | events.push(map.on("dbl-click", this._onMapDoubleClickHandler)); |
| | | } |
| | | this.onactivate(); |
| | | }, |
| | | onactivate: function() { |
| | | return this; |
| | | }, |
| | | ondeactivate: function() { |
| | | return this; |
| | | }, |
| | | deactivate: function(args) { |
| | | if (!this._enable || !this._activated) |
| | | return; |
| | | this._activated = false; |
| | | domClass.remove(this.toolicon, this._selectedIconClass); |
| | | domClass.remove(this.tool, this._selectedClass); |
| | | domClass.remove(this.toolicon, this._overIconClass); |
| | | domClass.remove(this.tool, this._overClass); |
| | | if (this.map != null) { |
| | | var events = this.mapEvents; |
| | | for (var i = 0; i < events.length; i++) { |
| | | events[i].remove(); |
| | | } |
| | | this.mapEvents = []; |
| | | } |
| | | this.ondeactivate(); |
| | | }, |
| | | _onMapClickHandler: function(evt) {}, |
| | | _onMapMouseDownHandler: function(evt) {}, |
| | | _onMapMouseUpHandler: function(evt) {}, |
| | | _onMapMouseMoveHandler: function(evt) {}, |
| | | _onMapDoubleClickHandler: function(evt) {}, |
| | | _setNormalClassAttr: function(normalClass) { |
| | | this._normalClass = normalClass; |
| | | }, |
| | | _getNormalClassAttr: function() { |
| | | return this._normalClass; |
| | | }, |
| | | _setOverClassAttr: function(overClass) { |
| | | this._overClass = overClass; |
| | | }, |
| | | _getOverClassAttr: function() { |
| | | return this._overClass; |
| | | }, |
| | | _setSelectedClassAttr: function(selectedClass) { |
| | | this._selectedClass = _selectedClass; |
| | | }, |
| | | _getSelectedClassAttr: function() { |
| | | return this._selectedClass; |
| | | }, |
| | | _setDisableClassAttr: function(disableClass) { |
| | | this._disableClass = disableClass; |
| | | }, |
| | | _getDisableClassAttr: function() { |
| | | return this._disableClass; |
| | | }, |
| | | _getStatusAttr: function() { |
| | | return this._status; |
| | | }, |
| | | _setStatusAttr: function(status) { |
| | | this._status = status; |
| | | }, |
| | | _setLabelAttr: function(label) { |
| | | if (label !== undefined && label != "") { |
| | | domStyle.set(this.toollabel, "display", "inline-block"); |
| | | this._label = label; |
| | | } else { |
| | | domStyle.set(this.toollabel, "display", "none"); |
| | | this._label = ""; |
| | | } |
| | | this.toollabel.innerHTML = this._label; |
| | | }, |
| | | getLabelAttr: function() { |
| | | return this.label; |
| | | } |
| | | }); |
| | | |
| | | /** |
| | | * 用户激活工具 |
| | | */ |
| | | RL.ACTIVATE_EVENT = "onactivate"; |
| | | |
| | | /** |
| | | * 用户用鼠标点击工具后的释放 |
| | | **/ |
| | | RL.DEACTIVATE_EVEN = "ondeactivate"; |
| | | |
| | | /** |
| | | * 工具自动释放事件。有的工具激活后只能使用一次就必须释放,比如测量、标注等 |
| | | **/ |
| | | RL.SELFDEACTIVATE_EVENT = "selfDeactivate"; |
| | | |
| | | return RL; |
| | | }); |