package jetbrains.mps.vcs.platform.mergedriver; /*Generated by MPS */ import com.intellij.openapi.ui.DialogWrapper; import javax.swing.JPanel; import java.awt.GridLayout; import java.awt.FlowLayout; import com.intellij.openapi.project.Project; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import java.awt.Dimension; import com.intellij.openapi.util.DimensionService; import org.jetbrains.annotations.Nullable; import javax.swing.JComponent; import org.jetbrains.annotations.NotNull; import javax.swing.Action; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import javax.swing.JCheckBox; import jetbrains.mps.ide.ThreadUtils; public class MergeDriverOptionsDialog extends DialogWrapper { private JPanel myPanel = new JPanel(new GridLayout(0, 1)); private JPanel myMainPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); private Project myProject; private MergeDriverOptionsDialog.InstallerCheckBox<GitGlobalConfigFixesInstaller> myGitFixes; private MergeDriverOptionsDialog.InstallerCheckBox<GitGlobalInstaller> myGitGlobal; private MergeDriverOptionsDialog.InstallerCheckBox<GitRepositoriesInstaller> myGitRepos; private MergeDriverOptionsDialog.InstallerCheckBox<SvnInstaller> myCommonSvn; private MergeDriverOptionsDialog.InstallerCheckBox<SvnInstaller> myIdeSvn; public MergeDriverOptionsDialog(Project project) { super(project); setTitle("MPS VCS Add-ons"); // TODO get rid of code duplication myProject = project; myGitFixes = new MergeDriverOptionsDialog.InstallerCheckBox<GitGlobalConfigFixesInstaller>(new GitGlobalConfigFixesInstaller(myProject)); myGitGlobal = new MergeDriverOptionsDialog.InstallerCheckBox<GitGlobalInstaller>(new GitGlobalInstaller(myProject)); myGitRepos = new MergeDriverOptionsDialog.InstallerCheckBox<GitRepositoriesInstaller>(new GitRepositoriesInstaller(myProject)); myCommonSvn = new MergeDriverOptionsDialog.InstallerCheckBox<SvnInstaller>(new SvnInstaller(myProject, false)); myIdeSvn = new MergeDriverOptionsDialog.InstallerCheckBox<SvnInstaller>(new SvnInstaller(myProject, true)); if (myCommonSvn.myInstaller.sameAs(myIdeSvn.myInstaller)) { myIdeSvn = null; } myGitFixes.addIfNeeded(); myGitGlobal.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { myGitRepos.setEnabled(myGitGlobal.isSelected()); } }); myGitGlobal.addIfNeeded(); myGitRepos.addIfNeeded(); myCommonSvn.addIfNeeded(); if (myIdeSvn != null) { myIdeSvn.addIfNeeded(); } myMainPanel.add(myPanel); final Dimension size = DimensionService.getInstance().getSize(getDimensionServiceKey()); if (size == null) { DimensionService.getInstance().setSize(getDimensionServiceKey(), new Dimension(600, 200)); } init(); } @Nullable @Override protected JComponent createCenterPanel() { return myMainPanel; } @Override public String getDimensionServiceKey() { return "#jetbrains.mps.vcs.mergedriver.MergeDriverOptionDialog"; } @Override protected void doOKAction() { myGitFixes.installIfNeeded(); myGitGlobal.installIfNeeded(); if (myGitGlobal.myInstaller.getCurrentState() == AbstractInstaller.State.INSTALLED) { myGitRepos.installIfNeeded(); } myCommonSvn.installIfNeeded(); if (myIdeSvn != null) { myIdeSvn.installIfNeeded(); } close(DialogWrapper.OK_EXIT_CODE); } @NotNull @Override protected Action[] createActions() { List<Action> actions = ListSequence.fromList(new ArrayList<Action>()); ListSequence.fromList(actions).addElement(getOKAction()); ListSequence.fromList(actions).addElement(getCancelAction()); return ListSequence.fromList(actions).toGenericArray(Action.class); } private class InstallerCheckBox<I extends AbstractInstaller> extends JCheckBox { private I myInstaller; public InstallerCheckBox(I installer) { super(installer.getActionTitle() + ((installer.getCurrentState() == AbstractInstaller.State.OUTDATED ? " (update)" : ""))); myInstaller = installer; } private void addIfNeeded() { AbstractInstaller.State currentState = myInstaller.getCurrentState(); if (currentState != AbstractInstaller.State.NOT_ENABLED) { myPanel.add(this); setText(myInstaller.getActionTitle() + ((currentState == AbstractInstaller.State.OUTDATED ? " (update)" : ""))); setToolTipText(myInstaller.getActionTooltip()); setSelected(currentState != AbstractInstaller.State.INSTALLED); } } private void installIfNeeded() { assert ThreadUtils.isInEDT(); if (isSelected() && isEnabled()) { myInstaller.install(); MergeDriverNotification.getInstance(myProject).setNotificationsSuppressed(false); } } } }