12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * Abstract shape element. Shape element represents some visual vector or raster object.
- * @constructor
- * @param {String} name Tag name of the element.
- * @param {Object} config Set of parameters to initialize element with.
- * @param {Object} style Object with styles to set on element initialization.
- */
- jvm.AbstractShapeElement = function(name, config, style){
- this.style = style || {};
- this.style.current = {};
- this.isHovered = false;
- this.isSelected = false;
- this.updateStyle();
- };
- /**
- * Set hovered state to the element. Hovered state means mouse cursor is over element. Styles will be updates respectively.
- * @param {Boolean} isHovered <code>true</code> to make element hovered, <code>false</code> otherwise.
- */
- jvm.AbstractShapeElement.prototype.setHovered = function(isHovered){
- if (this.isHovered !== isHovered) {
- this.isHovered = isHovered;
- this.updateStyle();
- }
- };
- /**
- * Set selected state to the element. Styles will be updates respectively.
- * @param {Boolean} isSelected <code>true</code> to make element selected, <code>false</code> otherwise.
- */
- jvm.AbstractShapeElement.prototype.setSelected = function(isSelected){
- if (this.isSelected !== isSelected) {
- this.isSelected = isSelected;
- this.updateStyle();
- jvm.$(this.node).trigger('selected', [isSelected]);
- }
- };
- /**
- * Set element's style.
- * @param {Object|String} property Could be string to set only one property or object to set several style properties at once.
- * @param {String} value Value to set in case only one property should be set.
- */
- jvm.AbstractShapeElement.prototype.setStyle = function(property, value){
- var styles = {};
- if (typeof property === 'object') {
- styles = property;
- } else {
- styles[property] = value;
- }
- jvm.$.extend(this.style.current, styles);
- this.updateStyle();
- };
- jvm.AbstractShapeElement.prototype.updateStyle = function(){
- var attrs = {};
- jvm.AbstractShapeElement.mergeStyles(attrs, this.style.initial);
- jvm.AbstractShapeElement.mergeStyles(attrs, this.style.current);
- if (this.isHovered) {
- jvm.AbstractShapeElement.mergeStyles(attrs, this.style.hover);
- }
- if (this.isSelected) {
- jvm.AbstractShapeElement.mergeStyles(attrs, this.style.selected);
- if (this.isHovered) {
- jvm.AbstractShapeElement.mergeStyles(attrs, this.style.selectedHover);
- }
- }
- this.set(attrs);
- };
- jvm.AbstractShapeElement.mergeStyles = function(styles, newStyles){
- var key;
- newStyles = newStyles || {};
- for (key in newStyles) {
- if (newStyles[key] === null) {
- delete styles[key];
- } else {
- styles[key] = newStyles[key];
- }
- }
- }
|