private void createActions() {
		refreshAction = new ActionBuilder("Refresh Strings", getName())
				.toolBarIcon(REFRESH_NOT_NEEDED_ICON)
				.description("<html>Push at any time to refresh the current table of strings.<br>" +
					"This button is highlighted when the data <i>may</i> be stale.<br>")
				.enabledWhen(ac -> getCurrentProgram() != null)
				.onAction(ac -> {
					refreshAction.getToolBarData().setIcon(REFRESH_NOT_NEEDED_ICON);
					reload();
				})
				.helpLocation(new HelpLocation("ViewStringsPlugin", "Refresh"))
				.buildAndInstallLocal(provider);

		tool.addLocalAction(provider, new MakeProgramSelectionAction(this, provider.getTable()));

		linkNavigationAction = new SelectionNavigationAction(this, provider.getTable());
		tool.addLocalAction(provider, linkNavigationAction);

		new ActionBuilder("Data Settings", getName()) // create pop-up menu item "Settings..."
				.withContext(ViewStringsContext.class)
				.popupMenuPath("Settings...")
				.popupMenuGroup("R")
				.helpLocation(new HelpLocation("DataPlugin", "Data_Settings"))
				.sharedKeyBinding()
				.enabledWhen(vsac -> vsac.getCount() > 0)
				.onAction(vsac -> {
					try {
						DataSettingsDialog dialog =
							vsac.getCount() == 1 ? new DataSettingsDialog(vsac.getSelectedData())
									: new DataSettingsDialog(vsac.getProgram(),
										vsac.getProgramSelection());

						tool.showDialog(dialog);
						dialog.dispose();
					}
					catch (CancelledException e) {
						// do nothing
					}
				})
				.buildAndInstallLocal(provider);

		new ActionBuilder("Default Settings", getName()) // create pop-up menu item "Default Settings..."
				.withContext(ViewStringsContext.class)
				.popupMenuPath("Default Settings...")
				.popupMenuGroup("R")
				.helpLocation(new HelpLocation("DataPlugin", "Default_Settings"))
				.sharedKeyBinding()
				.enabledWhen(vsac -> {
					if (vsac.getCount() != 1) {
						return false;
					}
					Data data = vsac.getSelectedData();
					return data != null && data.getDataType().getSettingsDefinitions().length != 0;
				})
				.onAction(vsac -> {
					Data data = vsac.getSelectedData();
					if (data == null) {
						return;
					}
					DataType dt = data.getDataType();
					DataTypeSettingsDialog dialog =
						new DataTypeSettingsDialog(dt, dt.getSettingsDefinitions());
					tool.showDialog(dialog);
					dialog.dispose();
				})
				.buildAndInstallLocal(provider);
	}
Plugin that provides the "Defined Strings" table, where all the currently defined
string data in the program is listed.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/ViewStringsPlugin.java