From 769df41dea3a4485ca2ef0e5241d73f7124adc16 Mon Sep 17 00:00:00 2001 From: Ron Anderson Date: Wed, 20 Nov 2013 13:43:25 -0600 Subject: [PATCH] Issue #2488 Change to use DejaVu fonts Change-Id: I82f4b93f340bca0e6dfa4f9c14a9890644c9f224 Former-commit-id: 7a3c7d530edf931a1e25d9c3449ae0e4e30e1d0c [formerly d72119409e276513caffb0409fe93c53a0c287cf] [formerly 633137d8c0c461e3d53c65d8f4c498746c2a9104 [formerly 396cd96c02521a33c65fa9e447275307c2d6168c]] Former-commit-id: 633137d8c0c461e3d53c65d8f4c498746c2a9104 Former-commit-id: f6b9e69738c8e9f7e1df702cb36612bd3d1d050b --- .../etc/gfe/userPython/gfeConfig/gfeConfig.py | 21 +- .../ffmp/ui/dialogs/TimeDurScaleComp.java | 25 ++- .../localization/fonts/VeraMono.ttf | Bin 49224 -> 0 bytes .../dialogs/AbstractSaveParameterDialog.java | 8 +- .../viz/gfe/dialogs/WERevertDialog.java | 6 +- .../formatterlauncher/StyledTextComp.java | 86 +++---- .../com/raytheon/viz/gfe/rsc/GFEFonts.java | 5 +- cave/com.raytheon.viz.radar/plugin.xml | 8 + .../radar/rsc/graphic/RadarGraphicsPage.java | 210 +++++++++--------- .../dialogs/AlarmDisplayWindow.java | 8 +- 10 files changed, 210 insertions(+), 167 deletions(-) delete mode 100644 cave/com.raytheon.viz.core.gl/localization/fonts/VeraMono.ttf diff --git a/cave/build/static/common/cave/etc/gfe/userPython/gfeConfig/gfeConfig.py b/cave/build/static/common/cave/etc/gfe/userPython/gfeConfig/gfeConfig.py index 8f3a42adc9..bc075edc18 100644 --- a/cave/build/static/common/cave/etc/gfe/userPython/gfeConfig/gfeConfig.py +++ b/cave/build/static/common/cave/etc/gfe/userPython/gfeConfig/gfeConfig.py @@ -24,11 +24,12 @@ #------*-python-*------------------------------------------------------------- # Config file for the GFE (Graphical Forecast Editor). -# -# $Id$ -#----------------------------------------------------------------------------- -# Heading -#----------------------------------------------------------------------------- +# +# SOFTWARE HISTORY +# +# Date Ticket# Engineer Description +# ------------ ---------- ----------- -------------------------- +# 11/20/2013 2488 randerso Changed to use DejaVu fonts GFESUITE_HOME = "/awips2/GFESuite" GFESUITE_PRDDIR = "/tmp/products" @@ -262,11 +263,11 @@ MapBackgrounds_default = ['States','CWA'] # style is a font style (one of "regular", "bold", "italic", or "bold italic") # height is an integer representing the font height. # Example: Times New Roman-bold-36. -TextFont0 = "Bitstream Vera Sans Mono-regular-9" -TextFont1 = "Bitstream Vera Sans Mono-regular-9" -TextFont2 = "Bitstream Vera Sans Mono-bold-12" -TextFont3 = "Bitstream Vera Sans Mono-bold-14" -TextFont4 = "Bitstream Vera Sans Mono-bold-20" +TextFont0 = "DejaVu Sans Mono-regular-9" +TextFont1 = "DejaVu Sans Mono-regular-9" +TextFont2 = "DejaVu Sans Mono-bold-12" +TextFont3 = "DejaVu Sans Mono-bold-14" +TextFont4 = "DejaVu Sans Mono-bold-20" # The color which will be used as the background for all of the display # panes. diff --git a/cave/com.raytheon.uf.viz.monitor.ffmp/src/com/raytheon/uf/viz/monitor/ffmp/ui/dialogs/TimeDurScaleComp.java b/cave/com.raytheon.uf.viz.monitor.ffmp/src/com/raytheon/uf/viz/monitor/ffmp/ui/dialogs/TimeDurScaleComp.java index a82796bb47..ccb17fafb6 100644 --- a/cave/com.raytheon.uf.viz.monitor.ffmp/src/com/raytheon/uf/viz/monitor/ffmp/ui/dialogs/TimeDurScaleComp.java +++ b/cave/com.raytheon.uf.viz.monitor.ffmp/src/com/raytheon/uf/viz/monitor/ffmp/ui/dialogs/TimeDurScaleComp.java @@ -41,6 +41,22 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; +/** + * Time Duration Scale Composite + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Nov 20, 2013      #2488 randerso    Changed to use DejaVu font
+ * 
+ * 
+ * + * @author randerso + * @version 1.0 + */ public class TimeDurScaleComp extends Composite { /** * Parent composite. @@ -252,13 +268,10 @@ public class TimeDurScaleComp extends Composite { */ private void init() { // Create the font - // canvasFont = new Font(parentComp.getDisplay(), "Courier", 10, - // SWT.NORMAL); - // canvasFont = new Font(parentComp.getDisplay(), "Monospace", 10, - // SWT.NORMAL); FontData fd = parentComp.getDisplay().getSystemFont().getFontData()[0]; - fd.setName("Bitstream Vera Sans Mono"); + // TODO not have hard coded font name + fd.setName("DejaVu Sans Mono"); canvasFont = new Font(parentComp.getDisplay(), fd); // Create the time bar colors @@ -307,6 +320,7 @@ public class TimeDurScaleComp extends Composite { this.pack(); this.addDisposeListener(new DisposeListener() { + @Override public void widgetDisposed(DisposeEvent arg0) { greyColor.dispose(); yellowColor.dispose(); @@ -328,6 +342,7 @@ public class TimeDurScaleComp extends Composite { timeSliderCanvas.setLayoutData(new GridData(CANVAS_WIDTH + 10, CANVAS_HEIGHT)); timeSliderCanvas.addPaintListener(new PaintListener() { + @Override public void paintControl(PaintEvent e) { drawTimeSliderCanvas(e.gc); } diff --git a/cave/com.raytheon.viz.core.gl/localization/fonts/VeraMono.ttf b/cave/com.raytheon.viz.core.gl/localization/fonts/VeraMono.ttf deleted file mode 100644 index 139f0b4311ad2e0369a347b3be6c46e6c2b730d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49224 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 diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/AbstractSaveParameterDialog.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/AbstractSaveParameterDialog.java index 46cb855de0..d96b935d09 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/AbstractSaveParameterDialog.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/AbstractSaveParameterDialog.java @@ -63,10 +63,11 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog; * * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- - * Oct 26, 2011 randerso Initial creation + * Oct 26, 2011 randerso Initial creation * Oct 30, 2012 1298 rferrel Code clean for non-blocking dialog. - * 02/13/2013 #1597 randerso Made number of concurrent save threads a configurable value. + * Feb 13, 2013 1597 randerso Made number of concurrent save threads a configurable value. * Added logging to support GFE Performance metrics + * Nov 20, 2013 2488 randerso Changed to use DejaVu font * * * @@ -127,7 +128,8 @@ public abstract class AbstractSaveParameterDialog extends CaveJFACEDialog master.addDisposeListener(this); FontData fd = master.getDisplay().getSystemFont().getFontData()[0]; - fd.setName("Bitstream Vera Sans Mono"); + // TODO not have hard coded font name + fd.setName("DejaVu Sans Mono"); font = new Font(master.getDisplay(), fd); initializeComponents(); diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/WERevertDialog.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/WERevertDialog.java index 779fec1dbf..9f1affbc8a 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/WERevertDialog.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/WERevertDialog.java @@ -57,8 +57,9 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog; * * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- - * Jan 21, 2011 randerso Initial creation + * Jan 21, 2011 randerso Initial creation * Oct 25, 2012 1287 rferrel Code clean up for non-blocking dialog. + * Nov 20, 2013 2488 randerso Changed to use DejaVu font * * * @@ -107,7 +108,8 @@ public class WERevertDialog extends CaveJFACEDialog implements DisposeListener { master.addDisposeListener(this); FontData fd = master.getDisplay().getSystemFont().getFontData()[0]; - fd.setName("Bitstream Vera Sans Mono"); + // TODO not have hard coded font name + fd.setName("DejaVu Sans Mono"); font = new Font(master.getDisplay(), fd); String t; diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/formatterlauncher/StyledTextComp.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/formatterlauncher/StyledTextComp.java index 2a34c6da9e..0002a7fda2 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/formatterlauncher/StyledTextComp.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/formatterlauncher/StyledTextComp.java @@ -65,11 +65,12 @@ import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.viz.core.RGBColors; import com.raytheon.viz.gfe.Activator; import com.raytheon.viz.gfe.dialogs.formatterlauncher.ProductEditorComp.PTypeCategory; +import com.raytheon.viz.gfe.rsc.GFEFonts; import com.raytheon.viz.gfe.textformatter.TextFmtParserUtil; /** * Composite containing the product editor. - * + * *
  * SOFTWARE HISTORY
  * Date         Ticket#    Engineer    Description
@@ -81,12 +82,12 @@ import com.raytheon.viz.gfe.textformatter.TextFmtParserUtil;
  * 03 Dec 2012  15620      ryu         Unlock framed cities list for editing.
  * 30 APR 2013  16095      ryu         Modified updateTextStyle() to not lock edited text.
  * 04 SEP 2013  16534      ryu         Fixed word wrap to not insert duplicate text; refactor.
- *
+ * 
  * 
- * + * * @author lvenable * @version 1.0 - * + * */ public class StyledTextComp extends Composite { private static final transient IUFStatusHandler statusHandler = UFStatus @@ -189,7 +190,7 @@ public class StyledTextComp extends Composite { /** * Constructor. - * + * * @param parent * Parent composite. */ @@ -207,10 +208,12 @@ public class StyledTextComp extends Composite { private void init() { String fontSetting = Activator.getDefault().getPreferenceStore() .getString("ProductOutputDialog_font"); + FontData fontData; if (fontSetting.isEmpty()) { - fontSetting = "Bitstream Vera Sans Mono-bold-12"; + fontData = GFEFonts.getFontData(2); + } else { + fontData = StringConverter.asFontData(fontSetting); } - FontData fontData = StringConverter.asFontData(fontSetting); textFont = new Font(parent.getDisplay(), fontData); createMouseListner(); @@ -227,6 +230,7 @@ public class StyledTextComp extends Composite { createTextControl(); this.addDisposeListener(new DisposeListener() { + @Override public void widgetDisposed(DisposeEvent arg0) { textFont.dispose(); bgColor.dispose(); @@ -307,7 +311,7 @@ public class StyledTextComp extends Composite { /** * Get the StyledText editor. - * + * * @return The StyledText editor. */ public StyledText getTextEditorST() { @@ -316,7 +320,7 @@ public class StyledTextComp extends Composite { /** * Set the product text. - * + * * @param text * The product text. */ @@ -398,8 +402,7 @@ public class StyledTextComp extends Composite { // should be unlocked. Cities list is unlocked for editing // when framing codes are present. if (newProduct) { - if (cityTip != null && - cityTip.getText().indexOf("|*") > 0) { + if (cityTip != null && cityTip.getText().indexOf("|*") > 0) { unlockCitySegs.add(ugc); } } @@ -411,8 +414,7 @@ public class StyledTextComp extends Composite { lockLines(productTextArray, startLine, cityStart); lockLines(productTextArray, cityEnd, endLine); - } - else { + } else { lockLines(productTextArray, startLine, endLine); } } @@ -484,7 +486,7 @@ public class StyledTextComp extends Composite { /** * Parse the product text string. - * + * * @param productText */ private void parseProductText(String productText) { @@ -564,7 +566,7 @@ public class StyledTextComp extends Composite { replaceText(ff, SPC + newfield); } } else { - String s = SPC + newfield; + String s = SPC + newfield; if (!ff.getText().equals(s)) { replaceText(ff, s); } @@ -670,7 +672,7 @@ public class StyledTextComp extends Composite { /** * Handle the verify key event. This event fires after a change has been * made to the control (after the text has been updated, for example) - * + * * @param event * Verify event that was fired. */ @@ -731,8 +733,7 @@ public class StyledTextComp extends Composite { // .getStyleRangeAtOffset(event.start + event.length + 1); // if it's in a framing code, turn it red - if (startRange != null - && endRange != null + if (startRange != null && endRange != null && event.start > startRange.start && event.start + event.length < endRange.start && startRange.similarTo(endRange) @@ -763,7 +764,7 @@ public class StyledTextComp extends Composite { /** * Handle the key event when a key is released. - * + * * @param ke * Key event. */ @@ -785,7 +786,7 @@ public class StyledTextComp extends Composite { /** * Check if there is selected text and if there is locked text in the * selected text. - * + * * @return True if there is selected text that contains locked text. */ private boolean selectionHasLockedText() { @@ -799,12 +800,12 @@ public class StyledTextComp extends Composite { /** * Check if there is locked text in the specified range of text. - * + * * @param offset * The starting point of the locked text search. * @param length * The length of the search. - * + * * @return Whether or not there is text in the range that contains locked * text. */ @@ -822,7 +823,7 @@ public class StyledTextComp extends Composite { /** * Select the framing code and the text contained in the framing code. - * + * * @param sr * StyleRange. */ @@ -834,7 +835,7 @@ public class StyledTextComp extends Composite { /** * Check if the key being pressed is a "non-edit" key. - * + * * @param event * Verify event. * @return True if the key is an arrow or "non-edit" key. @@ -856,6 +857,7 @@ public class StyledTextComp extends Composite { private void createMouseListner() { mouseListener = new Listener() { + @Override public void handleEvent(Event e) { if (e.type == SWT.MouseDown) { handleMouseDown(e); @@ -868,7 +870,7 @@ public class StyledTextComp extends Composite { /** * Handle the mouse down event. - * + * * @param e * Event fired. */ @@ -903,7 +905,7 @@ public class StyledTextComp extends Composite { /** * Handle the mouse up event - * + * * @param e * Event fired. */ @@ -1010,7 +1012,7 @@ public class StyledTextComp extends Composite { /** * Checks if the system is editing, e.g. updating the issue time every * minute, vs a user typing text in the text area - * + * * @return */ private boolean isSystemTextChange() { @@ -1035,17 +1037,19 @@ public class StyledTextComp extends Composite { } protected boolean isUpperCase(final String word) { - for (int index= word.length() - 1; index >= 0; index--) { - if (Character.isLowerCase(word.charAt(index))) + for (int index = word.length() - 1; index >= 0; index--) { + if (Character.isLowerCase(word.charAt(index))) { return false; + } } return true; } protected void upper() { String text = textEditorST.getText(); - if (isUpperCase(text)) + if (isUpperCase(text)) { return; + } int topIdx = textEditorST.getTopIndex(); setProductText(textEditorST.getText().toUpperCase()); textEditorST.setTopIndex(topIdx); @@ -1161,7 +1165,7 @@ public class StyledTextComp extends Composite { /** * Getter for the column at which wrap and auto-wrap will wrap the text. - * + * * @return the column number */ public int getWrapColumn() { @@ -1170,7 +1174,7 @@ public class StyledTextComp extends Composite { /** * Getter for the column at which wrap and auto-wrap will wrap the text. - * + * * @param wrapColumn * the column number */ @@ -1209,7 +1213,7 @@ public class StyledTextComp extends Composite { /** * Query the prefs for setting. If it does not exist, use colorDft as its * value. Create an SWT Color for display from the value and return it. - * + * * @param prefs * A preference store which might have config values. * @param display @@ -1232,7 +1236,7 @@ public class StyledTextComp extends Composite { /** * Send a PROBLEM message if color1 is exactly equal to color2. - * + * * @param color1 * the first color * @param color2 @@ -1259,7 +1263,7 @@ public class StyledTextComp extends Composite { *

* The getter name is different to avoid confusion with the getFgColor() * method of Control. - * + * * @return the foreground Color */ public Color getFgndColor() { @@ -1270,7 +1274,7 @@ public class StyledTextComp extends Composite { * Get the framed text color of the StyledTextComp. This is the actual * color, not a copy. It will be disposed when the StyledTextComp is, and * should not be disposed before then. - * + * * @return the frameColor */ public Color getFrameColor() { @@ -1281,7 +1285,7 @@ public class StyledTextComp extends Composite { * Get the insert color of the StyledTextComp. This is the actual color, not * a copy. It will be disposed when the StyledTextComp is, and should not be * disposed before then. - * + * * @return the insertColor */ public Color getInsertColor() { @@ -1292,7 +1296,7 @@ public class StyledTextComp extends Composite { * Get the locked text color of the StyledTextComp. This is the actual * color, not a copy. It will be disposed when the StyledTextComp is, and * should not be disposed before then. - * + * * @return the lockColor */ public Color getLockColor() { @@ -1302,7 +1306,7 @@ public class StyledTextComp extends Composite { /** * Word wrap the text in the block around cursorIndex. Adjust the cursor * position to account for inserted or deleted whitespace. - * + * * @param st * The StyledText in which word wrap is to be performed * @param cursorIndex @@ -1336,7 +1340,7 @@ public class StyledTextComp extends Composite { line = st.getLine(searchLine); int lineOffset = st.getOffsetAtLine(searchLine); - // if line contains locked text, quit looking. + // if line contains locked text, quit looking. if (rangeHasLockedText(lineOffset, line.length())) { break; } @@ -1393,7 +1397,7 @@ public class StyledTextComp extends Composite { if (endIndex >= st.getCharCount()) { endIndex = st.getCharCount() - 1; } - + if (endIndex < startIndex) { return new int[] { startIndex, endIndex, 0 }; } diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEFonts.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEFonts.java index 80122794cd..b9029f1fc8 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEFonts.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEFonts.java @@ -46,6 +46,7 @@ import com.raytheon.viz.gfe.GFEPreference; * Apr 27, 2011 #9250 bkowal getStyle and getName are now used to * get the style and name associated with * a FontData object. + * Nov 20, 2013 #2488 randerso Changed to use DejaVu fonts * * * @@ -57,9 +58,9 @@ public class GFEFonts { private static final transient IUFStatusHandler statusHandler = UFStatus .getHandler(GFEFonts.class); - private static final String DEFAULT_FONT_NAME = "Bitstream Vera Sans"; + private static final String DEFAULT_FONT_NAME = "DejaVu Sans Mono"; - private static final int[] DEFAULT_FONT_SIZE = { 8, 10, 12, 14, 20 }; + private static final int[] DEFAULT_FONT_SIZE = { 9, 9, 12, 14, 20 }; private static final int DEFAULT_FONT_STYLE = SWT.BOLD; diff --git a/cave/com.raytheon.viz.radar/plugin.xml b/cave/com.raytheon.viz.radar/plugin.xml index fd55cfb605..bfeff98aa4 100644 --- a/cave/com.raytheon.viz.radar/plugin.xml +++ b/cave/com.raytheon.viz.radar/plugin.xml @@ -147,4 +147,12 @@ + + + + diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java index ce04cd41a0..364bf592ec 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java @@ -19,13 +19,12 @@ **/ package com.raytheon.viz.radar.rsc.graphic; -import java.io.File; +import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import java.awt.image.BufferedImage; import javax.measure.converter.UnitConverter; import javax.measure.unit.NonSI; @@ -42,8 +41,8 @@ import com.raytheon.uf.common.dataplugin.radar.level3.CellTrendDataPacket; import com.raytheon.uf.common.dataplugin.radar.level3.CellTrendVolumeScanPacket; import com.raytheon.uf.common.dataplugin.radar.level3.CorrelatedShearPacket; import com.raytheon.uf.common.dataplugin.radar.level3.DMDPacket.DMDAttributeIDs; -import com.raytheon.uf.common.dataplugin.radar.level3.GFMPacket; import com.raytheon.uf.common.dataplugin.radar.level3.ETVSPacket; +import com.raytheon.uf.common.dataplugin.radar.level3.GFMPacket; import com.raytheon.uf.common.dataplugin.radar.level3.HailPositivePacket; import com.raytheon.uf.common.dataplugin.radar.level3.HailProbablePacket; import com.raytheon.uf.common.dataplugin.radar.level3.HdaHailPacket; @@ -78,20 +77,19 @@ import com.raytheon.uf.common.dataplugin.radar.level3.generic.GenericDataCompone import com.raytheon.uf.common.geospatial.ReferencedCoordinate; import com.raytheon.uf.common.geospatial.ReferencedGeometry; import com.raytheon.uf.common.geospatial.ReferencedObject.Type; -import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.viz.core.DrawableLine; import com.raytheon.uf.viz.core.DrawableString; import com.raytheon.uf.viz.core.IGraphicsTarget; -import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle; +import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.data.prep.IODataPreparer; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IFont; +import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.IRenderable; import com.raytheon.uf.viz.core.drawables.IWireframeShape; import com.raytheon.uf.viz.core.drawables.PaintProperties; import com.raytheon.uf.viz.core.drawables.ext.ICanvasRenderingExtension; -import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.viz.core.rsc.jts.JTSCompiler; import com.raytheon.viz.pointdata.PointWindDisplay; @@ -121,6 +119,7 @@ import com.vividsolutions.jts.geom.LineString; * Jan 8, 2009 chammack Initial creation * 03/05/2013 DCS51 zwang Handle GFM product * 06/24/2013 DR16162 zwang Remove "wind behind" + * 11/20/2013 2488 randerso Removed use of VeraMono font file * * * @@ -143,7 +142,7 @@ public class RadarGraphicsPage implements IRenderable { private JTSCompiler compiler; private IWireframeShape wireframeShape; - + private IWireframeShape gfmFcstWireframeShape; /** Map of ascii strings in local coordinate system */ @@ -190,14 +189,15 @@ public class RadarGraphicsPage implements IRenderable { private boolean drawBorder = false; private int recordsPerPage = 5; - + // for GFM product, add gfmFcstWireframeShape public RadarGraphicsPage(IDescriptor descriptor, GeneralGridGeometry gg, - IWireframeShape shape, IWireframeShape gfmShape, IGraphicsTarget target, RGB color) { + IWireframeShape shape, IWireframeShape gfmShape, + IGraphicsTarget target, RGB color) { this(descriptor, gg, shape, target, color); this.gfmFcstWireframeShape = gfmShape; } - + public RadarGraphicsPage(IDescriptor descriptor, GeneralGridGeometry gg, IWireframeShape shape, IGraphicsTarget target, RGB color, DmdModifier tableModifier) { @@ -467,10 +467,10 @@ public class RadarGraphicsPage implements IRenderable { } } // GFM - else if (type == 140) { - List gfmImages = new ArrayList(); + else if (type == 140) { + List gfmImages = new ArrayList(); - // Handle each Feature in the GFM Packet + // Handle each Feature in the GFM Packet for (GenericDataComponent currComponent : stormData .getDisplayGenericPointData().get(type).values()) { // Handle Graphic portion @@ -892,104 +892,113 @@ public class RadarGraphicsPage implements IRenderable { // Handle GFM product private List getGfmImage(GenericDataComponent currPt) - throws VizException { + throws VizException { List images = new ArrayList(); - - UnitConverter metersPerSecondToKnots = SI.METERS_PER_SECOND.getConverterTo(NonSI.KNOT); - + + UnitConverter metersPerSecondToKnots = SI.METERS_PER_SECOND + .getConverterTo(NonSI.KNOT); + boolean isFcst = false; - double x,y; + double x, y; Coordinate pos1, pos2; - + int imgSize = 64; - + AreaComponent currFeature = (AreaComponent) currPt; - + int numPoints = currFeature.getPoints().size(); int numParam = currFeature.getParameters().size(); - + String propU, propV, windX, windY; double pU = 0.0; - double pV = 0.0; + double pV = 0.0; double wX = 0.0; double wY = 0.0; - + // if the component only has dectect ID and DeltaT if (numParam == 2) { - isFcst = true; + isFcst = true; } // 11 parameters else { - propU = currFeature.getValue(GFMPacket.GFMAttributeIDs.PROPU.getName()); - if ((propU != null) && (propU.length() > 0)) { - pU = metersPerSecondToKnots.convert(new Double(propU)); - } - propV = currFeature.getValue(GFMPacket.GFMAttributeIDs.PROPV.getName()); - if ((propV != null) && (propV.length() > 0)) { - pV = metersPerSecondToKnots.convert(new Double(propV)); - } - windX = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDX.getName()); - if ((windX != null) && (windX.length() > 0)) { - wX = Float.parseFloat(windX); - } - windY = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDY.getName()); - if ((windY != null) && (windY.length() > 0)) { - wY = Float.parseFloat(windY); - } - - // Get the nearest point on the MIGFA front to the wind behind point - // Plot front movement arrow at this point - Coordinate windBehind = new Coordinate(wX, wY); - Coordinate plotPoint = getPlotPoint(currFeature, windBehind); - wX = plotPoint.x; - wY = plotPoint.y; - - // Prop wind arrow - PlotObject poWind = new PlotObject(); - PointWindDisplay barb = new PointWindDisplay(imgSize * 0.4, 0.5, 2, 0); - barb.setImageParameters(imgSize, imgSize, 255, 255, 255, 1); - barb.setColor(this.color); - - // plot the wind arrow in the same length as 50 kts - double spd = Math.sqrt(pU * pU + pV * pV); - if (spd > 0) { - pU *= 50.0 / spd; - pV *= 50.0 / spd; - } - - barb.setWind(pU, pV, false); - BufferedImage imgBuf = barb.getWindImage(false, DisplayType.ARROW, 0.2); - IImage img = this.target.initializeRaster(new IODataPreparer(imgBuf, UUID.randomUUID().toString(), 0), null); - poWind.image = img; - - ReferencedCoordinate rc = referencedGfmCoord(wX, wY); - try { - poWind.coord = rc.asPixel(this.descriptor.getGridGeometry()); - poWind.pixelOffset = new int[] { 0, 0 }; - images.add(poWind); - } catch (Exception e) { - throw new VizException("Unable to transform coordinates", e); - } + propU = currFeature.getValue(GFMPacket.GFMAttributeIDs.PROPU + .getName()); + if ((propU != null) && (propU.length() > 0)) { + pU = metersPerSecondToKnots.convert(new Double(propU)); + } + propV = currFeature.getValue(GFMPacket.GFMAttributeIDs.PROPV + .getName()); + if ((propV != null) && (propV.length() > 0)) { + pV = metersPerSecondToKnots.convert(new Double(propV)); + } + windX = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDX + .getName()); + if ((windX != null) && (windX.length() > 0)) { + wX = Float.parseFloat(windX); + } + windY = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDY + .getName()); + if ((windY != null) && (windY.length() > 0)) { + wY = Float.parseFloat(windY); + } + + // Get the nearest point on the MIGFA front to the wind behind point + // Plot front movement arrow at this point + Coordinate windBehind = new Coordinate(wX, wY); + Coordinate plotPoint = getPlotPoint(currFeature, windBehind); + wX = plotPoint.x; + wY = plotPoint.y; + + // Prop wind arrow + PlotObject poWind = new PlotObject(); + PointWindDisplay barb = new PointWindDisplay(imgSize * 0.4, 0.5, 2, + 0); + barb.setImageParameters(imgSize, imgSize, 255, 255, 255, 1); + barb.setColor(this.color); + + // plot the wind arrow in the same length as 50 kts + double spd = Math.sqrt(pU * pU + pV * pV); + if (spd > 0) { + pU *= 50.0 / spd; + pV *= 50.0 / spd; + } + + barb.setWind(pU, pV, false); + BufferedImage imgBuf = barb.getWindImage(false, DisplayType.ARROW, + 0.2); + IImage img = this.target.initializeRaster(new IODataPreparer( + imgBuf, UUID.randomUUID().toString(), 0), null); + poWind.image = img; + + ReferencedCoordinate rc = referencedGfmCoord(wX, wY); + try { + poWind.coord = rc.asPixel(this.descriptor.getGridGeometry()); + poWind.pixelOffset = new int[] { 0, 0 }; + images.add(poWind); + } catch (Exception e) { + throw new VizException("Unable to transform coordinates", e); + } } - + // Draw GFM fronts x = currFeature.getPoints().get(0).getCoordinate1(); y = currFeature.getPoints().get(0).getCoordinate2(); try { pos1 = referencedGfmCoord(x, y).asLatLon(); - + for (int k = 1; k < numPoints; k++) { x = currFeature.getPoints().get(k).getCoordinate1(); y = currFeature.getPoints().get(k).getCoordinate2(); - //convert xy to latlon - pos2 = referencedGfmCoord(x, y).asLatLon(); - + // convert xy to latlon + pos2 = referencedGfmCoord(x, y).asLatLon(); + // Connect the dots if (isFcst) { - gfmFcstWireframeShape.addLineSegment(new Coordinate[] {pos1, pos2 }); - } - else { - wireframeShape.addLineSegment(new Coordinate[] {pos1, pos2 }); + gfmFcstWireframeShape.addLineSegment(new Coordinate[] { + pos1, pos2 }); + } else { + wireframeShape + .addLineSegment(new Coordinate[] { pos1, pos2 }); } pos1 = pos2; } @@ -1000,7 +1009,7 @@ public class RadarGraphicsPage implements IRenderable { } return images; } - + private PlotObject getImage(HdaHailPoint currPt) throws VizException { PlotObject image = null; @@ -1190,9 +1199,7 @@ public class RadarGraphicsPage implements IRenderable { public void paint(IGraphicsTarget target, PaintProperties paintProps) throws VizException { if (font == null) { - File fontFile = PathManagerFactory.getPathManager().getStaticFile( - "fonts" + File.separator + "VeraMono.ttf"); - this.font = target.initializeFont(fontFile, 12.0f, null); + this.font = target.initializeFont(getClass().getName()); this.font.setMagnification((float) magnification, false); this.font.setSmoothing(true); } @@ -1201,9 +1208,9 @@ public class RadarGraphicsPage implements IRenderable { // GFM forecast positions should be dashed thick lines if (this.gfmFcstWireframeShape != null) { target.drawWireframeShape(this.wireframeShape, this.color, 3.0f); - target.drawWireframeShape(this.gfmFcstWireframeShape, this.color, 3.0f, LineStyle.DASHED); - } - else if (this.wireframeShape != null) { + target.drawWireframeShape(this.gfmFcstWireframeShape, this.color, + 3.0f, LineStyle.DASHED); + } else if (this.wireframeShape != null) { target.drawWireframeShape(this.wireframeShape, this.color, 1.0f); } @@ -1478,35 +1485,36 @@ public class RadarGraphicsPage implements IRenderable { this.tableX = this.startTableX; this.tableY = this.startTableY; } - + /** * Need to convert x/y to lon/lat for GFM product */ public ReferencedCoordinate referencedGfmCoord(double i, double j) { - return new ReferencedCoordinate(rectifyCoordinate(new Coordinate(i * 4, j * 4)), - this.gridGeometry, Type.GRID_CENTER); + return new ReferencedCoordinate(rectifyCoordinate(new Coordinate(i * 4, + j * 4)), this.gridGeometry, Type.GRID_CENTER); } /** - * Gets the nearest point from GFM front to wind behind point to plot - * front movement arrow + * Gets the nearest point from GFM front to wind behind point to plot front + * movement arrow * * @param AreaComponent * @param Coordinate * @return Coordinate * */ - private Coordinate getPlotPoint(AreaComponent currFeature, Coordinate windBehind) { + private Coordinate getPlotPoint(AreaComponent currFeature, + Coordinate windBehind) { Coordinate point = new Coordinate(); double minDist = Double.MAX_VALUE; - + int numPoints = currFeature.getPoints().size(); double x1 = windBehind.x; double y1 = windBehind.y; double x2 = 0.0; double y2 = 0.0; double dist = 0.0; - + for (int k = 0; k < numPoints; k++) { x2 = currFeature.getPoints().get(k).getCoordinate1(); y2 = currFeature.getPoints().get(k).getCoordinate2(); @@ -1517,8 +1525,8 @@ public class RadarGraphicsPage implements IRenderable { minDist = dist; } } - + return point; } - + } diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/AlarmDisplayWindow.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/AlarmDisplayWindow.java index 16200b88cf..1bd1acdfdd 100644 --- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/AlarmDisplayWindow.java +++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/alarmalert/dialogs/AlarmDisplayWindow.java @@ -60,7 +60,8 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog; * uses the font. * Feb 03, 2012 14317 mhuang Make alarm display window wider * Sep 6, 2012 13365 rferrel Accumulate and Display fix. - * Sep 25, 2012 1196 lvenable Dialog refactor for AlarmDisplayWindow.Added DO_NOT_BLOCK. + * Sep 25, 2012 1196 lvenable Dialog refactor for AlarmDisplayWindow.Added DO_NOT_BLOCK. + * Nov 20, 2013 2488 randerso Changed to use DejaVu font * * * @@ -127,7 +128,8 @@ public class AlarmDisplayWindow extends CaveSWTDialog { shell.setMinimumSize(300, 100); FontData fd = shell.getDisplay().getSystemFont().getFontData()[0]; - fd.setName("Bitstream Vera Sans Mono"); + // TODO not have hard coded font name + fd.setName("DejaVu Sans Mono"); font = new Font(shell.getDisplay(), fd); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); @@ -207,7 +209,7 @@ public class AlarmDisplayWindow extends CaveSWTDialog { @Override public void widgetSelected(SelectionEvent event) { PrintDisplay.print(text.getText(), - text.getFont().getFontData()[0], + text.getFont().getFontData()[0], UFStatus.getHandler(AlarmDisplayWindow.class)); } });