/* * ARX: Powerful Data Anonymization * Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.deidentifier.arx.gui.view.impl.common; import org.deidentifier.arx.gui.Controller; import org.deidentifier.arx.gui.view.SWTUtil; import org.eclipse.draw2d.LightweightSystem; import org.eclipse.nebula.visualization.xygraph.linearscale.Range; import org.eclipse.nebula.visualization.xygraph.util.XYGraphMediaFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; /** * A risk monitor * * @author Fabian Prasser */ public class ComponentRiskMonitor { /** View */ private final Composite root; /** View */ private final ComponentMeterFigure meter; /** View */ private final CLabel caption; /** View */ private final CLabel label; /** View */ private double threshold = 0d; /** View */ private double risk = 0d; /** View */ private final Image imageLow; /** View */ private final Image imageHigh; /** * Creates a new instance * @param parent * @param controller * @param text * @param shortText */ public ComponentRiskMonitor(final Composite parent, final Controller controller, final String text, final String shortText) { // Images imageLow = controller.getResources().getManagedImage("bullet_green.png"); //$NON-NLS-1$ imageHigh = controller.getResources().getManagedImage("bullet_red.png"); //$NON-NLS-1$ // Layout GridLayout layout = SWTUtil.createGridLayout(1); layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 0; layout.verticalSpacing = 0; // Root this.root = new Composite(parent, SWT.NONE); this.root.setLayout(layout); this.root.setToolTipText(text); // Caption this.caption = new CLabel(root, SWT.CENTER); this.caption.setText(shortText); this.caption.setLayoutData(SWTUtil.createFillHorizontallyGridData()); this.caption.setToolTipText(text); this.caption.setImage(imageHigh); SWTUtil.changeFont(caption, SWT.BOLD); // Content Composite content = new Composite(root, SWT.NONE); content.setLayoutData(SWTUtil.createFillGridData()); content.setToolTipText(text); // Create meter Canvas canvas = new Canvas(content, SWT.DOUBLE_BUFFERED); canvas.setToolTipText(text); this.meter = new ComponentMeterFigure(); this.meter.setNeedleColor(XYGraphMediaFactory.getInstance().getColor(0, 0, 0)); this.meter.setValueLabelVisibility(true); this.meter.setRange(new Range(0, 100)); this.meter.setLoLevel(0); this.meter.setLoColor(XYGraphMediaFactory.getInstance().getColor(0, 150, 0)); this.meter.setLoloLevel(25); this.meter.setLoloColor(XYGraphMediaFactory.getInstance().getColor(255, 255, 0)); this.meter.setHiLevel(50); this.meter.setHiColor(XYGraphMediaFactory.getInstance().getColor(255, 200, 25)); this.meter.setHihiLevel(100); this.meter.setHihiColor(XYGraphMediaFactory.getInstance().getColor(255, 0, 0)); this.meter.setMajorTickMarkStepHint(50); LightweightSystem lws = new LightweightSystem(canvas); lws.setContents(this.meter); // Create label label = new CLabel(content, SWT.CENTER); label.setLayoutData(SWTUtil.createFillHorizontallyGridData()); label.setToolTipText(text); // Create responsive layout new ComponentResponsiveLayout(content, 100, 50, canvas, label); } /** * Sets layout data * @param data */ public void setLayoutData(Object data) { this.root.setLayoutData(data); } /** * Value between 0 and 1 * @param value * @return */ public void setRisk(double value) { if (value < 0d) { value = 0d; } if (value > 1d) { value = 1d; } this.risk = value; String text = SWTUtil.getPrettyString(value * 100d) + "%"; meter.setValue(value * 100d); label.setText(text); label.setToolTipText(text); if (this.risk > this.threshold) { caption.setImage(imageHigh); } else { caption.setImage(imageLow); } } /** * Sets the risk threshold * @param value */ public void setThreshold(double value) { if (value < 0d) { value = 0d; } if (value > 1d) { value = 1d; } this.threshold = value; if (this.risk > this.threshold) { caption.setImage(imageHigh); } else { caption.setImage(imageLow); } } }