package org.myrobotlab.control.widget; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.Serializable; import java.net.URL; import javax.swing.JFrame; import javax.swing.JPanel; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.service.GUIService; import org.slf4j.Logger; /** * class or undocked display handles events of closing, saving position and * dimensions of * */ public class UndockedPanel implements Serializable { public class TabControlWindowAdapter extends WindowAdapter { @Override public void windowClosing(WindowEvent winEvt) { gui.dockPanel(label); } } public final static Logger log = LoggerFactory.getLogger(UndockedPanel.class.getCanonicalName()); private static final long serialVersionUID = 1L; public int x; public int y; public int width; public int height; private String label; transient private JPanel panel; transient private JFrame frame; transient private GUIService gui; TabControlWindowAdapter windowAdapter = new TabControlWindowAdapter(); public UndockedPanel(GUIService gui) { this.gui = gui; } public void close() { savePosition(); if (frame != null) { frame.dispose(); frame = null; } } public JFrame createFrame(String label, JPanel panel) { if (frame != null) { log.warn("{} frame already created", label); return frame; } this.label = label; this.panel = panel; frame = new JFrame(label); frame.getContentPane().add(panel); // icon URL url = getClass().getResource("/resource/mrl_logo_36_36.png"); Toolkit kit = Toolkit.getDefaultToolkit(); Image img = kit.createImage(url); frame.setIconImage(img); if (x != 0 || y != 0) { frame.setLocation(x, y); } if (width != 0 || height != 0) { frame.setSize(width, height); } frame.addWindowListener(windowAdapter); frame.setVisible(true); frame.pack(); return frame; } public JPanel getDisplay() { return panel; } public void hide() { if (frame != null) { frame.setVisible(false); } else { log.error("{} frame is null", label); } } public boolean isDocked() { return frame == null; } public void savePosition() { if (frame == null) { log.error("frame is null"); return; } Point point = frame.getLocation(); x = point.x; y = point.y; width = frame.getWidth(); height = frame.getHeight(); } public void unhide() { if (frame != null) { frame.setVisible(true); } else { log.error("{} frame is null", label); } } }