package jetbrains.mps.ide.editor.actions;
/*Generated by MPS */
import com.intellij.openapi.ui.DialogWrapper;
import jetbrains.mps.nodeEditor.hintsSettings.ConceptEditorHintPreferencesPage;
import jetbrains.mps.openapi.editor.EditorComponent;
import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;
import jetbrains.mps.nodeEditor.hintsSettings.ConceptEditorHintSettings;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.JComponent;
import javax.swing.Action;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import java.util.Set;
import jetbrains.mps.smodel.ModelAccess;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
import javax.swing.JScrollPane;
import com.intellij.ui.ScrollPaneFactory;
import javax.swing.border.EmptyBorder;
import java.awt.Component;
import org.jetbrains.annotations.NonNls;
public class HintsDialog extends DialogWrapper {
private ConceptEditorHintPreferencesPage myPage;
private EditorComponent myComponent;
private JPanel myMainPanel;
private ButtonGroup myButtonGroup;
private JRadioButton myDefaultRadioButton;
private JRadioButton myCustomRadioButton;
private ConceptEditorHintSettings mySettings;
public HintsDialog(Project project, @NotNull ConceptEditorHintPreferencesPage page, ConceptEditorHintSettings settings, EditorComponent component) {
super(project, true);
myPage = page;
myComponent = component;
mySettings = settings;
setTitle("Push Editor Hints");
init();
}
@Nullable
protected JComponent createCenterPanel() {
return myMainPanel;
}
@Override
@NotNull
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);
}
@Override
protected void doOKAction() {
String[] initialEditorHints = null;
if (!(myDefaultRadioButton.isSelected())) {
myPage.commit();
Set<String> enabledHints = mySettings.getEnabledHints();
initialEditorHints = enabledHints.toArray(new String[enabledHints.size()]);
}
boolean rebuildRequired = myComponent.getUpdater().setInitialEditorHints(initialEditorHints);
if (rebuildRequired) {
ModelAccess.instance().runReadAction(new Runnable() {
@Override
public void run() {
myComponent.rebuildEditorContent();
}
});
}
super.doOKAction();
}
@Override
protected void init() {
myMainPanel = new JPanel(new BorderLayout());
myButtonGroup = new ButtonGroup();
myDefaultRadioButton = new JRadioButton("Use default hints");
myDefaultRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent p0) {
HintsDialog.this.setPanelEnabled(myPage.getComponent(), false);
}
});
myCustomRadioButton = new JRadioButton("Use custom hints:");
myCustomRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent p0) {
HintsDialog.this.setPanelEnabled(myPage.getComponent(), true);
}
});
myButtonGroup.add(myDefaultRadioButton);
myButtonGroup.add(myCustomRadioButton);
boolean useCustomHints = myComponent.getUpdater().getInitialEditorHints() != null;
myDefaultRadioButton.setSelected(!(useCustomHints));
myCustomRadioButton.setSelected(useCustomHints);
setPanelEnabled(myPage.getComponent(), useCustomHints);
JPanel buttonsPanel = new JPanel(new GridLayout(2, 1));
buttonsPanel.add(myDefaultRadioButton);
buttonsPanel.add(myCustomRadioButton);
myMainPanel.add(buttonsPanel, BorderLayout.NORTH);
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myPage.getComponent());
scrollPane.setBorder(new EmptyBorder(0, 30, 0, 0));
scrollPane.setBackground(null);
myMainPanel.add(scrollPane, BorderLayout.CENTER);
super.init();
}
private void setPanelEnabled(JComponent panel, boolean enabled) {
for (Component component : panel.getComponents()) {
component.setEnabled(enabled);
if (component instanceof JComponent) {
setPanelEnabled(((JComponent) component), enabled);
}
}
}
@Nullable
@NonNls
@Override
protected String getDimensionServiceKey() {
return getClass().getName();
}
}