mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
add action to turn off auto-resize (PY-20448)
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
+18
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user