package org.plantuml.idea.lang.settings; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @author Max Gorbunov */ public class PlantUmlSettingsPage implements Configurable { private JPanel panel; private JTextField textFieldDotExecutable; private JCheckBox plantUMLErrorAnnotationExperimentalCheckBox; private JButton browse; private JTextField renderDelay; private JTextField cacheSize; private JCheckBox renderUrlLinks; public PlantUmlSettingsPage() { browse.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { browseForFile(textFieldDotExecutable); } }); } private void browseForFile(@NotNull final JTextField target) { final FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFileOrExecutableAppDescriptor(); descriptor.setTitle("Select path to Graphviz/DOT executable (dot.exe)"); String text = target.getText(); final VirtualFile toSelect = text == null || text.isEmpty() ? null : LocalFileSystem.getInstance().findFileByPath(text); VirtualFile virtualFile = FileChooser.chooseFile(descriptor, null, toSelect); if (virtualFile != null) { target.setText(virtualFile.getPath()); } } @Nls @Override public String getDisplayName() { return "PlantUML"; } @Nullable @Override public String getHelpTopic() { return null; } @Nullable @Override public JComponent createComponent() { return panel; } @Override public boolean isModified() { return isModified(PlantUmlSettings.getInstance()); } @Override public void apply() throws ConfigurationException { PlantUmlSettings instance = PlantUmlSettings.getInstance(); getData(instance); instance.applyState(); } @Override public void reset() { setData(PlantUmlSettings.getInstance()); } @Override public void disposeUIResources() { } public void setData(PlantUmlSettings data) { textFieldDotExecutable.setText(data.getDotExecutable()); renderDelay.setText(data.getRenderDelay()); cacheSize.setText(data.getCacheSize()); plantUMLErrorAnnotationExperimentalCheckBox.setSelected(data.isErrorAnnotationEnabled()); renderUrlLinks.setSelected(data.isRenderUrlLinks()); } public void getData(PlantUmlSettings data) { data.setDotExecutable(textFieldDotExecutable.getText()); data.setRenderDelay(renderDelay.getText()); data.setCacheSize(cacheSize.getText()); data.setErrorAnnotationEnabled(plantUMLErrorAnnotationExperimentalCheckBox.isSelected()); data.setRenderUrlLinks(renderUrlLinks.isSelected()); } public boolean isModified(PlantUmlSettings data) { if (textFieldDotExecutable.getText() != null ? !textFieldDotExecutable.getText().equals(data.getDotExecutable()) : data.getDotExecutable() != null) return true; if (renderDelay.getText() != null ? !renderDelay.getText().equals(data.getRenderDelay()) : data.getRenderDelay() != null) return true; if (cacheSize.getText() != null ? !cacheSize.getText().equals(data.getCacheSize()) : data.getCacheSize() != null) return true; if (plantUMLErrorAnnotationExperimentalCheckBox.isSelected() != data.isErrorAnnotationEnabled()) return true; if (renderUrlLinks.isSelected() != data.isRenderUrlLinks()) return true; return false; } }