Author: mccaky
Date: Wed Nov 5 06:12:11 2014
New Revision: 1438
Log:
Updated passive event display classes. Removed original key-bindings and added full menu support. Added filter panel access to PDataEventViewer to allow for cluster highlighting in monitoring application.
Modified:
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java Wed Nov 5 06:12:11 2014
@@ -1,7 +1,17 @@
package org.hps.monitoring.ecal.eventdisplay.ui;
import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
import java.io.IOException;
+import java.util.List;
+
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.KeyStroke;
import org.hps.monitoring.ecal.eventdisplay.util.CrystalDataSet;
import org.hps.monitoring.ecal.eventdisplay.util.EcalWiringManager;
@@ -39,6 +49,10 @@
private static final int FIELD_CHANNEL = 10;
private static final int FIELD_GAIN = 11;
+ // Filter panel components.
+ private JFrame filterWindow;
+ private CrystalFilterPanel filterPanel;
+
/**
* Initializes a new <code>DataFileViewer</code> that reads from
* the given event manager for event data and the given hardware
@@ -60,6 +74,59 @@
for(String fieldName : fieldNames) {
addStatusField(fieldName);
}
+
+ // Instantiate the crystal filter panel.
+ filterPanel = new CrystalFilterPanel(ewm);
+ filterWindow = new JFrame("Event Display Crystal Filter");
+ filterWindow.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
+ filterWindow.add(filterPanel);
+ filterWindow.pack();
+ filterWindow.setResizable(false);
+
+ // Add a new view menu option to display the filter panel.
+ JMenuItem menuFilter = new JMenuItem("Show Filter", KeyEvent.VK_F);
+ menuFilter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK));
+ menuFilter.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) { filterWindow.setVisible(true); }
+ });
+ menu[MENU_VIEW].addSeparator();
+ menu[MENU_VIEW].add(menuFilter);
+
+ // Add an action listener to note when the filter window applies
+ // a crystal filter.
+ filterPanel.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // Suppress panel redrawing until the highlights are set.
+ ecalPanel.setSuppressRedraw(true);
+
+ // Clear the panel highlighting.
+ ecalPanel.clearHighlight();
+
+ // If the filter panel is active, highlight the crystals
+ // that passed the filter.
+ if(filterPanel.isActive()) {
+ // Get the list of filtered crystals.
+ List<Point> filterList = filterPanel.getFilteredCrystals();
+
+ // Highlight each of the filtered crystals.
+ for(Point crystal : filterList) {
+ ecalPanel.setCrystalHighlight(toPanelPoint(crystal), java.awt.Color.WHITE);
+ }
+ }
+
+ // Redraw the highlights.
+ ecalPanel.setSuppressRedraw(false);
+ ecalPanel.repaint();
+ }
+ });
+
+ // Kill the filter window on system close.
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosed(WindowEvent e) { filterWindow.dispose(); }
+ });
}
@Override
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PEventViewer.java Wed Nov 5 06:12:11 2014
@@ -1,15 +1,7 @@
package org.hps.monitoring.ecal.eventdisplay.ui;
-import java.awt.Color;
import java.awt.Point;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
import java.util.ArrayList;
-
-import javax.imageio.ImageIO;
import org.hps.monitoring.ecal.eventdisplay.event.Association;
import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
@@ -23,25 +15,10 @@
*/
public class PEventViewer extends PassiveViewer {
private static final long serialVersionUID = -7479125553259270894L;
- // Stores whether the background color is set or not.
- private boolean background = false;
// Stores cluster objects.
protected ArrayList<Cluster> clusterList = new ArrayList<Cluster>();
// Stores hit objects.
protected ArrayList<EcalHit> hitList = new ArrayList<EcalHit>();
-
- /**
- * Creates a passive viewer for displaying hits and clusters in
- * an event.
- * @param fieldValues - Any additional status fields to display.
- */
- public PEventViewer() {
- // Initialize the superclass.
- super();
-
- // Set the key bindings.
- addKeyListener(new EcalKeyListener());
- }
@Override
public void addHit(EcalHit hit) { hitList.add(hit); }
@@ -105,67 +82,4 @@
// Update the status panel to account for the new event.
updateStatusPanel();
}
-
- /**
- * The <code>EcalListener</code> class binds keys to actions.
- * Bound actions include:
- * b :: Toggle color-mapping for 0 energy crystals
- * h :: Toggle selected crystal highlighting
- * l :: Toggle logarithmic versus linear scaling
- * s :: Saves the current display to a file
- **/
- private class EcalKeyListener implements KeyListener {
- @Override
- public void keyPressed(KeyEvent e) { }
-
- @Override
- public void keyReleased(KeyEvent e) {
- // 'b' toggles the default white background.
- if(e.getKeyCode() == 66) {
- if(background) { ecalPanel.setDefaultCrystalColor(null); }
- else { ecalPanel.setDefaultCrystalColor(Color.GRAY); }
- background = !background;
- }
-
- // 'h' toggles highlighting the crystal under the cursor.
- else if(e.getKeyCode() == 72) { ecalPanel.setSelectionHighlighting(!ecalPanel.isSelectionEnabled()); }
-
- // 'l' toggles linear or logarithmic scaling.
- else if(e.getKeyCode() == 76) {
- if(ecalPanel.isScalingLinear()) { ecalPanel.setScalingLogarithmic(); }
- else { ecalPanel.setScalingLinear(); }
- }
-
- // 's' saves the panel to a file.
- else if(e.getKeyCode() == 83) {
- // Make a new buffered image on which to draw the content pane.
- BufferedImage screenshot = new BufferedImage(getContentPane().getWidth(),
- getContentPane().getHeight(), BufferedImage.TYPE_INT_ARGB);
-
- // Paint the content pane to image.
- getContentPane().paint(screenshot.getGraphics());
-
- // Get the lowest available file name.
- int fileNum = 0;
- File imageFile = new File("screenshot_" + fileNum + ".png");
- while(imageFile.exists()) {
- fileNum++;
- imageFile = new File("screenshot_" + fileNum + ".png");
- }
-
- // Save the image to a PNG file.
- try { ImageIO.write(screenshot, "PNG", imageFile); }
- catch(IOException ioe) {
- System.err.println("Error saving file \"screenshot.png\".");
- }
- System.out.println("Screenshot saved to: " + imageFile.getAbsolutePath());
- }
-
- // Otherwise, print out the key code for the pressed key.
- else { System.out.printf("Key Code: %d%n", e.getKeyCode()); }
- }
-
- @Override
- public void keyTyped(KeyEvent e) { }
- }
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java Wed Nov 5 06:12:11 2014
@@ -1,13 +1,4 @@
package org.hps.monitoring.ecal.eventdisplay.ui;
-
-import java.awt.Color;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-
-import javax.imageio.ImageIO;
import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
import org.hps.monitoring.ecal.eventdisplay.event.EcalHit;
@@ -21,41 +12,20 @@
*/
public abstract class PassiveViewer extends Viewer {
private static final long serialVersionUID = -7479125553259270894L;
- // Stores whether the background color is set or not.
- private boolean background = false;
/**
- * <b>PassiveViewer</b><br/><br/>
- * <code>public <b>PassiveViewer</b>(String... fieldValues)</code><br/><br/>
- * @param fieldValues
- */
- public PassiveViewer() {
- // Initialize the superclass.
- super();
-
- // Set the key bindings.
- addKeyListener(new EcalKeyListener());
- }
-
- /**
- * <b>addHit</b><br/><br/>
- * <code>public void <b>addHit</b>(EcalHit hit)</code><br/><br/>
* Adds a new hit to the display.
* @param hit - The hit to be added.
*/
public abstract void addHit(EcalHit hit);
/**
- * <b>addCluster</b><br/><br/>
- * <code>public void <b>addCluster</b>(Cluster cluster)</code><br/><br/>
* Adds a new cluster to the display.
* @param cluster - The cluster to be added.
*/
public abstract void addCluster(Cluster cluster);
/**
- * <b>resetDisplay</b><br/><br/>
- * <code>public void <b>resetDisplay</b>()</code><br/><br/>
* Clears any hits or clusters that have been added to the viewer.
* Note that this does not automatically update the displayed panel.
* <code>updateDisplay</code> must be called separately.
@@ -63,8 +33,6 @@
public abstract void resetDisplay();
/**
- * <b>setScale</b><br/><br/>
- * <code>public void <b>setScale</b>(int min, int max)</code><br/><br/>
* Sets the upper and lower bounds of for the calorimeter display's
* color mapping scale.
* @param min - The lower bound.
@@ -76,8 +44,6 @@
}
/**
- * <b>setScaleMaximum</b><br/><br/>
- * <code>public void <b>setScaleMaximum</b>(int max)</code><br/><br/>
* Sets the upper bound for the calorimeter display's color mapping
* scale.
* @param max - The upper bound.
@@ -85,8 +51,6 @@
public void setScaleMaximum(int max) { ecalPanel.setScaleMaximum(max); }
/**
- * <b>setScaleMinimum</b><br/><br/>
- * <code>public void <b>setScaleMinimum</b>(int min)</code><br/><br/>
* Sets the lower bound for the calorimeter display's color mapping
* scale.
* @param min - The lower bound.
@@ -94,70 +58,8 @@
public void setScaleMinimum(int min) { ecalPanel.setScaleMinimum(min); }
/**
- * <b>updateDisplay</b><br/><br/>
- * <code>public void <b>updateDisplay</b>()</code><br/><br/>
* Displays the hits and clusters added by the <code>addHit</code>
* and <code>addCluster</code> methods.
*/
public abstract void updateDisplay();
-
- /**
- * The <code>EcalListener</code> class binds keys to actions.
- * Bound actions include:
- * b :: Toggle color-mapping for 0 energy crystals
- * h :: Toggle selected crystal highlighting
- * l :: Toggle logarithmic versus linear scaling
- * s :: Saves the current display to a file
- **/
- private class EcalKeyListener implements KeyListener {
- public void keyPressed(KeyEvent e) { }
-
- public void keyReleased(KeyEvent e) {
- // 'b' toggles the default white background.
- if(e.getKeyCode() == 66) {
- if(background) { ecalPanel.setDefaultCrystalColor(null); }
- else { ecalPanel.setDefaultCrystalColor(Color.GRAY); }
- background = !background;
- }
-
- // 'h' toggles highlighting the crystal under the cursor.
- else if(e.getKeyCode() == 72) { ecalPanel.setSelectionHighlighting(!ecalPanel.isSelectionEnabled()); }
-
- // 'l' toggles linear or logarithmic scaling.
- else if(e.getKeyCode() == 76) {
- if(ecalPanel.isScalingLinear()) { ecalPanel.setScalingLogarithmic(); }
- else { ecalPanel.setScalingLinear(); }
- }
-
- // 's' saves the panel to a file.
- else if(e.getKeyCode() == 83) {
- // Make a new buffered image on which to draw the content pane.
- BufferedImage screenshot = new BufferedImage(getContentPane().getWidth(),
- getContentPane().getHeight(), BufferedImage.TYPE_INT_ARGB);
-
- // Paint the content pane to image.
- getContentPane().paint(screenshot.getGraphics());
-
- // Get the lowest available file name.
- int fileNum = 0;
- File imageFile = new File("screenshot_" + fileNum + ".png");
- while(imageFile.exists()) {
- fileNum++;
- imageFile = new File("screenshot_" + fileNum + ".png");
- }
-
- // Save the image to a PNG file.
- try { ImageIO.write(screenshot, "PNG", imageFile); }
- catch(IOException ioe) {
- System.err.println("Error saving file \"screenshot.png\".");
- }
- System.out.println("Screenshot saved to: " + imageFile.getAbsolutePath());
- }
-
- // Otherwise, print out the key code for the pressed key.
- else { System.out.printf("Key Code: %d%n", e.getKeyCode()); }
- }
-
- public void keyTyped(KeyEvent e) { }
- }
}
|