| /* |
| * Copyright 2000-2014 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.codeInsight.template.postfix.settings; |
| |
| import com.intellij.codeInsight.CodeInsightBundle; |
| import com.intellij.codeInsight.intention.impl.config.ActionUsagePanel; |
| import com.intellij.codeInsight.intention.impl.config.PlainTextDescriptor; |
| 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.util.ArrayUtil; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| import java.io.IOException; |
| |
| class PostfixDescriptionPanel implements Disposable { |
| private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.config.IntentionDescriptionPanel"); |
| private JPanel myPanel; |
| |
| private JPanel myAfterPanel; |
| private JPanel myBeforePanel; |
| private JEditorPane myDescriptionBrowser; |
| |
| public PostfixDescriptionPanel() { |
| myDescriptionBrowser.setMargin(new Insets(5, 5, 5, 5)); |
| initializeExamplePanel(myAfterPanel); |
| initializeExamplePanel(myBeforePanel); |
| } |
| |
| |
| public void reset(@NotNull PostfixTemplateMetaData actionMetaData) { |
| boolean isEmpty = actionMetaData == PostfixTemplateMetaData.EMPTY_METADATA; |
| myDescriptionBrowser.setText(isEmpty ? CodeInsightBundle.message("templates.postfix.settings.category.text") |
| : getDescription(actionMetaData.getDescription())); |
| |
| showUsages(myBeforePanel, isEmpty |
| ? new PlainTextDescriptor(CodeInsightBundle.message("templates.postfix.settings.category.before"), |
| "before.txt.template") |
| : ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesBefore())); |
| showUsages(myAfterPanel, isEmpty |
| ? new PlainTextDescriptor(CodeInsightBundle.message("templates.postfix.settings.category.after"), |
| "after.txt.template") |
| : ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesAfter())); |
| } |
| |
| |
| @NotNull |
| private static String getDescription(TextDescriptor url) { |
| try { |
| return url.getText(); |
| } |
| catch (IOException e) { |
| LOG.error(e); |
| } |
| return ""; |
| } |
| |
| private static void showUsages(@NotNull JPanel panel, @Nullable TextDescriptor exampleUsage) { |
| String text = ""; |
| FileType fileType = PlainTextFileType.INSTANCE; |
| if (exampleUsage != null) { |
| try { |
| text = exampleUsage.getText(); |
| String name = exampleUsage.getFileName(); |
| FileTypeManagerEx fileTypeManager = FileTypeManagerEx.getInstanceEx(); |
| String extension = fileTypeManager.getExtension(name); |
| fileType = fileTypeManager.getFileTypeByExtension(extension); |
| } |
| 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); |
| } |
| |
| synchronized JPanel getComponent() { |
| return myPanel; |
| } |
| |
| @Override |
| public void dispose() { |
| } |
| } |