Package org.freeplane.plugin.script.addons

Source Code of org.freeplane.plugin.script.addons.ManageAddOnsDialog

package org.freeplane.plugin.script.addons;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.WindowConstants;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.ui.MenuBuilder;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.TextUtils;
import org.freeplane.main.addons.AddOnProperties;

public class ManageAddOnsDialog extends JDialog {
  private static final long serialVersionUID = 1L;
  private AddOnInstallerPanel addOnInstallerPanel;
  private JTabbedPane tabbedPane;

  public ManageAddOnsDialog(final List<AddOnProperties> addOns) {
    super(UITools.getFrame(), TextUtils.getText("ManageAddOnsAction.text"), true);
    // stolen from FileRevisionsDialog - no idea if actually needed
    if (getOwner() != null) {
      final Window[] ownedWindows = getOwner().getOwnedWindows();
      for (Window w : ownedWindows) {
        if (w.isVisible()) {
          w.toBack();
        }
      }
    }
    tabbedPane = new JTabbedPane();
    tabbedPane.setPreferredSize(getPreferredSizeForWindow());
    final ManageAddOnsPanel manageAddOnsPanel = new ManageAddOnsPanel(filterNonThemes(addOns));
    final ManageAddOnsPanel manageThemesPanel = new ManageAddOnsPanel(filterThemes(addOns));
    addOnInstallerPanel = new AddOnInstallerPanel(manageAddOnsPanel, manageThemesPanel);
    tabbedPane.addTab(getText("tab.install"), createIcon("/images/install_addons.png"), addOnInstallerPanel,
        getText("tab.install.tooltip"));
    tabbedPane.addTab(getText("tab.manage"), createIcon("/images/manage_addons.png"), manageAddOnsPanel,
        getText("tab.manage.tooltip"));
    tabbedPane.addTab(getText("tab.manage.themes"), createIcon("/images/manage_themes.png"), manageThemesPanel,
        getText("tab.manage.themes.tooltip"));
    getContentPane().add(tabbedPane, BorderLayout.CENTER);
    {
      JPanel buttonPane = new JPanel();
      buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
      getContentPane().add(buttonPane, BorderLayout.SOUTH);
      {
        JButton closeButton = new JButton();
        MenuBuilder.setLabelAndMnemonic(closeButton, TextUtils.getRawText("close_btn"));
        closeButton.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            setVisible(false);
          }
        });
        buttonPane.add(closeButton);
      }
    }
    pack();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    UITools.addEscapeActionToDialog(this);
  }

  private List<AddOnProperties> filterThemes(final List<AddOnProperties> addOns) {
    final ArrayList<AddOnProperties> result = new ArrayList<AddOnProperties>(addOns.size());
    for (AddOnProperties addOn : addOns) {
      if (addOn.isTheme())
        result.add(addOn);
    }
    return result;
  }

  private List<AddOnProperties> filterNonThemes(final List<AddOnProperties> addOns) {
    final ArrayList<AddOnProperties> result = new ArrayList<AddOnProperties>(addOns.size());
    for (AddOnProperties addOn : addOns) {
      if (!addOn.isTheme())
        result.add(addOn);
    }
    return result;
  }

  private ImageIcon createIcon(String resource) {
    return new ImageIcon(ResourceController.getResourceController().getResource(resource));
  }

  private Dimension getPreferredSizeForWindow() {
    final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    return new Dimension((int) screenSize.getWidth() * 4 / 5, (int) screenSize.getHeight() * 2 / 3);
  }

  private static String getResourceKey(final String key) {
    return "ManageAddOnsDialog." + key;
  }

  static String getText(String key, Object... parameters) {
    if (parameters.length == 0)
      return TextUtils.getText(getResourceKey(key));
    else
      return TextUtils.format(getResourceKey(key), parameters);
  }

  public void install(final URL url) {
    if (addOnInstallerPanel.isShowing()) {
      addOnInstallerPanel.getUrlField().setText(url.toString());
      tabbedPane.paintImmediately(0, 0, tabbedPane.getWidth(), tabbedPane.getHeight());
      addOnInstallerPanel.getInstallButton().doClick();
    }
    else {
      addOnInstallerPanel.addHierarchyListener(new HierarchyListener() {
        public void hierarchyChanged(HierarchyEvent e) {
          if (addOnInstallerPanel.isShowing()) {
            addOnInstallerPanel.removeHierarchyListener(this);
            install(url);
          }
        }
      });
      tabbedPane.setSelectedComponent(addOnInstallerPanel);
      if (!isVisible())
        setVisible(true);
    }
  }
}
TOP

Related Classes of org.freeplane.plugin.script.addons.ManageAddOnsDialog

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.