MainFramePresenter.java
package org.microcol.gui;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import org.microcol.gui.event.ExitGameController;
import org.microcol.gui.event.ExitGameEvent;
import org.microcol.gui.event.KeyController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
/**
* MicroCol's main frame.
*/
public class MainFramePresenter {
public final static String START_PANEL = "Start panel";
public final static String MAIN_GAME_PANEL = "Main game panel";
public interface Display {
JFrame getFrame();
void showPanel(String panelName);
}
private final Logger logger = LoggerFactory.getLogger(MainFramePresenter.class);
private Rectangle lastNormalBounds;
private final GamePreferences gamePreferences;
private final MainFramePresenter.Display display;
@Inject
public MainFramePresenter(final MainFramePresenter.Display display, final KeyController keyController,
final GamePreferences gamePreferences, final ExitGameController exitGameController) {
this.gamePreferences = Preconditions.checkNotNull(gamePreferences);
this.display = Preconditions.checkNotNull(display);
display.getFrame().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(final KeyEvent e) {
keyController.fireEvent(e);
}
});
display.getFrame().addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent event) {
if (display.getFrame().getExtendedState() == JFrame.NORMAL) {
lastNormalBounds = display.getFrame().getBounds();
}
}
@Override
public void componentResized(ComponentEvent event) {
if (display.getFrame().getExtendedState() == JFrame.NORMAL) {
lastNormalBounds = display.getFrame().getBounds();
}
}
});
exitGameController.addListener(event -> {
savePreferences();
display.getFrame().dispose();
});
display.getFrame().addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent event) {
logger.debug("Event windowClosing");
exitGameController.fireEvent(new ExitGameEvent());
}
});
}
private void savePreferences() {
final Rectangle normalBounds = display.getFrame().getExtendedState() == JFrame.NORMAL
? display.getFrame().getBounds() : lastNormalBounds;
gamePreferences.setMainFramePosition(normalBounds);
gamePreferences.setMainFrameState(display.getFrame().getExtendedState());
}
public void showPanel(final String panelName){
display.showPanel(panelName);
}
}