package aliview.sequencelist; import java.awt.Point; import javax.swing.DefaultListSelectionModel; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionListener; import org.apache.log4j.Logger; import aliview.AliView; import aliview.sequences.Sequence; public class SequenceListSelectionModel extends DefaultListSelectionModel { private static final Logger logger = Logger.getLogger(SequenceListSelectionModel.class); private AlignmentSelectionModel aliSelectionModel; public SequenceListSelectionModel(AlignmentSelectionModel aliSelectionModel) { this.aliSelectionModel = aliSelectionModel; super.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); } /* @Override public void fireValueChanged(int firstIndex, int lastIndex) { // TODO Auto-generated method stub super.fireValueChanged(firstIndex, lastIndex); //super.fireValueChanged(0, aliSelectionModel.getSequenceListModel().size()); } @Override public void fireValueChanged(int firstIndex, int lastIndex, boolean isAdjusting) { // TODO Auto-generated method stub logger.info("fireValueChanged"); super.fireValueChanged(firstIndex, lastIndex, isAdjusting); //super.fireValueChanged(0, aliSelectionModel.getSequenceListModel().size(), isAdjusting); } */ // // // ListSelectionModel // // public boolean isSelectedIndex(int index){ // Rangecheck?? - No //return delegateLSM.isSelectedIndex(index); // logger.info("isSelectedIndex=" + index + " " + aliSelectionModel.isSequenceAtLeastPartlySelected(index)); return aliSelectionModel.isSequenceAtLeastPartlySelected(index); } // // This is called from JList BasicUI Handler at mouse or key events on list // public void setSelectionInterval(int index0, int index1) { logger.info("setSelectionInterval index0=" + index0 + " index1=" + index1); super.setSelectionInterval(index0, index1); aliSelectionModel.setSequenceSelection(index0, index1); //fireValueChanged(index0, index1); //aliSelectionModel.fireSelectionChanged(index0, index1); } public void clearSelection() { logger.info("clear selection"); //super.clearSelection(); } // // This is called from JList BasicUI Handler at mouse or key events on list // public void addSelectionInterval(int index0, int index1) { super.addSelectionInterval(index0, index1); logger.info("addSelectionInterval ix0=" + index0 + " ix1=" + index1); logger.info("addSelectionInterval getValueIsAdjusting=" + getValueIsAdjusting()); // only add if not already selected, this is to prevent partly selected sequence to // be fully selected when a drag event is initiated int minIndex = Math.min(index0, index1); int maxIndex = Math.max(index0, index1); boolean shouldChange = false; for(int n = minIndex; n <= maxIndex; n++){ if(!aliSelectionModel.isSequenceAtLeastPartlySelected(n)){ shouldChange = true; } } if(shouldChange){ aliSelectionModel.addSequenceSelection(index0, index1); } } // // This is called from JList BasicUI Handler at mouse or key events on list // public void removeSelectionInterval(int index0, int index1) { logger.info("removeSelectionInterval"); super.removeSelectionInterval(index0, index1); aliSelectionModel.removeSequenceSelection(index0, index1); //aliSelectionModel.fireSelectionChanged(); } // // This is called from JList BasicUI Handler at mouse or key events on list // public int getMinSelectionIndex() { logger.info("getMinSelectionIndex=" + aliSelectionModel.getFirstSelectedSequenceIndex()); int minPos = aliSelectionModel.getFirstSelectedSequenceIndex(); return minPos; //return super.getMinSelectionIndex(); } // // This is called from JList BasicUI Handler at mouse or key events on list // public int getMaxSelectionIndex() { logger.info("getMaxSelectionIndex" + aliSelectionModel.getLastSelectedSequenceIndex()); int maxPos = aliSelectionModel.getLastSelectedSequenceIndex(); return maxPos; } public int getAnchorSelectionIndex() { logger.info("getAnchorSelectionIndex" + super.getAnchorSelectionIndex()); int anchorIndex = super.getAnchorSelectionIndex(); if(anchorIndex == -1){ anchorIndex = aliSelectionModel.getFirstSelectedSequenceIndex(); } logger.info("anchorIndex" + anchorIndex); return anchorIndex; } public void setAnchorSelectionIndex(int anchorIndex) { logger.info("setAnchorSelectionIndex" + anchorIndex); super.setAnchorSelectionIndex(anchorIndex); } public int getLeadSelectionIndex() { logger.info("getLeadSelectionIndex" + super.getLeadSelectionIndex()); return super.getLeadSelectionIndex(); } public void setLeadSelectionIndex(int leadIndex) { logger.info("setLeadSelectionIndex"); super.setLeadSelectionIndex(leadIndex); } public boolean isSelectionEmpty(){ return super.isSelectionEmpty(); //logger.warn("isSelectionEmpty method is being used - this might have performace issues"); //return false; //!aliSelectionModel.hasSelection(); } public void insertIndexInterval(int index, int length, boolean before) { // this is unwanted since selection is drawn from sequence selection and not internal array logger.info("insertIndexInterval index=" + index + " length" + length); //super.insertIndexInterval(index, length, before); } public void removeIndexInterval(int index0, int index1) { // this is unwanted since selection is drawn from sequence selection and not internal array logger.info("removeIndexInterval"); //super.removeIndexInterval(index0, index1); } public void setValueIsAdjusting(boolean isAdjusting) { logger.info("setValueIsAdjusting"); super.setValueIsAdjusting(isAdjusting); } public boolean getValueIsAdjusting() { logger.info("getValueIsAdjusting"); return super.getValueIsAdjusting(); } public void setSelectionMode(int selectionMode) { super.setSelectionMode(selectionMode); } public int getSelectionMode() { return super.getSelectionMode(); } public void addListSelectionListener(ListSelectionListener l) { super.addListSelectionListener(l); } public void removeListSelectionListener(ListSelectionListener l) { super.removeListSelectionListener(l); } }