package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import core.MGComposer;
import management.PanelManager;
import gui.shell.Icon_15x15;
import gui.shell.Icon_20x20;
public class MGButton extends JButton implements MouseListener {
public static final int ICON_15X15 = 0;
public static final int ICON_20X20 = 1;
private PanelManager manager;
private MouseListener broadcaster;
private JPanel panel;
private String id;
private boolean selectable;
private boolean selected;
private boolean over;
private boolean image = false;
private ImageIcon normal;
private ImageIcon highlight;
public MGButton(PanelManager manager, JPanel panel, String id, String label, int posx, int posy, int width, int height, boolean add) {
this.id = id;
this.selectable = false;
this.selected = false;
this.over = false;
this.manager = manager;
this.panel = panel;
this.setText(label);
this.addMouseListener(this);
this.setBackground(Skin.buttonBackgroundColor);
this.setBorder(Skin.buttonBorder);
this.setForeground(Skin.buttonForegroundColor);
this.setBounds(posx,posy,width,height);
if (add) { this.panel.add(this); }
this.manager.addMenuButton(this);
}
public MGButton(PanelManager manager, JPanel panel, String id, int posx, int posy, String iconClass, boolean add) {
this.normal = Icon_20x20.generateIcon(iconClass, false);
this.highlight = Icon_20x20.generateIcon(iconClass, true);
this.id = id;
this.selectable = false;
this.selected = false;
this.over = false;
this.manager = manager;
this.panel = panel;
this.image = true;
this.setText(null);
this.setIcon(normal);
this.addMouseListener(this);
this.setBackground(Skin.buttonBackgroundColor);
this.setBorder(Skin.buttonBorder);
this.setForeground(Skin.buttonForegroundColor);
this.setBounds(posx,posy,normal.getIconWidth(),normal.getIconHeight());
if (add) { this.panel.add(this); }
this.manager.addMenuButton(this);
}
public MGButton(PanelManager manager, JPanel panel, String id, int posx, int posy, int iconSize, String iconClass, boolean add) {
if (iconSize == ICON_15X15) {
this.normal = Icon_15x15.generateIcon(iconClass, false);
this.highlight = Icon_15x15.generateIcon(iconClass, true);
} else {
this.normal = Icon_20x20.generateIcon(iconClass, false);
this.highlight = Icon_20x20.generateIcon(iconClass, true);
}
this.id = id;
this.selectable = false;
this.selected = false;
this.over = false;
this.manager = manager;
this.panel = panel;
this.image = true;
this.setText(null);
this.setIcon(normal);
this.addMouseListener(this);
this.setBackground(Skin.buttonBackgroundColor);
this.setBorder(Skin.buttonBorder);
this.setForeground(Skin.buttonForegroundColor);
this.setBounds(posx,posy,normal.getIconWidth(),normal.getIconHeight());
if (add) { this.panel.add(this); }
this.manager.addMenuButton(this);
}
public void drawInPanel() { this.panel.add(this); }
public String getId() {
return id;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
if ( this.selected != selected ) {
this.selected = selected;
if (selected) { setStyleSelected(); }
else { setStyleNormal(); }
};
}
public boolean isOver() {
return over;
}
public boolean isSelectable() {
return selectable;
}
public void setSelectable(boolean selectable) {
this.selectable = selectable;
}
public void release() {
this.selected = false;
this.over = false;
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
setStyleOver();
over = true;
}
public void mouseExited(MouseEvent e) {
if (!selected) {
setStyleNormal();
} else {
setStyleSelected();
}
over = false;
}
public void mousePressed(MouseEvent e) {
switchStyle();
if (broadcaster != null) { broadcaster.mouseClicked(e); }
if (manager != null) { manager.buttonPressed(this); }
}
public void mouseReleased(MouseEvent e) {
}
private void switchStyle() {
if (selectable) {
if (selected) {
selected = false;
setStyleNormal();
} else if (!selected) {
selected = true;
setStyleSelected();
}
}
}
private void setStyleNormal() {
if (image) {
setIcon(normal);
} else {
setBackground(Skin.buttonBackgroundColor);
setBorder(Skin.buttonBorder);
setForeground(Skin.buttonForegroundColor);
setText(this.getText());
}
}
private void setStyleSelected() {
if (image) {
setIcon(highlight);
} else {
setBackground(Skin.buttonSelectedBackgroundColor);
setBorder(Skin.buttonSelectedBorder);
setForeground(Skin.buttonSelectedForegroundColor);
setText(this.getText());
}
}
private void setStyleOver() {
if (image) {
setIcon(highlight);
} else {
setBackground(Skin.buttonOverBackgroundColor);
setBorder(Skin.buttonOverBorder);
setForeground(Skin.buttonOverForegroundColor);
}
}
public void setManager(PanelManager manager) {
this.manager = manager;
}
public void setBroadcaster(MouseListener broadcaster) {
this.broadcaster = broadcaster;
}
}