From 66d87ec01d70fc9727d8c72b51aa260341995253 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Tue, 19 Jul 2016 23:03:26 +0300 Subject: [PATCH] [file-history] extract code similar between details in history and log --- .../vcs/history/FileHistoryPanelImpl.java | 31 +--------- .../src/com/intellij/util/ui/HtmlPanel.java | 62 +++++++++++++++++++ .../vcs/log/ui/frame/CommitPanel.java | 52 ++++------------ 3 files changed, 75 insertions(+), 70 deletions(-) create mode 100644 platform/vcs-impl/src/com/intellij/util/ui/HtmlPanel.java diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java index a9687993fabd..9d9d8fa2c580 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java @@ -78,8 +78,6 @@ import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; -import javax.swing.text.BadLocationException; -import javax.swing.text.Position; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; @@ -90,7 +88,6 @@ import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.InputEvent; import java.io.IOException; -import java.io.StringWriter; import java.util.*; import java.util.List; @@ -1713,15 +1710,9 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton impleme } } - private class MyCommentsPane extends JEditorPane implements DataProvider, CopyProvider { + private class MyCommentsPane extends HtmlPanel implements DataProvider, CopyProvider { public MyCommentsPane() { - super(UIUtil.HTML_MIME, ""); - setPreferredSize(new Dimension(150, 100)); - setEditable(false); - setOpaque(false); - putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE); - addHyperlinkListener(BrowserHyperlinkListener.INSTANCE); } @Override @@ -1735,26 +1726,6 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton impleme return UIUtil.getEditorPaneBackground(); } - @Override - public String getSelectedText() { - javax.swing.text.Document doc = getDocument(); - int start = getSelectionStart(); - int end = getSelectionEnd(); - - try { - Position p0 = doc.createPosition(start); - Position p1 = doc.createPosition(end); - StringWriter sw = new StringWriter(p1.getOffset() - p0.getOffset()); - getEditorKit().write(sw, doc, p0.getOffset(), p1.getOffset() - p0.getOffset()); - - return StringUtil.removeHtmlTags(sw.toString()); - } - catch (BadLocationException | IOException e) { - LOG.warn(e); - } - return super.getSelectedText(); - } - @Override public void performCopy(@NotNull DataContext dataContext) { String selectedText = getSelectedText(); diff --git a/platform/vcs-impl/src/com/intellij/util/ui/HtmlPanel.java b/platform/vcs-impl/src/com/intellij/util/ui/HtmlPanel.java new file mode 100644 index 000000000000..b559996e3904 --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/util/ui/HtmlPanel.java @@ -0,0 +1,62 @@ +/* + * Copyright 2000-2016 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.util.ui; + +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.ui.BrowserHyperlinkListener; + +import javax.swing.*; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Position; +import java.io.IOException; +import java.io.StringWriter; + +public class HtmlPanel extends JEditorPane implements HyperlinkListener { + public HtmlPanel() { + super(UIUtil.HTML_MIME, ""); + setEditable(false); + setOpaque(false); + putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE); + addHyperlinkListener(this); + } + + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + BrowserHyperlinkListener.INSTANCE.hyperlinkUpdate(e); + } + + @Override + public String getSelectedText() { + Document doc = getDocument(); + int start = getSelectionStart(); + int end = getSelectionEnd(); + + try { + Position p0 = doc.createPosition(start); + Position p1 = doc.createPosition(end); + StringWriter sw = new StringWriter(p1.getOffset() - p0.getOffset()); + getEditorKit().write(sw, doc, p0.getOffset(), p1.getOffset() - p0.getOffset()); + + return StringUtil.removeHtmlTags(sw.toString()); + } + catch (BadLocationException | IOException ignored) { + } + return super.getSelectedText(); + } +} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java index 0e7181ee24f9..1984101c2dab 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java @@ -20,9 +20,9 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer; +import com.intellij.util.ui.HtmlPanel; import com.intellij.openapi.vcs.ui.FontUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.BrowserHyperlinkListener; import com.intellij.ui.JBColor; import com.intellij.ui.components.JBPanel; import com.intellij.util.containers.ContainerUtil; @@ -45,13 +45,8 @@ import javax.swing.*; import javax.swing.border.CompoundBorder; import javax.swing.border.MatteBorder; import javax.swing.event.HyperlinkEvent; -import javax.swing.text.BadLocationException; import javax.swing.text.DefaultCaret; -import javax.swing.text.Document; -import javax.swing.text.Position; import java.awt.*; -import java.io.IOException; -import java.io.StringWriter; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -169,7 +164,7 @@ class CommitPanel extends JBPanel { return " on " + DateFormatUtil.formatDate(time) + " at " + DateFormatUtil.formatTime(time); } - private static class DataPanel extends JEditorPane { + private static class DataPanel extends HtmlPanel { private static final int PER_ROW = 3; private static final String LINK_HREF = "show-hide-branches"; @@ -181,27 +176,24 @@ class CommitPanel extends JBPanel { private boolean myExpanded = false; DataPanel(@NotNull Project project, boolean multiRoot) { - super(UIUtil.HTML_MIME, ""); myProject = project; myMultiRoot = multiRoot; - setEditable(false); - setOpaque(false); - putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE); DefaultCaret caret = (DefaultCaret)getCaret(); caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); setBorder(JBUI.Borders.empty(BOTTOM_BORDER, ReferencesPanel.H_GAP, 0, 0)); + } - addHyperlinkListener(e -> { - if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED && LINK_HREF.equals(e.getDescription())) { - myExpanded = !myExpanded; - update(); - } - else { - BrowserHyperlinkListener.INSTANCE.hyperlinkUpdate(e); - } - }); + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED && LINK_HREF.equals(e.getDescription())) { + myExpanded = !myExpanded; + update(); + } + else { + super.hyperlinkUpdate(e); + } } @Override @@ -392,26 +384,6 @@ class CommitPanel extends JBPanel { return authorText; } - @Override - public String getSelectedText() { - Document doc = getDocument(); - int start = getSelectionStart(); - int end = getSelectionEnd(); - - try { - Position p0 = doc.createPosition(start); - Position p1 = doc.createPosition(end); - StringWriter sw = new StringWriter(p1.getOffset() - p0.getOffset()); - getEditorKit().write(sw, doc, p0.getOffset(), p1.getOffset() - p0.getOffset()); - - return StringUtil.removeHtmlTags(sw.toString()); - } - catch (BadLocationException | IOException e) { - LOG.warn(e); - } - return super.getSelectedText(); - } - @Override public Color getBackground() { return getCommitDetailsBackground();