/*
* DisplayLive.java
* Created on May 9, 2006, 1:48 PM
*/
package edu.mbl.jif.gui.imaging;
//import edu.mbl.jif.camera.*;
import edu.mbl.jif.gui.imaging.DisplayLiveInterface;
import edu.mbl.jif.gui.imaging.ImageDisplayPanel;
import edu.mbl.jif.imaging.stream.StreamSource;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowEvent;
import java.awt.image.ImageProducer;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
/**
* Live display of images streamed from Camera containing an ImageDisplayPanel
* This is used by Magnifier and Lightfield
* Uses ImageProducer (not StreamSource, as in DisplayLiveCamera)
* @author GBH
*/
public class DisplayLiveStream extends JFrame implements DisplayLiveInterface {
ImageDisplayPanel viewPanel;
//StreamSource source;
ImageProducer iProd;
public DisplayLiveStream(String title, ImageProducer iProd, int width, int height, ImageIcon icon) {
System.out.println("opening Display");
this.iProd = iProd;
this.setTitle(title);
try {
this.setIconImage(icon.getImage());
// (new javax.swing.ImageIcon(getClass().getResource("/edu/mbl/jif/camera/icons/lightfield16.png"))).getImage());
} catch (Exception ex) {
}
//get the camera's StreamSource
Dimension imageDim = new Dimension(width, height);
viewPanel = new ImageDisplayPanel(imageDim);
viewPanel.setImageProducer(iProd); // <<<<<<<<<<<
add(viewPanel, BorderLayout.CENTER);
// Rectangle r = sizeAppropriately(imageDim);
// this.setSize(r.width, r.height);
// this.setLocation(r.x, r.y);
super.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent winEvt) {
onCloseContainer();
}
});
super.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
viewPanel.onResize();
}
});
this.setSize(300,300);
this.setLocation(10,10);
setVisible(true);
}
public Rectangle sizeAppropriately(Dimension imageDim) {
int xBuffer = 50;
int yBuffer = 50;
Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
// temp
//Rectangle r = new Rectangle(10, 10, 600, 550);
r.x = r.x + xBuffer;
r.y = r.y + yBuffer;
r.width = r.width - (2 * xBuffer);
r.height = r.height - (2 * yBuffer);
if (imageDim.getWidth() < r.width) {
r.width = (int) imageDim.getWidth() + 12;
}
if (imageDim.getHeight() < r.height) {
r.height = (int) imageDim.getHeight() + 57;
}
return r;
}
public void setStreamSource(StreamSource source) {
}
public StreamSource getStreamSource() {
return null;
}
//--------------------------------------------------------
@Override
public void setSize(Dimension dim) {
super.setSize((int) dim.getWidth(), (int) dim.getHeight());
}
@Override
public void setSize(int w, int h) {
super.setSize(w, h);
}
@Override
public void setScale(float scale) {
}
@Override
public void fitToScreen() {
}
@Override
public void suspend() {
}
@Override
public void resume() {
}
public void restart() {
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
}
@Override
public void setSelectedROI(Rectangle roi) {
viewPanel.setROI(roi);
}
@Override
public Rectangle getSelectedROI() {
return viewPanel.getROI();
}
@Override
public boolean isROISet() {
return viewPanel.isROIset();
}
// Closing...
public void onCloseContainer() {
close();
}
@Override
public void close() {
System.out.println("Closing DisplayLiveStream");
this.setVisible(false);
if(viewPanel != null) {
viewPanel.releaseStreamingSource();
viewPanel = null;
}
iProd = null;
// ((InstrumentController) CamAcqJ.getInstance().getController()).setDisplayLive(null);
this.dispose();
}
}
/*
//Create the dialog.
final JDialog dialog = new JDialog(frame,
"A Non-Modal Dialog");
//Add contents to it. It must have a close button,
//since some L&Fs (notably Java/Metal) don't provide one
//in the window decorations for dialogs.
JLabel label = new JLabel("<html><p align=center>"
+ "This is a non-modal dialog.<br>"
+ "You can have one or more of these up<br>"
+ "and still use the main window.");
label.setHorizontalAlignment(JLabel.CENTER);
Font font = label.getFont();
label.setFont(label.getFont().deriveFont(font.PLAIN,
14.0f));
JButton closeButton = new JButton("Close");
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
JPanel closePanel = new JPanel();
closePanel.setLayout(new BoxLayout(closePanel,
BoxLayout.LINE_AXIS));
closePanel.add(Box.createHorizontalGlue());
closePanel.add(closeButton);
closePanel.setBorder(BorderFactory.
createEmptyBorder(0,0,5,5));
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.add(label, BorderLayout.CENTER);
contentPane.add(closePanel, BorderLayout.PAGE_END);
contentPane.setOpaque(true);
dialog.setContentPane(contentPane);
//Show it.
dialog.setSize(new Dimension(300, 150));
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
}
*/