Search in sources :

Example 1 with RackElement

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);
                }
            }
        }
    }
}
Also used : RackElement(org.netxms.client.objects.RackElement) PassiveRackElement(org.netxms.client.objects.configs.PassiveRackElement) Rectangle(org.eclipse.swt.graphics.Rectangle) Point(org.eclipse.swt.graphics.Point) Image(org.eclipse.swt.graphics.Image) Point(org.eclipse.swt.graphics.Point) GC(org.eclipse.swt.graphics.GC) PassiveRackElement(org.netxms.client.objects.configs.PassiveRackElement)

Example 2 with RackElement

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();
            }
        });
    }
}
Also used : RackElement(org.netxms.client.objects.RackElement) PassiveRackElement(org.netxms.client.objects.configs.PassiveRackElement)

Aggregations

RackElement (org.netxms.client.objects.RackElement)2 PassiveRackElement (org.netxms.client.objects.configs.PassiveRackElement)2 GC (org.eclipse.swt.graphics.GC)1 Image (org.eclipse.swt.graphics.Image)1 Point (org.eclipse.swt.graphics.Point)1 Rectangle (org.eclipse.swt.graphics.Rectangle)1