diff --git a/java/java-impl/src/com/intellij/codeEditor/printing/HyperlinksToClassesOption.java b/java/java-impl/src/com/intellij/codeEditor/printing/HyperlinksToClassesOption.java index 0bd16a677339..1c9e484498d3 100644 --- a/java/java-impl/src/com/intellij/codeEditor/printing/HyperlinksToClassesOption.java +++ b/java/java-impl/src/com/intellij/codeEditor/printing/HyperlinksToClassesOption.java @@ -23,14 +23,16 @@ package com.intellij.codeEditor.printing; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.Map; import java.util.TreeMap; -public class HyperlinksToClassesOption implements PrintOption { +public class HyperlinksToClassesOption extends PrintOption { private JCheckBox myCbGenerateHyperlinksToClasses; private boolean isGenerateHyperlinksToClasses = false; @@ -42,27 +44,6 @@ public class HyperlinksToClassesOption implements PrintOption { isGenerateHyperlinksToClasses = generateHyperlinksToClasses; } - public JComponent createComponent() { - myCbGenerateHyperlinksToClasses = new JCheckBox(CodeEditorBundle.message("export.to.html.generate.hyperlinks.checkbox"), isGenerateHyperlinksToClasses); - return myCbGenerateHyperlinksToClasses; - } - - public boolean isModified() { - return myCbGenerateHyperlinksToClasses.isSelected() != isGenerateHyperlinksToClasses; - } - - public void apply() throws ConfigurationException { - isGenerateHyperlinksToClasses = myCbGenerateHyperlinksToClasses.isSelected(); - } - - public void reset() { - myCbGenerateHyperlinksToClasses.setSelected(isGenerateHyperlinksToClasses); - } - - public void disposeUIResources() { - myCbGenerateHyperlinksToClasses = null; - } - @Nullable public TreeMap collectReferences(PsiFile psiFile, Map filesMap) { if (isGenerateHyperlinksToClasses()) { @@ -76,6 +57,12 @@ public class HyperlinksToClassesOption implements PrintOption { return null; } + @NotNull + @Override + public UnnamedConfigurable createConfigurable() { + return new HyperlinksToClassesConfigurable(); + } + private static void findClassReferences(PsiElement psiElement, TreeMap refMap, Map filesMap, PsiFile psiFile) { PsiReference ref = psiElement.getReference(); @@ -95,4 +82,25 @@ public class HyperlinksToClassesOption implements PrintOption { } } + private class HyperlinksToClassesConfigurable implements UnnamedConfigurable { + public JComponent createComponent() { + myCbGenerateHyperlinksToClasses = new JCheckBox(CodeEditorBundle.message("export.to.html.generate.hyperlinks.checkbox"), isGenerateHyperlinksToClasses); + return myCbGenerateHyperlinksToClasses; + } + + public boolean isModified() { + return myCbGenerateHyperlinksToClasses.isSelected() != isGenerateHyperlinksToClasses; + } + + public void apply() throws ConfigurationException { + isGenerateHyperlinksToClasses = myCbGenerateHyperlinksToClasses.isSelected(); + } + + public void reset() { + myCbGenerateHyperlinksToClasses.setSelected(isGenerateHyperlinksToClasses); + } + + public void disposeUIResources() { + } + } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLDialog.java b/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLDialog.java index b7032e332085..fa54e202ebf8 100644 --- a/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLDialog.java +++ b/platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLDialog.java @@ -22,6 +22,7 @@ import com.intellij.openapi.fileChooser.FileChooserFactory; import com.intellij.openapi.fileChooser.FileTextField; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.LabeledComponent; @@ -31,6 +32,8 @@ import com.intellij.ui.OptionGroup; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; public class ExportToHTMLDialog extends DialogWrapper { private JRadioButton myRbCurrentFile; @@ -45,6 +48,7 @@ public class ExportToHTMLDialog extends DialogWrapper { private final String myDirectoryName; private final boolean myIsSelectedTextEnabled; private final Project myProject; + private final List myExtensions; public ExportToHTMLDialog(String fileName, String directoryName, boolean isSelectedTextEnabled, Project project) { super(project, true); @@ -54,6 +58,10 @@ public class ExportToHTMLDialog extends DialogWrapper { myDirectoryName = directoryName; this.myIsSelectedTextEnabled = isSelectedTextEnabled; setTitle(CodeEditorBundle.message("export.to.html.title")); + myExtensions = new ArrayList(); + for (PrintOption extension : Extensions.getExtensions(PrintOption.EP_NAME)) { + myExtensions.add(extension.createConfigurable()); + } init(); } @@ -114,7 +122,7 @@ public class ExportToHTMLDialog extends DialogWrapper { myCbLineNumbers = new JCheckBox(CodeEditorBundle.message("export.to.html.options.show.line.numbers.checkbox")); optionGroup.add(myCbLineNumbers); - for (PrintOption printOption : Extensions.getExtensions(PrintOption.EP_NAME)) { + for (UnnamedConfigurable printOption : myExtensions) { optionGroup.add(printOption.createComponent()); } @@ -141,11 +149,19 @@ public class ExportToHTMLDialog extends DialogWrapper { myTargetDirectoryField.setText(exportToHTMLSettings.OUTPUT_DIRECTORY); - for (PrintOption printOption : Extensions.getExtensions(PrintOption.EP_NAME)) { + for (UnnamedConfigurable printOption : myExtensions) { printOption.reset(); } } + @Override + protected void dispose() { + for (UnnamedConfigurable extension : myExtensions) { + extension.disposeUIResources(); + } + super.dispose(); + } + public void apply() throws ConfigurationException { ExportToHTMLSettings exportToHTMLSettings = ExportToHTMLSettings.getInstance(myProject); @@ -163,7 +179,7 @@ public class ExportToHTMLDialog extends DialogWrapper { exportToHTMLSettings.PRINT_LINE_NUMBERS = myCbLineNumbers.isSelected(); exportToHTMLSettings.OPEN_IN_BROWSER = myCbOpenInBrowser.isSelected(); exportToHTMLSettings.OUTPUT_DIRECTORY = myTargetDirectoryField.getText(); - for (PrintOption printOption : Extensions.getExtensions(PrintOption.EP_NAME)) { + for (UnnamedConfigurable printOption : myExtensions) { printOption.apply(); } } diff --git a/platform/lang-impl/src/com/intellij/codeEditor/printing/PrintOption.java b/platform/lang-impl/src/com/intellij/codeEditor/printing/PrintOption.java index ee729db30a6f..e3b6dcc517f1 100644 --- a/platform/lang-impl/src/com/intellij/codeEditor/printing/PrintOption.java +++ b/platform/lang-impl/src/com/intellij/codeEditor/printing/PrintOption.java @@ -24,14 +24,18 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Map; import java.util.TreeMap; -public interface PrintOption extends UnnamedConfigurable { - ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.printOption"); +public abstract class PrintOption { + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.printOption"); @Nullable - TreeMap collectReferences(PsiFile psiFile, Map filesMap); + public abstract TreeMap collectReferences(PsiFile psiFile, Map filesMap); + + @NotNull + public abstract UnnamedConfigurable createConfigurable(); } \ No newline at end of file