package test.ribbon; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import org.pushingpixels.flamingo.api.common.JCommandToggleButton; import org.pushingpixels.flamingo.api.common.StringValuePair; import org.pushingpixels.flamingo.api.common.icon.DecoratedResizableIcon; 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.internal.ui.ribbon.JRibbonGallery; public class RibbonGalleryCheck extends JRibbonFrame { JCommandToggleButton[][] buttons; JRibbonGallery gallery; JRibbonBand ribbonBand; final static String GALLERY_NAME = "Gallery"; private static class TopLeftDecoration implements DecoratedResizableIcon.IconDecorator { int number; public TopLeftDecoration(int number) { this.number = number; } @Override public void paintIconDecoration(Component c, Graphics g, int x, int y, int width, int height) { g.setColor(Color.blue.darker()); g .drawString("" + number, x + 2, y + g.getFontMetrics().getAscent()); } } private static class BottomRightDecoration implements DecoratedResizableIcon.IconDecorator { int number; public BottomRightDecoration(int number) { this.number = number; } @Override public void paintIconDecoration(Component c, Graphics g, int x, int y, int width, int height) { g.setColor(Color.red.darker()); g.drawString("" + number, x + width - g.getFontMetrics().stringWidth("" + number) - 2, y + height - g.getFontMetrics().getDescent()); } } public RibbonGalleryCheck() { super("Ribbon gallery check"); this.buttons = new JCommandToggleButton[4][10]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 10; j++) { this.buttons[i][j] = new JCommandToggleButton("Button " + i + ":" + j, new DecoratedResizableIcon( new DisabledResizableIcon(RibbonElementPriority.TOP, 32, 32), new TopLeftDecoration(i), new BottomRightDecoration(j))); } } this.ribbonBand = new JRibbonBand("Band", new EmptyResizableIcon(32)); Map<RibbonElementPriority, Integer> visibleButtonCounts = new HashMap<RibbonElementPriority, Integer>(); visibleButtonCounts.put(RibbonElementPriority.LOW, 4); visibleButtonCounts.put(RibbonElementPriority.MEDIUM, 5); visibleButtonCounts.put(RibbonElementPriority.TOP, 6); List<StringValuePair<List<JCommandToggleButton>>> galleryButtons = new ArrayList<StringValuePair<List<JCommandToggleButton>>>(); for (int i = 0; i < 4; i++) { List<JCommandToggleButton> galleryButtonsList = new ArrayList<JCommandToggleButton>(); for (int j = 0; j < 10; j++) { galleryButtonsList.add(this.buttons[i][j]); } galleryButtons.add(new StringValuePair<List<JCommandToggleButton>>( "Group " + i, galleryButtonsList)); } this.ribbonBand.addRibbonGallery(GALLERY_NAME, galleryButtons, visibleButtonCounts, 6, 4, RibbonElementPriority.TOP); this.gallery = this.ribbonBand.getControlPanel().getRibbonGallery( GALLERY_NAME); this.getRibbon().addTask(new RibbonTask("Task 1", this.ribbonBand)); JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JButton addToGroup0 = new JButton("Add one to 0"); addToGroup0.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JCommandToggleButton toAdd = new JCommandToggleButton( "Button 0 new", new DecoratedResizableIcon( new DisabledResizableIcon( RibbonElementPriority.TOP, 32, 32), new TopLeftDecoration(0), new BottomRightDecoration(99))); ribbonBand.addRibbonGalleryButtons(GALLERY_NAME, "Group 0", toAdd); } }); controlPanel.add(addToGroup0); JButton addToGroup2 = new JButton("Add two to 2"); addToGroup2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JCommandToggleButton toAdd = new JCommandToggleButton( "Button 2 new", new DecoratedResizableIcon( new DisabledResizableIcon( RibbonElementPriority.TOP, 32, 32), new TopLeftDecoration(2), new BottomRightDecoration(99))); JCommandToggleButton toAdd2 = new JCommandToggleButton( "Button 2 new 2", new DecoratedResizableIcon( new DisabledResizableIcon( RibbonElementPriority.TOP, 32, 32), new TopLeftDecoration(2), new BottomRightDecoration(66))); ribbonBand.addRibbonGalleryButtons(GALLERY_NAME, "Group 2", toAdd, toAdd2); } }); controlPanel.add(addToGroup2); this.add(controlPanel, BorderLayout.SOUTH); } /** * Main method for testing. * * @param args * Ignored. */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { RibbonGalleryCheck c = new RibbonGalleryCheck(); Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment() .getMaximumWindowBounds(); c.setPreferredSize(new Dimension(r.width, r.height / 2)); c.pack(); c.setLocation(r.x, r.y); c.setVisible(true); c.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }); } }