private String getInfo() { return String.format( "%s (%s%%)", Values.Amount.format(item.getActual()), // $NON-NLS-1$ Values.Percent.format( (double) item.getActual() / (double) model.getRootNode().getActual())); }
@Override public void render( final PaintEvent event, final ITreeModel<IRectangle<TaxonomyNode>> model, final IRectangle<TaxonomyNode> rectangle, final IColorProvider<TaxonomyNode, Color> colorProvider, final ILabelProvider<TaxonomyNode> labelProvider) { TaxonomyNode item = rectangle.getNode(); if (item.getClassification() != null) return; Color oldForeground = event.gc.getForeground(); Color oldBackground = event.gc.getBackground(); Rectangle r = new Rectangle( rectangle.getX(), rectangle.getY(), rectangle.getWidth(), rectangle.getHeight()); this.colorProvider.drawRectangle(model.getRoot().getNode(), item, event.gc, r); String label = item.getName(); String info = String.format( "%s (%s%%)", Values.Amount.format(item.getActual()), // $NON-NLS-1$ Values.Percent.format( (double) item.getActual() / (double) this.model.getRootNode().getActual())); event.gc.setForeground(Colors.getTextColor(event.gc.getBackground())); Point labelExtend = event.gc.textExtent(label); Point infoExtend = event.gc.textExtent(info); int width = Math.max(labelExtend.x, infoExtend.x); if (width <= rectangle.getWidth() || rectangle.getWidth() > rectangle.getHeight()) { event.gc.drawText(label, r.x + 2, r.y + 2, true); event.gc.drawText(info, r.x + 2, r.y + 2 + labelExtend.y, true); } else { final Transform transform = new Transform(event.display); try { transform.translate(r.x, r.y); transform.rotate(-90); event.gc.setTransform(transform); event.gc.drawString(label, -labelExtend.x - 2, 2, true); event.gc.drawString(info, -infoExtend.x - 2, 2 + labelExtend.y, true); } finally { transform.dispose(); } } event.gc.setForeground(oldForeground); event.gc.setBackground(oldBackground); }
@Override public Point computeSize(int wHint, int hHint, boolean changed) { String text = item.getName(); String info = getInfo(); GC gc = new GC(this); Point extentText = gc.stringExtent(text); Point extentInfo = gc.stringExtent(info); gc.dispose(); return new Point(Math.max(extentText.x, extentInfo.x) + 4, extentText.y + extentInfo.y + 4); }
public void setRootItem(TaxonomyNode rootItem) { this.rootItem = rootItem; for (Control control : this.getChildren()) control.dispose(); boolean hasParent = false; List<TaxonomyNode> path = rootItem.getPath(); for (int ii = 1; ii < path.size(); ii++) { hasParent = true; TaxonomyNode item = path.get(ii); new LegendItem(this, item); } if (hasParent && !rootItem.getChildren().isEmpty()) { Label l = new Label(this, SWT.NONE); l.setText(">>"); // $NON-NLS-1$ l.setBackground(this.getBackground()); } List<TaxonomyNode> children = new ArrayList<TaxonomyNode>(rootItem.getChildren()); Collections.sort( children, new Comparator<TaxonomyNode>() { @Override public int compare(TaxonomyNode o1, TaxonomyNode o2) { return o1.getActual() > o2.getActual() ? -1 : o1.getActual() == o2.getActual() ? 0 : 1; } }); for (TaxonomyNode child : children) { if (model.isUnassignedCategoryInChartsExcluded() && child.isUnassignedCategory()) continue; new LegendItem(this, child); } pack(); getParent().layout(); }
private void paintControl(Event e) { Color oldForeground = e.gc.getForeground(); Color oldBackground = e.gc.getBackground(); Point size = getSize(); Rectangle r = new Rectangle(0, 0, size.x, size.y); renderer.drawRectangle(rootItem, item, e.gc, r); String text = item.getName(); String info = getInfo(); GC gc = e.gc; gc.setForeground(Colors.getTextColor(gc.getBackground())); gc.drawString(text, 2, 2, true); Point extent = gc.stringExtent(text); gc.drawString(info, 2, extent.y + 1, true); e.gc.setForeground(oldForeground); e.gc.setBackground(oldBackground); }
@Override public long getWeight(TaxonomyNode item) { return item.getActual(); }
@Override public boolean hasChildren(TaxonomyNode item) { return !item.getChildren().isEmpty(); }
@Override public TaxonomyNode getParent(TaxonomyNode item) { return item.getParent(); }
@Override public Iterator<TaxonomyNode> getChildren(TaxonomyNode item) { return item.getChildren().iterator(); }
private void selectionChanged(ITreeModel<IRectangle<TaxonomyNode>> model) { // find out if root changed (drill-down) TaxonomyNode newRoot = model.getRoot().getNode(); if (!newRoot.equals(rootItem)) setRootItem(newRoot); }