[vcs-log] if a model with zero rows is set (eg after initializing new repo without any commits) wait until some commits appear and init column sizes only then IDEA-135308

This commit is contained in:
Julia Beliaeva
2015-03-12 19:14:41 +03:00
parent 89946df23f
commit bce07486ad
@@ -57,10 +57,7 @@ import org.jetbrains.annotations.Nullable;
import sun.swing.table.DefaultTableCellHeaderRenderer;
import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.datatransfer.StringSelection;
@@ -86,6 +83,14 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C
private final GraphCommitCellRender myGraphCommitCellRender;
private final MyDummyTableCellEditor myDummyEditor = new MyDummyTableCellEditor();
@NotNull private final TableCellRenderer myDummyRenderer = new DefaultTableCellRenderer();
private final TableModelListener myColumnSizeInitializer = new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
if (initColumnSize()) {
getModel().removeTableModelListener(this);
}
}
};
private boolean myColumnsSizeInitialized = false;
@@ -132,14 +137,24 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C
@Override
public void setModel(@NotNull TableModel model) {
super.setModel(model);
// initialize sizes once, when the real non-empty model is set
if (!myColumnsSizeInitialized && model.getRowCount() > 0) {
if (getModel().getRowCount() > 0) {
initColumnSize();
}
else {
model.addTableModelListener(myColumnSizeInitializer);
}
}
private boolean initColumnSize() {
if (!myColumnsSizeInitialized && getModel().getRowCount() > 0) {
myColumnsSizeInitialized = true;
setColumnPreferredSize();
setAutoCreateColumnsFromModel(false); // otherwise sizes are recalculated after each TableColumn re-initialization
getColumnModel().getColumn(GraphTableModel.ROOT_COLUMN).setHeaderRenderer(new RootHeaderRenderer());
return true;
}
return false;
}
private void setColumnPreferredSize() {