diff --git a/platform/platform-api/src/com/intellij/ui/dualView/DualView.java b/platform/platform-api/src/com/intellij/ui/dualView/DualView.java index e689c52527a3..6cde7fb768a0 100644 --- a/platform/platform-api/src/com/intellij/ui/dualView/DualView.java +++ b/platform/platform-api/src/com/intellij/ui/dualView/DualView.java @@ -65,7 +65,6 @@ public class DualView extends JPanel { private JBTable myCurrentView; private TableView myFlatView; private boolean myRootVisible; - private CellWrapper myCellWrapper; private final Storage.PropertiesComponentStorage myFlatStorage; private final Storage.PropertiesComponentStorage myTreeStorage; @@ -201,10 +200,6 @@ public class DualView extends JPanel { private Component createTreeComponent(DualViewColumnInfo[] columns, TreeNode root) { myTreeView = new TreeTableView(new ListTreeTableModelOnColumns(root, createTreeColumns(columns))) { - public TableCellRenderer getCellRenderer(int row, int column) { - return createWrappedRenderer(super.getCellRenderer(row, column)); - } - @Override public void doLayout() { try { @@ -235,10 +230,6 @@ public class DualView extends JPanel { ListTableModel flatModel = new ListTableModel(shownColumns.toArray(new ColumnInfo[shownColumns.size()])); //noinspection unchecked myFlatView = new TableView(flatModel) { - public TableCellRenderer getCellRenderer(int row, int column) { - return createWrappedRenderer(super.getCellRenderer(row, column)); - } - @NotNull @Override public Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column) { @@ -276,15 +267,6 @@ public class DualView extends JPanel { return result; } - private TableCellRenderer createWrappedRenderer(final TableCellRenderer renderer) { - if (myCellWrapper == null) { - return renderer; - } - else { - return new TableCellRendererWrapper(renderer); - } - } - public void expandAll() { expandPath(myTreeView.getTree(), new TreePath(myTreeView.getTree().getModel().getRoot())); } @@ -380,10 +362,6 @@ public class DualView extends JPanel { myTreeView.setTreeCellRenderer(cellRenderer); } - public void setCellWrapper(CellWrapper wrapper) { - myCellWrapper = wrapper; - } - public void installDoubleClickHandler(AnAction action) { action.registerCustomShortcutSet(CommonShortcuts.DOUBLE_CLICK_1, myFlatView); action.registerCustomShortcutSet(CommonShortcuts.DOUBLE_CLICK_1, myTreeView); @@ -420,43 +398,6 @@ public class DualView extends JPanel { ((AbstractTableModel)myTreeView.getModel()).fireTableDataChanged(); } - public class TableCellRendererWrapper implements TableCellRenderer { - private final TableCellRenderer myRenderer; - - public TableCellRendererWrapper(final TableCellRenderer renderer) { - myRenderer = renderer; - } - - public TableCellRenderer getRenderer() { - return myRenderer; - } - - public Component getTableCellRendererComponent(JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, - int column) { - Component result = myRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - Object treeNode = null; - - final int modelRow = table.convertRowIndexToModel(row); - - if (myCurrentView == myTreeView) { - TreePath path = myTreeView.getTree().getPathForRow(modelRow); - if (path != null) { - treeNode = path.getLastPathComponent(); - } - } - else if (myCurrentView == myFlatView) { - treeNode = myFlatView.getItems().get(modelRow); - } - - myCellWrapper.wrap(result, table, value, isSelected, hasFocus, row, column, treeNode); - return result; - } - } - @Override public Dimension getPreferredSize() { final Dimension was = super.getPreferredSize(); diff --git a/platform/platform-api/src/com/intellij/ui/dualView/CellWrapper.java b/platform/platform-api/src/com/intellij/ui/dualView/TableCellRendererWrapper.java similarity index 53% rename from platform/platform-api/src/com/intellij/ui/dualView/CellWrapper.java rename to platform/platform-api/src/com/intellij/ui/dualView/TableCellRendererWrapper.java index 5a4a56231952..e4cdc46de10e 100644 --- a/platform/platform-api/src/com/intellij/ui/dualView/CellWrapper.java +++ b/platform/platform-api/src/com/intellij/ui/dualView/TableCellRendererWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -15,17 +15,11 @@ */ package com.intellij.ui.dualView; -import javax.swing.*; -import java.awt.*; +import org.jetbrains.annotations.NotNull; -/** - * author: lesya - */ -public interface CellWrapper{ - void wrap(Component component, JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, - int column, Object treeNode); +import javax.swing.table.TableCellRenderer; + +public interface TableCellRendererWrapper extends TableCellRenderer { + @NotNull + TableCellRenderer getBaseRenderer(); } diff --git a/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java b/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java index e4e7483ec1c1..b93eaafe33b8 100644 --- a/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java +++ b/platform/platform-api/src/com/intellij/ui/dualView/TreeTableView.java @@ -16,7 +16,6 @@ package com.intellij.ui.dualView; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.Condition; import com.intellij.ui.HighlightableCellRenderer; import com.intellij.ui.table.ItemsProvider; import com.intellij.ui.table.SelectionProvider; @@ -24,6 +23,7 @@ import com.intellij.ui.treeStructure.treetable.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.SortableColumnModel; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.table.TableCellEditor; @@ -39,12 +39,14 @@ import java.util.List; public class TreeTableView extends TreeTable implements ItemsProvider, SelectionProvider { private static final Logger LOG = Logger.getInstance("#com.intellij.ui.dualView.TreeTableView"); + public TreeTableView(ListTreeTableModelOnColumns treeTableModel) { super(treeTableModel); setRootVisible(false); setTreeCellRenderer(new TreeCellRenderer() { private final TreeCellRenderer myBaseRenderer = new HighlightableCellRenderer(); + public Component getTreeCellRendererComponent(JTree tree1, Object value, boolean selected, @@ -126,7 +128,7 @@ public class TreeTableView extends TreeTable implements ItemsProvider, Selection return getTree().getPathForRow(row).getLastPathComponent(); } - protected final ColumnInfo getColumnInfo(final int column) { + protected final ColumnInfo getColumnInfo(final int column) { return getTreeViewModel().getColumnInfos()[convertColumnIndexToModel(column)]; } @@ -152,13 +154,15 @@ public class TreeTableView extends TreeTable implements ItemsProvider, Selection addSelectedPath(new TreePath(treeNode.getPath())); } - public static class CellRendererWrapper implements TableCellRenderer { - private final TableCellRenderer myBaseRenderer; + public static class CellRendererWrapper implements TableCellRendererWrapper { + @NotNull private final TableCellRenderer myBaseRenderer; - public CellRendererWrapper(final TableCellRenderer baseRenderer) { + public CellRendererWrapper(@NotNull TableCellRenderer baseRenderer) { myBaseRenderer = baseRenderer; } + @Override + @NotNull public TableCellRenderer getBaseRenderer() { return myBaseRenderer; } @@ -169,8 +173,8 @@ public class TreeTableView extends TreeTable implements ItemsProvider, Selection boolean hasFocus, int row, int column) { - final JComponent rendererComponent = (JComponent)myBaseRenderer.getTableCellRendererComponent( - table, value, isSelected, hasFocus, row, column); + JComponent rendererComponent = (JComponent)myBaseRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, + row, column); if (isSelected) { rendererComponent.setBackground(table.getSelectionBackground()); rendererComponent.setForeground(table.getSelectionForeground()); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/TableLinkMouseListener.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/TableLinkMouseListener.java index 7646befd1f81..ef60c327f77e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/TableLinkMouseListener.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/TableLinkMouseListener.java @@ -16,8 +16,7 @@ package com.intellij.openapi.vcs.changes.issueLinks; import com.intellij.ui.ColoredTableCellRenderer; -import com.intellij.ui.dualView.DualView; -import com.intellij.ui.dualView.TreeTableView; +import com.intellij.ui.dualView.TableCellRendererWrapper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,16 +39,14 @@ public class TableLinkMouseListener extends AbstractBaseTagMouseListener { int column = table.columnAtPoint(e.getPoint()); if (row == -1 || column == -1) return null; TableCellRenderer cellRenderer = table.getCellRenderer(row, column); - if (cellRenderer instanceof DualView.TableCellRendererWrapper) { - cellRenderer = ((DualView.TableCellRendererWrapper) cellRenderer).getRenderer(); - } - if (cellRenderer instanceof TreeTableView.CellRendererWrapper) { - cellRenderer = ((TreeTableView.CellRendererWrapper) cellRenderer).getBaseRenderer(); + if (cellRenderer instanceof TableCellRendererWrapper) { + cellRenderer = ((TableCellRendererWrapper)cellRenderer).getBaseRenderer(); } if (cellRenderer instanceof ColoredTableCellRenderer) { final ColoredTableCellRenderer renderer = (ColoredTableCellRenderer)cellRenderer; tag = forColoredRenderer(e, table, row, column, renderer); - } else { + } + else { tag = tryGetTag(e, table, row, column); } return tag; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java index dd72622b0c50..634b90c7cde8 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java @@ -52,9 +52,9 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.*; import com.intellij.ui.content.ContentManager; -import com.intellij.ui.dualView.CellWrapper; import com.intellij.ui.dualView.DualView; import com.intellij.ui.dualView.DualViewColumnInfo; +import com.intellij.ui.dualView.TableCellRendererWrapper; import com.intellij.ui.dualView.TreeTableView; import com.intellij.ui.speedSearch.SpeedSearchUtil; import com.intellij.ui.table.TableView; @@ -346,8 +346,6 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton impleme myDualView.expandAll(); myDualView.setTreeCellRenderer(new MyTreeCellRenderer(myDualView.getTree().getCellRenderer(), () -> myHistorySession)); - myDualView.setCellWrapper(new MyCellWrapper(() -> myHistorySession)); - myDualView.installDoubleClickHandler(new MyDiffAction()); myDualView.getFlatView().getTableViewModel().setSortable(true); @@ -659,12 +657,39 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton impleme } @Override - public TableCellRenderer getCustomizedRenderer(TreeNodeOnVcsRevision revision, TableCellRenderer renderer) { + public TableCellRenderer getCustomizedRenderer(@NotNull TreeNodeOnVcsRevision revision, @NotNull TableCellRenderer renderer) { if (renderer instanceof BaseHistoryCellRenderer) { - ((BaseHistoryCellRenderer)renderer).setCurrentRevision(myHistorySession.isCurrentRevision(revision.getRevision().getRevisionNumber())); + ((BaseHistoryCellRenderer)renderer).setCurrentRevision(isCurrentRevision(revision)); + } else { + // for custom columns from individual vcs-es + return new TableCellRendererWrapper() { + @NotNull + @Override + public TableCellRenderer getBaseRenderer() { + return renderer; + } + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, + int column) { + Component component = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (isCurrentRevision(revision)) { + makeBold(component); + } + return component; + } + }; } return renderer; } + + private boolean isCurrentRevision(@NotNull TreeNodeOnVcsRevision revision) { + return myHistorySession.isCurrentRevision(revision.getRevision().getRevisionNumber()); + } } private abstract static class BaseHistoryCellRenderer extends ColoredTableCellRenderer { @@ -966,28 +991,6 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton impleme } } - private static class MyCellWrapper implements CellWrapper { - private final Getter myHistorySession; - - public MyCellWrapper(final Getter historySession) { - myHistorySession = historySession; - } - - public void wrap(Component component, - JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, - int column, - Object treeNode) { - VcsFileRevision revision = ((TreeNodeOnVcsRevision)treeNode).getRevision(); - if (myHistorySession.get().isCurrentRevision(revision.getRevisionNumber())) { - makeBold(component); - } - } - } - private class MyShowAsTreeAction extends ToggleAction implements DumbAware { public MyShowAsTreeAction() { super(VcsBundle.message("action.name.show.files.as.tree"), null, PlatformIcons.SMALL_VCS_CONFIGURABLE);