From bce07486ad9f6edd2a7717eb009da691ae68f8a1 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Wed, 11 Mar 2015 16:28:44 +0300 Subject: [PATCH] [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 --- .../vcs/log/ui/frame/VcsLogGraphTable.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java index fc01a8a0424b..5eaf9a1b3be8 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java @@ -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() {