/*
* Copyright (c) 2014 tabletoptool.com team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* rptools.com team - initial implementation
* tabletoptool.com team - further development
*/
package com.t3.client.ui.macrobuttons.panels;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import com.t3.client.AppStyle;
import com.t3.client.TabletopTool;
import com.t3.client.ui.zone.ZoneRenderer;
import com.t3.language.I18N;
public class MenuButtonsPanel extends JPanel {
public MenuButtonsPanel() {
//TODO: refactoring reminder
setLayout(new FlowLayout(FlowLayout.LEFT));
addSelectAllButton();
addDeselectAllButton();
addSpacer();
addSelectPreviousButton();
addSelectNextButton();
addSpacer();
addRevertToPreviousButton();
}
private void addSelectAllButton() {
ImageIcon i = new ImageIcon(AppStyle.arrowOut);
JButton label = new JButton(i) {
@Override
public Insets getInsets() {
return new Insets(2, 2, 2, 2);
}
};
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent event) {
ZoneRenderer renderer = TabletopTool.getFrame().getCurrentZoneRenderer();
renderer.selectTokens(new Rectangle(renderer.getX(), renderer.getY(), renderer.getWidth(), renderer.getHeight()));
}
});
label.setToolTipText(I18N.getText("panel.Selected.tooltip.selectAll"));
label.setBackground(null);
add(label);
}
private void addDeselectAllButton() {
ImageIcon i3 = new ImageIcon(AppStyle.arrowIn);
JButton label3 = new JButton(i3) {
@Override
public Insets getInsets() {
return new Insets(2, 2, 2, 2);
}
};
label3.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent event) {
ZoneRenderer renderer = TabletopTool.getFrame().getCurrentZoneRenderer();
renderer.clearSelectedTokens();
}
});
label3.setToolTipText(I18N.getText("panel.Selected.tooltip.deslectAll"));
label3.setBackground(null);
add(label3);
}
private void addRevertToPreviousButton() {
ImageIcon i1 = new ImageIcon(AppStyle.arrowRotateClockwise);
JButton label1 = new JButton(i1) {
@Override
public Insets getInsets() {
return new Insets(2, 2, 2, 2);
}
};
label1.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent event) {
TabletopTool.getFrame().getCurrentZoneRenderer().undoSelectToken();
}
});
label1.setToolTipText(I18N.getText("panel.Selected.tooltip.revertToPrevious"));
label1.setBackground(null);
add(label1);
}
private void addSpacer() {
JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(10, 10);
}
@Override
public Insets getInsets() {
return new Insets(0, 0, 0, 0);
}
};
add(panel);
}
private void addSelectNextButton() {
ImageIcon i1 = new ImageIcon(AppStyle.arrowRight);
JButton label1 = new JButton(i1) {
@Override
public Insets getInsets() {
return new Insets(2, 2, 2, 2);
}
};
label1.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent event) {
TabletopTool.getFrame().getCurrentZoneRenderer().cycleSelectedToken(1);
}
});
label1.setToolTipText(I18N.getText("panel.Selected.tooltip.next"));
label1.setBackground(null);
add(label1);
}
private void addSelectPreviousButton() {
ImageIcon i1 = new ImageIcon(AppStyle.arrowLeft);
JButton label1 = new JButton(i1) {
@Override
public Insets getInsets() {
return new Insets(2, 2, 2, 2);
}
};
label1.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent event) {
TabletopTool.getFrame().getCurrentZoneRenderer().cycleSelectedToken(-1);
}
});
label1.setToolTipText(I18N.getText("panel.Selected.tooltip.previous"));
label1.setBackground(null);
add(label1);
}
@Override
public Dimension getPreferredSize() {
Dimension size = getParent().getSize();
FlowLayout layout = (FlowLayout) getLayout();
Insets insets = getInsets();
// This isn't exact, but hopefully it's close enough
int x = layout.getHgap() + insets.left;
int y = layout.getVgap();
int rowHeight = 0;
for (Component c : getComponents()) {
Dimension cSize = c.getPreferredSize();
if (x + cSize.width + layout.getHgap() > size.width - insets.right && x > 0) {
x = 0;
y += rowHeight + layout.getVgap();
rowHeight = 0;
}
x += cSize.width + layout.getHgap();
rowHeight = Math.max(cSize.height, rowHeight);
}
y += rowHeight + layout.getVgap();
y += getInsets().top;
y += getInsets().bottom;
Dimension prefSize = new Dimension(size.width, y);
return prefSize;
}
}