Package tools.uidebug

Source Code of tools.uidebug.RootPaneTitlePaneUiDebugger$SkinChanger

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);
      }
    }
  }
}
TOP

Related Classes of tools.uidebug.RootPaneTitlePaneUiDebugger$SkinChanger

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.