cleanup after adding postfix templates preview

This commit is contained in:
Andrey Starovoyt
2014-04-29 14:53:14 +04:00
parent 7a06f6d100
commit a15d3978d9
5 changed files with 71 additions and 68 deletions
@@ -20,10 +20,11 @@ import com.intellij.codeInsight.intention.impl.config.TextDescriptor;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.TitledSeparator;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -38,52 +39,60 @@ class PostfixDescriptionPanel implements Disposable {
private JPanel myBeforePanel;
private JEditorPane myDescriptionBrowser;
public PostfixDescriptionPanel() {
initializeExamplePanel(myAfterPanel);
initializeExamplePanel(myBeforePanel);
}
public void reset(PostfixTemplateMetaData actionMetaData) {
public void reset(@NotNull PostfixTemplateMetaData actionMetaData) {
final TextDescriptor url = actionMetaData.getDescription();
final String description = getDescription(url);
myDescriptionBrowser.setText(description);
showUsages(myBeforePanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesBefore()));
showUsages(myAfterPanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesAfter()));
}
@NotNull
private static String getDescription(TextDescriptor url) {
try {
final TextDescriptor url = actionMetaData.getDescription();
final String description = url == null ? "" : url.getText();
myDescriptionBrowser.setText(description);
showUsages(myBeforePanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesBefore()));
showUsages(myAfterPanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesAfter()));
return url.getText();
}
catch (IOException e) {
LOG.error(e);
}
return "";
}
private void showUsages(final JPanel panel, @Nullable final TextDescriptor exampleUsage) throws IOException {
boolean createMode = exampleUsage == null || panel.getComponents().length == 0;
if (createMode) {
panel.setLayout(new BorderLayout());
panel.removeAll();
}
private static void showUsages(@NotNull JPanel panel, @Nullable TextDescriptor exampleUsage) {
String text = "";
FileType fileType = PlainTextFileType.INSTANCE;
if (exampleUsage != null) {
final String name = exampleUsage.getFileName();
final FileTypeManagerEx fileTypeManager = FileTypeManagerEx.getInstanceEx();
final String extension = fileTypeManager.getExtension(name);
final FileType fileType = fileTypeManager.getFileTypeByExtension(extension);
ActionUsagePanel actionUsagePanel;
if (createMode) {
actionUsagePanel = new ActionUsagePanel();
Disposer.register(this, actionUsagePanel);
try {
text = exampleUsage.getText();
String name = exampleUsage.getFileName();
FileTypeManagerEx fileTypeManager = FileTypeManagerEx.getInstanceEx();
String extension = fileTypeManager.getExtension(name);
fileType = fileTypeManager.getFileTypeByExtension(extension);
}
else {
actionUsagePanel = (ActionUsagePanel)panel.getComponent(0);
}
actionUsagePanel.reset(exampleUsage.getText(), fileType);
if (createMode) {
panel.add(actionUsagePanel);
catch (IOException e) {
LOG.error(e);
}
}
((ActionUsagePanel)panel.getComponent(0)).reset(text, fileType);
panel.repaint();
}
private void initializeExamplePanel(@NotNull JPanel panel) {
panel.setLayout(new BorderLayout());
ActionUsagePanel actionUsagePanel = new ActionUsagePanel();
panel.add(actionUsagePanel);
Disposer.register(this, actionUsagePanel);
}
JPanel getComponent() {
return myPanel;
}
@@ -91,24 +100,4 @@ class PostfixDescriptionPanel implements Disposable {
@Override
public void dispose() {
}
public void init(final int preferredWidth) {
double height =
(myDescriptionBrowser.getSize().getHeight() + myBeforePanel.getSize().getHeight() + myAfterPanel.getSize().getHeight()) / 3;
Dimension newd = new Dimension(preferredWidth, (int)height);
myDescriptionBrowser.setSize(newd);
myDescriptionBrowser.setPreferredSize(newd);
myDescriptionBrowser.setMaximumSize(newd);
myDescriptionBrowser.setMinimumSize(newd);
myBeforePanel.setSize(newd);
myBeforePanel.setPreferredSize(newd);
myBeforePanel.setMaximumSize(newd);
myBeforePanel.setMinimumSize(newd);
myAfterPanel.setSize(newd);
myAfterPanel.setPreferredSize(newd);
myAfterPanel.setMaximumSize(newd);
myAfterPanel.setMinimumSize(newd);
}
}
@@ -24,6 +24,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.lang.UrlClassLoader;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.net.MalformedURLException;
@@ -32,9 +33,18 @@ import java.util.List;
public final class PostfixTemplateMetaData extends BeforeAfterActionMetaData {
public static final String KEY = "$key";
private static final PostfixTemplateMetaData EMPTY_METADATA = new PostfixTemplateMetaData();
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.template.postfix.settings.PostfixTemplateMetaData");
private static final String DESCRIPTION_FOLDER = "postfixTemplates";
public static final String KEY = "$key";
@NotNull
static PostfixTemplateMetaData createMetaData(@Nullable PostfixTemplate template) {
if (template == null) return EMPTY_METADATA;
return new PostfixTemplateMetaData(template);
}
private URL urlDir = null;
private PostfixTemplate myTemplate;
@@ -44,14 +54,19 @@ public final class PostfixTemplateMetaData extends BeforeAfterActionMetaData {
myTemplate = template;
}
PostfixTemplateMetaData() {
super(EMPTY_DESCRIPTION, EMPTY_EXAMPLE, EMPTY_EXAMPLE);
}
@NotNull
@Override
public TextDescriptor[] getExampleUsagesBefore() {
return decorateTextDescription(super.getExampleUsagesBefore());
return decorateTextDescriptor(super.getExampleUsagesBefore());
}
private TextDescriptor[] decorateTextDescription(TextDescriptor[] before) {
@NotNull
private TextDescriptor[] decorateTextDescriptor(TextDescriptor[] before) {
List<TextDescriptor> list = ContainerUtil.newArrayList();
for (final TextDescriptor descriptor : before) {
list.add(new TextDescriptor() {
@@ -72,7 +87,7 @@ public final class PostfixTemplateMetaData extends BeforeAfterActionMetaData {
@NotNull
@Override
public TextDescriptor[] getExampleUsagesAfter() {
return decorateTextDescription(super.getExampleUsagesAfter());
return decorateTextDescriptor(super.getExampleUsagesAfter());
}
@Override
@@ -109,18 +109,11 @@ public class PostfixTemplatesConfigurable implements SearchableConfigurable, Edi
resetDescriptionPanel();
}
});
myDescriptionPanel.setVisible(false);
}
private void resetDescriptionPanel() {
assert myTemplatesListPanel != null;
PostfixTemplate template = myTemplatesListPanel.getTemplate();
if (null != template) {
myDescriptionPanel.setVisible(true);
myInnerPostfixDescriptionPanel.reset(new PostfixTemplateMetaData(template));
}
else {
myDescriptionPanel.setVisible(false);
if (null != myTemplatesListPanel) {
myInnerPostfixDescriptionPanel.reset(PostfixTemplateMetaData.createMetaData(myTemplatesListPanel.getTemplate()));
}
}
@@ -38,6 +38,9 @@ import java.util.List;
public abstract class BeforeAfterActionMetaData {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.config.BeforeAfterActionMetaData");
protected static final TextDescriptor[] EMPTY_EXAMPLE = new TextDescriptor[0];
protected static final TextDescriptor EMPTY_DESCRIPTION = new PlainTextDescriptor("", "");
@NonNls protected static final String DESCRIPTION_FILE_NAME = "description.html";
@NonNls static final String EXAMPLE_USAGE_URL_SUFFIX = ".template";
@NonNls private static final String BEFORE_TEMPLATE_PREFIX = "before";
@@ -65,7 +68,6 @@ public abstract class BeforeAfterActionMetaData {
myDescription = description;
}
@NotNull
private static TextDescriptor[] retrieveURLs(@NotNull URL descriptionDirectory, @NotNull String prefix, @NotNull String suffix)
throws MalformedURLException {
@@ -113,7 +115,7 @@ public abstract class BeforeAfterActionMetaData {
descriptionDirectory +
"'" +
(children == null ? "" : "; directory contents: " + Arrays.asList(children)), cause);
return new TextDescriptor[0];
return EMPTY_EXAMPLE;
}
return urls.toArray(new TextDescriptor[urls.size()]);
}
@@ -126,6 +128,7 @@ public abstract class BeforeAfterActionMetaData {
}
catch (MalformedURLException e) {
LOG.error(e);
return EMPTY_EXAMPLE;
}
}
return myExampleUsagesBefore;
@@ -139,6 +142,7 @@ public abstract class BeforeAfterActionMetaData {
}
catch (MalformedURLException e) {
LOG.error(e);
return EMPTY_EXAMPLE;
}
}
return myExampleUsagesAfter;
@@ -154,6 +158,7 @@ public abstract class BeforeAfterActionMetaData {
}
catch (MalformedURLException e) {
LOG.error(e);
return EMPTY_DESCRIPTION;
}
}
return myDescription;
@@ -33,6 +33,7 @@ import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.HyperlinkLabel;
import com.intellij.ui.TitledSeparator;
import com.intellij.xml.util.XmlStringUtil;
@@ -66,7 +67,7 @@ public class IntentionDescriptionPanel {
public void reset(IntentionActionMetaData actionMetaData, String filter) {
try {
final TextDescriptor url = actionMetaData.getDescription();
final String description = url == null ?
final String description = StringUtil.isEmpty(url.getText()) ?
CodeInsightBundle.message("under.construction.string") :
SearchUtil.markup(url.getText(), filter);
myDescriptionBrowser.setText(description);