/plugins/Substance/trunk/substance-6.1/substance/src/tools/uidebug/RootPaneTitlePaneUiDebugger.java
# · Java · 444 lines · 409 code · 35 blank · 0 comment · 16 complexity · 0e230cea1ecad71ed07887e685b5419f MD5 · raw file
- package tools.uidebug;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import java.awt.ComponentOrientation;
- import java.awt.Container;
- import java.awt.FlowLayout;
- import java.awt.Dialog.ModalityType;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import javax.swing.JButton;
- import javax.swing.JCheckBoxMenuItem;
- import javax.swing.JComponent;
- import javax.swing.JDialog;
- import javax.swing.JMenu;
- import javax.swing.JMenuItem;
- import javax.swing.JPanel;
- import javax.swing.JPopupMenu;
- import javax.swing.JRootPane;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.SwingUtilities;
- import javax.swing.TransferHandler;
- import javax.swing.UIManager;
- import org.pushingpixels.lafwidget.LafWidgetAdapter;
- import org.pushingpixels.lafwidget.animation.AnimationConfigurationManager;
- import org.pushingpixels.lafwidget.animation.effects.GhostPaintingUtils;
- import org.pushingpixels.substance.api.ColorSchemeTransform;
- import org.pushingpixels.substance.api.ComponentState;
- import org.pushingpixels.substance.api.SubstanceColorScheme;
- import org.pushingpixels.substance.api.SubstanceLookAndFeel;
- import org.pushingpixels.substance.api.SubstanceSkin;
- import org.pushingpixels.substance.api.SubstanceConstants.FocusKind;
- import org.pushingpixels.substance.internal.utils.LazyResettableHashMap;
- import org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities;
- public class RootPaneTitlePaneUiDebugger extends LafWidgetAdapter<JRootPane> {
- protected MouseListener substanceDebugUiListener;
- protected JComponent titlePane;
- @Override
- public boolean requiresCustomLafSupport() {
- return false;
- }
- @Override
- public void installUI() {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- if (!(UIManager.getLookAndFeel() instanceof SubstanceLookAndFeel))
- return;
- titlePane = SubstanceLookAndFeel
- .getTitlePaneComponent(SwingUtilities
- .getWindowAncestor(jcomp));
- if (titlePane != null) {
- substanceDebugUiListener = new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- process(e);
- }
- @Override
- public void mouseReleased(MouseEvent e) {
- process(e);
- }
- protected void process(MouseEvent e) {
- if (e.isPopupTrigger()) {
- JPopupMenu popup = new JPopupMenu();
- JMenu cbMenu = new JMenu("Color blindness");
- JMenuItem protanopiaCurrent = new JMenuItem(
- "Protanopia current");
- protanopiaCurrent
- .addActionListener(new SkinChanger(
- new ColorSchemeTransform() {
- public SubstanceColorScheme transform(
- SubstanceColorScheme scheme) {
- return new ProtanopiaColorScheme(
- scheme);
- }
- }, "Protanopia current"));
- cbMenu.add(protanopiaCurrent);
- JMenuItem deuteranopiaCurrent = new JMenuItem(
- "Deuteranopia current");
- deuteranopiaCurrent
- .addActionListener(new SkinChanger(
- new ColorSchemeTransform() {
- public SubstanceColorScheme transform(
- SubstanceColorScheme scheme) {
- return new DeuteranopiaColorScheme(
- scheme);
- }
- }, "Deuteranopia current"));
- cbMenu.add(deuteranopiaCurrent);
- JMenuItem tritanopiaCurrent = new JMenuItem(
- "Tritanopia current");
- tritanopiaCurrent
- .addActionListener(new SkinChanger(
- new ColorSchemeTransform() {
- public SubstanceColorScheme transform(
- SubstanceColorScheme scheme) {
- return new TritanopiaColorScheme(
- scheme);
- }
- }, "Tritanopia current"));
- cbMenu.add(tritanopiaCurrent);
- cbMenu.addSeparator();
- JMenuItem restoreOriginal = new JMenuItem(
- "Restore original");
- if (SubstanceLookAndFeel.getCurrentSkin(null)
- .getColorScheme(null,
- ComponentState.ENABLED) instanceof ColorBlindColorScheme) {
- restoreOriginal
- .addActionListener(new SkinChanger(
- new ColorSchemeTransform() {
- public SubstanceColorScheme transform(
- SubstanceColorScheme scheme) {
- if (scheme instanceof ColorBlindColorScheme)
- return ((ColorBlindColorScheme) scheme)
- .getOrigScheme();
- return scheme;
- }
- }, "Current"));
- } else {
- restoreOriginal.setEnabled(false);
- }
- cbMenu.add(restoreOriginal);
- popup.add(cbMenu);
- JMenu animMenu = new JMenu("Animation rate");
- JMenuItem debugNone = new JMenuItem("None");
- debugNone
- .addActionListener(new AnimationChanger(
- 0));
- animMenu.add(debugNone);
- JMenuItem debugAnim = new JMenuItem(
- "Debug rate (extra slow)");
- debugAnim
- .addActionListener(new AnimationChanger(
- 5000));
- animMenu.add(debugAnim);
- JMenuItem debugAnimFast = new JMenuItem(
- "Debug rate (faster)");
- debugAnimFast
- .addActionListener(new AnimationChanger(
- 2500));
- animMenu.add(debugAnimFast);
- JMenuItem debugSlow = new JMenuItem("Slow rate");
- debugSlow
- .addActionListener(new AnimationChanger(
- 1000));
- animMenu.add(debugSlow);
- JMenuItem debugRegular = new JMenuItem(
- "Regular rate");
- debugRegular
- .addActionListener(new AnimationChanger(
- 250));
- animMenu.add(debugRegular);
- JMenuItem debugFast = new JMenuItem("Fast rate");
- debugFast
- .addActionListener(new AnimationChanger(
- 100));
- animMenu.add(debugFast);
- popup.add(animMenu);
- JMenu focusMenu = new JMenu("Focus kind");
- for (FocusKind fKind : FocusKind.values()) {
- JMenuItem focusMenuItem = new JMenuItem(
- fKind.name().toLowerCase());
- focusMenuItem
- .addActionListener(new FocusKindChanger(
- fKind));
- focusMenu.add(focusMenuItem);
- }
- popup.add(focusMenu);
- JMenuItem dumpHierarchy = new JMenuItem(
- "Dump hierarchy");
- dumpHierarchy
- .addActionListener(new ActionListener() {
- public void actionPerformed(
- ActionEvent e) {
- dump(jcomp, 0);
- }
- });
- popup.add(dumpHierarchy);
- final JCheckBoxMenuItem ltrChange = new JCheckBoxMenuItem(
- "Is left-to-right");
- ltrChange.setSelected(jcomp
- .getComponentOrientation()
- .isLeftToRight());
- ltrChange
- .addActionListener(new ActionListener() {
- public void actionPerformed(
- ActionEvent e) {
- SwingUtilities
- .invokeLater(new Runnable() {
- public void run() {
- jcomp
- .applyComponentOrientation(ltrChange
- .isSelected() ? ComponentOrientation.LEFT_TO_RIGHT
- : ComponentOrientation.RIGHT_TO_LEFT);
- }
- });
- }
- });
- popup.add(ltrChange);
- final JCheckBoxMenuItem useThemedIcons = new JCheckBoxMenuItem(
- "Use themed icons");
- useThemedIcons
- .setSelected(SubstanceCoreUtilities
- .useThemedDefaultIcon(null));
- useThemedIcons
- .addActionListener(new ActionListener() {
- public void actionPerformed(
- ActionEvent e) {
- SwingUtilities
- .invokeLater(new Runnable() {
- public void run() {
- UIManager
- .put(
- SubstanceLookAndFeel.USE_THEMED_DEFAULT_ICONS,
- useThemedIcons
- .isSelected() ? Boolean.TRUE
- : null);
- jcomp.repaint();
- }
- });
- }
- });
- popup.add(useThemedIcons);
- final JCheckBoxMenuItem ghostDebugMode = new JCheckBoxMenuItem(
- "Ghost debug mode");
- ghostDebugMode
- .addActionListener(new ActionListener() {
- public void actionPerformed(
- ActionEvent e) {
- SwingUtilities
- .invokeLater(new Runnable() {
- public void run() {
- ghostDebugMode
- .setEnabled(false);
- GhostPaintingUtils.MAX_ICON_GHOSTING_ALPHA = 0.8f;
- GhostPaintingUtils.MIN_ICON_GHOSTING_ALPHA = 0.6f;
- GhostPaintingUtils.MAX_PRESS_GHOSTING_ALPHA = 0.8f;
- GhostPaintingUtils.MIN_PRESS_GHOSTING_ALPHA = 0.6f;
- GhostPaintingUtils.DECAY_FACTOR = 0.7f;
- }
- });
- }
- });
- popup.add(ghostDebugMode);
- JMenuItem showCacheStats = new JMenuItem(
- "Show cache stats");
- showCacheStats
- .addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(
- ActionEvent e) {
- SwingUtilities
- .invokeLater(new Runnable() {
- public void run() {
- final JTextArea textArea = new JTextArea();
- java.util.List<String> stats = LazyResettableHashMap
- .getStats();
- if (stats != null) {
- for (String stat : stats) {
- textArea
- .append(stat
- + "\n");
- }
- }
- final JDialog dialog = new JDialog(
- SwingUtilities
- .getWindowAncestor(jcomp),
- ModalityType.APPLICATION_MODAL);
- dialog
- .setTitle("Substance cache stats");
- dialog
- .setLayout(new BorderLayout());
- dialog
- .add(
- new JScrollPane(
- textArea),
- BorderLayout.CENTER);
- JButton dismiss = new JButton(
- "Dismiss");
- dismiss
- .addActionListener(new ActionListener() {
- public void actionPerformed(
- ActionEvent e) {
- dialog
- .dispose();
- }
- });
- JButton copyToClipboard = new JButton(
- "Copy to clipboard");
- copyToClipboard
- .addActionListener(new ActionListener() {
- public void actionPerformed(
- ActionEvent e) {
- textArea
- .selectAll();
- TransferHandler
- .getCopyAction()
- .actionPerformed(
- new ActionEvent(
- textArea,
- ActionEvent.ACTION_PERFORMED,
- "Copy"));
- }
- });
- JPanel controls = new JPanel(
- new FlowLayout(
- FlowLayout.RIGHT));
- controls
- .add(copyToClipboard);
- controls
- .add(dismiss);
- dialog
- .add(
- controls,
- BorderLayout.SOUTH);
- dialog.setSize(
- 500,
- 400);
- dialog
- .setLocationRelativeTo(SwingUtilities
- .getRootPane(jcomp));
- dialog
- .setVisible(true);
- }
- });
- }
- });
- popup.add(showCacheStats);
- popup.show(titlePane, e.getX(), e.getY());
- }
- }
- };
- titlePane.addMouseListener(substanceDebugUiListener);
- }
- }
- });
- }
- @Override
- public void uninstallUI() {
- if (this.substanceDebugUiListener != null) {
- titlePane.removeMouseListener(this.substanceDebugUiListener);
- this.substanceDebugUiListener = null;
- }
- }
- protected static class SkinChanger implements ActionListener {
- protected ColorSchemeTransform transform;
- protected String name;
- public SkinChanger(ColorSchemeTransform transform, String name) {
- super();
- this.transform = transform;
- this.name = name;
- }
- public void actionPerformed(ActionEvent e) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- SubstanceSkin newSkin = SubstanceLookAndFeel
- .getCurrentSkin(null).transform(transform, name);
- SubstanceLookAndFeel.setSkin(newSkin);
- }
- });
- }
- }
- protected static class AnimationChanger implements ActionListener {
- protected long newAnimationDuration;
- public AnimationChanger(long newAnimationDuration) {
- super();
- this.newAnimationDuration = newAnimationDuration;
- }
- public void actionPerformed(ActionEvent e) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- AnimationConfigurationManager.getInstance()
- .setTimelineDuration(newAnimationDuration);
- }
- });
- }
- }
- protected static class FocusKindChanger implements ActionListener {
- protected FocusKind newFocusKind;
- public FocusKindChanger(FocusKind newFocusKind) {
- super();
- this.newFocusKind = newFocusKind;
- }
- public void actionPerformed(ActionEvent e) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- UIManager
- .put(SubstanceLookAndFeel.FOCUS_KIND, newFocusKind);
- }
- });
- }
- }
- public static void dump(Component comp, int level) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < level; i++)
- sb.append(" ");
- sb.append(comp.toString());
- System.out.println(sb);
- if (comp instanceof Container) {
- Container cont = (Container) comp;
- for (int i = 0; i < cont.getComponentCount(); i++) {
- dump(cont.getComponent(i), level + 1);
- }
- }
- }
- }