create MenuButton abstract class and pull up common code from sub classes.

master
lodici 2017-06-17 21:50:44 +01:00
parent 0e9e8e042f
commit 003d9bc73c
3 changed files with 113 additions and 183 deletions

View File

@ -1,17 +1,10 @@
package magic.ui.screen.menu; package magic.ui.screen.menu;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font; import java.awt.Font;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import magic.awt.MagicFont; import magic.awt.MagicFont;
import magic.data.GeneralConfig; import magic.data.GeneralConfig;
import magic.data.MagicIcon; import magic.data.MagicIcon;
@ -23,107 +16,28 @@ import magic.ui.helpers.ImageHelper;
import magic.ui.utility.MagicStyle; import magic.ui.utility.MagicStyle;
@SuppressWarnings("serial") @SuppressWarnings("serial")
class CustomMenuButton extends JButton { class CustomMenuButton extends MenuButton {
// translatable strings
private static final String _S1 = "Close";
private final static Color COLOR_NORMAL = Color.WHITE;
private final static Color COLOR_DISABLED = Color.DARK_GRAY;
private static final Font CUSTOM_FONT = MagicFont.JaceBelerenBold.get().deriveFont(32f); private static final Font CUSTOM_FONT = MagicFont.JaceBelerenBold.get().deriveFont(32f);
private static final Font DEFAULT_FONT = FontsAndBorders.FONT_MENU_BUTTON.deriveFont(30.0f); private static final Font DEFAULT_FONT = FontsAndBorders.FONT_MENU_BUTTON.deriveFont(30.0f);
private boolean isRunnable; CustomMenuButton(String caption, AbstractAction action, String tooltip, boolean showSeparator) {
private boolean hasSeparator; super(caption, action, tooltip);
CustomMenuButton(final String caption, final AbstractAction action, final String tooltip, final boolean showSeparator) {
super(caption);
this.isRunnable = (action != null);
this.hasSeparator = showSeparator;
setFont(getDisplayFont()); setFont(getDisplayFont());
setHorizontalAlignment(SwingConstants.CENTER);
setForeground(COLOR_NORMAL);
setButtonTransparent();
setFocusable(true);
setToolTipText(tooltip);
if (isRunnable) {
setMouseAdapter();
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
addActionListener(action);
}
} }
CustomMenuButton(final String caption, final AbstractAction action, final String tooltip) {
CustomMenuButton(String caption, AbstractAction action, String tooltip) {
this(caption, action, tooltip, true); this(caption, action, tooltip, true);
} }
CustomMenuButton(final String caption, final AbstractAction action) {
CustomMenuButton(String caption, AbstractAction action) {
this(caption, action, null); this(caption, action, null);
} }
CustomMenuButton() { CustomMenuButton() {
isRunnable = false; // default to super class.
hasSeparator = false;
} }
public boolean isRunnable() {
return isRunnable;
}
private void setButtonTransparent() {
setOpaque(false);
setContentAreaFilled(false);
setBorderPainted(false);
if (!isRunnable) {
setBorder(null);
}
}
private void setMouseAdapter() {
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (isEnabled()) {
setForeground(MagicStyle.getRolloverColor());
}
}
@Override
public void mouseExited(MouseEvent e) {
if (isEnabled()) {
setForeground(Color.WHITE);
}
}
@Override
public void mousePressed(MouseEvent e) {
if (isEnabled() && SwingUtilities.isLeftMouseButton(e)) {
setForeground(MagicStyle.getPressedColor());
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (isEnabled()) {
setForeground(Color.WHITE);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
});
}
@Override
public void setEnabled(boolean b) {
super.setEnabled(b);
isRunnable = b;
setForeground(b ? COLOR_NORMAL : COLOR_DISABLED);
}
public boolean hasSeparator() {
return hasSeparator;
}
public void setSeparator(boolean b) {
hasSeparator = b;
}
// //
// Static convenience methods. // Static convenience methods.
// //

View File

@ -0,0 +1,91 @@
package magic.ui.screen.menu;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import magic.ui.utility.MagicStyle;
@SuppressWarnings("serial")
public abstract class MenuButton extends JButton {
// translatable strings
protected static final String _S1 = "Close";
protected static final Color COLOR_NORMAL = Color.WHITE;
protected static final Color COLOR_DISABLED = Color.DARK_GRAY;
protected boolean isRunnable;
public MenuButton() {
isRunnable = false;
}
public MenuButton(String text, AbstractAction action, String tooltip) {
super(text);
this.isRunnable = (action != null);
setHorizontalAlignment(SwingConstants.CENTER);
setForeground(COLOR_NORMAL);
setButtonTransparent();
setFocusable(true);
setToolTipText(tooltip);
if (isRunnable) {
setMouseAdapter();
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
addActionListener(action);
}
}
private void setButtonTransparent() {
setOpaque(false);
setContentAreaFilled(false);
setBorderPainted(false);
if (!isRunnable) {
setBorder(null);
}
}
private void setMouseAdapter() {
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (isEnabled()) {
setForeground(MagicStyle.getRolloverColor());
}
}
@Override
public void mouseExited(MouseEvent e) {
if (isEnabled()) {
setForeground(Color.WHITE);
}
}
@Override
public void mousePressed(MouseEvent e) {
if (isEnabled() && SwingUtilities.isLeftMouseButton(e)) {
setForeground(MagicStyle.getPressedColor());
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (isEnabled()) {
setForeground(Color.WHITE);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
});
}
@Override
public void setEnabled(boolean b) {
super.setEnabled(b);
isRunnable = b;
setForeground(b ? COLOR_NORMAL : COLOR_DISABLED);
}
}

View File

@ -1,61 +1,39 @@
package magic.ui.screen.widget; package magic.ui.screen.widget;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import magic.data.MagicIcon; import magic.data.MagicIcon;
import magic.translate.MText; import magic.translate.MText;
import magic.ui.FontsAndBorders;
import magic.ui.MagicImages; import magic.ui.MagicImages;
import magic.ui.ScreenController; import magic.ui.ScreenController;
import magic.ui.helpers.ImageHelper; import magic.ui.helpers.ImageHelper;
import magic.ui.screen.menu.MenuButton;
import magic.ui.utility.MagicStyle; import magic.ui.utility.MagicStyle;
import magic.ui.FontsAndBorders;
import magic.ui.widget.button.LayoutButton; import magic.ui.widget.button.LayoutButton;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class PlainMenuButton extends JButton { public class PlainMenuButton extends MenuButton {
// translatable strings private final boolean hasSeparator;
private static final String _S1 = "Close";
private final static Color COLOR_NORMAL = Color.WHITE; public PlainMenuButton(String caption, AbstractAction action, String tooltip, boolean showSeparator) {
private final static Color COLOR_DISABLED = Color.DARK_GRAY; super(caption, action, tooltip);
private boolean isRunnable;
private boolean hasSeparator;
public PlainMenuButton(final String caption, final AbstractAction action, final String tooltip, final boolean showSeparator) {
super(caption);
this.isRunnable = (action != null);
this.hasSeparator = showSeparator; this.hasSeparator = showSeparator;
setFont(FontsAndBorders.FONT_MENU_BUTTON); setFont(FontsAndBorders.FONT_MENU_BUTTON);
setHorizontalAlignment(SwingConstants.CENTER);
setForeground(COLOR_NORMAL);
setButtonTransparent();
setFocusable(true);
setToolTipText(tooltip);
if (isRunnable) {
setMouseAdapter();
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
addActionListener(action);
}
} }
public PlainMenuButton(final String caption, final AbstractAction action, final String tooltip) {
public PlainMenuButton(String caption, AbstractAction action, String tooltip) {
this(caption, action, tooltip, true); this(caption, action, tooltip, true);
} }
public PlainMenuButton(final String caption, final AbstractAction action) {
public PlainMenuButton(String caption, AbstractAction action) {
this(caption, action, null); this(caption, action, null);
} }
protected PlainMenuButton() {
isRunnable = false; public PlainMenuButton() {
hasSeparator = false; hasSeparator = false;
} }
@ -63,63 +41,10 @@ public class PlainMenuButton extends JButton {
return isRunnable; return isRunnable;
} }
private void setButtonTransparent() {
setOpaque(false);
setContentAreaFilled(false);
setBorderPainted(false);
if (!isRunnable) {
setBorder(null);
}
}
private void setMouseAdapter() {
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (isEnabled()) {
setForeground(MagicStyle.getRolloverColor());
}
}
@Override
public void mouseExited(MouseEvent e) {
if (isEnabled()) {
setForeground(Color.WHITE);
}
}
@Override
public void mousePressed(MouseEvent e) {
if (isEnabled() && SwingUtilities.isLeftMouseButton(e)) {
setForeground(MagicStyle.getPressedColor());
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (isEnabled()) {
setForeground(Color.WHITE);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
});
}
@Override
public void setEnabled(boolean b) {
super.setEnabled(b);
isRunnable = b;
setForeground(b ? COLOR_NORMAL : COLOR_DISABLED);
}
public boolean hasSeparator() { public boolean hasSeparator() {
return hasSeparator; return hasSeparator;
} }
public void setSeparator(boolean b) {
hasSeparator = b;
}
// //
// Static convenience methods. // Static convenience methods.
// //
@ -200,7 +125,7 @@ public class PlainMenuButton extends JButton {
/** /**
* Creates a text-only button with tooltip. * Creates a text-only button with tooltip.
* *
* @param action click action. * @param action click action.
* @param title button caption and tooltip title (<b>in English</b>). * @param title button caption and tooltip title (<b>in English</b>).
* @param tooltip main tooltip text (<b>in English</b>). * @param tooltip main tooltip text (<b>in English</b>).