From ad7cf6afd0aea8fe5114605fd26175f8699aec40 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 23 Jan 2013 01:00:51 +0100 Subject: [PATCH] IDEA-98794 Rendering of Deployment -> Sync screen is broken --- .../openapi/diff/impl/dir/DirDiffPanel.java | 3 +- .../impl/dir/DirDiffTableCellRenderer.java | 54 ++++--------------- 2 files changed, 12 insertions(+), 45 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java index bfc61cc5d9c3..87afa455ae77 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java @@ -102,7 +102,8 @@ public class DirDiffPanel implements Disposable, DataProvider { myTable.setModel(myModel); new TableSpeedSearch(myTable); - final DirDiffTableCellRenderer renderer = new DirDiffTableCellRenderer(myTable); + final DirDiffTableCellRenderer renderer = new DirDiffTableCellRenderer(); + myTable.setExpandableItemsEnabled(false); myTable.setDefaultRenderer(Object.class, renderer); myTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); final Project project = myModel.getProject(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableCellRenderer.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableCellRenderer.java index d73b01d38b7f..29020c3e5b1f 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableCellRenderer.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableCellRenderer.java @@ -16,37 +16,19 @@ package com.intellij.openapi.diff.impl.dir; import com.intellij.ide.diff.DirDiffOperation; -import com.intellij.ui.table.JBTable; -import com.intellij.util.IconUtil; +import com.intellij.ui.SimpleColoredComponent; import com.intellij.util.ObjectUtils; -import com.intellij.util.containers.HashMap; import com.intellij.util.ui.UIUtil; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumnModel; import java.awt.*; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.image.BufferedImage; /** * @author Konstantin Bulenkov */ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { - private final HashMap cache = new HashMap(); - private final JBTable myTable; - - public DirDiffTableCellRenderer(JBTable table) { - myTable = table; - myTable.addComponentListener(new ComponentAdapter() { - @Override - public void componentResized(ComponentEvent e) { - cache.clear(); - } - }); - } - @Override public Component getTableCellRendererComponent(final JTable table, Object value, boolean isSelected, boolean hasFocus, final int row, final int column) { final DirDiffTableModel model = (DirDiffTableModel)table.getModel(); @@ -55,10 +37,13 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { final int modelColumn = table.convertColumnIndexToModel(column); if (element.isSeparator()) { - return new JPanel() { + return new SimpleColoredComponent() { + { + setIcon(ObjectUtils.chooseNotNull(element.getSourceIcon(), element.getTargetIcon())); + append(element.getName()); + } @Override - public void paint(Graphics g) { - super.paint(g); + protected void doPaint(Graphics2D g) { int offset = 0; int i = 0; final TableColumnModel columnModel = table.getColumnModel(); @@ -66,10 +51,9 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { offset += columnModel.getColumn(i).getWidth(); i++; } - int width = columnModel.getColumn(column).getWidth(); - int height = table.getRowHeight(row); - final BufferedImage image = getOrCreate(element.getName(), ObjectUtils.chooseNotNull(element.getSourceIcon(), element.getTargetIcon())); - g.drawImage(image, 0, 0, width, height, offset, 0, offset + width, height, null); + g.translate(-offset, 0); + super.doPaint(g); + g.translate(offset, 0); } }; } @@ -106,22 +90,4 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { } return c; } - - private BufferedImage getOrCreate(String path, Icon icon) { - final BufferedImage image = cache.get(path); - if (image != null) { - return image; - } - final int w = myTable.getWidth(); - final int h = myTable.getRowHeight(); - final BufferedImage img = UIUtil.createImage(w, h, BufferedImage.TYPE_INT_ARGB); - final Graphics g = img.getGraphics(); - if (icon != null) { - g.drawImage(IconUtil.toImage(icon), 2, (h - icon.getIconHeight()) / 2, null); - } - g.setColor(UIUtil.getLabelForeground()); - g.drawString(path, 2 + (icon == null ? 0 : icon.getIconWidth()) + 2, h - 3); - cache.put(path, img); - return img; - } }