From da15337046edfe2ac32f4803faf39f90d885de96 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 5 Apr 2011 15:47:42 +0400 Subject: [PATCH] add operations --- platform/icons/src/vcs/arrow_left.png | Bin 0 -> 481 bytes platform/icons/src/vcs/arrow_right.png | Bin 0 -> 513 bytes platform/icons/src/vcs/merge.png | Bin 0 -> 422 bytes platform/icons/src/vcs/remove.png | Bin 0 -> 674 bytes .../openapi/diff/impl/dir/DirDiffElement.java | 48 ++++++++++++++++- .../diff/impl/dir/DirDiffOperation.java | 39 ++++++++++++++ .../openapi/diff/impl/dir/DirDiffPanel.form | 51 +++++++++++++++--- .../openapi/diff/impl/dir/DirDiffPanel.java | 18 ++++++- .../impl/dir/DirDiffTableCellRenderer.java | 36 +++++++++++-- .../diff/impl/dir/DirDiffTableModel.java | 20 ++++++- 10 files changed, 197 insertions(+), 15 deletions(-) create mode 100644 platform/icons/src/vcs/arrow_left.png create mode 100644 platform/icons/src/vcs/arrow_right.png create mode 100644 platform/icons/src/vcs/merge.png create mode 100644 platform/icons/src/vcs/remove.png create mode 100644 platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffOperation.java diff --git a/platform/icons/src/vcs/arrow_left.png b/platform/icons/src/vcs/arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..07020202da2a1f000bd632b7aa6bb5de60152447 GIT binary patch literal 481 zcmV<70UrK|P)SGNzrOy#sR1B> z7(v#6Kw!7ce=EzQ3?M7-K4oAyd6j|T|33zX-$1>;e={)r1u7GKZ^{4=Kwu626V(4Z zn%`o0`j&x#g^_`QkAs2X`!65{D*XC`f#CxXOA9kFY+b9&01!YdK5gRvy**wrJbBH) z@B^se6HxNjD+Y!yKY<#)GcbGx(jUJuFerUuVE6}=2M8dh-@n)xo;_q>_ye^5$6tu` ze}K;T2XYF~8GnIdAV+wJOBg`6S~0G$=exCr7du300=Mu Xqd&1Kt}I%e00000NkvXXu0mjfjEBQF literal 0 HcmV?d00001 diff --git a/platform/icons/src/vcs/arrow_right.png b/platform/icons/src/vcs/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d57f7474d37c7884b038988b515bc2f242b214 GIT binary patch literal 513 zcmV+c0{;DpP)bm}xVaex3~V!#1(dzrva_`?8E^cxtA|A73DukJG(IsfG6l?iSf00G4E_3h`MzyDt5`T_LlXJ!Tl z79a)%9WO5zgMoz^!{=9b8BSe#{^h|;FJ6$R0Ro5tSHua$ZU5-ree%C}%(}P8;s61J zGai^&IR2kJ^YH15#eu@e;s61J(+1Yyomi6wK!5=N=>+HZZ63CJ00000NkvXXu0mjf D4e;ky literal 0 HcmV?d00001 diff --git a/platform/icons/src/vcs/merge.png b/platform/icons/src/vcs/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..d80ef407f806afae91ccdca1e4980b167a745fcf GIT binary patch literal 422 zcmV;X0a^ZuP)mTev(x0HFlyzyA#Xx83AoHS`x` zx3Sd_xbx`-R#wK#@6TZ<1_6KoLea42HqT#kYem6V-=8!5`S%-Za03Jw00-@NXa+gW QApigX07*qoM6N<$g11q=egFUf literal 0 HcmV?d00001 diff --git a/platform/icons/src/vcs/remove.png b/platform/icons/src/vcs/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..c5fc0f8d54f787ba1281169da3c56569db0a34dc GIT binary patch literal 674 zcmV;T0$u%yP)I1f#uS4dA%fTii4itm?!%0m);Fl?!^-? z9hwLd0|+3v0se0uPBwM36Ja=b(3t)4CBX@@dV$EAqn=$|pY-Q_0GpT?!?MTE<$*$A z0{{XD?u8d@oDUhEKWAV_Nnwa%_#BY&^vZg4%_63z3^$%UVtB>I^$;cp5I~HuKxAZO zWH_Xtao1K+Qi;LBg5lfxbquo@_%{4vWMBYmHZx?o88-c9x|e;F_`&ATvpedh$YK7asXLKcL9I~+WhzJB;ME1N^LR$)kfeJ{WbXaTYw zfB=H~rB1_a-VF({|No;R|G&}EM)7lxlIGouQWF3F8yNh*A;AB?K-*#-Odmi1!3~%v ztMdM{qr?B#I;a5#1D%TMcMpq+{QoW?@qez2{3n<`fB=Gf;iRa-l%0>Bf1dS+;|eUQ zkOQ{-{!QiW0#aw^vT%GpD5^XWCJqoljFjd^fB>R6Hv$A007
- - + @@ -9,11 +8,7 @@ - - - - - + @@ -51,6 +46,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 8b9b40a029b5..294a0e69766d 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 @@ -25,13 +25,17 @@ import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.components.JBLabel; import com.intellij.ui.table.JBTable; +import com.intellij.util.Icons; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableColumn; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; @@ -44,6 +48,10 @@ public class DirDiffPanel { private JBTable myTable; private JPanel myComponent; private JSplitPane mySplitPanel; + private TextFieldWithBrowseButton mySourceDirField; + private TextFieldWithBrowseButton myTargetDirField; + private JBLabel myTargetDirLabel; + private JBLabel mySourceDirLabel; private final DirDiffTableModel myModel; private final DirDiffDialog myDialog; private DiffPanel myDiffPanelComponent; @@ -52,6 +60,10 @@ public class DirDiffPanel { public DirDiffPanel(DirDiffTableModel model, DirDiffDialog dirDiffDialog) { myModel = model; myDialog = dirDiffDialog; + mySourceDirField.setText(model.getSourceDir().getPath()); + myTargetDirField.setText(model.getTargetDir().getPath()); + mySourceDirLabel.setIcon(Icons.FOLDER_ICON); + myTargetDirLabel.setIcon(Icons.FOLDER_ICON); myTable.setModel(myModel); final DirDiffTableCellRenderer renderer = new DirDiffTableCellRenderer(myTable); myTable.setDefaultRenderer(Object.class, renderer); @@ -83,7 +95,7 @@ public class DirDiffPanel { } else { clearDiffPanel(); - final VirtualFile file = element.getType() == DirDiffElement.ElementType.SOURCE ? element.getSource() : element.getTarget(); + final VirtualFile file = element.isSource() ? element.getSource() : element.getTarget(); final Document document = FileDocumentManager.getInstance().getDocument(file); myEditor = (EditorEx)EditorFactory.getInstance().createEditor(document, project, file, true); myEditor.getSettings().setFoldingOutlineShown(false); @@ -91,6 +103,7 @@ public class DirDiffPanel { myDiffPanel.revalidate(); } } + myDialog.setTitle(myModel.getTitle()); } }); myTable.addKeyListener(new KeyAdapter() { @@ -118,6 +131,9 @@ public class DirDiffPanel { } } }); + final TableColumn operationColumn = myTable.getColumnModel().getColumn(3); + operationColumn.setMaxWidth(25); + operationColumn.setMinWidth(25); } private void clearDiffPanel() { 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 6ded4a6871ec..2cb81f2ff76e 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 @@ -15,10 +15,12 @@ */ 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; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; @@ -68,14 +70,42 @@ public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { } }; } - final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - if (c instanceof JLabel && (hasFocus || isSelected)) { - ((JLabel)c).setBorder(noFocusBorder); + if (c instanceof JLabel) { + final JLabel label = (JLabel)c; + if (hasFocus || isSelected) { + label.setBorder(noFocusBorder); + } + + final DirDiffOperation op = element.getOperation(); + if (column == 3) { + label.setIcon(op.getIcon()); + label.setHorizontalAlignment(CENTER); + return label; + } else { + label.setIcon(null); + } + + Color fg = isSelected ? UIUtil.getTableSelectionForeground() : getForegroundColor(op); + label.setForeground(fg); + if (column == 2 || column == 4) { + label.setHorizontalAlignment(CENTER); + } else if (column == 1 || column == 5) { + label.setHorizontalAlignment(RIGHT); + label.setText(label.getText() + " "); + } else { + label.setHorizontalAlignment(LEFT); + label.setText(" " + label.getText()); + } } return c; } + private static Color getForegroundColor(DirDiffOperation op) { + return op == DirDiffOperation.COPY_TO || op == DirDiffOperation.COPY_FROM + ? FileStatus.COLOR_ADDED : FileStatus.COLOR_MODIFIED; + } + private BufferedImage getOrCreate(String path) { final BufferedImage image = cache.get(path); if (image != null) { 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 fbf40ec0e2c9..3a35ed77747f 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 @@ -30,6 +30,8 @@ import java.util.*; */ public class DirDiffTableModel extends AbstractTableModel { private final Project myProject; + private VirtualFile mySrc; + private VirtualFile myTrg; final List myElements = new ArrayList(); public DirDiffTableModel(Project project, VirtualFile src, VirtualFile trg, ProgressIndicator indicator) { @@ -37,7 +39,9 @@ public class DirDiffTableModel extends AbstractTableModel { loadModel(src, trg, indicator); } - private void loadModel(VirtualFile src, VirtualFile trg, ProgressIndicator indicator) { + public void loadModel(VirtualFile src, VirtualFile trg, ProgressIndicator indicator) { + mySrc = src; + myTrg = trg; final HashSet files = new HashSet(); scan("", src, files, indicator, true); scan("", trg, files, indicator, true); @@ -93,6 +97,10 @@ public class DirDiffTableModel extends AbstractTableModel { removeEmptyDirs(myElements); } + public String getTitle() { + return "Diff for " + mySrc.getPath() + " and " + myTrg.getPath(); + } + private static void removeEmptyDirs(List elements) { final DirDiffElement[] tmp = elements.toArray(new DirDiffElement[elements.size()]); boolean prevItemIsSeparator = true; @@ -124,6 +132,14 @@ public class DirDiffTableModel extends AbstractTableModel { return myElements.get(index); } + public VirtualFile getSourceDir() { + return mySrc; + } + + public VirtualFile getTargetDir() { + return myTrg; + } + private static void scan(String prefix, VirtualFile file, HashSet files, ProgressIndicator indicator, boolean isRoot) { if (file.isDirectory()) { indicator.setText2(file.getPath()); @@ -174,7 +190,7 @@ public class DirDiffTableModel extends AbstractTableModel { case 0: case 6: return "Name"; case 1: case 5: return "Size"; case 2: case 4: return "Date"; - case 3: return "<=>"; + case 3: return "*"; } return ""; }