private void addMergeAction() {
		mergeAction = new DockingAction("Merge Selected Rows", title) {
			@Override
			public void actionPerformed(ActionContext context) {
				merged = byteSequenceTable.mergeSelectedRows();
				if (merged == null) {
					return;
				}
				mergedSeqTextField.setText(merged.getHexString());
				bitsOfCheckField.setText(Integer.toString(merged.getNumFixedBits()));
				mergedSeqTextField.setBackground(Colors.BACKGROUND);
				bitsOfCheckField.setBackground(Colors.BACKGROUND);
				noteField.setBackground(Colors.BACKGROUND);
				mergedToSend = true;
			}

			@Override
			public boolean isAddToPopup(ActionContext context) {
				return true;
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return (!byteSequenceTable.getLastSelectedObjects().isEmpty());
			}

		};
		Icon icon = new GIcon("icon.bytepatterns.byte.sequence.analyzer.merge");
		mergeAction.setPopupMenuData(new MenuData(new String[] { "Merge Selected Rows" }, icon));
		mergeAction.setDescription("Merges the currently selected rows");
		mergeAction.setHelpLocation(
			new HelpLocation("FunctionBitPatternsExplorerPlugin", "Analyzing_Byte_Sequences"));
		this.addAction(mergeAction);
	}
Creates a dialog for analyzing sequences of bytes.
@param title dialog title
@param plugin plugin
@param rowObjects row objects representing sequences to analyze
@param parent parent component
@param type type of sequences
@param cRegFilter context register filter
@param note note for clipboard
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ByteSequenceAnalyzerProvider.java