mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
Fixed state saving for the data types table
This commit is contained in:
@@ -292,6 +292,7 @@ public class DataTypeManagerPlugin extends ProgramPlugin
|
|||||||
restoreRecentlyOpenedArchiveNames(saveState);
|
restoreRecentlyOpenedArchiveNames(saveState);
|
||||||
restoreFavorites(saveState);
|
restoreFavorites(saveState);
|
||||||
provider.restore(saveState);
|
provider.restore(saveState);
|
||||||
|
tableProvider.restore(saveState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -300,6 +301,7 @@ public class DataTypeManagerPlugin extends ProgramPlugin
|
|||||||
saveRecentlyOpenedArchiveNames(saveState);
|
saveRecentlyOpenedArchiveNames(saveState);
|
||||||
saveFavorites(saveState);
|
saveFavorites(saveState);
|
||||||
provider.save(saveState);
|
provider.save(saveState);
|
||||||
|
tableProvider.save(saveState);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restoreRecentlyOpenedArchiveNames(SaveState saveState) {
|
private void restoreRecentlyOpenedArchiveNames(SaveState saveState) {
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import ghidra.app.plugin.core.datamgr.archive.InvalidArchive;
|
|||||||
import ghidra.app.plugin.core.datamgr.util.DataTypeUtils;
|
import ghidra.app.plugin.core.datamgr.util.DataTypeUtils;
|
||||||
import ghidra.docking.settings.Settings;
|
import ghidra.docking.settings.Settings;
|
||||||
import ghidra.framework.options.PreferenceState;
|
import ghidra.framework.options.PreferenceState;
|
||||||
|
import ghidra.framework.options.SaveState;
|
||||||
import ghidra.framework.plugintool.PluginTool;
|
import ghidra.framework.plugintool.PluginTool;
|
||||||
import ghidra.framework.plugintool.ServiceProvider;
|
import ghidra.framework.plugintool.ServiceProvider;
|
||||||
import ghidra.program.model.data.*;
|
import ghidra.program.model.data.*;
|
||||||
@@ -69,6 +70,8 @@ import resources.Icons;
|
|||||||
*/
|
*/
|
||||||
public class DataTypesTableProvider extends ComponentProvider {
|
public class DataTypesTableProvider extends ComponentProvider {
|
||||||
|
|
||||||
|
private static final String SAVE_STATE_NAME = "DATA_TYPES_TABLE";
|
||||||
|
|
||||||
private static final String FILTER_STATE_PREF_KEY =
|
private static final String FILTER_STATE_PREF_KEY =
|
||||||
DataTypesTableProvider.class.getSimpleName() + ".DtFilterState";
|
DataTypesTableProvider.class.getSimpleName() + ".DtFilterState";
|
||||||
|
|
||||||
@@ -88,15 +91,14 @@ public class DataTypesTableProvider extends ComponentProvider {
|
|||||||
private ToggleDockingAction showOnlyProgramTypesAction;
|
private ToggleDockingAction showOnlyProgramTypesAction;
|
||||||
|
|
||||||
public DataTypesTableProvider(DataTypeManagerPlugin plugin) {
|
public DataTypesTableProvider(DataTypeManagerPlugin plugin) {
|
||||||
this(plugin, getDtFilterState(plugin), plugin.getCurrentProgram(), true);
|
this(plugin, plugin.getCurrentProgram(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataTypesTableProvider(DataTypeManagerPlugin plugin, DtFilterState filterState,
|
private DataTypesTableProvider(DataTypeManagerPlugin plugin, Program program,
|
||||||
Program program, boolean isConnected) {
|
boolean isConnected) {
|
||||||
|
|
||||||
super(plugin.getTool(), "Data Types Table", plugin.getName());
|
super(plugin.getTool(), "Data Types Table", plugin.getName());
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.filterState = filterState;
|
|
||||||
this.program = program;
|
this.program = program;
|
||||||
|
|
||||||
if (!isConnected) {
|
if (!isConnected) {
|
||||||
@@ -128,23 +130,31 @@ public class DataTypesTableProvider extends ComponentProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DtFilterState getDtFilterState(DataTypeManagerPlugin plugin) {
|
public void restore(SaveState saveState) {
|
||||||
|
|
||||||
PreferenceState preferenceState = getPreferenceState(plugin);
|
SaveState subSaveState = saveState.getSaveState(SAVE_STATE_NAME);
|
||||||
if (preferenceState != null) {
|
if (subSaveState == null) {
|
||||||
DtFilterState filterState = new DtFilterState();
|
// Special case: the first time this provider is shown, there will not be any saved
|
||||||
filterState.restore(preferenceState);
|
// state, so use the filter settings of the data type tree.
|
||||||
return filterState;
|
filterState = plugin.getTreeFilterState();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use the tree's current filter state as a default
|
filterState.restore(subSaveState);
|
||||||
return plugin.getTreeFilterState();
|
|
||||||
|
boolean onlyProgram = subSaveState.getBoolean(SHOW_ONLY_PROGRAM_TYPES_KEY, false);
|
||||||
|
showOnlyProgramTypesAction.setSelected(onlyProgram);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PreferenceState getPreferenceState(DataTypeManagerPlugin plugin) {
|
public void save(SaveState saveState) {
|
||||||
PluginTool tool = plugin.getTool();
|
|
||||||
DockingWindowManager dwm = tool.getWindowManager();
|
SaveState subSaveState = new SaveState();
|
||||||
return dwm.getPreferenceState(FILTER_STATE_PREF_KEY);
|
|
||||||
|
filterState.save(subSaveState);
|
||||||
|
subSaveState.putBoolean(SHOW_ONLY_PROGRAM_TYPES_KEY,
|
||||||
|
showOnlyProgramTypesAction.isSelected());
|
||||||
|
|
||||||
|
saveState.putSaveState(SAVE_STATE_NAME, subSaveState);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveDtFilterState() {
|
private void saveDtFilterState() {
|
||||||
@@ -326,12 +336,6 @@ public class DataTypesTableProvider extends ComponentProvider {
|
|||||||
.onAction(c -> reload())
|
.onAction(c -> reload())
|
||||||
.buildAndInstallLocal(this);
|
.buildAndInstallLocal(this);
|
||||||
|
|
||||||
PreferenceState preferenceState = getPreferenceState(plugin);
|
|
||||||
if (preferenceState != null) {
|
|
||||||
boolean onlyProgram = preferenceState.getBoolean(SHOW_ONLY_PROGRAM_TYPES_KEY, false);
|
|
||||||
showOnlyProgramTypesAction.setSelected(onlyProgram);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show in Tree / Select in Tree (select all items)
|
// Show in Tree / Select in Tree (select all items)
|
||||||
new ActionBuilder("Select Data Types in Tree", plugin.getName())
|
new ActionBuilder("Select Data Types in Tree", plugin.getName())
|
||||||
.popupMenuPath("Select in Tree")
|
.popupMenuPath("Select in Tree")
|
||||||
@@ -364,12 +368,13 @@ public class DataTypesTableProvider extends ComponentProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void clone(ActionContext context) {
|
private void clone(ActionContext context) {
|
||||||
DtFilterState newFilterState = filterState.copy();
|
|
||||||
DataTypesTableProvider newProvider =
|
DataTypesTableProvider newProvider =
|
||||||
new DataTypesTableProvider(plugin, newFilterState, program, false);
|
new DataTypesTableProvider(plugin, program, false);
|
||||||
|
|
||||||
|
newProvider.filterState = filterState.copy();
|
||||||
|
|
||||||
filterPanel.transferSettings(newProvider.filterPanel);
|
filterPanel.transferSettings(newProvider.filterPanel);
|
||||||
|
|
||||||
newProvider.showOnlyProgramTypesAction.setSelected(showOnlyProgramTypesAction.isSelected());
|
newProvider.showOnlyProgramTypesAction.setSelected(showOnlyProgramTypesAction.isSelected());
|
||||||
|
|
||||||
newProvider.setVisible(true);
|
newProvider.setVisible(true);
|
||||||
@@ -1133,5 +1138,4 @@ public class DataTypesTableProvider extends ComponentProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public class DtFilterDialog extends DialogComponentProvider {
|
|||||||
|
|
||||||
initCheckBoxes();
|
initCheckBoxes();
|
||||||
setRememberSize(false);
|
setRememberSize(false);
|
||||||
|
setRememberLocation(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user