1 | define(["dojo/_base/declare", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style"], |
---|
2 | function(declare, domGeom, domConstruct, domStyle) { |
---|
3 | |
---|
4 | return declare("dojox.treemap.ScaledLabel", null, { |
---|
5 | // summary: |
---|
6 | // Specializes TreeMap to display scaled leaf labels instead of constant size labels. |
---|
7 | |
---|
8 | onRendererUpdated: function(evt){ |
---|
9 | if(evt.kind == "leaf"){ |
---|
10 | var renderer = evt.renderer; |
---|
11 | // start back with default size |
---|
12 | var oldSize = domStyle.get(renderer, "fontSize"); |
---|
13 | domStyle.set(renderer.firstChild, "fontSize", oldSize); |
---|
14 | oldSize = parseInt(oldSize); |
---|
15 | var hRatio = 0.75 * domGeom.getContentBox(renderer).w / domGeom.getMarginBox(renderer.firstChild).w; |
---|
16 | var vRatio = domGeom.getContentBox(renderer).h / domGeom.getMarginBox(renderer.firstChild).h; |
---|
17 | var hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; |
---|
18 | var vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; |
---|
19 | var newSize = Math.floor(oldSize * Math.min(hRatio, vRatio)); |
---|
20 | while(vDiff > 0 && hDiff > 0){ |
---|
21 | domStyle.set(renderer.firstChild, "fontSize", newSize + "px"); |
---|
22 | hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; |
---|
23 | vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; |
---|
24 | oldSize = newSize; |
---|
25 | newSize += 1; |
---|
26 | } |
---|
27 | if(vDiff < 0 || hDiff < 0){ |
---|
28 | // back track |
---|
29 | domStyle.set(renderer.firstChild, "fontSize", oldSize + "px"); |
---|
30 | } |
---|
31 | } |
---|
32 | }, |
---|
33 | |
---|
34 | createRenderer: function(item, level, kind){ |
---|
35 | var renderer = this.inherited(arguments); |
---|
36 | if(kind == "leaf"){ |
---|
37 | var p = domConstruct.create("div"); |
---|
38 | domStyle.set(p, { |
---|
39 | "position": "absolute", |
---|
40 | "width": "auto" |
---|
41 | }); |
---|
42 | domConstruct.place(p, renderer); |
---|
43 | } |
---|
44 | return renderer; |
---|
45 | }, |
---|
46 | |
---|
47 | styleRenderer: function(renderer, item, level, kind){ |
---|
48 | if (kind != "leaf"){ |
---|
49 | this.inherited(arguments); |
---|
50 | }else{ |
---|
51 | domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); |
---|
52 | renderer.firstChild.innerHTML = this.getLabelForItem(item); |
---|
53 | } |
---|
54 | } |
---|
55 | }); |
---|
56 | }); |
---|