117 lines
3.0 KiB
JavaScript
117 lines
3.0 KiB
JavaScript
//>>built
|
|
// wrapped by build app
|
|
define("dojox/drawing/annotations/Label", ["dijit","dojo","dojox","dojo/require!dojox/drawing/stencil/Text"], function(dijit,dojo,dojox){
|
|
dojo.provide("dojox.drawing.annotations.Label");
|
|
dojo.require("dojox.drawing.stencil.Text");
|
|
|
|
dojox.drawing.annotations.Label = dojox.drawing.util.oo.declare(
|
|
// summary:
|
|
// An annotation called internally to label an Stencil.
|
|
// description:
|
|
// Annotation is positioned with dojox.drawing.util.positioning.label
|
|
// That method should be overwritten for custom placement. Or,
|
|
// add a 'setLabelCustom' method to the Stencil and it will be used.
|
|
//
|
|
dojox.drawing.stencil.Text,
|
|
function(/*Object*/options){
|
|
// arguments:
|
|
// options: Object
|
|
// One key value: the stencil that called this.
|
|
//
|
|
this.master = options.stencil;
|
|
this.labelPosition = options.labelPosition || "BR"; // TL, TR, BR, BL, or function
|
|
if(dojo.isFunction(this.labelPosition)){
|
|
this.setLabel = this.setLabelCustom;
|
|
}
|
|
this.setLabel(options.text || "");
|
|
this.connect(this.master, "onTransform", this, "setLabel");
|
|
this.connect(this.master, "destroy", this, "destroy");
|
|
|
|
if(this.style.labelSameColor){
|
|
this.connect(this.master, "attr", this, "beforeAttr");
|
|
}
|
|
},{
|
|
_align:"start",
|
|
drawingType:"label",
|
|
|
|
setLabelCustom: function(/* ? String */text){
|
|
// summary:
|
|
// Attaches to custom positioning within a Stencil
|
|
//
|
|
var d = dojo.hitch(this.master, this.labelPosition)();
|
|
this.setData({
|
|
x:d.x,
|
|
y:d.y,
|
|
width:d.w || this.style.text.minWidth,
|
|
height:d.h || this._lineHeight
|
|
});
|
|
|
|
// is an event, not text, so keep the old label:
|
|
if(text && !text.split){ text = this.getText(); }
|
|
|
|
this.render(this.typesetter(text));
|
|
},
|
|
|
|
setLabel: function(/* String */text){
|
|
// summary:
|
|
// Sets the text of the label. Not called directly. Should
|
|
// be called within Stencil. See stencil._Base
|
|
//
|
|
// onTransform will pass an object here
|
|
var x, y, box = this.master.getBounds();
|
|
|
|
if(/B/.test(this.labelPosition)){
|
|
y = box.y2 - this._lineHeight;
|
|
}else{
|
|
y = box.y1;
|
|
}
|
|
|
|
if(/R/.test(this.labelPosition)){
|
|
x = box.x2;
|
|
}else{
|
|
y = box.y1;
|
|
this._align = "end";
|
|
}
|
|
|
|
if(!this.labelWidth || (text && text.split && text != this.getText())){
|
|
this.setData({
|
|
x:x,
|
|
y:y,
|
|
height:this._lineHeight,
|
|
width:this.style.text.minWidth
|
|
});
|
|
|
|
this.labelWidth = this.style.text.minWidth;
|
|
this.render(this.typesetter(text));
|
|
|
|
}else{
|
|
|
|
this.setData({
|
|
x:x,
|
|
y:y,
|
|
height:this.data.height,
|
|
width:this.data.width
|
|
});
|
|
|
|
this.render();
|
|
}
|
|
|
|
},
|
|
beforeAttr: function(key, value){
|
|
if(value!==undefined){
|
|
// make it an object
|
|
var k = key; key = {}; key[k] = value;
|
|
}
|
|
delete key.x;
|
|
delete key.y;
|
|
delete key.width;
|
|
delete key.height;
|
|
this.attr(key);
|
|
// FIXME: this.created should already be set, shouldn't it?
|
|
!this.created && this.render();
|
|
}
|
|
}
|
|
|
|
);
|
|
});
|