mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
GT-3445 fixed bug when invoking column filters on keybindings table
This commit is contained in:
parent
3c2c23d8ce
commit
3ce8d3fa39
4 changed files with 45 additions and 16 deletions
|
@ -472,9 +472,16 @@ public class GTableFilterPanel<ROW_OBJECT> extends JPanel {
|
|||
|
||||
private void showFilterDialog(RowObjectFilterModel<ROW_OBJECT> tableModel) {
|
||||
if (columnFilterDialog == null) {
|
||||
DockingWindowManager dockingWindowManager = DockingWindowManager.getInstance(table);
|
||||
loadFilterPreference(dockingWindowManager);
|
||||
columnFilterDialog = new ColumnFilterDialog<>(this, table, tableModel);
|
||||
if (ColumnFilterDialog.hasFilterableColumns(table, tableModel)) {
|
||||
DockingWindowManager dockingWindowManager = DockingWindowManager.getInstance(table);
|
||||
loadFilterPreference(dockingWindowManager);
|
||||
columnFilterDialog = new ColumnFilterDialog<>(this, table, tableModel);
|
||||
}
|
||||
else {
|
||||
Msg.showError(this, this, "Column Filter Error", "This table contains no filterable columns!");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
columnFilterDialog.setCloseCallback(() -> {
|
||||
|
|
|
@ -33,6 +33,7 @@ import docking.widgets.table.GTableFilterPanel;
|
|||
import docking.widgets.table.RowObjectFilterModel;
|
||||
import docking.widgets.table.columnfilter.*;
|
||||
import docking.widgets.table.constrainteditor.ColumnConstraintEditor;
|
||||
import generic.util.WindowUtilities;
|
||||
import ghidra.util.HelpLocation;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.layout.VerticalLayout;
|
||||
|
@ -69,7 +70,7 @@ public class ColumnFilterDialog<R> extends DialogComponentProvider
|
|||
*/
|
||||
public ColumnFilterDialog(GTableFilterPanel<R> gTableFilterPanel, JTable table,
|
||||
RowObjectFilterModel<R> tableModel) {
|
||||
super("Table Column Filters", false);
|
||||
super("Table Column Filters", WindowUtilities.areModalDialogsVisible());
|
||||
this.gTableFilterPanel = gTableFilterPanel;
|
||||
this.table = table;
|
||||
this.tableModel = tableModel;
|
||||
|
@ -94,6 +95,12 @@ public class ColumnFilterDialog<R> extends DialogComponentProvider
|
|||
updateStatus();
|
||||
}
|
||||
|
||||
public static <R> boolean hasFilterableColumns(JTable table,
|
||||
RowObjectFilterModel<R> model) {
|
||||
return !ColumnFilterDialogModel.getAllColumnFilterData(model, table.getColumnModel())
|
||||
.isEmpty();
|
||||
}
|
||||
|
||||
private void addClearFilterButton() {
|
||||
JButton button = new JButton("Clear Filter");
|
||||
button.addActionListener(e -> clearFilter());
|
||||
|
@ -468,4 +475,5 @@ public class ColumnFilterDialog<R> extends DialogComponentProvider
|
|||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -64,16 +64,7 @@ public class ColumnFilterDialogModel<R> {
|
|||
this.columnModel = columnModel;
|
||||
this.currentFilter = currentColumnTableFilter;
|
||||
columnModel.addColumnModelListener(columnModelListener);
|
||||
int columnCount = columnModel.getColumnCount();
|
||||
for (int viewIndex = 0; viewIndex < columnCount; viewIndex++) {
|
||||
int modelIndex = columnModel.getColumn(viewIndex).getModelIndex();
|
||||
Class<?> columnClass = model.getColumnClass(modelIndex);
|
||||
ColumnFilterData<?> columnData =
|
||||
createColumnFilterData(modelIndex, viewIndex, columnClass);
|
||||
if (columnData.isFilterable()) {
|
||||
allFilters.add(columnData);
|
||||
}
|
||||
}
|
||||
allFilters = getAllColumnFilterData(model, columnModel);
|
||||
|
||||
addEntriesFromCurrentTableFilter(currentColumnTableFilter);
|
||||
|
||||
|
@ -86,6 +77,23 @@ public class ColumnFilterDialogModel<R> {
|
|||
}
|
||||
}
|
||||
|
||||
public static <R> List<ColumnFilterData<?>> getAllColumnFilterData(
|
||||
RowObjectFilterModel<R> model,
|
||||
TableColumnModel columnModel) {
|
||||
List<ColumnFilterData<?>> filters = new ArrayList<>();
|
||||
int columnCount = columnModel.getColumnCount();
|
||||
for (int viewIndex = 0; viewIndex < columnCount; viewIndex++) {
|
||||
int modelIndex = columnModel.getColumn(viewIndex).getModelIndex();
|
||||
Class<?> columnClass = model.getColumnClass(modelIndex);
|
||||
ColumnFilterData<?> columnData =
|
||||
createColumnFilterData(model, modelIndex, viewIndex, columnClass);
|
||||
if (columnData.isFilterable()) {
|
||||
filters.add(columnData);
|
||||
}
|
||||
}
|
||||
return filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* clean up.
|
||||
*/
|
||||
|
@ -274,7 +282,8 @@ public class ColumnFilterDialogModel<R> {
|
|||
return tableModel;
|
||||
}
|
||||
|
||||
private ColumnFilterData<?> createColumnFilterData(int modelIndex, int viewIndex,
|
||||
private static <R> ColumnFilterData<?> createColumnFilterData(
|
||||
RowObjectFilterModel<R> tableModel, int modelIndex, int viewIndex,
|
||||
Class<?> columnClass) {
|
||||
return new ColumnFilterData<>(tableModel, modelIndex, viewIndex, columnClass);
|
||||
}
|
||||
|
@ -366,7 +375,7 @@ public class ColumnFilterDialogModel<R> {
|
|||
int modelIndex = column.getModelIndex();
|
||||
Class<?> columnClass = tableModel.getColumnClass(modelIndex);
|
||||
ColumnFilterData<?> columnFilterData =
|
||||
createColumnFilterData(modelIndex, viewIndex, columnClass);
|
||||
createColumnFilterData(tableModel, modelIndex, viewIndex, columnClass);
|
||||
if (columnFilterData.isFilterable()) {
|
||||
allFilters.add(columnFilterData);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue