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(); } }