Only show visible columns in popup menu

This commit is contained in:
SiboVG 2023-09-19 18:30:04 +02:00
parent c7e9f46b39
commit 26d399c5f1

View File

@ -7,6 +7,7 @@ import java.awt.event.MouseEvent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -45,6 +46,7 @@ public class ComponentPresetTable extends JTable {
private final AbstractTableModel tableModel; private final AbstractTableModel tableModel;
private final XTableColumnModel tableColumnModel; private final XTableColumnModel tableColumnModel;
private final ComponentPresetTableColumn[] columns; private final ComponentPresetTableColumn[] columns;
private final List<TableColumn> hiddenColumns;
public ComponentPresetTable(final ComponentPreset.Type presetType, List<ComponentPreset> presets, List<TypedKey<?>> visibleColumnKeys) { public ComponentPresetTable(final ComponentPreset.Type presetType, List<ComponentPreset> presets, List<TypedKey<?>> visibleColumnKeys) {
super(); super();
@ -54,7 +56,7 @@ public class ComponentPresetTable extends JTable {
this.columns = new ComponentPresetTableColumn[ComponentPreset.ORDERED_KEY_LIST.size() + 1]; this.columns = new ComponentPresetTableColumn[ComponentPreset.ORDERED_KEY_LIST.size() + 1];
tableModel = new AbstractTableModel() { this.tableModel = new AbstractTableModel() {
final ComponentPresetTableColumn[] myColumns = columns; final ComponentPresetTableColumn[] myColumns = columns;
@Override @Override
@ -97,17 +99,16 @@ public class ComponentPresetTable extends JTable {
}; };
sorter = new TableRowSorter<TableModel>(tableModel); this.sorter = new TableRowSorter<TableModel>(tableModel);
this.tableColumnModel = new XTableColumnModel();
tableColumnModel = new XTableColumnModel();
/* /*
* Set up the Column Table model, and customize the sorting. * Set up the Column Table model, and customize the sorting.
*/ */
columns[0] = new ComponentPresetTableColumn.Favorite(0); this.columns[0] = new ComponentPresetTableColumn.Favorite(0);
tableColumnModel.addColumn(columns[0]); this.tableColumnModel.addColumn(columns[0]);
List<TableColumn> hiddenColumns = new ArrayList<TableColumn>(); this.hiddenColumns = new ArrayList<>();
{ {
int index = 1; int index = 1;
for (final TypedKey<?> key : ComponentPreset.ORDERED_KEY_LIST) { for (final TypedKey<?> key : ComponentPreset.ORDERED_KEY_LIST) {
@ -144,7 +145,7 @@ public class ComponentPresetTable extends JTable {
}); });
} }
if (visibleColumnKeys.indexOf(key) < 0) { if (!visibleColumnKeys.contains(key)) {
hiddenColumns.add(columns[index]); hiddenColumns.add(columns[index]);
} }
index++; index++;
@ -156,10 +157,10 @@ public class ComponentPresetTable extends JTable {
this.setModel(tableModel); this.setModel(tableModel);
this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
this.setRowSorter(sorter); this.setRowSorter(sorter);
sorter.toggleSortOrder(2); // Sort by the first column (manufacturer) by default this.sorter.toggleSortOrder(2); // Sort by the first column (manufacturer) by default
for (TableColumn hiddenColumn : hiddenColumns) { for (TableColumn hiddenColumn : this.hiddenColumns) {
tableColumnModel.setColumnVisible(hiddenColumn, false); this.tableColumnModel.setColumnVisible(hiddenColumn, false);
} }
JTableHeader header = this.getTableHeader(); JTableHeader header = this.getTableHeader();
@ -185,7 +186,7 @@ public class ComponentPresetTable extends JTable {
} }
public XTableColumnModel getXColumnModel() { public XTableColumnModel getXColumnModel() {
return tableColumnModel; return this.tableColumnModel;
} }
public void setRowFilter(RowFilter<? super TableModel, ? super Integer> filter) { public void setRowFilter(RowFilter<? super TableModel, ? super Integer> filter) {
@ -231,6 +232,9 @@ public class ComponentPresetTable extends JTable {
} }
} }
for (TableColumn c : columns) { for (TableColumn c : columns) {
if (hiddenColumns.contains(c)) {
continue;
}
JCheckBoxMenuItem item = new ToggleColumnMenuItem(c); JCheckBoxMenuItem item = new ToggleColumnMenuItem(c);
this.add(item); this.add(item);
} }