add action to turn off auto-resize (PY-20448)

This commit is contained in:
Liana.Bakradze
2017-05-30 14:33:05 +03:00
parent 1053d8591c
commit 9337060ad8
4 changed files with 49 additions and 13 deletions
@@ -35,11 +35,13 @@ import java.util.Set;
*/
public class JBTableWithRowHeaders extends JBTable {
private final JBScrollPane myScrollPane;
private boolean myAutoResize;
private RowHeaderTable myRowHeaderTable;
private Set<Integer> myNotAdjustableColumns = ContainerUtil.newHashSet();
public JBTableWithRowHeaders() {
setAutoResizeMode(AUTO_RESIZE_OFF);
public JBTableWithRowHeaders(boolean autoResize) {
myAutoResize = autoResize;
setAutoResizeMode(myAutoResize ? AUTO_RESIZE_OFF : AUTO_RESIZE_SUBSEQUENT_COLUMNS);
setRowSelectionAllowed(false);
setMaxItemsForSizeCalculation(50);
setTableHeader(new CustomTableHeader(this));
@@ -60,12 +62,17 @@ public class JBTableWithRowHeaders extends JBTable {
Component component = super.prepareRenderer(renderer, row, column);
JTableHeader header = getTableHeader();
TableColumn resizingColumn = header.getResizingColumn();
if (resizingColumn == null && !myNotAdjustableColumns.contains(column)) {
if (myAutoResize && resizingColumn == null && !myNotAdjustableColumns.contains(column)) {
updateColumnWidth(column, component.getPreferredSize().width, this);
}
return component;
}
public void setAutoResize(boolean autoResize) {
myAutoResize = autoResize;
setAutoResizeMode(myAutoResize ? AUTO_RESIZE_OFF : AUTO_RESIZE_SUBSEQUENT_COLUMNS);
}
private static int updateColumnWidth(int column, int width, @NotNull JTable table) {
TableColumn tableColumn = table.getColumnModel().getColumn(column);
int headerWidth = new ColumnHeaderRenderer().getTableCellRendererComponent(table, tableColumn.getHeaderValue(), false, false, -1, column).getPreferredSize().width + 4;
@@ -92,7 +99,7 @@ public class JBTableWithRowHeaders extends JBTable {
}
}
public static class RowHeaderTable extends JBTable implements PropertyChangeListener, TableModelListener {
public class RowHeaderTable extends JBTable implements PropertyChangeListener, TableModelListener {
private JTable myMainTable;
public RowHeaderTable(JTable table) {
@@ -112,7 +119,12 @@ public class JBTableWithRowHeaders extends JBTable {
@Override
public Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column) {
Component component = super.prepareRenderer(renderer, row, column);
getPreferredSize().width = updateColumnWidth(column, component.getPreferredSize().width, this);
if (myAutoResize) {
getPreferredSize().width = updateColumnWidth(column, component.getPreferredSize().width, this);
}
else {
getColumnModel().getColumn(0).setPreferredWidth(50);
}
setPreferredScrollableViewportSize(getPreferredSize());
return component;
}
@@ -157,7 +169,7 @@ public class JBTableWithRowHeaders extends JBTable {
}
private static class RowNumberRenderer extends DefaultTableCellRenderer {
private class RowNumberRenderer extends DefaultTableCellRenderer {
public RowNumberRenderer() {
setHorizontalAlignment(SwingConstants.CENTER);
}
@@ -53,6 +53,7 @@ import java.util.stream.Collectors;
public class PyDataView implements DumbAware {
public static final String DATA_VIEWER_ID = "Data View";
public static final String COLORED_BY_DEFAULT = "python.debugger.dataview.coloredbydefault";
public static final String AUTO_RESIZE = "python.debugger.dataview.autoresize";
public static final String EMPTY_TAB_NAME = "empty";
private static final Logger LOG = Logger.getInstance(PyDataView.class);
@@ -286,6 +287,12 @@ public class PyDataView implements DumbAware {
}
}
public void changeAutoResize(boolean autoResize) {
for (TabInfo info : myTabs.getTabs()) {
getPanel(info).resize(autoResize);
}
}
private static PyDataViewerPanel getPanel(TabInfo tabInfo) {
return ((PyDataViewerPanel)tabInfo.getComponent());
}
@@ -73,7 +73,16 @@ public class PyDataViewToolWindowFactory implements ToolWindowFactory {
});
addPythonConsoleListener(project);
((ToolWindowEx)toolWindow).setAdditionalGearActions(new DefaultActionGroup(new ColoredByDefaultAction()));
PyDataViewToggleAction autoResizeAction = new PyDataViewToggleAction("Auto-resize", PyDataView.AUTO_RESIZE) {
@Override
public void setSelected(AnActionEvent e, boolean state) {
super.setSelected(e, state);
PyDataView.getInstance(project).changeAutoResize(state);
}
};
DefaultActionGroup group = new DefaultActionGroup(new PyDataViewToggleAction("Colored by Default", PyDataView.COLORED_BY_DEFAULT),
autoResizeAction);
((ToolWindowEx)toolWindow).setAdditionalGearActions(group);
}
private static void addPythonConsoleListener(@NotNull Project project) {
@@ -89,19 +98,22 @@ public class PyDataViewToolWindowFactory implements ToolWindowFactory {
});
}
private static class ColoredByDefaultAction extends ToggleAction {
public ColoredByDefaultAction() {
super("Colored by Default");
private static class PyDataViewToggleAction extends ToggleAction {
private final String myPropertyKey;
public PyDataViewToggleAction(String text, String propertyKey) {
super(text);
myPropertyKey = propertyKey;
}
@Override
public boolean isSelected(AnActionEvent e) {
return PropertiesComponent.getInstance(e.getProject()).getBoolean(PyDataView.COLORED_BY_DEFAULT, true);
return PropertiesComponent.getInstance(e.getProject()).getBoolean(myPropertyKey, true);
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
PropertiesComponent.getInstance(e.getProject()).setValue(PyDataView.COLORED_BY_DEFAULT, state, true);
PropertiesComponent.getInstance(e.getProject()).setValue(myPropertyKey, state, true);
}
}
@@ -125,7 +125,7 @@ public class PyDataViewerPanel extends JPanel {
mySliceTextField = createEditorField();
addCompletion();
myTable = new JBTableWithRowHeaders();
myTable = new JBTableWithRowHeaders(PropertiesComponent.getInstance(myProject).getBoolean(PyDataView.AUTO_RESIZE, true));
myScrollPane = myTable.getScrollPane();
}
@@ -178,6 +178,11 @@ public class PyDataViewerPanel extends JPanel {
}
}
public void resize(boolean autoResize) {
myTable.setAutoResize(autoResize);
apply(getSliceTextField().getText());
}
private void updateUI(@NotNull ArrayChunk chunk, @NotNull PyDebugValue debugValue, @NotNull DataViewStrategy strategy) {
AsyncArrayTableModel model = strategy.createTableModel(chunk.getRows(), chunk.getColumns(), this, debugValue);
model.addToCache(chunk);