diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.form b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.form index dde268b4b3e9..5fe7a42a6536 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.form +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.form @@ -22,13 +22,12 @@ - + - - + @@ -36,8 +35,6 @@ - - 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 8849338c9002..c0598d1a1de2 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 @@ -23,8 +23,8 @@ import com.intellij.openapi.diff.impl.dir.actions.DirDiffToolbarActions; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.ui.components.JBLabel; +import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.table.JBTable; -import com.intellij.util.Icons; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -51,6 +51,7 @@ public class DirDiffPanel { private JPanel myActionsCenterPanel; private JComboBox myFileFilter; private JPanel myToolBarPanel; + private JBScrollPane myScrollPane; private final DirDiffTableModel myModel; public JLabel myErrorLabel; private final DirDiffDialog myDialog; @@ -59,12 +60,13 @@ public class DirDiffPanel { private DiffElement myCurrentElement; public DirDiffPanel(DirDiffTableModel model, DirDiffDialog dirDiffDialog, DirDiffSettings settings) { + mySplitPanel.setDividerLocation(0.5); myModel = model; myDialog = dirDiffDialog; mySourceDirField.setText(model.getSourceDir().getPath()); myTargetDirField.setText(model.getTargetDir().getPath()); - mySourceDirLabel.setIcon(Icons.FOLDER_ICON); - myTargetDirLabel.setIcon(Icons.FOLDER_ICON); + mySourceDirLabel.setIcon(model.getSourceDir().getIcon()); + myTargetDirLabel.setIcon(model.getTargetDir().getIcon()); myTable.setModel(myModel); final DirDiffTableCellRenderer renderer = new DirDiffTableCellRenderer(myTable); myTable.setDefaultRenderer(Object.class, renderer); @@ -165,9 +167,6 @@ public class DirDiffPanel { myDiffPanel.remove(getErrorLabel()); } - private void createUIComponents() { - } - public JComponent getPanel() { return myComponent; } 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 7eea4fc10f16..904bc326a145 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 @@ -18,7 +18,6 @@ package com.intellij.openapi.diff.impl.dir; import com.intellij.openapi.vcs.FileStatus; import com.intellij.ui.table.JBTable; import com.intellij.util.IconUtil; -import com.intellij.util.Icons; import com.intellij.util.containers.HashMap; import com.intellij.util.ui.UIUtil; @@ -65,7 +64,7 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { } int width = columnModel.getColumn(column).getWidth(); int height = table.getRowHeight(row); - final BufferedImage image = getOrCreate(element.getName()); + final BufferedImage image = getOrCreate(element.getName(), element.getIcon()); g.drawImage(image, 0, 0, width, height, offset, 0, offset + width, height, null); } }; @@ -92,7 +91,6 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { label.setHorizontalAlignment(CENTER); } else if (DirDiffTableModel.COLUMN_SIZE.equals(name)) { label.setHorizontalAlignment(RIGHT); - label.setText(label.getText() + " "); } else { label.setHorizontalAlignment(LEFT); final String text = label.getText(); @@ -110,7 +108,7 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { ? FileStatus.COLOR_ADDED : FileStatus.COLOR_MODIFIED; } - private BufferedImage getOrCreate(String path) { + private BufferedImage getOrCreate(String path, Icon icon) { final BufferedImage image = cache.get(path); if (image != null) { return image; @@ -118,11 +116,12 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { final int w = myTable.getWidth(); final int h = myTable.getRowHeight(); final BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); - final Icon icon = Icons.FOLDER_ICON; final Graphics g = img.getGraphics(); - g.drawImage(IconUtil.toImage(icon), 2, (h - icon.getIconHeight()) / 2, null); + if (icon != null) { + g.drawImage(IconUtil.toImage(icon), 2, (h - icon.getIconHeight()) / 2, null); + } g.setColor(Color.BLACK); - g.drawString(path, 2 + icon.getIconWidth() + 2, h - 2); + g.drawString(path, 2 + (icon == null ? 0 : icon.getIconWidth()) + 2, h - 2); cache.put(path, img); return img; } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java index 5c9cebd83e93..bd85826e5af5 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java @@ -87,9 +87,9 @@ public class DirDiffTableModel extends AbstractTableModel { final DiffElement srcFile = mySrcPaths.get(path); final DiffElement trgFile = myTrgPaths.get(path); if (srcFile == null && trgFile != null) { - myElements.add(DirDiffElement.createTargetOnly(trgFile)); + myElements.add(trgFile.isContainer() ? DirDiffElement.createDirElement(srcFile, trgFile, path) : DirDiffElement.createTargetOnly(trgFile)); } else if (srcFile != null && trgFile == null) { - myElements.add(DirDiffElement.createSourceOnly(srcFile)); + myElements.add(srcFile.isContainer() ? DirDiffElement.createDirElement(srcFile, trgFile, path) : DirDiffElement.createSourceOnly(srcFile)); } else if (srcFile != null && trgFile != null) { indicator.setText2("Comparing " + path); if (srcFile.isContainer() && trgFile.isContainer()) { @@ -117,15 +117,15 @@ public class DirDiffTableModel extends AbstractTableModel { boolean prevItemIsSeparator = true; for (int i = tmp.length - 1; i >= 0; i--) { final boolean isSeparator = tmp[i].isSeparator(); - if (isSeparator) { - if (prevItemIsSeparator) { - elements.remove(i); + if (isSeparator) { + if (prevItemIsSeparator) { + elements.remove(i); + } + prevItemIsSeparator = true; + } else { + prevItemIsSeparator = false; } - prevItemIsSeparator = true; - } else { - prevItemIsSeparator = false; } - } } private static boolean isEqual(DiffElement file1, DiffElement file2) {