package jetbrains.mps.ide.platform.dialogs.choosers;
/*Generated by MPS */
import com.intellij.openapi.ui.DialogWrapper;
import jetbrains.mps.workbench.goTo.ui.ChooseByNamePanel;
import org.jetbrains.mps.openapi.model.SNodeReference;
import com.intellij.openapi.project.Project;
import com.intellij.ide.util.gotoByName.ChooseByNameModel;
import jetbrains.mps.workbench.goTo.ui.MpsPopupFactory;
import com.intellij.ide.util.gotoByName.ChooseByNamePopupComponent;
import com.intellij.openapi.application.ModalityState;
import jetbrains.mps.workbench.choose.ChooseByNameData;
import jetbrains.mps.workbench.choose.NodesPresentation;
import jetbrains.mps.ide.project.ProjectHelper;
import java.util.Collections;
import java.util.List;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import org.jetbrains.annotations.Nullable;
import javax.swing.JComponent;
import java.awt.Dimension;
public class NodeChooserDialog extends DialogWrapper {
private final ChooseByNamePanel myChooser;
private SNodeReference myChosenElement;
public NodeChooserDialog(Project project, ChooseByNameModel chooseByNameModel) {
super(project, true);
setTitle("Choose Node");
myChooser = MpsPopupFactory.createPanelForNode(project, chooseByNameModel, false);
myChooser.invoke(new ChooseByNamePopupComponent.Callback() {
@Override
public void elementChosen(Object element) {
if (element instanceof SNodeReference) {
myChosenElement = (SNodeReference) element;
}
doOKAction();
}
}, ModalityState.stateForComponent(getWindow()), false);
init();
}
public NodeChooserDialog(Project project, final Iterable<SNodeReference> nodes) {
this(project, new ChooseByNameData(new NodesPresentation(ProjectHelper.getProjectRepository(project))).derivePrompts("node").setScope(nodes, Collections.<SNodeReference>emptySet()));
}
public NodeChooserDialog(Project project, final List<SNode> nodes) {
this(project, ListSequence.fromList(nodes).select(new ISelector<SNode, SNodeReference>() {
public SNodeReference select(SNode it) {
return SNodeOperations.getPointer(it);
}
}));
}
@Nullable
@Override
protected JComponent createCenterPanel() {
myChooser.getPanel().setPreferredSize(new Dimension(400, 500));
return myChooser.getPanel();
}
@Nullable
public SNodeReference getResult() {
if (getExitCode() != DialogWrapper.OK_EXIT_CODE) {
return null;
}
return myChosenElement;
}
@Nullable
@Override
public JComponent getPreferredFocusedComponent() {
return myChooser.getPreferredFocusedComponent();
}
}