[file-history] get rid of cell wrapper in DualView

This commit is contained in:
Julia Beliaeva
2017-08-29 19:46:27 +03:00
parent 1d101a9be1
commit 7784613b9d
5 changed files with 53 additions and 114 deletions
@@ -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();
@@ -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();
}
@@ -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<Object,?> getColumnInfo(final int column) {
protected final ColumnInfo<Object, ?> 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());
@@ -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;
@@ -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<VcsHistorySession> myHistorySession;
public MyCellWrapper(final Getter<VcsHistorySession> 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);