GT-3445 fixed bug when invoking column filters on keybindings table

This commit is contained in:
ghidravore 2020-01-09 14:50:31 -05:00
parent 3c2c23d8ce
commit 3ce8d3fa39
4 changed files with 45 additions and 16 deletions

View file

@ -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(() -> {

View file

@ -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
}
}

View file

@ -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);
}

View file

@ -766,5 +766,10 @@ public class KeyBindingsPanel extends JPanel {
public int getRowCount() {
return tableActions.size();
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
}
}