use of org.netxms.client.objects.RackElement in project netxms by netxms.
the class RackWidget method paintControl.
/* (non-Javadoc)
* @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent)
*/
@Override
public void paintControl(PaintEvent e) {
final GC gc = e.gc;
gc.setAntialias(SWT.ON);
// gc.setInterpolation(SWT.HIGH);
// Calculate bounding box for rack picture
Rectangle rect = getClientArea();
rect.x += MARGIN_WIDTH + UNIT_NUMBER_WIDTH;
rect.y += MARGIN_HEIGHT + MARGIN_HEIGHT / 2 + TITLE_HEIGHT;
rect.height -= MARGIN_HEIGHT * 2 + MARGIN_HEIGHT / 2 + TITLE_HEIGHT;
// Estimated unit width/height and calculate border width
double unitHeight = (double) rect.height / (double) rack.getHeight();
int unitWidth = (int) (unitHeight * UNIT_WH_RATIO);
int borderWidth = unitWidth / BORDER_WIDTH_RATIO;
if (borderWidth < 3)
borderWidth = 3;
rect.height -= borderWidth;
// precise unit width and height taking borders into consideration
unitHeight = (double) (rect.height - ((borderWidth + 1) / 2) * 2) / (double) rack.getHeight();
unitWidth = (int) (unitHeight * UNIT_WH_RATIO);
rect.width = unitWidth + borderWidth * 2;
// Title
// $NON-NLS-1$
gc.setFont(WidgetHelper.getBestFittingFont(gc, titleFonts, VIEW_LABELS[0], rect.width, TITLE_HEIGHT));
Point titleSize = gc.textExtent(VIEW_LABELS[view.getValue() - 1]);
gc.drawText(VIEW_LABELS[view.getValue() - 1], (rect.width / 2 - titleSize.x / 2) + UNIT_NUMBER_WIDTH + MARGIN_WIDTH, rect.y - TITLE_HEIGHT - MARGIN_HEIGHT / 2);
// Rack itself
gc.setBackground(SharedColors.getColor(SharedColors.RACK_EMPTY_SPACE, getDisplay()));
gc.fillRoundRectangle(rect.x, rect.y, rect.width, rect.height, 3, 3);
gc.setLineWidth(borderWidth);
gc.setForeground(SharedColors.getColor(SharedColors.RACK_BORDER, getDisplay()));
gc.drawRoundRectangle(rect.x, rect.y, rect.width, rect.height, 3, 3);
// Rack bottom
gc.setBackground(SharedColors.getColor(SharedColors.RACK_BORDER, getDisplay()));
gc.fillRectangle(rect.x + borderWidth * 2 - (borderWidth + 1) / 2, rect.y + rect.height, borderWidth * 2, (int) (borderWidth * 1.5));
gc.fillRectangle(rect.x + rect.width - borderWidth * 3 - (borderWidth + 1) / 2, rect.y + rect.height, borderWidth * 2, (int) (borderWidth * 1.5));
// Draw unit numbers
int[] unitBaselines = new int[rack.getHeight() + 1];
// $NON-NLS-1$
gc.setFont(WidgetHelper.getBestFittingFont(gc, labelFonts, "00", UNIT_NUMBER_WIDTH, (int) unitHeight - 2));
gc.setForeground(SharedColors.getColor(SharedColors.RACK_TEXT, getDisplay()));
gc.setBackground(SharedColors.getColor(SharedColors.RACK_BACKGROUND, getDisplay()));
gc.setLineWidth(1);
double dy = rack.isTopBottomNumbering() ? rect.y + unitHeight + (borderWidth + 1) / 2 : rect.y + rect.height - (borderWidth + 1) / 2;
if (rack.isTopBottomNumbering())
unitBaselines[0] = (int) (dy - unitHeight);
for (int u = 1; u <= rack.getHeight(); u++) {
int y = (int) dy;
gc.drawLine(MARGIN_WIDTH, y, UNIT_NUMBER_WIDTH, y);
String label = Integer.toString(u);
Point textExtent = gc.textExtent(label);
gc.drawText(label, UNIT_NUMBER_WIDTH - textExtent.x, y - (int) unitHeight / 2 - textExtent.y / 2);
if (rack.isTopBottomNumbering()) {
unitBaselines[u] = y;
dy += unitHeight;
} else {
unitBaselines[u - 1] = y;
dy -= unitHeight;
}
}
if (!rack.isTopBottomNumbering())
unitBaselines[rack.getHeight()] = (int) dy;
// Draw attributes
List<PassiveRackElement> attributes = rack.getPassiveElements().getElements();
for (PassiveRackElement c : attributes) {
if ((c.getPosition() < 1) || (c.getPosition() > rack.getHeight()) || (c.getOrientation() != view) && (c.getOrientation() != RackOrientation.FILL))
continue;
int topLine, bottomLine;
if (rack.isTopBottomNumbering()) {
// lower border
bottomLine = unitBaselines[c.getPosition()];
// upper border
topLine = unitBaselines[c.getPosition() - 1];
} else {
// lower border
bottomLine = unitBaselines[c.getPosition() - 1];
// upper border
topLine = unitBaselines[c.getPosition()];
}
final Rectangle unitRect = new Rectangle(rect.x + (borderWidth + 1) / 2, topLine + 1, rect.width - borderWidth, bottomLine - topLine);
if ((unitRect.width <= 0) || (unitRect.height <= 0))
break;
Image image;
switch(c.getType()) {
case FILLER_PANEL:
image = imageFillerPanel;
break;
case PATCH_PANEL:
image = imagePatchPanel;
break;
case ORGANISER:
image = imageOrganiserPanel;
break;
default:
continue;
}
Rectangle r = image.getBounds();
gc.drawImage(image, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
}
// Draw units
objects.clear();
List<RackElement> units = rack.getUnits();
for (RackElement n : units) {
if ((n.getRackPosition() < 1) || (n.getRackPosition() > rack.getHeight()) || (rack.isTopBottomNumbering() && (n.getRackPosition() + n.getRackHeight() > rack.getHeight() + 1)) || (!rack.isTopBottomNumbering() && (n.getRackPosition() - n.getRackHeight() < 0)) || ((n.getRackOrientation() != view) && (n.getRackOrientation() != RackOrientation.FILL)))
continue;
int topLine, bottomLine;
if (rack.isTopBottomNumbering()) {
// lower border
bottomLine = unitBaselines[n.getRackPosition() + n.getRackHeight() - 1];
// upper border
topLine = unitBaselines[n.getRackPosition() - 1];
} else {
// lower border
bottomLine = unitBaselines[n.getRackPosition() - n.getRackHeight()];
// upper border
topLine = unitBaselines[n.getRackPosition()];
}
final Rectangle unitRect = new Rectangle(rect.x + (borderWidth + 1) / 2, topLine + 1, rect.width - borderWidth, bottomLine - topLine);
if ((unitRect.width <= 0) || (unitRect.height <= 0))
break;
objects.add(new ObjectImage(n, unitRect));
// draw status indicator
gc.setBackground(StatusDisplayInfo.getStatusColor(n.getStatus()));
gc.fillRectangle(unitRect.x - borderWidth + borderWidth / 4 + 1, unitRect.y + 1, borderWidth / 2 - 1, Math.min(borderWidth, (int) unitHeight - 2));
if ((n.getRearRackImage() != null) && !n.getRearRackImage().equals(NXCommon.EMPTY_GUID) && view == RackOrientation.REAR) {
Image image = ImageProvider.getInstance().getImage(n.getRearRackImage());
Rectangle r = image.getBounds();
gc.drawImage(image, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
} else if ((n.getFrontRackImage() != null) && !n.getFrontRackImage().equals(NXCommon.EMPTY_GUID) && view == RackOrientation.FRONT) {
Image image = ImageProvider.getInstance().getImage(n.getFrontRackImage());
Rectangle r = image.getBounds();
gc.drawImage(image, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
} else // Draw default representation
{
Image imageTop = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultTop;
Rectangle r = imageTop.getBounds();
if (n.getRackHeight() == 1) {
gc.drawImage(imageTop, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
} else {
Image imageMiddle = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultMiddle;
Image imageBottom = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultBottom;
if (rack.isTopBottomNumbering()) {
unitRect.height = unitBaselines[n.getRackPosition()] - topLine;
gc.drawImage(imageTop, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
r = imageMiddle.getBounds();
int u = n.getRackPosition() + 1;
for (int i = 1; i < n.getRackHeight() - 1; i++, u++) {
unitRect.y = unitBaselines[u - 1];
unitRect.height = unitBaselines[u] - unitRect.y;
gc.drawImage(imageMiddle, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
}
r = imageBottom.getBounds();
unitRect.y = unitBaselines[u - 1];
unitRect.height = unitBaselines[u] - unitRect.y;
gc.drawImage(imageBottom, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
} else {
unitRect.height = unitBaselines[n.getRackPosition() - 1] - topLine;
gc.drawImage(imageTop, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
r = imageMiddle.getBounds();
int u = n.getRackPosition() - 1;
for (int i = 1; i < n.getRackHeight() - 1; i++, u--) {
unitRect.y = unitBaselines[u];
unitRect.height = unitBaselines[u - 1] - unitRect.y;
gc.drawImage(imageMiddle, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
}
r = imageBottom.getBounds();
unitRect.y = unitBaselines[u];
unitRect.height = unitBaselines[u - 1] - unitRect.y;
gc.drawImage(imageBottom, 0, 0, r.width, r.height, unitRect.x, unitRect.y, unitRect.width, unitRect.height);
}
}
}
}
}
use of org.netxms.client.objects.RackElement in project netxms by netxms.
the class RackWidget method imageUpdated.
/* (non-Javadoc)
* @see org.netxms.ui.eclipse.imagelibrary.shared.ImageUpdateListener#imageUpdated(java.util.UUID)
*/
@Override
public void imageUpdated(UUID guid) {
boolean found = false;
List<RackElement> units = rack.getUnits();
for (RackElement e : units) {
if (guid.equals(e.getFrontRackImage()) || guid.equals(e.getRearRackImage())) {
found = true;
break;
}
}
if (found) {
getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
if (!isDisposed())
redraw();
}
});
}
}
Aggregations