package magic.ui.screen.widget; import java.awt.Color; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.SwingConstants; import magic.data.MagicIcon; import magic.ui.MagicImages; import magic.ui.screen.interfaces.IThemeStyle; import magic.ui.theme.Theme; import magic.ui.widget.TexturedPanel; import magic.ui.utility.MagicStyle; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class ScreenFooterPanel extends TexturedPanel implements IThemeStyle { private class ContentPanel extends JPanel { public ContentPanel() { setLayout(new MigLayout("insets 0, gap 0")); setOpaque(false); } } public final static int PANEL_HEIGHT = 50; private final JPanel leftPanel; private final JPanel middlePanel; private final JPanel rightPanel; // True if button being added is the first. private boolean isFirstFooter = true; public ScreenFooterPanel() { this.leftPanel = new ContentPanel(); this.middlePanel = new ContentPanel(); this.rightPanel = new ContentPanel(); setMinimumSize(new Dimension(getPreferredSize().width, PANEL_HEIGHT)); // add close button as default. setLeftButton(MenuButton.getCloseScreenButton()); setLayout(new MigLayout( "insets 0, gap 10, flowx, aligny 50%", "[200][center,grow][200,right]") ); add(this.leftPanel); add(this.middlePanel); add(this.rightPanel); refreshStyle(); } public void refreshLayout() { validate(); repaint(); } @Override public final void refreshStyle() { final Color refBG = MagicStyle.getTheme().getColor(Theme.COLOR_TITLE_BACKGROUND); final Color thisBG = MagicStyle.getTranslucentColor(refBG, 220); setBackground(thisBG); } public void addMiddleButtons(MenuButton[] buttons) { if (buttons != null) { for (MenuButton btn : buttons) { btn.setEnabled(btn.isRunnable()); btn.setBorderPainted(true); btn.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder( 0, isFirstFooter ? 1 : 0, 0, btn.hasSeparator() ? 1 : 0, Color.LIGHT_GRAY ), BorderFactory.createEmptyBorder(0, 10, 0, 10)) ); middlePanel.add(btn, "w 60, h 40"); isFirstFooter = false; } } middlePanel.revalidate(); } public void setLeftButton(MenuButton btn) { leftPanel.removeAll(); if (btn != null) { btn.setEnabled(btn.isRunnable()); btn.setIcon(MagicImages.getIcon(MagicIcon.GO_BACK)); btn.setHorizontalTextPosition(SwingConstants.RIGHT); leftPanel.add(btn); } leftPanel.revalidate(); } public void setRightButton(MenuButton btn) { rightPanel.removeAll(); if (btn != null) { btn.setEnabled(btn.isRunnable()); if (btn.getIcon() == null) { btn.setIcon(MagicImages.getIcon(MagicIcon.GO_NEXT)); } btn.setHorizontalTextPosition(SwingConstants.LEFT); rightPanel.add(btn); } rightPanel.revalidate(); } public void clearFooterButtons() { middlePanel.removeAll(); revalidate(); isFirstFooter = true; } public void addFooterGroup(MenuButton[] btns) { for (MenuButton btn : btns) { final boolean isGroupFirst = btn == btns[0]; final boolean isGroupLast = btn == btns[btns.length - 1]; btn.setEnabled(btn.isRunnable()); btn.setBorderPainted(true); btn.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder( 0, isFirstFooter ? 1 : 0, 0, isGroupLast ? 1 : 0, Color.LIGHT_GRAY ), BorderFactory.createEmptyBorder( 0, isGroupFirst ? 18 : 10, 0, isGroupLast ? 18 : 10 ) )); middlePanel.add(btn, String.format("w %d, h 40", isGroupFirst || isGroupLast ? 60 : 50) ); isFirstFooter = false; } middlePanel.revalidate(); } }