mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-21 20:42:20 +08:00
Merge remote-tracking branch 'origin/GP-6749-dragonmacher-dt-filter-fix' into Ghidra_12.1
This commit is contained in:
+7
@@ -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());
|
||||
|
||||
+21
-5
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user