package magic.ui.widget.duel.viewer;
import java.awt.Component;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import magic.ui.FontsAndBorders;
import magic.ui.duel.viewerinfo.GameViewerInfo;
import magic.ui.screen.duel.game.SwingGameController;
import magic.ui.widget.TexturedPanel;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class GameStatusPanel extends TexturedPanel implements ChangeListener {
private final MigLayout migLayout = new MigLayout("flowy, insets 0, gap 0");
private final UserActionPanel userActionPanel;
private final SwingGameController controller;
private boolean isNewTurnNotification = false;
private final NewTurnPanel newTurnPanel;
private final TurnStatusPanel turnStatusPanel;
public GameStatusPanel(final SwingGameController controller) {
this.controller = controller;
// create UI components
userActionPanel = new UserActionPanel(controller);
newTurnPanel = new NewTurnPanel();
turnStatusPanel = new TurnStatusPanel(controller);
setLookAndFeel();
refreshLayout();
}
private void refreshLayout() {
removeAll();
setLayout(migLayout);
add(isNewTurnNotification ? newTurnPanel : turnStatusPanel, "w 100%, h 58!");
add(userActionPanel, "w 100%, h 100%");
revalidate();
repaint();
}
private void setLookAndFeel() {
userActionPanel.setOpaque(false);
setBackground(FontsAndBorders.TRANSLUCENT_WHITE_STRONG);
setBorder(FontsAndBorders.BLACK_BORDER);
}
public UserActionPanel getUserActionPanel() {
return userActionPanel;
}
public void update() {
turnStatusPanel.refresh(controller.getViewerInfo());
}
@Override
public void stateChanged(final ChangeEvent e) {
update();
}
public void showNewTurnNotification(GameViewerInfo gameInfo) {
assert SwingUtilities.isEventDispatchThread();
isNewTurnNotification = true;
newTurnPanel.refreshData(gameInfo);
refreshLayout();
}
public void hideNewTurnNotification() {
assert SwingUtilities.isEventDispatchThread();
isNewTurnNotification = false;
refreshLayout();
}
public Rectangle getTurnPanelLayout(Component container) {
final Point pt = SwingUtilities.convertPoint(this, turnStatusPanel.getLocation(), container);
return new Rectangle(pt.x, pt.y, turnStatusPanel.getWidth(), turnStatusPanel.getHeight());
}
}