mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[file-history] get rid of cell wrapper in DualView
This commit is contained in:
@@ -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();
|
||||
|
||||
+7
-13
@@ -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());
|
||||
|
||||
+5
-8
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user