tmf: Add font preferences for trace editor event table and raw text
authorPatrick Tasse <patrick.tasse@gmail.com>
Mon, 16 Mar 2015 18:41:19 +0000 (14:41 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Wed, 18 Mar 2015 18:31:17 +0000 (14:31 -0400)
The font settings can be changed in Window > Preferences > General >
Appearance > Colors and Fonts > Tracing.

Change-Id: Icc95f2ad6df25552293e8ee1d75ab580cdc63af7
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/43965
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.tracecompass.tmf.ui/plugin.properties
org.eclipse.tracecompass.tmf.ui/plugin.xml
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/rawviewer/TmfRawEventViewer.java

index 23efc9b7c062116b144fb3ffafd60d893472136a..ca5c17718a848add7304e0ebf5a3ec12df96d3b3 100644 (file)
@@ -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
index bf2509e5a4c436dd3b9e5e96dd02cdb5201821b0..da23aa24b2fb378a1965710430ba76a808faab2b 100644 (file)
             icon="icons/elcl16/experiment.gif">
       </experiment>
    </extension>
+   <extension
+         point="org.eclipse.ui.themes">
+      <themeElementCategory
+            id="org.eclipse.tracecompass.tmf.ui.theme.category"
+            label="%themes.category.label">
+      </themeElementCategory>
+      <fontDefinition
+            categoryId="org.eclipse.tracecompass.tmf.ui.theme.category"
+            defaultsTo="org.eclipse.jface.dialogfont"
+            id="org.eclipse.tracecompass.tmf.ui.font.eventtable"
+            isEditable="true"
+            label="%font.eventtable.label">
+      </fontDefinition>
+      <fontDefinition
+            categoryId="org.eclipse.tracecompass.tmf.ui.theme.category"
+            defaultsTo="org.eclipse.jface.textfont"
+            id="org.eclipse.tracecompass.tmf.ui.font.eventraw"
+            isEditable="true"
+            label="%font.eventraw.label">
+      </fontDefinition>
+   </extension>
 </plugin>
index e109dd47383cabb1bef3c10d3c38f83a7d20ee3c..cebbbcf4bbbf6d9d7899bf28c99d2ac9e3a55760 100644 (file)
@@ -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<TmfEventTableColumn> 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();
+        }
     }
 
     /**
index bd41c16d772c17f5b731b214ebbd0aee81c889c8..4a2a163c1f2e0fb1e4332a1e9664a30f6304ee48 100644 (file)
@@ -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);
This page took 0.032419 seconds and 5 git commands to generate.