VLab Issue #5413 - Changes for PGEN in D2D fourth try

Change-Id: Iec34f20209748a661ee07d2960bd79132233cf1a

Former-commit-id: 5fc47fb52d [formerly 5fc47fb52d [formerly 4d15f42f935cd71c1962292ecfacabfe49127027]]
Former-commit-id: fe2010b4ec
Former-commit-id: 5e5ddae357
This commit is contained in:
Bingfan Yin 2014-12-04 13:38:50 -05:00
parent 78160d7106
commit c32bc7a6a1
8 changed files with 298 additions and 54 deletions

View file

@ -7,18 +7,32 @@
*/
package gov.noaa.nws.ncep.ui.pgen;
import java.util.ArrayList;
import java.util.List;
import com.raytheon.uf.viz.core.maps.display.VizMapEditor;
import com.raytheon.viz.ui.editor.AbstractEditor;
import gov.noaa.nws.ncep.ui.pgen.PgenUtil.PgenMode;
import gov.noaa.nws.ncep.ui.pgen.controls.PgenCommandManager;
import gov.noaa.nws.ncep.ui.pgen.filter.CategoryFilter;
import gov.noaa.nws.ncep.ui.pgen.palette.PgenPaletteWindow;
import gov.noaa.nws.ncep.ui.pgen.rsc.PgenResource;
import gov.noaa.nws.ncep.ui.pgen.rsc.PgenResourceData;
import gov.noaa.nws.ncep.ui.pgen.tools.AbstractPgenTool;
//import gov.noaa.nws.ncep.viz.ui.display.NmapUiUtils;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPage;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.IRenderableDisplayChangedListener;
import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
import com.raytheon.uf.viz.core.maps.display.VizMapEditor;
import com.raytheon.viz.ui.editor.AbstractEditor;
import com.raytheon.viz.ui.editor.IMultiPaneEditor;
/**
* This singleton is intended to couple a PGEN Palette with a PGgenResource, so
@ -27,7 +41,21 @@ import gov.noaa.nws.ncep.ui.pgen.rsc.PgenResourceData;
* @author sgilbert
*
*/
public class PgenSession {
/**
* Implements a drawing layer for PGEN products.
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 12/14 R5413 B. Yin Added IPartListener2 and IRenderableDisplayChangedListener
* to make the swapping in D2D work
*
*/
public class PgenSession implements IPartListener2,
IRenderableDisplayChangedListener {
/*
* The singleton instance
@ -45,6 +73,12 @@ public class PgenSession {
private PgenPaletteWindow palette = null;
private List<AbstractEditor> editors = new ArrayList<AbstractEditor>();
/*
* Active PGEN tool
*/
private AbstractPgenTool pgenTool = null;
/*
* Hide default constructor
*/
@ -80,8 +114,9 @@ public class PgenSession {
// set new PGEN resource
pgenResource = rsc;
// add the palette's stack listener to new resource's command Manager
if (pgenResource != null)
if (pgenResource != null && palette != null) {
pgenResource.getCommandMgr().addStackListener(palette);
}
}
@ -155,8 +190,9 @@ public class PgenSession {
palette = pal;
// Register this palette's stack listener with the CommandManager, if
// able
if (pgenResource != null)
if (pgenResource != null) {
pgenResource.getCommandMgr().addStackListener(palette);
}
}
/**
@ -197,13 +233,194 @@ public class PgenSession {
public PgenPaletteWindow getPgenPalette() {
return palette;
}
public void addEditor(AbstractEditor editor){
public void addEditor(AbstractEditor editor) {
editors.add(editor);
}
public List<AbstractEditor> getEditors(){
public List<AbstractEditor> getEditors() {
return editors;
}
/*
* Remove PGEN handler when swapping to side view. Also open PGEN palette if
* there is a PGEN resource when swapping to main editor.
*
* (non-Javadoc)
*
* @see com.raytheon.uf.viz.core.IRenderableDisplayChangedListener#
* renderableDisplayChanged(com.raytheon.uf.viz.core.IDisplayPane,
* com.raytheon.uf.viz.core.drawables.IRenderableDisplay,
* com.raytheon.uf.viz
* .core.IRenderableDisplayChangedListener.DisplayChangeType)
*/
@SuppressWarnings("restriction")
@Override
public void renderableDisplayChanged(IDisplayPane pane,
IRenderableDisplay newRenderableDisplay, DisplayChangeType type) {
if (type == DisplayChangeType.ADD
&& newRenderableDisplay.getContainer() instanceof VizMapEditor) {
VizMapEditor editorChanged = (VizMapEditor) newRenderableDisplay
.getContainer();
if (PgenUtil.getPgenMode() == PgenMode.SINGLE) { // for D2d
// swapping, single
// pane mode
if (pgenResource != null) {
pgenResource.removeGhostLine();
pgenResource.removeSelected();
}
PgenUtil.setSelectingMode();
}
else { // for D2d swapping, multi-pane mode
// clean up current pgen resource
if (pgenResource != null) {
pgenResource.closeDialogs();
pgenResource.deactivatePgenTools();
pgenResource.getCommandMgr().removeStackListener(palette);
}
if (palette != null) {
if (PgenUtil.findPgenResource(editorChanged) == null) {
// editor does not have PGEN, close the palette
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().hideView(palette);
palette = null;
} else {
// editor has PGEN resource, reset to selecting mode
pgenResource = PgenUtil.findPgenResource(editorChanged);
pgenResource.setCatFilter(new CategoryFilter("Any"));
palette.setCurrentCategory("Any");
PgenUtil.setSelectingMode();
}
} else {
// palette is closed
if (PgenUtil.findPgenResource(editorChanged) != null) {
// editor has PGEN, open the palette
IWorkbenchPage wpage = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
IViewPart vpart = wpage.findView(PgenUtil.VIEW_ID);
try {
if (vpart == null) {
vpart = wpage.showView(PgenUtil.VIEW_ID);
IViewReference pgenViewRef = wpage
.findViewReference(PgenUtil.VIEW_ID);
if (pgenViewRef != null
&& wpage instanceof WorkbenchPage) {
((WorkbenchPage) wpage)
.detachView(pgenViewRef);
}
} else {
if (!wpage.isPartVisible(vpart)) {
vpart = wpage.showView(PgenUtil.VIEW_ID);
IViewReference pgenViewRef = wpage
.findViewReference(PgenUtil.VIEW_ID);
if (pgenViewRef != null
&& wpage instanceof WorkbenchPage) {
((WorkbenchPage) wpage)
.detachView(pgenViewRef);
}
}
}
this.pgenResource = PgenUtil
.findPgenResource(editorChanged);
this.pgenResource.setCatFilter(new CategoryFilter(
"Any"));
this.palette.setCurrentCategory("Any");
PgenUtil.setSelectingMode();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
} else if (type == DisplayChangeType.REMOVE
&& !(newRenderableDisplay.getContainer() instanceof AbstractEditor)) {
// remove to side view
// unregister pgen handlers
if (newRenderableDisplay.getContainer() instanceof IMultiPaneEditor) {
IMultiPaneEditor sideView = (IMultiPaneEditor) newRenderableDisplay
.getContainer();
if (this.getPgenTool() != null) {
sideView.unregisterMouseHandler(this.getPgenTool()
.getMouseHandler());
}
}
}
}
@Override
public void partActivated(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
@Override
public void partBroughtToTop(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
@Override
public void partClosed(IWorkbenchPartReference partRef) {
IWorkbenchPart part = partRef.getPart(false);
if (part instanceof VizMapEditor) { // for D2D
if (PgenUtil.findPgenResource((VizMapEditor) part) != null) {
((VizMapEditor) part)
.removeRenderableDisplayChangedListener(this);
}
}
}
@Override
public void partDeactivated(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
@Override
public void partOpened(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
@Override
public void partHidden(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
@Override
public void partVisible(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
@Override
public void partInputChanged(IWorkbenchPartReference partRef) {
// TODO Auto-generated method stub
}
public AbstractPgenTool getPgenTool() {
return pgenTool;
}
public void setPgenTool(AbstractPgenTool pgenTool) {
this.pgenTool = pgenTool;
}
}

View file

@ -145,6 +145,7 @@ import com.vividsolutions.jts.linearref.LocationIndexedLine;
* 05/14 TTR998 J. Wu Added pixelToLatlon().
* 07/14 Chin Chen In latlonToPixel(), make sure not to add null pixel to its return pixel array
* 08/14 TTR962 J. Wu Add replaceWithDate to format output file with DD, MM, YYYY, HH.
* 12/14 R5413 B. Yin Add a listener for D2D swapping pane
* </pre>
*
* @author
@ -685,9 +686,15 @@ public class PgenUtil {
AbstractEditor editor = getActiveEditor();
if (editor != null) {
try {
if ( editor instanceof VizMapEditor || PgenUtil.isNatlCntrsEditor(editor)){
if (PgenUtil.isNatlCntrsEditor(editor)){
PgenSession.getInstance().addEditor(editor);
}
else if (editor instanceof VizMapEditor ){
//Add a listener for D2d to make the swap work.
PgenSession.getInstance().addEditor(editor);
editor.addRenderableDisplayChangedListener(PgenSession.getInstance());
}
switch (getPgenMode()) {
case SINGLE:
/*

View file

@ -64,6 +64,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* 03/13 #928 B. Yin Make the button bar smaller.
* 04/13 #874 B. Yin Handle collection when OK is pressed for multi-selection.
* 04/13 TTR399 J. Wu Make the dialog compact
* 12/14 R5413 B. Yin Refresh editor after dialog close
*
* </pre>
*
@ -156,6 +157,7 @@ public abstract class AttrDlg extends Dialog implements IAttribute {
public void handleShellCloseEvent() {
drawingLayer.removeSelected();
drawingLayer.removeGhostLine();
mapEditor.refresh();
super.handleShellCloseEvent();
PgenUtil.setSelectingMode();
}

View file

@ -144,6 +144,7 @@ import com.vividsolutions.jts.operation.distance.DistanceOp;
* 05/14 TTR 995 J. Wu Make contour label auto-placement an option.
* 07/14 ? B. Yin Added support for dashed-line circle for TCM 12 feet sea.
* 08/14 ? B. Yin Fixed world wrap for TCM track and zero circle issues.
* 12/14 R5413 B. Yin Dispose image and font in find*Ranges methods
* </pre>
*
* @author sgilbert
@ -5910,6 +5911,10 @@ public class DisplayElementFactory {
List<Coordinate> textPos = new ArrayList<Coordinate>();
textPos.add(new Coordinate(loc[0], loc[1]));
if ( font != null ){
font.dispose();
}
return new PgenRangeRecord(rngBox, textPos, false);
}
@ -5983,6 +5988,10 @@ public class DisplayElementFactory {
List<Coordinate> symPos = new ArrayList<Coordinate>();
symPos.add(sym.getLocation());
if ( pic != null ){
pic.dispose();
}
return new PgenRangeRecord(rngBox, symPos, false);
}

View file

@ -45,11 +45,8 @@ import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@ -64,9 +61,6 @@ import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
@ -76,15 +70,14 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.internal.WorkbenchPage;
import org.eclipse.ui.part.ViewPart;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.VizApp;
import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.maps.display.VizMapEditor;
import com.raytheon.uf.viz.core.rsc.ResourceList;
import com.raytheon.viz.ui.EditorUtil;
import com.raytheon.viz.ui.UiUtil;
import com.raytheon.viz.ui.VizWorkbenchManager;
import com.raytheon.viz.ui.editor.AbstractEditor;
@ -92,7 +85,6 @@ import com.raytheon.viz.ui.editor.ISelectedPanesChangedListener;
import com.raytheon.viz.ui.perspectives.AbstractVizPerspectiveManager;
import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
import com.raytheon.viz.ui.tools.AbstractModalTool;
import com.raytheon.uf.viz.core.maps.display.VizMapEditor;
/**
* The PGEN View is used for all interaction with the objects in the PGEN
@ -242,7 +234,7 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
page = site.getPage();
page.addPartListener(this);
/*
* Get a list from registry of all elements that registered with the
* gov.noaa.nws.ncep.ui.pgen.palette extension point
@ -584,10 +576,10 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
/*
* Force a resize
*/
Rectangle r = scroll.getClientArea();
Rectangle r = scroll.getClientArea();
paletteComp.setSize(paletteComp.computeSize(r.width, SWT.DEFAULT));
paletteComp.layout();
// wait for buttons to be created
disableUndoRedo();
}
@ -884,8 +876,9 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
if (PgenUtil.isNatlCntrsEditor(part) || part instanceof VizMapEditor) {
PgenResource rsc = PgenUtil.findPgenResource((AbstractEditor) part);
// if ( PgenSession.getInstance().getPgenResource().getDescriptor() != )
// if ( PgenSession.getInstance().getPgenResource().getDescriptor()
// != )
if ((rsc == null) && (PgenUtil.getPgenMode() == PgenMode.SINGLE)) {
rsc = PgenUtil.createNewResource();
}
@ -905,16 +898,9 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
PgenUtil.addSelectedPaneChangedListener(editor, this);
}
activatePGENContext();
} else if (part instanceof VizMapEditor) {
PgenResource rsc = PgenUtil.findPgenResource((AbstractEditor) part);
if ((rsc == null) && (PgenUtil.getPgenMode() == PgenMode.SINGLE)) {
rsc = PgenUtil.createNewResource();
}
}
else if (part instanceof PgenPaletteWindow) {
} else if (part instanceof PgenPaletteWindow) {
activatePGENContext();
// found NCMapEditor
// AbstractEditor editor = NmapUiUtils.getActiveNatlCntrsEditor();
AbstractEditor editor = PgenUtil.getActiveEditor();
@ -951,7 +937,7 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
// );
partActivated(partRef);
if (PgenUtil.isNatlCntrsEditor(part) || part instanceof VizMapEditor ) {
if (PgenUtil.isNatlCntrsEditor(part) || part instanceof VizMapEditor) {
AbstractEditor editor = (AbstractEditor) part;
PgenResource rsc = PgenUtil.findPgenResource((AbstractEditor) part);
@ -1000,11 +986,12 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
* list in reverse so that active editor is processed last.
*/
for (int i = editors.length - 1; i >= 0; i--) {
// unloadPgenResource(editors[i]);
// unloadPgenResource(editors[i]);
}
for (AbstractEditor editor : PgenSession.getInstance().getEditors() ){
unloadPgenResource(editor);
for (AbstractEditor editor : PgenSession.getInstance()
.getEditors()) {
unloadPgenResource(editor);
}
}
@ -1083,8 +1070,8 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
IWorkbenchPart part = partRef.getPart(false);
// System.out.println("Something Hidden: "+part.getClass().getCanonicalName()
// );
if (PgenUtil.isNatlCntrsEditor(part) || part instanceof VizMapEditor) {
if (PgenUtil.isNatlCntrsEditor(part) || part instanceof VizMapEditor) {
PgenResource pgen = PgenUtil
.findPgenResource((AbstractEditor) part);
if (pgen != null) {
@ -1433,4 +1420,13 @@ public class PgenPaletteWindow extends ViewPart implements SelectionListener,
public String getCurrentObject() {
return currentObject;
}
/*
* Sets the category and its icon.
*/
public void setCurrentCategory(String currentCategory) {
this.resetIcon(this.currentCategory);
this.currentCategory = currentCategory;
this.setActiveIcon(currentCategory);
}
}

View file

@ -51,6 +51,7 @@ import gov.noaa.nws.ncep.ui.pgen.sigmet.Sigmet;
import gov.noaa.nws.ncep.ui.pgen.tca.TCAElement;
import gov.noaa.nws.ncep.ui.pgen.tca.TropicalCycloneAdvisory;
import gov.noaa.nws.ncep.ui.pgen.tools.AbstractPgenTool;
import gov.noaa.nws.ncep.ui.pgen.tools.InputHandlerDefaultImpl;
import gov.noaa.nws.ncep.ui.pgen.tools.PgenSnapJet;
import java.awt.Color;
@ -76,14 +77,18 @@ import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.map.MapDescriptor;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.IInputHandler;
import com.raytheon.uf.viz.core.rsc.IResourceDataChanged;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.IInputHandler.InputPriority;
import com.raytheon.uf.viz.core.rsc.ResourceList.RemoveListener;
import com.raytheon.uf.viz.core.rsc.capabilities.EditableCapability;
import com.raytheon.viz.core.gl.IGLTarget;
import com.raytheon.viz.ui.cmenu.IContextMenuProvider;
import com.raytheon.viz.ui.editor.AbstractEditor;
import com.raytheon.viz.ui.editor.IMultiPaneEditor;
import com.raytheon.viz.ui.input.EditableManager;
import com.raytheon.viz.ui.panes.PaneManager;
import com.raytheon.viz.ui.perspectives.AbstractVizPerspectiveManager;
import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
import com.raytheon.viz.ui.tools.AbstractModalTool;
@ -144,6 +149,7 @@ import com.vividsolutions.jts.geom.Point;
* 04/13 #874 B. Yin Added a method replaceElements with parameter parent.
* 04/13 #977 S. Gilbert PGEN Database support
* 11/13 TTR 752 J. Wu Add methods for CCFP text auto placement.
* 11/14 R5413 B. Yin Display PGEN in side view in D2D
* </pre>
*
* @author B. Yin
@ -359,9 +365,9 @@ public class PgenResource extends
public void paintInternal(IGraphicsTarget target, PaintProperties paintProps)
throws VizException {
IDisplayPaneContainer editor = getResourceContainer();
if (editor instanceof AbstractEditor) {// && ((NCMapEditor)
// editor).getApplicationName().equals("NA")
// ) {
//Draw in main editor and side view (IMultiPaneEditor)
if (editor instanceof AbstractEditor || editor instanceof IMultiPaneEditor) {
DisplayElementFactory df = new DisplayElementFactory(target,
descriptor);
@ -677,7 +683,7 @@ public class PgenResource extends
private void drawSelected(IGraphicsTarget target, PaintProperties paintProps) {
if (!elSelected.isEmpty()) {
if ( !elSelected.isEmpty() && PgenSession.getInstance().getPgenPalette() != null ) {
DisplayElementFactory df = new DisplayElementFactory(target,
descriptor);
List<IDisplayable> displayEls = new ArrayList<IDisplayable>();

View file

@ -33,6 +33,7 @@ import com.raytheon.viz.ui.tools.AbstractModalTool;
* 12/13 TTR899 J. Wu Set delObjFlag to false when any Pgen Action
* button is clicked
* 04/2014 TTR900 pswamy R-click cannot return to SELECT from Rotate and DEL_OBJ
* 12/2014 R5413 B. Yin Set PGEN tool in PGEN session
*
* </pre>
*
@ -79,8 +80,8 @@ public abstract class AbstractPgenTool extends AbstractModalTool {
PgenSession.getInstance().getPgenPalette().setActiveIcon(buttonName);
// Get a PGEN Resource
// drawingLayer = PgenSession.getInstance().getPgenResource();
drawingLayer = PgenUtil.findPgenResource(PgenUtil.getActiveEditor());
drawingLayer = PgenSession.getInstance().getPgenResource();
if (this instanceof PgenDeleteObj) {
delObjFlag = true;
@ -103,11 +104,14 @@ public abstract class AbstractPgenTool extends AbstractModalTool {
}
this.inputHandler = getMouseHandler();
if (this.inputHandler != null)
if (this.inputHandler != null){
mapEditor.registerMouseHandler(this.inputHandler);
}
// Turn off, so tool doesn't exihibit toggle behavior
setEnabled(false);
PgenSession.getInstance().setPgenTool(this);
}
abstract public IInputHandler getMouseHandler();
@ -131,9 +135,11 @@ public abstract class AbstractPgenTool extends AbstractModalTool {
}
if (mapEditor != null && this.inputHandler != null)
mapEditor.unregisterMouseHandler(this.inputHandler);
if (mapEditor != null && this.inputHandler != null){
mapEditor.unregisterMouseHandler(this.inputHandler);
}
PgenSession.getInstance().setPgenTool(null);
}
/**

View file

@ -261,6 +261,7 @@ public class PgenSelectHandler extends InputHandlerDefaultImpl {
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell()).setWatchBox((WatchBox) elSelected);
PgenUtil.loadWatchBoxModifyTool(elSelected);
return false;
} else if (elSelected instanceof Tcm) {
PgenUtil.loadTcmTool(elSelected);
}