01: /*
02: * Copyright (c) 2005-2008 Flamingo / Substance Kirill Grouchnikov. All Rights Reserved.
03: *
04: * Redistribution and use in source and binary forms, with or without
05: * modification, are permitted provided that the following conditions are met:
06: *
07: * o Redistributions of source code must retain the above copyright notice,
08: * this list of conditions and the following disclaimer.
09: *
10: * o Redistributions in binary form must reproduce the above copyright notice,
11: * this list of conditions and the following disclaimer in the documentation
12: * and/or other materials provided with the distribution.
13: *
14: * o Neither the name of Flamingo Kirill Grouchnikov nor the names of
15: * its contributors may be used to endorse or promote products derived
16: * from this software without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29: */
30: package org.jvnet.substance.flamingo.ribbon.gallery.oob;
31:
32: import java.awt.event.ActionEvent;
33: import java.awt.event.ActionListener;
34: import java.util.*;
35:
36: import javax.swing.SwingUtilities;
37:
38: import org.jvnet.flamingo.common.*;
39: import org.jvnet.flamingo.common.icon.ResizableIcon;
40: import org.jvnet.flamingo.ribbon.JRibbonBand;
41: import org.jvnet.flamingo.ribbon.RibbonElementPriority;
42: import org.jvnet.substance.SubstanceLookAndFeel;
43: import org.jvnet.substance.skin.SkinInfo;
44: import org.jvnet.substance.skin.SubstanceSkin;
45:
46: /**
47: * In-ribbon gallery that contains all available <b>Substance</b> skins.
48: *
49: * @author Kirill Grouchnikov
50: */
51: public class SubstanceSkinRibbonGallery {
52: /**
53: * Adds an in-ribbon gallery that contains all available <b>Substance</b>
54: * skins to the specified ribbon band.
55: *
56: * @param ribbonBand
57: * Ribbon band that will contain the newly added skin gallery.
58: */
59: public static void addSkinGallery(JRibbonBand ribbonBand) {
60: Map<ElementState, Integer> prefWidths = new HashMap<ElementState, Integer>();
61: prefWidths.put(ElementState.SMALL, 1);
62: prefWidths.put(ElementState.MEDIUM, 3);
63: prefWidths.put(ElementState.BIG, 5);
64:
65: List<StringValuePair<List<JCommandToggleButton>>> skinGroups = new ArrayList<StringValuePair<List<JCommandToggleButton>>>();
66: List<JCommandToggleButton> skinButtons = new ArrayList<JCommandToggleButton>();
67:
68: Map<String, SkinInfo> skins = SubstanceLookAndFeel
69: .getAllSkins();
70: for (Map.Entry<String, SkinInfo> entry : skins.entrySet()) {
71: try {
72: final SubstanceSkin skin = (SubstanceSkin) Class
73: .forName(entry.getValue().getClassName())
74: .newInstance();
75: ResizableIcon icon = new SkinResizableIcon(skin, 60, 40);
76: JCommandToggleButton skinButton = new JCommandToggleButton(
77: skin.getDisplayName(), icon);
78: skinButton.addActionListener(new ActionListener() {
79: @Override
80: public void actionPerformed(ActionEvent e) {
81: SwingUtilities.invokeLater(new Runnable() {
82: public void run() {
83: SubstanceLookAndFeel.setSkin(skin);
84: }
85: });
86: }
87: });
88: skinButtons.add(skinButton);
89: } catch (Exception exc) {
90: }
91: }
92:
93: skinGroups.add(new StringValuePair<List<JCommandToggleButton>>(
94: "Skins", skinButtons));
95:
96: ribbonBand.addRibbonGallery(skinGroups, prefWidths, 5, 3,
97: RibbonElementPriority.TOP);
98: }
99: }
|