/******************************************************************************* * Copyright (c) 2012, 2014 Ericsson and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marc Khouzam (Ericsson) - initial API and implementation * Xavier Raynaud (Kalray) - Bug 431690 *******************************************************************************/ package org.eclipse.cdt.visualizer.examples.problemvisualizer; import org.eclipse.cdt.visualizer.ui.canvas.VirtualBoundsGraphicObject; import org.eclipse.cdt.visualizer.ui.util.Colors; import org.eclipse.cdt.visualizer.ui.util.GUIUtils; import org.eclipse.core.resources.IMarker; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; /** * A class that draws a bar or a bar outline in the specified color. */ public class BarGraphicObject extends VirtualBoundsGraphicObject { /* The different colors to use for the different severities */ private static final Color ERROR_OUTLINE_COLOR = Colors.DARK_RED; private static final Color WARNING_OUTLINE_COLOR = Colors.DARK_YELLOW; private static final Color INFO_OUTLINE_COLOR = Colors.DARK_BLUE; private String m_label; private int m_barPercent; public BarGraphicObject(int severity, int barPercent) { m_barPercent = barPercent; Color color = getColor(severity); setForeground(color); setBackground(color); } public void setLabel(String label) { m_label = label; } @Override public void paintContent(GC gc) { // draw outline of bar gc.drawRectangle(m_bounds); // figure-out the width that needs to be filled-in for this bar int barWidth = m_bounds.width * m_barPercent / 100; Rectangle fillIn = new Rectangle(m_bounds.x, m_bounds.y, barWidth, m_bounds.height); // fill-in bar gc.fillRectangle(fillIn); } @Override public boolean hasDecorations() { return true; } /** Invoked to allow element to paint decorations on top of anything drawn on it */ @Override public void paintDecorations(GC gc) { if (m_bounds.height > 20) { gc.setForeground(Colors.BLACK); int text_indent = 6; int tx = m_bounds.x + m_bounds.width - text_indent; int ty = m_bounds.y + m_bounds.height - text_indent; GUIUtils.drawTextAligned(gc, m_label, m_bounds, tx, ty, false, false); } } private Color getColor(int severity) { switch (severity) { case IMarker.SEVERITY_ERROR: return ERROR_OUTLINE_COLOR; case IMarker.SEVERITY_WARNING: return WARNING_OUTLINE_COLOR; case IMarker.SEVERITY_INFO: return INFO_OUTLINE_COLOR; } return Colors.ORANGE; } }