From 8ff5c72225671de9e48be780cf7589d332e710ec Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sun, 3 Apr 2011 19:00:59 +0400 Subject: [PATCH] + data and sizes + better sorting (root files on top) --- .../diff/impl/dir/DirDiffTableModel.java | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) 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 1993b7cad476..bbba9eb2bf70 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 @@ -49,13 +49,25 @@ public class DirDiffTableModel extends AbstractTableModel { final boolean b2 = o2.endsWith("/"); final String[] dirs1 = o1.split("/"); final String[] dirs2 = o2.split("/"); - for (int i = 0; i < Math.min(dirs1.length, dirs2.length); i++) { + final int len1 = dirs1.length; + final int len2 = dirs2.length; + + if ((!b1 && len1 == 1) || (!b2 && len2 == 1)) { + if ((!b1 && len1 == 1) && (!b2 && len2 == 1)) { + return dirs1[0].toLowerCase().compareTo(dirs2[0].toLowerCase()); + } else { + return len1 == 1 ? -1 : 1; + } + } + for (int i = 0; i < Math.min(len1, len2); i++) { final int cmp = dirs1[i].toLowerCase().compareTo(dirs2[i].toLowerCase()); if (cmp != 0) return cmp; } - return dirs1.length - dirs2.length; + + return len1 - len2; } }); + for (String path : pathes) { final VirtualFile srcFile = src.findFileByRelativePath(path); final VirtualFile trgFile = trg.findFileByRelativePath(path); @@ -78,6 +90,23 @@ public class DirDiffTableModel extends AbstractTableModel { } } } + removeEmptyDirs(myElements); + } + + private static void removeEmptyDirs(List elements) { + final DirDiffElement[] tmp = elements.toArray(new DirDiffElement[elements.size()]); + 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); + } + prevItemIsSeparator = true; + } else { + prevItemIsSeparator = false; + } + } } private static boolean isEqual(VirtualFile file1, VirtualFile file2) { @@ -113,7 +142,7 @@ public class DirDiffTableModel extends AbstractTableModel { @Override public int getColumnCount() { - return 5; + return 7; } @Nullable @@ -126,10 +155,23 @@ public class DirDiffTableModel extends AbstractTableModel { switch (columnIndex) { case 0: return element.getSourceName(); case 1: return element.getSourceSize(); - case 2: return ""; - case 3: return element.getTargetSize(); - case 4: return element.getTargetName(); + case 2: return element.getSourceModificationDate(); + case 3: return ""; + case 4: return element.getTargetModificationDate(); + case 5: return element.getTargetSize(); + case 6: return element.getTargetName(); } return null; } + + @Override + public String getColumnName(int column) { + switch (column) { + case 0: case 6: return "Name"; + case 1: case 5: return "Size"; + case 2: case 4: return "Date"; + case 3: return "<=>"; + } + return ""; + } }