few major fixes for Db Diff

This commit is contained in:
Konstantin Bulenkov
2011-04-16 13:38:28 +04:00
parent 7b421ba5d3
commit 58e33f4d91
4 changed files with 22 additions and 27 deletions
@@ -22,13 +22,12 @@
<border type="none"/>
<children/>
</grid>
<scrollpane id="90582" class="com.intellij.ui.components.JBScrollPane">
<scrollpane id="90582" class="com.intellij.ui.components.JBScrollPane" binding="myScrollPane">
<constraints>
<splitpane position="left"/>
</constraints>
<properties>
<minimumSize width="456" height="200"/>
<preferredSize width="456" height="200"/>
<minimumSize width="21" height="200"/>
</properties>
<border type="none"/>
<children>
@@ -36,8 +35,6 @@
<constraints/>
<properties>
<intercellSpacing width="0" height="0"/>
<minimumSize width="30" height="32"/>
<preferredSize width="150" height="32"/>
<showHorizontalLines value="false"/>
<showVerticalLines value="false"/>
</properties>
@@ -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;
}
@@ -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;
}
@@ -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) {