package magic.ui.screen.widget; import java.awt.Color; import java.awt.Dimension; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import magic.ui.FontsAndBorders; import magic.ui.screen.interfaces.IThemeStyle; import magic.ui.theme.Theme; import magic.ui.utility.MagicStyle; import magic.ui.widget.TexturedPanel; import magic.ui.widget.about.AboutPanel; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class MenuPanel extends TexturedPanel implements IThemeStyle { private static final Dimension PREFERRED_SIZE = new Dimension(320, 405); private final String title; private final List<MenuButton> menuItems = new ArrayList<>(); public MenuPanel() { this(null); } public MenuPanel(final String title0) { this.title = title0; setPreferredSize(PREFERRED_SIZE); setMaximumSize(PREFERRED_SIZE); refreshStyle(); setMenuPanelLayout(); } public void addMenuItem(final MenuButton button) { menuItems.add(button); } public void addMenuItem(final String caption, final AbstractAction action, final String tooltip) { addMenuItem(new MenuButton(caption, action, tooltip)); } public void addMenuItem(final String caption, int fontSize, final AbstractAction action) { final MenuButton btn = new MenuButton(caption, action, null); btn.setFont(btn.getFont().deriveFont((float)fontSize)); addMenuItem(btn); } public void addMenuItem(final String caption, final AbstractAction action) { addMenuItem(caption, action, null); } public void addBlankItem() { final MenuButton emptyButton = new MenuButton("", null); emptyButton.setMinimumSize(new Dimension(0, 10)); menuItems.add(emptyButton); } public void refreshLayout() { setMenuPanelLayout(); } private void setMenuPanelLayout() { removeAll(); setLayout(new MigLayout("insets 0 6 6 6, gap 0, flowy")); if (this.title != null) { add(getMenuTitlePanel(), "w 100%, pad 0 0 10 0, gapbottom 20"); } for (MenuButton menuItem : menuItems) { add(menuItem, "w 100%"); } revalidate(); } private AboutPanel getMenuTitlePanel() { final AboutPanel p = new AboutPanel(this.title); p.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.GRAY)); return p; } @Override public void refreshStyle() { final Color refBG = MagicStyle.getTheme().getColor(Theme.COLOR_TITLE_BACKGROUND); final Color thisBG = MagicStyle.getTranslucentColor(refBG, 200); setBorder(FontsAndBorders.BLACK_BORDER); setBackground(thisBG); } public void clearMenuItems() { menuItems.clear(); } }