/** * A request for the MesquiteModule to perform a command. It is passed two strings, the name of * the command and the arguments. This should be overridden by any module that wants to respond to * a command. */ public Object doCommand(String commandName, String arguments, CommandChecker checker) { if (checker.compare(MesquiteModule.class, null, null, commandName, "paint")) { MesquiteInteger io = new MesquiteInteger(0); int column = MesquiteInteger.fromString(arguments, io); int row = MesquiteInteger.fromString(arguments, io); if (MesquiteInteger.isCombinable(row)) { if (!MesquiteLong.isCombinable(currentColor)) removeColor(row, true); else setColor(row, (int) currentColor); } } else if (checker.compare( this.getClass(), "Sets the color to be used to paint cells", "[name of color]", commandName, "setColor")) { int bc = ColorDistribution.standardColorNames.indexOf(parser.getFirstToken(arguments)); if (bc >= 0 && MesquiteLong.isCombinable(bc)) { removeColor.setValue(false); currentColor = bc; savedColor = bc; colorString = "Color " + ColorDistribution.standardColorNames.getValue(bc); } } else if (checker.compare( this.getClass(), "Sets the color of selected taxa", "[name of color]", commandName, "setColorSelected")) { int bc = ColorDistribution.standardColorNames.indexOf(parser.getFirstToken(arguments)); if (bc >= 0 && MesquiteLong.isCombinable(bc)) { for (int it = 0; it < taxa.getNumTaxa(); it++) if (taxa.getSelected(it)) setColor(it, bc); } } else if (checker.compare( this.getClass(), "Removes color from all the cells", null, commandName, "removeAllColor")) { removeAllColor(true); } else if (checker.compare( this.getClass(), "Sets the paint brush so that it removes colors from any cells touched", null, commandName, "removeColor")) { if (StringUtil.blank(arguments)) removeColor.setValue(!removeColor.getValue()); else removeColor.toggleValue(parser.getFirstToken(arguments)); if (removeColor.getValue()) { colorString = "Remove color"; currentColor = MesquiteLong.unassigned; } else { colorString = "Color " + ColorDistribution.standardColorNames.getValue((int) currentColor); currentColor = savedColor; } } else return super.doCommand(commandName, arguments, checker); return null; }
/*.................................................................................................................*/ void zapData(CharacterData data, int it) { Taxa taxa = data.getTaxa(); if (it < 0 || it >= taxa.getNumTaxa()) return; Associable tInfo = data.getTaxaInfo(false); int myColumn = -1; if (getEmployer() instanceof ListModule) { myColumn = ((ListModule) getEmployer()).getMyColumn(this); } if (tInfo != null) tInfo.deassignAssociated(it); for (int ic = 0; ic < data.getNumChars(); ic++) data.deassign(ic, it); data.notifyListeners(this, new Notification(MesquiteListener.DATA_CHANGED)); outputInvalid(); parametersChanged(); }
/*...............................................................................................................*/ boolean selected(Taxa taxa, int it, int myColumn) { if (taxa.getSelected(it)) { return true; } if (table != null && myColumn >= 0) { if (table.isCellSelectedAnyWay(myColumn, it)) return true; } return false; }
public void doCalcs() { if (bits != null) bits.clearAllBits(); if (taxa == null) return; if (bits == null) bits = new Bits(taxa.getNumTaxa()); else bits.resetSize(taxa.getNumTaxa()); if (observedStates == null) { tInfo = null; observedStates = matrixSourceTask.getCurrentMatrix(taxa); if (observedStates != null) { captureCharacterDataFromObservedStates(); if (data != null) tInfo = data.getTaxaInfo(true); } } if (observedStates == null) return; for (int it = 0; it < taxa.getNumTaxa(); it++) { if (hasData(it)) bits.setBit(it); } }
private void setColor(int it, long c) { if (it < 0) return; taxa.setAssociatedLong(colorNameRef, it, c); table.redrawCell(-1, it); }
private void removeAllColor(boolean notify) { for (int it = 0; it < taxa.getNumTaxa(); it++) setColor(it, MesquiteLong.unassigned); if (notify) table.repaintAll(); }
/*.................................................................................................................*/ public Object doCommand(String commandName, String arguments, CommandChecker checker) { if (checker.compare( this.getClass(), "Returns the matrix source", null, commandName, "getMatrixSource")) { return matrixSourceTask; } else if (checker.compare( this.getClass(), "Copies the data for selected taxon", null, commandName, "copyData")) { if (observedStates == null) return null; CharacterData data = observedStates.getParentData(); if (data == null) return null; int it = MesquiteInteger.fromString(parser.getFirstToken(arguments)); if (MesquiteInteger.isCombinable(it)) { StringBuffer sb = new StringBuffer(); data.copyDataFromRowIntoBuffer(it, sb); if (StringUtil.notEmpty(sb.toString())) { localCopyDataClipboard = sb.toString(); localCopyData = data; localCopyDataTaxon = data.getTaxa().getTaxonName(it); } else { localCopyDataClipboard = null; localCopyData = null; localCopyDataTaxon = null; } } return null; } else if (checker.compare( this.getClass(), "Pastes the data for selected taxon", null, commandName, "pasteData")) { if (observedStates == null) return null; CharacterData data = observedStates.getParentData(); if (data == null) return null; int it = MesquiteInteger.fromString(parser.getFirstToken(arguments)); if (MesquiteInteger.isCombinable(it) && StringUtil.notEmpty(localCopyDataClipboard)) { data.pasteDataFromStringIntoTaxon(it, localCopyDataClipboard); } return null; } else if (checker.compare( this.getClass(), "Pastes the data for selected taxon", null, commandName, "deleteDataTouched")) { if (observedStates == null) return null; CharacterData data = observedStates.getParentData(); if (data == null) return null; int it = MesquiteInteger.fromString(parser.getFirstToken(arguments)); Debugg.println("prepare to delete row: " + it); if (MesquiteInteger.isCombinable(it)) { if (!AlertDialog.query( containerOfModule(), "Delete Data?", "Are you sure you want to delete the data for taxon " + data.getTaxa().getTaxonName(it) + " in the matrix \"" + data.getName() + "\"", "No", "Yes")) { zapData(data, it); } } return null; } else if (checker.compare( this.getClass(), "Deletes the data for selected taxa", null, commandName, "deleteData")) { if (observedStates == null) return null; captureCharacterDataFromObservedStates(); if (data == null) return null; if (!AlertDialog.query( containerOfModule(), "Delete Data?", "Are you sure you want to delete the data for these taxa in the matrix \"" + data.getName() + "\"", "No", "Yes")) zapData(data); return null; } else if (checker.compare( this.getClass(), "deleteds () and anything between", null, commandName, "deletePrepended")) { if (observedStates == null || taxa == null) return null; boolean anySelected = taxa.anySelected(); int myColumn = -1; if (getEmployer() instanceof ListModule) { myColumn = ((ListModule) getEmployer()).getMyColumn(this); if (table != null) anySelected = anySelected || table.anyCellSelectedInColumnAnyWay(myColumn); } for (int it = 0; it < taxa.getNumTaxa(); it++) { if ((!anySelected || selected(taxa, it, myColumn))) { String note = getNote(it); while (!StringUtil.blank(note) && note.indexOf("(") >= 0) { int start = note.indexOf("("); int end = note.indexOf(")"); String firstBit = ""; if (start > 0) firstBit = note.substring(0, start); note = firstBit + note.substring(end + 1, note.length()); } setNote(it, note); } } outputInvalid(); parametersChanged(); return null; } else if (checker.compare(this.getClass(), "deletes *", null, commandName, "deleteStar")) { if (observedStates == null || taxa == null) return null; boolean anySelected = taxa.anySelected(); int myColumn = -1; if (getEmployer() instanceof ListModule) { myColumn = ((ListModule) getEmployer()).getMyColumn(this); if (table != null) anySelected = anySelected || table.anyCellSelectedInColumnAnyWay(myColumn); } for (int it = 0; it < taxa.getNumTaxa(); it++) { if ((!anySelected || selected(taxa, it, myColumn))) { String note = getNote(it); while (!StringUtil.blank(note) && note.indexOf("*") >= 0) { int start = note.indexOf("*"); String firstBit = ""; if (start > 0) firstBit = note.substring(0, start); note = firstBit + note.substring(start + 1, note.length()); } setNote(it, note); } } outputInvalid(); parametersChanged(); return null; } else if (checker.compare( this.getClass(), "Prepends to the note the sequence length (including N\'s and ?\'s) for the selected taxa", null, commandName, "prependLength")) { if (observedStates == null || taxa == null) return null; boolean anySelected = taxa.anySelected(); int myColumn = -1; if (getEmployer() instanceof ListModule) { myColumn = ((ListModule) getEmployer()).getMyColumn(this); if (table != null) anySelected = anySelected || table.anyCellSelectedInColumnAnyWay(myColumn); } for (int it = 0; it < taxa.getNumTaxa(); it++) { if (hasData(it) && (!anySelected || selected(taxa, it, myColumn))) { String note = getNote(it); if (StringUtil.blank(note)) note = "(" + sequenceLength(it) + ")"; else note = "(" + sequenceLength(it) + ") " + note; setNote(it, note); } } outputInvalid(); parametersChanged(); return null; } else if (checker.compare( this.getClass(), "Prepends to the note the number of non-missing sites (not including N\'s and ?\'s) for the selected taxa", null, commandName, "prependNumSites")) { if (observedStates == null || taxa == null) return null; boolean anySelected = taxa.anySelected(); int myColumn = -1; if (getEmployer() instanceof ListModule) { myColumn = ((ListModule) getEmployer()).getMyColumn(this); if (table != null) anySelected = anySelected || table.anyCellSelectedInColumnAnyWay(myColumn); } for (int it = 0; it < taxa.getNumTaxa(); it++) { if (hasData(it) && (!anySelected || selected(taxa, it, myColumn))) { String note = getNote(it); if (StringUtil.blank(note)) note = "(" + numSites(it) + ")"; else note = "(" + numSites(it) + ") " + note; setNote(it, note); } } outputInvalid(); parametersChanged(); return null; } else if (checker.compare( this.getClass(), "Deletes the notes for the selected taxa", null, commandName, "deleteAnnotation")) { if (observedStates == null || taxa == null) return null; boolean anySelected = taxa.anySelected(); int myColumn = -1; if (getEmployer() instanceof ListModule) { myColumn = ((ListModule) getEmployer()).getMyColumn(this); if (table != null) anySelected = anySelected || table.anyCellSelectedInColumnAnyWay(myColumn); } for (int it = 0; it < taxa.getNumTaxa(); it++) { if (hasData(it) && (!anySelected || selected(taxa, it, myColumn))) { setNote(it, null); } } outputInvalid(); parametersChanged(); return null; } else return super.doCommand(commandName, arguments, checker); }