MainFrameView.java
package org.microcol.gui;
import java.awt.CardLayout;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
/**
* MicroCol's main frame.
*/
public class MainFrameView extends JFrame implements MainFramePresenter.Display {
/**
* Default serialVersionUID.
*/
private static final long serialVersionUID = 1L;
private final GamePreferences gamePreferences;
private final CardLayout cardLayout;
@Inject
public MainFrameView(final MainPanelView mainPanelView, final StartPanelView startPanelView,
final MainMenuView mainMenu, final GamePreferences gamePreferences) {
super("MicroCol");
this.gamePreferences = Preconditions.checkNotNull(gamePreferences);
setJMenuBar(mainMenu);
cardLayout = new CardLayout();
getContentPane().setLayout(cardLayout);
getContentPane().add(mainPanelView, MainFramePresenter.MAIN_GAME_PANEL);
getContentPane().add(startPanelView, MainFramePresenter.START_PANEL);
cardLayout.show(getContentPane(), MainFramePresenter.MAIN_GAME_PANEL);
loadPreferences();
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
}
private void loadPreferences() {
final int state = gamePreferences.getMainFrameState();
final Rectangle bound = gamePreferences.getMainFramePosition();
if (areValuesSet(state, bound.x, bound.y, bound.width, bound.height)) {
setBounds(bound);
if ((state & ICONIFIED) != ICONIFIED) {
setExtendedState(state);
}
} else {
pack();
setLocationRelativeTo(null);
}
}
private boolean areValuesSet(int... ints) {
for (int i = 0; i < ints.length; i++) {
if (ints[i] == Integer.MIN_VALUE) {
return false;
}
}
return true;
}
@Override
public void showPanel(final String panelName) {
cardLayout.show(getContentPane(), Preconditions.checkNotNull(panelName));
}
@Override
public JFrame getFrame() {
return this;
}
}