package utest.ribbon;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import org.fest.assertions.Assertions;
import org.fest.swing.edt.GuiActionRunner;
import org.fest.swing.edt.GuiQuery;
import org.fest.swing.edt.GuiTask;
import org.fest.swing.junit.testcase.FestSwingJUnitTestCase;
import org.junit.Test;
import org.pushingpixels.flamingo.api.common.JCommandToggleButton;
import org.pushingpixels.flamingo.api.common.icon.EmptyResizableIcon;
import org.pushingpixels.flamingo.api.ribbon.JRibbonBand;
import org.pushingpixels.flamingo.api.ribbon.JRibbonFrame;
import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority;
import org.pushingpixels.flamingo.api.ribbon.RibbonTask;
import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies;
import org.pushingpixels.flamingo.api.ribbon.resize.IconRibbonBandResizePolicy;
import org.pushingpixels.flamingo.api.ribbon.resize.RibbonBandResizePolicy;
public class RibbonBandLayoutTestCase extends FestSwingJUnitTestCase {
private JCommandToggleButton findButton;
private JCommandToggleButton replaceButton;
private JCommandToggleButton findReplaceButton;
private JCommandToggleButton selectAllButton;
@Override
protected void onSetUp() {
GuiActionRunner.execute(new GuiTask() {
@Override
protected void executeInEDT() throws Throwable {
JRibbonFrame frame = new JRibbonFrame();
JRibbonBand findBand = new JRibbonBand("Find",
new EmptyResizableIcon(32));
findBand.setCollapsedStateKeyTip("ZY");
findButton = new JCommandToggleButton("Find",
new EmptyResizableIcon(32));
findButton.getActionModel().setSelected(true);
findBand
.addCommandButton(findButton, RibbonElementPriority.TOP);
replaceButton = new JCommandToggleButton("Replace",
new EmptyResizableIcon(32));
replaceButton.getActionModel().setSelected(true);
findBand.addCommandButton(replaceButton,
RibbonElementPriority.MEDIUM);
findReplaceButton = new JCommandToggleButton("Find replace",
new EmptyResizableIcon(32));
findReplaceButton.getActionModel().setSelected(true);
findBand.addCommandButton(findReplaceButton,
RibbonElementPriority.MEDIUM);
selectAllButton = new JCommandToggleButton("Select all",
new EmptyResizableIcon(32));
selectAllButton.getActionModel().setSelected(true);
findBand.addCommandButton(selectAllButton,
RibbonElementPriority.MEDIUM);
List<RibbonBandResizePolicy> resizePolicies = new ArrayList<RibbonBandResizePolicy>();
resizePolicies.add(new CoreRibbonResizePolicies.Mirror(findBand
.getControlPanel()));
resizePolicies.add(new IconRibbonBandResizePolicy(findBand
.getControlPanel()));
findBand.setResizePolicies(resizePolicies);
frame.getRibbon().addTask(new RibbonTask("Find", findBand));
frame.setSize(600, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
});
}
@Test
public void testLayout() {
// get all bounds
Dimension parentDimension = GuiActionRunner
.execute(new GuiQuery<Dimension>() {
@Override
protected Dimension executeInEDT() throws Throwable {
return findButton.getParent().getSize();
}
});
Rectangle findRect = GuiActionRunner.execute(new GuiQuery<Rectangle>() {
@Override
protected Rectangle executeInEDT() throws Throwable {
return findButton.getBounds();
}
});
Rectangle replaceRect = GuiActionRunner
.execute(new GuiQuery<Rectangle>() {
@Override
protected Rectangle executeInEDT() throws Throwable {
return replaceButton.getBounds();
}
});
Rectangle findReplaceRect = GuiActionRunner
.execute(new GuiQuery<Rectangle>() {
@Override
protected Rectangle executeInEDT() throws Throwable {
return findReplaceButton.getBounds();
}
});
Rectangle selectAllRect = GuiActionRunner
.execute(new GuiQuery<Rectangle>() {
@Override
protected Rectangle executeInEDT() throws Throwable {
return selectAllButton.getBounds();
}
});
// horizontal insets in parent
Assertions.assertThat(findRect.x).isEqualTo(
parentDimension.width - findReplaceRect.x
- findReplaceRect.width);
// vertical white space between buttons
Assertions.assertThat(
findReplaceRect.y - replaceRect.y - replaceRect.height)
.isEqualTo(
selectAllRect.y - findReplaceRect.y
- findReplaceRect.height);
// alignment of top edges
Assertions.assertThat(findRect.y).isEqualTo(replaceRect.y);
// alignment of bottom edges
Assertions.assertThat(findRect.y + findRect.height).isEqualTo(
selectAllRect.y + selectAllRect.height);
}
}