| /* |
| * Copyright 2000-2012 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.openapi.diff.impl.dir; |
| |
| import com.intellij.ide.diff.DirDiffOperation; |
| import com.intellij.ui.SimpleColoredComponent; |
| import com.intellij.util.ObjectUtils; |
| import com.intellij.util.ui.UIUtil; |
| |
| import javax.swing.*; |
| import javax.swing.table.DefaultTableCellRenderer; |
| import javax.swing.table.TableColumnModel; |
| import java.awt.*; |
| |
| /** |
| * @author Konstantin Bulenkov |
| */ |
| public class DirDiffTableCellRenderer extends DefaultTableCellRenderer { |
| @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(); |
| final DirDiffElementImpl element = model.getElementAt(row); |
| if (element == null) return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); |
| final int modelColumn = table.convertColumnIndexToModel(column); |
| |
| if (element.isSeparator()) { |
| return new SimpleColoredComponent() { |
| { |
| setIcon(ObjectUtils.chooseNotNull(element.getSourceIcon(), element.getTargetIcon())); |
| append(element.getName()); |
| } |
| @Override |
| protected void doPaint(Graphics2D g) { |
| int offset = 0; |
| int i = 0; |
| final TableColumnModel columnModel = table.getColumnModel(); |
| while (i < column) { |
| offset += columnModel.getColumn(i).getWidth(); |
| i++; |
| } |
| g.translate(-offset, 0); |
| super.doPaint(g); |
| g.translate(offset, 0); |
| } |
| }; |
| } |
| final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); |
| if (c instanceof JLabel) { |
| final JLabel label = (JLabel)c; |
| if (hasFocus || isSelected) { |
| label.setBorder(noFocusBorder); |
| } |
| label.setIcon(null); |
| |
| final DirDiffOperation op = element.getOperation(); |
| if (modelColumn == (table.getColumnCount() - 1) / 2) { |
| label.setIcon(op.getIcon()); |
| label.setHorizontalAlignment(CENTER); |
| return label; |
| } |
| |
| Color fg = isSelected ? UIUtil.getTableSelectionForeground() : op.getTextColor(); |
| label.setForeground(fg); |
| final String name = table.getColumnName(column); |
| if (DirDiffTableModel.COLUMN_DATE.equals(name)) { |
| label.setHorizontalAlignment(CENTER); |
| } else if (DirDiffTableModel.COLUMN_SIZE.equals(name)) { |
| label.setHorizontalAlignment(RIGHT); |
| } else { |
| label.setHorizontalAlignment(LEFT); |
| final String text = label.getText(); |
| label.setText(" " + text); |
| if (text != null && text.trim().length() > 0) { |
| label.setIcon(modelColumn == 0 ? element.getSourceIcon() : element.getTargetIcon()); |
| } |
| } |
| } |
| return c; |
| } |
| } |