diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java index f4af227db3..37d2cbf428 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterDialog.java @@ -35,6 +35,7 @@ public class DtFilterDialog extends DialogComponentProvider { private TypeComponent arraysComponent = new TypeComponent("Arrays"); private TypeComponent enumsComponent = new TypeComponent("Enums"); private TypeComponent functionsComponent = new TypeComponent("Functions"); + private TypeComponent otherComponent = new TypeComponent("Other"); private TypeComponent pointersComponent = new TypeComponent("Pointers"); private TypeComponent structuresComponent = new TypeComponent("Structures"); private TypeComponent unionsComponent = new TypeComponent("Unions"); @@ -77,6 +78,7 @@ public class DtFilterDialog extends DialogComponentProvider { newState.setArraysFilter(arraysComponent.getFilter()); newState.setEnumsFilter(enumsComponent.getFilter()); newState.setFunctionsFilter(functionsComponent.getFilter()); + newState.setOtherFilter(otherComponent.getFilter()); newState.setPointersFilter(pointersComponent.getFilter()); newState.setStructuresFilter(structuresComponent.getFilter()); newState.setUnionsFilter(unionsComponent.getFilter()); @@ -108,6 +110,8 @@ public class DtFilterDialog extends DialogComponentProvider { panel.add(structuresComponent.getRight()); panel.add(unionsComponent.getLeft()); panel.add(unionsComponent.getRight()); + panel.add(otherComponent.getLeft()); + panel.add(otherComponent.getRight()); GButton selectAll = new GButton("Select All"); GButton deselectAll = new GButton("Deselect All"); @@ -145,6 +149,8 @@ public class DtFilterDialog extends DialogComponentProvider { return List.of( arraysComponent.typeCb, arraysComponent.typeDefCb, + otherComponent.typeCb, + otherComponent.typeDefCb, enumsComponent.typeCb, enumsComponent.typeDefCb, functionsComponent.typeCb, @@ -161,6 +167,7 @@ public class DtFilterDialog extends DialogComponentProvider { private void initCheckBoxes() { arraysComponent.init(filterState.getArraysFilter()); + otherComponent.init(filterState.getOtherFilter()); enumsComponent.init(filterState.getEnumsFilter()); functionsComponent.init(filterState.getFunctionsFilter()); pointersComponent.init(filterState.getPointersFilter()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java index 825711aa2f..9d627c9273 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DtFilterState.java @@ -21,7 +21,6 @@ import ghidra.app.plugin.core.datamgr.util.DataTypeUtils; import ghidra.framework.options.SaveState; import ghidra.program.model.data.*; import ghidra.program.model.data.Enum; -import ghidra.program.model.listing.Function; /** * A simple object to store various filter settings for the data type provider. @@ -34,6 +33,7 @@ public class DtFilterState { private DtTypeFilter enumsFilter = new DtTypeFilter("Enums"); private DtTypeFilter functionsFilter = new DtTypeFilter("Functions"); private DtTypeFilter structuresFilter = new DtTypeFilter("Structures"); + private DtTypeFilter otherFilter = new DtTypeFilter("Other"); private DtTypeFilter pointersFilter = new DtTypeFilter("Pointers"); private DtTypeFilter unionsFilter = new DtTypeFilter("Unions"); @@ -46,6 +46,7 @@ public class DtFilterState { public DtFilterState copy() { DtFilterState filterState = new DtFilterState(); filterState.arraysFilter = arraysFilter.copy(); + filterState.otherFilter = otherFilter.copy(); filterState.enumsFilter = enumsFilter.copy(); filterState.functionsFilter = functionsFilter.copy(); filterState.structuresFilter = structuresFilter.copy(); @@ -66,6 +67,18 @@ public class DtFilterState { this.arraysFilter = filter; } + public boolean isShowOther() { + return otherFilter.isTypeActive(); + } + + public DtTypeFilter getOtherFilter() { + return otherFilter; + } + + public void setOtherFilter(DtTypeFilter filter) { + this.otherFilter = filter; + } + public boolean isShowEnums() { return enumsFilter.isTypeActive(); } @@ -155,7 +168,7 @@ public class DtFilterState { return passes(enumsFilter, dt); } - if (baseDt instanceof Function) { + if (baseDt instanceof FunctionDefinition) { return passes(functionsFilter, dt); } @@ -167,7 +180,7 @@ public class DtFilterState { return passes(unionsFilter, dt); } - return true; + return passes(otherFilter, dt); } private boolean passes(DtTypeFilter filter, DataType dt) { @@ -184,6 +197,7 @@ public class DtFilterState { ss.putSaveState(arraysFilter.getName(), arraysFilter.save()); ss.putSaveState(enumsFilter.getName(), enumsFilter.save()); ss.putSaveState(functionsFilter.getName(), functionsFilter.save()); + ss.putSaveState(otherFilter.getName(), otherFilter.save()); ss.putSaveState(pointersFilter.getName(), pointersFilter.save()); ss.putSaveState(structuresFilter.getName(), structuresFilter.save()); ss.putSaveState(unionsFilter.getName(), unionsFilter.save()); @@ -201,6 +215,7 @@ public class DtFilterState { arraysFilter = DtTypeFilter.restore("Arrays", ss.getSaveState("Arrays")); enumsFilter = DtTypeFilter.restore("Enums", ss.getSaveState("Enums")); functionsFilter = DtTypeFilter.restore("Functions", ss.getSaveState("Functions")); + otherFilter = DtTypeFilter.restore("Other", ss.getSaveState("Other")); pointersFilter = DtTypeFilter.restore("Pointers", ss.getSaveState("Pointers")); structuresFilter = DtTypeFilter.restore("Structures", ss.getSaveState("Structures")); unionsFilter = DtTypeFilter.restore("Unions", ss.getSaveState("Unions")); @@ -208,8 +223,8 @@ public class DtFilterState { @Override public int hashCode() { - return Objects.hash(arraysFilter, enumsFilter, functionsFilter, pointersFilter, - structuresFilter, unionsFilter); + return Objects.hash(arraysFilter, enumsFilter, functionsFilter, + otherFilter, pointersFilter, structuresFilter, unionsFilter); } @Override @@ -227,6 +242,7 @@ public class DtFilterState { return Objects.equals(arraysFilter, other.arraysFilter) && Objects.equals(enumsFilter, other.enumsFilter) && Objects.equals(functionsFilter, other.functionsFilter) && + Objects.equals(otherFilter, other.otherFilter) && Objects.equals(pointersFilter, other.pointersFilter) && Objects.equals(structuresFilter, other.structuresFilter) && Objects.equals(unionsFilter, other.unionsFilter);