From 812e719706e23877f0fc3ef620a813bae4d90b5c Mon Sep 17 00:00:00 2001 From: Patrick Tasse Date: Mon, 16 Mar 2015 14:41:19 -0400 Subject: [PATCH] tmf: Add font preferences for trace editor event table and raw text The font settings can be changed in Window > Preferences > General > Appearance > Colors and Fonts > Tracing. Change-Id: Icc95f2ad6df25552293e8ee1d75ab580cdc63af7 Signed-off-by: Patrick Tasse Reviewed-on: https://git.eclipse.org/r/43965 Reviewed-by: Hudson CI Reviewed-by: Bernd Hufmann Tested-by: Bernd Hufmann --- .../plugin.properties | 6 ++- org.eclipse.tracecompass.tmf.ui/plugin.xml | 21 ++++++++ .../tmf/ui/viewers/events/TmfEventsTable.java | 43 +++++++++++++-- .../widgets/rawviewer/TmfRawEventViewer.java | 54 +++++++++++++------ 4 files changed, 103 insertions(+), 21 deletions(-) diff --git a/org.eclipse.tracecompass.tmf.ui/plugin.properties b/org.eclipse.tracecompass.tmf.ui/plugin.properties index 23efc9b7c0..ca5c17718a 100644 --- a/org.eclipse.tracecompass.tmf.ui/plugin.properties +++ b/org.eclipse.tracecompass.tmf.ui/plugin.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2013, 2014 Ericsson +# Copyright (c) 2013, 2015 Ericsson # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 @@ -32,6 +32,10 @@ ssvisualizer.view.name = State System Explorer callstack.view.name = Call Stack synchronization.view.name = Synchronization +# Themes +themes.category.label = Tracing +font.eventtable.label = Trace event table font +font.eventraw.label = Trace event raw text font # Tracing wizards project.new.category.name = Tracing diff --git a/org.eclipse.tracecompass.tmf.ui/plugin.xml b/org.eclipse.tracecompass.tmf.ui/plugin.xml index bf2509e5a4..da23aa24b2 100644 --- a/org.eclipse.tracecompass.tmf.ui/plugin.xml +++ b/org.eclipse.tracecompass.tmf.ui/plugin.xml @@ -1831,4 +1831,25 @@ icon="icons/elcl16/experiment.gif"> + + + + + + + + diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java index e109dd4738..cebbbcf4bb 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java @@ -62,10 +62,12 @@ import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.resource.FontDescriptor; +import org.eclipse.jface.resource.FontRegistry; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; +import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.OpenStrategy; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.util.SafeRunnable; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelection; @@ -161,6 +163,7 @@ import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.ide.IGotoMarker; import org.eclipse.ui.themes.ColorUtil; +import org.eclipse.ui.themes.IThemeManager; import com.google.common.base.Joiner; import com.google.common.collect.HashMultimap; @@ -175,7 +178,7 @@ import com.google.common.collect.Multimap; * @author Francois Chouinard * @author Patrick Tasse */ -public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorSettingsListener, ISelectionProvider { +public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorSettingsListener, ISelectionProvider, IPropertyChangeListener { /** * Empty string array, used by {@link #getItemStrings}. @@ -192,6 +195,8 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS private static final boolean IS_LINUX = System.getProperty("os.name").contains("Linux") ? true : false; //$NON-NLS-1$ //$NON-NLS-2$ + private static final String FONT_DEFINITION_ID = "org.eclipse.tracecompass.tmf.ui.font.eventtable"; //$NON-NLS-1$ + private static final Image BOOKMARK_IMAGE = Activator.getDefault().getImageFromPath( "icons/elcl16/bookmark_obj.gif"); //$NON-NLS-1$ private static final Image SEARCH_IMAGE = Activator.getDefault().getImageFromPath("icons/elcl16/search.gif"); //$NON-NLS-1$ @@ -307,6 +312,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS private LocalResourceManager fResourceManager = new LocalResourceManager(JFaceResources.getResources()); private Color fGrayColor; private Color fGreenColor; + private Font fFont; private Font fBoldFont; private final List fColumns = new LinkedList<>(); @@ -733,6 +739,9 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS // Create resources createResources(); + initializeFonts(); + PlatformUI.getWorkbench().getThemeManager().addPropertyChangeListener(this); + ColorSettingsManager.addColorSettingsListener(this); fTable.setItemCount(1); // +1 for header row @@ -1182,6 +1191,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS public void dispose() { stopSearchThread(); stopFilterThread(); + PlatformUI.getWorkbench().getThemeManager().removePropertyChangeListener(this); ColorSettingsManager.removeColorSettingsListener(this); fComposite.dispose(); if ((fTrace != null) && fDisposeOnClose) { @@ -1292,6 +1302,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS if (item.getBackground().equals(item.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND))) { item.setBackground(null); } + item.setFont(fFont); if (searchMatch) { if (!markerIds.isEmpty()) { @@ -1374,7 +1385,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS item.setText(i, FILTER_HINT); } item.setForeground(i, fGrayColor); - item.setFont(i, fTable.getFont()); + item.setFont(i, fFont); } else { item.setText(i, filter); item.setForeground(i, fGreenColor); @@ -1411,6 +1422,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS item.setData(Key.STYLE_RANGES, null); item.setForeground(null); item.setBackground(null); + item.setFont(fFont); } /** @@ -2113,7 +2125,30 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS fGrayColor = fResourceManager.createColor(ColorUtil.blend(fTable.getBackground().getRGB(), fTable .getForeground().getRGB())); fGreenColor = fTable.getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN); - fBoldFont = fResourceManager.createFont(FontDescriptor.createFrom(fTable.getFont()).setStyle(SWT.BOLD)); + } + + /** + * Initialize the fonts. + * @since 1.0 + */ + protected void initializeFonts() { + FontRegistry fontRegistry = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getFontRegistry(); + fFont = fontRegistry.get(FONT_DEFINITION_ID); + fBoldFont = fontRegistry.getBold(FONT_DEFINITION_ID); + fTable.setFont(fFont); + /* Column header font cannot be set. See Bug 63038 */ + } + + /** + * @since 1.0 + */ + @Override + public void propertyChange(PropertyChangeEvent event) { + if ((IThemeManager.CHANGE_CURRENT_THEME.equals(event.getProperty())) || + (FONT_DEFINITION_ID.equals(event.getProperty()))) { + initializeFonts(); + fTable.refresh(); + } } /** diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/rawviewer/TmfRawEventViewer.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/rawviewer/TmfRawEventViewer.java index bd41c16d77..4a2a163c1f 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/rawviewer/TmfRawEventViewer.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/rawviewer/TmfRawEventViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2014 Ericsson + * 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 @@ -15,6 +15,9 @@ package org.eclipse.tracecompass.tmf.ui.widgets.rawviewer; import java.util.ArrayList; import java.util.List; +import org.eclipse.jface.resource.FontRegistry; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CaretEvent; import org.eclipse.swt.custom.CaretListener; @@ -33,7 +36,6 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -48,6 +50,8 @@ import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.trace.ITmfContext; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.themes.IThemeManager; /** * TmfRawEventViewer allows for the display of the raw data for an arbitrarily @@ -62,12 +66,13 @@ import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation; * @author Patrick Tasse */ public class TmfRawEventViewer extends Composite implements ControlListener, SelectionListener, - KeyListener, CaretListener, MouseMoveListener, MouseTrackListener, MouseWheelListener { + KeyListener, CaretListener, MouseMoveListener, MouseTrackListener, MouseWheelListener, IPropertyChangeListener { private static final Color COLOR_BACKGROUND_ODD = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE); private static final Color COLOR_BACKGROUND_EVEN = new Color(Display.getDefault(), 242, 242, 242); private static final Color COLOR_BACKGROUND_SELECTED = new Color(Display.getDefault(), 231, 246, 254); private static final Color COLOR_BACKGROUND_HIGHLIGHTED = new Color(Display.getDefault(), 246, 252, 255); + private static final String FONT_DEFINITION_ID = "org.eclipse.tracecompass.tmf.ui.font.eventraw"; //$NON-NLS-1$ private static final int MAX_LINE_DATA_SIZE = 1000; private static final int SLIDER_MAX = 1000000; @@ -151,13 +156,36 @@ public class TmfRawEventViewer extends Composite implements ControlListener, Sel @Override public void dispose() { - if (fFixedFont != null) { - fFixedFont.dispose(); - fFixedFont = null; - } + PlatformUI.getWorkbench().getThemeManager().removePropertyChangeListener(this); super.dispose(); } + // ------------------------------------------------------------------------ + // Font handling + // ------------------------------------------------------------------------ + + /** + * Initialize the fonts. + * @since 1.0 + */ + protected void initializeFonts() { + FontRegistry fontRegistry = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getFontRegistry(); + fFixedFont = fontRegistry.get(FONT_DEFINITION_ID); + fStyledText.setFont(fFixedFont); + } + + /** + * @since 1.0 + */ + @Override + public void propertyChange(PropertyChangeEvent event) { + if ((IThemeManager.CHANGE_CURRENT_THEME.equals(event.getProperty())) || + (FONT_DEFINITION_ID.equals(event.getProperty()))) { + initializeFonts(); + refreshTextArea(); + } + } + // ------------------------------------------------------------------------ // Text area handling // ------------------------------------------------------------------------ @@ -182,18 +210,12 @@ public class TmfRawEventViewer extends Composite implements ControlListener, Sel textAreaGridLayout.marginWidth = 0; fTextArea.setLayout(textAreaGridLayout); - if (fFixedFont == null) { - if (System.getProperty("os.name").contains("Windows")) { //$NON-NLS-1$ //$NON-NLS-2$ - fFixedFont = new Font(Display.getCurrent(), new FontData("Courier New", 10, SWT.NORMAL)); //$NON-NLS-1$ - } else { - fFixedFont = new Font(Display.getCurrent(), new FontData("Monospace", 10, SWT.NORMAL)); //$NON-NLS-1$ - } - } - fStyledText = new StyledText(fTextArea, SWT.READ_ONLY); - fStyledText.setFont(fFixedFont); fStyledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + initializeFonts(); + PlatformUI.getWorkbench().getThemeManager().addPropertyChangeListener(this); + fStyledText.addCaretListener(this); fStyledText.addMouseMoveListener(this); fStyledText.addMouseTrackListener(this); -- 2.34.1