/******************************************************************************* * Copyright (c) 2010, 2015 Ericsson * * 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: * Patrick Tasse - Initial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.tmf.ui.views.timechart; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; import org.eclipse.tracecompass.tmf.ui.views.colors.ColorSetting; import org.eclipse.tracecompass.tmf.ui.views.colors.ColorSettingsManager; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.ITimeGraphPresentationProvider; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.StateItem; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.TimeGraphPresentationProvider; import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent; /** * Provider for a time chart analysis view * * @version 1.0 * @author Patrick Tasse */ public class TimeChartAnalysisProvider extends TimeGraphPresentationProvider { private static final Color BOOKMARK_INNER_COLOR = new Color(Display.getDefault(), 115, 165, 224); private static final Color BOOKMARK_OUTER_COLOR = new Color(Display.getDefault(), 2, 70, 140); private static final Color SEARCH_MATCH_COLOR = new Color(Display.getDefault(), 177, 118, 14); private int lastBookmarkX = Integer.MIN_VALUE; @Override public StateItem[] getStateTable() { ColorSetting[] settings = ColorSettingsManager.getColorSettings(); StateItem[] stateItems = new StateItem[settings.length]; for (int i = 0; i < settings.length; i++) { stateItems[i] = new StateItem(settings[i].getTickColorRGB()); } return stateItems; } @Override public int getStateTableIndex(ITimeEvent event) { if (! ((TimeChartEvent) event).isVisible()) { return ITimeGraphPresentationProvider.INVISIBLE; } return ((TimeChartEvent) event).getColorSettingPriority(); } @Override public void postDrawEvent(ITimeEvent event, Rectangle rect, GC gc) { if (! ((TimeChartEvent) event).isVisible()) { return; } if (lastBookmarkX == rect.x || ((TimeChartEvent) event).isBookmarked()) { drawBookmark(rect, gc); lastBookmarkX = rect.x; } else if (lastBookmarkX == rect.x - 1) { Rectangle r = new Rectangle(lastBookmarkX, rect.y, rect.width, rect.height); drawBookmark(r, gc); } else { lastBookmarkX = Integer.MIN_VALUE; } if (((TimeChartEvent) event).isSearchMatch()) { drawSearchMatch(rect, gc); } } private static void drawBookmark(Rectangle r, GC gc) { gc.setForeground(BOOKMARK_OUTER_COLOR); gc.drawLine(r.x - 1, r.y - 2, r.x - 1, r.y + 2); gc.drawLine(r.x + 1, r.y - 2, r.x + 1, r.y + 2); gc.drawPoint(r.x, r.y - 2); gc.setForeground(BOOKMARK_INNER_COLOR); gc.drawLine(r.x, r.y - 1, r.x, r.y + 1); gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); gc.drawPoint(r.x - 1, r.y + 3); gc.drawPoint(r.x, r.y + 2); gc.drawPoint(r.x + 1, r.y + 3); } private static void drawSearchMatch(Rectangle r, GC gc) { gc.setForeground(SEARCH_MATCH_COLOR); gc.drawPoint(r.x, r.y + r.height); gc.drawLine(r.x - 1, r.y + r.height + 1, r.x + 1, r.y + r.height + 1); gc.drawLine(r.x - 2, r.y + r.height + 2, r.x + 2, r.y + r.height + 2); } }