package jetbrains.mps.build.mps.pluginSolution.plugin;

/*Generated by MPS */

import com.intellij.ide.wizard.StepAdapter;
import javax.swing.JPanel;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JComponent;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.border.EmptyBorder;
import jetbrains.mps.ide.common.LayoutUtil;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;

public abstract class AbstractStep extends StepAdapter {
  protected JPanel myMainPanel;

  public AbstractStep() {
  }

  @Override
  public void _init() {
    this.createComponent();
  }

  public GridBagConstraints createConstraint(int row, int wy) {
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = row;
    c.weightx = 1;
    c.weighty = wy;
    c.insets = new Insets(1, 0, 1, 0);
    return c;
  }

  public abstract JComponent createMainComponent();

  public abstract String getDescription();

  @Override
  public JComponent getComponent() {
    this.createComponent();
    return this.myMainPanel;
  }

  protected void createComponent() {
    if (myMainPanel == null) {
      myMainPanel = createStepPanel();
      if (doLimitStepPanelHeight()) {
        myMainPanel.setPreferredSize(new Dimension(myMainPanel.getPreferredSize().width, myMainPanel.getPreferredSize().height));
      }
    }
    myMainPanel.doLayout();
  }

  protected boolean doLimitStepPanelHeight() {
    return false;
  }

  protected JPanel createStepPanel() {
    JPanel stepPanel = new JPanel(new GridBagLayout());
    JLabel label = new JLabel(this.getDescription());
    label.setBorder(new EmptyBorder(5, 2, 10, 2));
    stepPanel.add(label, LayoutUtil.createLabelConstraints(0));
    JComponent mainComponent = this.createMainComponent();
    mainComponent.setBorder(new CompoundBorder(new EtchedBorder(), new EmptyBorder(2, 2, 2, 2)));
    stepPanel.add(mainComponent, LayoutUtil.createLabelConstraints(1));
    stepPanel.add(new JPanel(), LayoutUtil.createPanelConstraints(2));
    return stepPanel;
  }
}
