Package org.sylfra.idea.plugins.revu.ui.forms.settings

Source Code of org.sylfra.idea.plugins.revu.ui.forms.settings.RevuAppSettingsForm

package org.sylfra.idea.plugins.revu.ui.forms.settings;

import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.ui.ColorChooser;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.sylfra.idea.plugins.revu.RevuBundle;
import org.sylfra.idea.plugins.revu.RevuIconProvider;
import org.sylfra.idea.plugins.revu.RevuPlugin;
import org.sylfra.idea.plugins.revu.model.IssueStatus;
import org.sylfra.idea.plugins.revu.settings.app.RevuAppSettings;
import org.sylfra.idea.plugins.revu.settings.app.RevuAppSettingsComponent;
import org.sylfra.idea.plugins.revu.utils.RevuUtils;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Map;

/**
* Used to interface settings inside Settings panel
*
* @author <a href="mailto:syllant@gmail.com">Sylvain FRANCOIS</a>
* @version $Id$
*/
public class RevuAppSettingsForm implements ApplicationComponent, Configurable
{
  private JPanel contentPane;
  private JTextField tfLogin;
  private JPanel pnStatusToResolveColor;
  private JPanel pnStatusResolvedColor;
  private JPanel pnStatusClosedColor;
  private JPanel pnStatusReopenedColor;
  private Map<IssueStatus, JPanel> pnIssueStatusColors;

  public RevuAppSettingsForm()
  {
    pnIssueStatusColors = new HashMap<IssueStatus, JPanel>(IssueStatus.values().length);
    pnIssueStatusColors.put(IssueStatus.TO_RESOLVE, pnStatusToResolveColor);
    pnIssueStatusColors.put(IssueStatus.RESOLVED, pnStatusResolvedColor);
    pnIssueStatusColors.put(IssueStatus.CLOSED, pnStatusClosedColor);
    pnIssueStatusColors.put(IssueStatus.REOPENED, pnStatusReopenedColor);

    installListeners();
  }

  private void installListeners()
  {
    MouseListener colorMouseListener = new MouseAdapter()
    {
      @Override
      public void mouseEntered(MouseEvent e)
      {
        JComponent parent = (JComponent) e.getSource();
        parent.setBorder(BorderFactory.createLineBorder(Color.WHITE));
      }

      @Override
      public void mouseExited(MouseEvent e)
      {
        JComponent parent = (JComponent) e.getSource();
        parent.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
      }

      @Override
      public void mouseClicked(MouseEvent e)
      {
        Component parent = (Component) e.getSource();
        Color color = ColorChooser.chooseColor(parent,
          RevuBundle.message("general.selectColor.text"), parent.getBackground());
        if (color != null)
        {
          parent.setBackground(color);
        }
      }
    };

    for (JPanel panel : pnIssueStatusColors.values())
    {
      panel.addMouseListener(colorMouseListener);
      panel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
    }
  }

  /**
   * {@inheritDoc}
   */
  @NonNls
  @NotNull
  public String getComponentName()
  {
    return RevuPlugin.PLUGIN_NAME + "." + getClass().getSimpleName();
  }

  /**
   * {@inheritDoc}
   */
  public void initComponent()
  {
  }

  /**
   * {@inheritDoc}
   */
  public void disposeComponent()
  {
  }

  /**
   * {@inheritDoc}
   */
  @Nls
  public String getDisplayName()
  {
    return "reVu";
  }

  /**
   * {@inheritDoc}
   */
  @Nullable
  public Icon getIcon()
  {
    return RevuIconProvider.getIcon(RevuIconProvider.IconRef.REVU_LARGE);
  }

  /**
   * {@inheritDoc}
   */
  @Nullable
  @NonNls
  public String getHelpTopic()
  {
    return null;
  }

  /**
   * {@inheritDoc}
   */
  public JComponent createComponent()
  {
    return contentPane;
  }

  /**
   * {@inheritDoc}
   */
  public boolean isModified()
  {
    RevuAppSettings appSettings = retrieveAppSettings();

    if (!tfLogin.getText().equals(appSettings.getLogin()))
    {
      return true;
    }

    for (Map.Entry<IssueStatus, JPanel> entry : pnIssueStatusColors.entrySet())
    {
      if (!appSettings.getIssueStatusColors().get(entry.getKey()).equals(
        RevuUtils.getHex(entry.getValue().getBackground())))
      {
        return true;
      }
    }

    return false;
  }

  /**
   * {@inheritDoc}
   */
  public void apply() throws ConfigurationException
  {
    RevuAppSettings appSettings = retrieveAppSettings();

    appSettings.setLogin(tfLogin.getText());

    for (Map.Entry<IssueStatus, JPanel> entry : pnIssueStatusColors.entrySet())
    {
      appSettings.getIssueStatusColors().put(entry.getKey(), RevuUtils.getHex(entry.getValue().getBackground()));
    }

    ServiceManager.getService(RevuAppSettingsComponent.class).loadState(appSettings);
  }

  /**
   * {@inheritDoc}
   */
  public void reset()
  {
    RevuAppSettings appSettings = retrieveAppSettings();

    tfLogin.setText(appSettings.getLogin());

    for (Map.Entry<IssueStatus, JPanel> entry : pnIssueStatusColors.entrySet())
    {
      entry.getValue().setBackground(Color.decode(appSettings.getIssueStatusColors().get(entry.getKey())));
    }
  }

  private RevuAppSettings retrieveAppSettings()
  {
    return ServiceManager.getService(RevuAppSettingsComponent.class).getState();
  }

  /**
   * {@inheritDoc}
   */
  public void disposeUIResources()
  {
  }
}
TOP

Related Classes of org.sylfra.idea.plugins.revu.ui.forms.settings.RevuAppSettingsForm

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.