/* * Copyright (C) 2007 Quadduc <quadduc@gmail.com> * Copyright (C) 2014 Robert B. Colton * * This file is part of LateralGM. * LateralGM is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package org.jeie; import java.awt.GraphicsEnvironment; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.WindowEvent; import java.awt.event.WindowStateListener; import java.util.prefs.Preferences; import javax.swing.JFrame; public class FramePrefsHandler implements ComponentListener,WindowStateListener { private final JFrame frame; private static final Preferences PREFS = Preferences.userRoot().node("/org/jeie"); public FramePrefsHandler(JFrame frame) { this.frame = frame; frame.pack(); // makes the frame displayable, so that maximizing works frame.setMinimumSize(frame.getSize()); frame.setMaximizedBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds()); frame.setBounds(Util.stringToRectangle(PREFS.get("WINDOW_BOUNDS",null),frame.getBounds())); int state = frame.getExtendedState() | (PREFS.getBoolean("WINDOW_MAXIMIZED",true) ? JFrame.MAXIMIZED_BOTH : 0); frame.setExtendedState(state); frame.addComponentListener(this); frame.addWindowStateListener(this); } private boolean isMaximized() { return (frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH; } public void componentMoved(ComponentEvent e) { if (!isMaximized()) PREFS.put("WINDOW_BOUNDS",Util.rectangleToString(frame.getBounds())); } public void componentResized(ComponentEvent e) { if (!isMaximized()) PREFS.put("WINDOW_BOUNDS",Util.rectangleToString(frame.getBounds())); } public void windowStateChanged(WindowEvent e) { PREFS.putBoolean("WINDOW_MAXIMIZED",isMaximized()); } public void componentHidden(ComponentEvent e) { //Unused } public void componentShown(ComponentEvent e) { //Unused } }