public static void createSharedActions(Tool tool, ToolActions toolActions, String owner) {

		String actionMenuGroup = "zzzTableGroup";
		tool.setMenuGroup(new String[] { "Copy" }, actionMenuGroup, "1");
		tool.setMenuGroup(new String[] { "Export" }, actionMenuGroup, "2");
		tool.setMenuGroup(new String[] { "Select All" }, actionMenuGroup, "3");

		int subGroupIndex = 1; // order by insertion
		GTableAction copyAction = new GTableAction("Table Data Copy", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				GTable gTable = (GTable) context.getSourceComponent();
				gTable.doCopy();
			}
		};
		//@formatter:off
		copyAction.setPopupMenuData(new MenuData(
				new String[] { "Copy", "Copy" },
				Icons.COPY_ICON,
				actionMenuGroup, NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		copyAction.setKeyBindingData(new KeyBindingData(COPY_KEY_STROKE));
		copyAction.setHelpLocation(new HelpLocation("Tables", "Copy"));
		//@formatter:on

		GTableAction copyCurrentColumnAction =
			new GTableAction("Table Data Copy Current Column", owner) {
				@Override
				public void actionPerformed(ActionContext context) {
					GTable gTable = (GTable) context.getSourceComponent();
					gTable.doCopyCurrentColumn(context.getMouseEvent());
				}
			};
		//@formatter:off
		copyCurrentColumnAction.setPopupMenuData(new MenuData(
				new String[] { "Copy",
				"Copy Current Column" },
				Icons.COPY_ICON,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		copyCurrentColumnAction.setKeyBindingData(new KeyBindingData(COPY_COLUMN_KEY_STROKE));
		copyCurrentColumnAction.setHelpLocation(new HelpLocation("Tables", "Copy_Current_Column"));
		//@formatter:on

		GTableAction copyColumnsAction = new GTableAction("Table Data Copy by Columns", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				GTable gTable = (GTable) context.getSourceComponent();
				gTable.doCopyColumns();
			}
		};
		//@formatter:off
		copyColumnsAction.setPopupMenuData(new MenuData(
				new String[] { "Copy", "Copy Columns..." },
				Icons.COPY_ICON,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		copyColumnsAction.setHelpLocation(new HelpLocation("Tables", "Copy_Columns"));
		//@formatter:on

		GTableAction exportAction = new GTableAction("Table Data CSV Export", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				GTable gTable = (GTable) context.getSourceComponent();
				gTable.doExport();
			}
		};
		//@formatter:off
		exportAction.setPopupMenuData(new MenuData(
				new String[] { "Export", GTableToCSV.TITLE + "..." },
				ICON_SPREADSHEET,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		exportAction.setHelpLocation(new HelpLocation("Tables", "ExportCSV"));
		//@formatter:on

		GTableAction exportColumnsAction =
			new GTableAction("Table Data CSV Export (by Columns)", owner) {
				@Override
				public void actionPerformed(ActionContext context) {
					GTable gTable = (GTable) context.getSourceComponent();
					gTable.doExportColumns();
				}
			};
		//@formatter:off
		exportColumnsAction.setPopupMenuData(new MenuData(
				new String[] { "Export", "Export Columns to CSV..." },
				ICON_SPREADSHEET,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		exportColumnsAction.setHelpLocation(new HelpLocation("Tables", "ExportCSV_Columns"));
		//@formatter:on

		GTableAction selectAllAction = new GTableAction("Table Select All", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				GTable gTable = (GTable) context.getSourceComponent();
				gTable.selectAll();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				if (!super.isEnabledForContext(context)) {
					return false;
				}
				GTable gTable = (GTable) context.getSourceComponent();
				int mode = gTable.getSelectionModel().getSelectionMode();
				return mode != ListSelectionModel.SINGLE_SELECTION;
			}
		};
		//@formatter:off
		selectAllAction.setPopupMenuData(new MenuData(
				new String[] { "Select All" },
				null /*icon*/,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		selectAllAction.setKeyBindingData(new KeyBindingData(SELECT_ALL_KEY_STROKE));
		selectAllAction.setHelpLocation(new HelpLocation("Tables", "SelectAll"));
		//@formatter:on

		GTableAction activateFilterAction = new GTableAction("Table/Tree Activate Filter", owner) {

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				if (!super.isEnabledForContext(context)) {
					return false;
				}

				GTable gTable = (GTable) context.getSourceComponent();
				return gTable.getTableFilterPanel() != null;
			}

			@Override
			public void actionPerformed(ActionContext context) {

				GTable gTable = (GTable) context.getSourceComponent();
				GTableFilterPanel<?> filterPanel = gTable.getTableFilterPanel();
				filterPanel.activate();
			}
		};
		//@formatter:off
		activateFilterAction.setPopupMenuData(new MenuData(
				new String[] { "Activate Filter" },
				null /*icon*/,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);
		activateFilterAction.setKeyBindingData(new KeyBindingData(ACTIVATE_FILTER_KEY_STROKE));
		activateFilterAction.setHelpLocation(new HelpLocation("Trees", "Activate_Filter"));
		//@formatter:on

		GTableAction toggleFilterAction = new GTableAction("Table/Tree Toggle Filter", owner) {

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				if (!super.isEnabledForContext(context)) {
					return false;
				}

				GTable gTable = (GTable) context.getSourceComponent();
				return gTable.getTableFilterPanel() != null;
			}

			@Override
			public void actionPerformed(ActionContext context) {

				GTable gTable = (GTable) context.getSourceComponent();
				GTableFilterPanel<?> filterPanel = gTable.getTableFilterPanel();
				filterPanel.toggleVisibility();
			}
		};
		//@formatter:off
		toggleFilterAction.setPopupMenuData(new MenuData(
				new String[] { "Toggle Filter" },
				null /*icon*/,
				actionMenuGroup,
				NO_MNEMONIC,
				Integer.toString(subGroupIndex++)
			)
		);		
		toggleFilterAction.setHelpLocation(new HelpLocation("Trees", "Toggle_Filter"));
		//@formatter:on

		toolActions.addGlobalAction(copyAction);
		toolActions.addGlobalAction(copyColumnsAction);
		toolActions.addGlobalAction(copyCurrentColumnAction);
		toolActions.addGlobalAction(exportAction);
		toolActions.addGlobalAction(exportColumnsAction);
		toolActions.addGlobalAction(selectAllAction);
		toolActions.addGlobalAction(activateFilterAction);
		toolActions.addGlobalAction(toggleFilterAction);
	}
A method that subclasses can override to signal that they wish not to have this table's
built-in popup actions.   Subclasses will almost never need to override this method.

@return true if popup actions are supported
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTable.java