package org.chartsy.chatsy.chat.ui; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.JFrame; import org.chartsy.chatsy.chat.ChatsyManager; import org.openide.windows.WindowManager; public class ChatFrame extends JFrame implements WindowFocusListener { private long inactiveTime; private boolean focused; public ChatFrame() { this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); setIconImage(ChatsyManager.getApplicationImage().getImage()); getContentPane().setLayout(new BorderLayout()); getContentPane().add(ChatsyManager.getChatManager().getChatContainer(), BorderLayout.CENTER); setSize(500, 400); setLocationRelativeTo(WindowManager.getDefault().getMainWindow()); addWindowFocusListener(this); addWindowListener(new WindowAdapter() { public void windowActivated(WindowEvent e) { inactiveTime = 0; } public void windowDeactivated(WindowEvent e) { inactiveTime = System.currentTimeMillis(); } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { setFocusableWindowState(true); } }); addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { try { ChatRoom chatRoom = ChatsyManager.getChatManager().getChatContainer().getActiveChatRoom(); chatRoom.getVerticalSlipPane().setDividerLocation(-1); } catch (ChatRoomNotFoundException ex) { } } }); } public void windowGainedFocus(WindowEvent e) { focused = true; ChatsyManager.getChatManager().getChatContainer().focusChat(); } public void windowLostFocus(WindowEvent e) { focused = false; } public boolean isInFocus() { return focused; } public long getInactiveTime() { if (inactiveTime == 0) return 0; return System.currentTimeMillis() - inactiveTime; } public void bringFrameIntoFocus() { if (!isVisible()) setVisible(true); if (getState() == Frame.ICONIFIED) setState(Frame.NORMAL); toFront(); requestFocus(); } public void buzz() { ShakeWindow shakeWindow = new ShakeWindow(this); shakeWindow.startShake(); } }