private boolean checkConsistencyForExport(List<PatternInfoRowObject> selected) {
		if (selected.isEmpty()) {
			Msg.showWarn(this, component, "Export Error", "Can't export empty selection.");
			return false;
		}
		//find first POST pattern and record the alignment and context register filter
		Integer alignment = null;
		ContextRegisterFilter cRegFilter = null;
		for (PatternInfoRowObject row : selected) {
			if (!row.getPatternType().equals(PatternType.FIRST)) {
				continue;
			}
			alignment = row.getAlignment();
			cRegFilter = row.getContextRegisterFilter();
			break;
		}
		//now check that all POST patterns agree with the first POST pattern
		for (PatternInfoRowObject row : selected) {
			if (!row.getPatternType().equals(PatternType.FIRST)) {
				continue; //not a POST pattern, don't worry about it
			}
			if (!Objects.equals(alignment, row.getAlignment()) ||
				!Objects.equals(cRegFilter, row.getContextRegisterFilter())) {
				Msg.showWarn(this, component, "Export Error",
					"Selected POST rows must all agree on alignment and context registers");
				return false;
			}
		}
		return true;
	}
Create a new {@code ExportPatternFileActionListener} for a given {@link ClipboardPanel} with
parent {@link Component}
@param clipboardPanel the clipboard panel
@param comp the parent component
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ExportPatternFileActionListener.java