Package vg.userInterface.utilPlugins

Source Code of vg.userInterface.utilPlugins.LookAndFeelChanger

package vg.userInterface.utilPlugins;

import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;
import java.util.Observable;

import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.SkinInfo;

import vg.core.AMenuItem;
import vg.core.VisualGraph;
import vg.core.event.UIEventChangeUIStyle;
import vg.core.exception.PluginException;
import vg.core.plugin.IPlugin;
import vg.core.plugin.PluginParameter;

public class LookAndFeelChanger implements IPlugin {
  private PluginParameter param;
  public static final String CONF_STYLE = "L&FStyle";
  private Map<String, SkinInfo> skins;
  @Override
  public void install(final PluginParameter param) throws PluginException {
    this.param = param;
    final String lnf = VisualGraph.config.getProperty(CONF_STYLE);
    if (lnf != null) {
      for (final LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if (info.getName().equals(lnf))
          try {
            UIManager.setLookAndFeel(info.getClassName());
          } catch (Exception ex) {
            VisualGraph.log.printException(ex);
          }
      }
      skins = SubstanceLookAndFeel.getAllSkins();
      if (skins.containsKey(lnf))
      {
        if(SwingUtilities.isEventDispatchThread()) {
          SubstanceLookAndFeel.setSkin(skins.get(lnf).getClassName());
        } else {
          SwingUtilities.invokeLater(new Runnable() {
            public void run() {
              SubstanceLookAndFeel.setSkin(skins.get(lnf).getClassName());
            }
          });
        }
      }
    }
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        JMenu LnFMenuItem = new JMenu("L&F");
        for (final LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
          JMenuItem skinMenu = new JMenuItem(info.getName());
          skinMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              try {
                UIManager.setLookAndFeel(info.getClassName());
                updateFrames();
                VisualGraph.config.setProperty(CONF_STYLE, info.getName());
                // report system, that style of user interface was changed
                LookAndFeelChanger.this.param.userInterface.addEvent(new UIEventChangeUIStyle());
              } catch (Exception ex) {
                VisualGraph.log.printException(ex);
                // throw new PluginException("Error while applying " + info.getName() + " skin",
                // EnumCriticalityException.ERROR);
              }
            }

          });
          LnFMenuItem.add(skinMenu);
        }
        LnFMenuItem.addSeparator();
        for (final String skin : SubstanceLookAndFeel.getAllSkins().keySet()) {
          JMenuItem skinMenu = new JMenuItem(skin);
          skinMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              SubstanceLookAndFeel.setSkin(SubstanceLookAndFeel.getAllSkins().get(skin).getClassName());
              updateFrames();
              VisualGraph.config.setProperty(CONF_STYLE, skin);
              LookAndFeelChanger.this.param.userInterface.addEvent(new UIEventChangeUIStyle());
            }
          });
          LnFMenuItem.add(skinMenu);
        }

        param.userInterface.addMenuItem(new AMenuItem(LnFMenuItem) {
          public void update(Observable o, Object arg) {
          }
        }, "window");
      }
    });
  }

  private void updateFrames() {
    Window[] localWindows = Window.getWindows();
    for (Window w : localWindows) {
      SwingUtilities.updateComponentTreeUI(w);
      // comment follow code, because it calls exception
      // if (w instanceof JFrame) {
      // Window frame = w;
      // boolean wasVisible = frame.isVisible();
      // frame.setVisible(false);
      // frame.dispose();
      // frame.setUndecorated(true);
      // if (UIManager.getLookAndFeel().getSupportsWindowDecorations()) {
      // frame.setUndecorated(true);
      // frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
      // } else {
      // frame.setUndecorated(false);
      // frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
      // }
      // frame.setVisible(wasVisible);
      // }
    }
  }
}
TOP

Related Classes of vg.userInterface.utilPlugins.LookAndFeelChanger

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.