private void filterChange(final BamView bamView, final JComboBox flagCheck[]) {
    int nflags = SAMRecordFlagPredicate.FLAGS.length;
    int flagCombined = 0;
    Vector<SAMRecordPredicate> predicates = new Vector<SAMRecordPredicate>();

    for (int j = 0; j < nflags; j++) {
      String opt = (String) flagCheck[j].getSelectedItem();
      if (opt.equals("HIDE")) flagCombined = flagCombined | SAMRecordFlagPredicate.FLAGS[j];
      else if (opt.equals("SHOW"))
        predicates.add(new SAMRecordFlagPredicate(SAMRecordFlagPredicate.FLAGS[j], false));
    }

    if (flagCombined == 0 && predicates.size() == 0) bamView.setSamRecordFlagPredicate(null);
    else {
      final SAMRecordPredicate predicate;
      if (predicates.size() == 0) predicate = new SAMRecordFlagPredicate(flagCombined);
      else if (flagCombined == 0) {
        predicate =
            new SAMRecordFlagConjunctionPredicate(predicates, SAMRecordFlagConjunctionPredicate.OR);
      } else {
        SAMRecordFlagPredicate p1 = new SAMRecordFlagPredicate(flagCombined);
        SAMRecordFlagConjunctionPredicate p2 =
            new SAMRecordFlagConjunctionPredicate(predicates, SAMRecordFlagConjunctionPredicate.OR);

        predicate =
            new SAMRecordFlagConjunctionPredicate(p1, p2, SAMRecordFlagConjunctionPredicate.OR);
      }
      bamView.setSamRecordFlagPredicate(predicate);
    }
    bamView.repaint();
  }
 private void setQualityCutOff(final JTextField cutOff, final BamView bamView) {
   String cutOffStr = cutOff.getText().trim();
   if (cutOffStr.equals("")) bamView.setSamRecordMapQPredicate(null);
   else {
     try {
       SAMRecordMapQPredicate predicate = new SAMRecordMapQPredicate(Integer.parseInt(cutOffStr));
       bamView.setSamRecordMapQPredicate(predicate);
     } catch (NumberFormatException nfe) {
       bamView.setSamRecordMapQPredicate(null);
     }
   }
   bamView.repaint();
 }
  public SAMRecordFilter(final BamView bamView) {
    super("Filter Reads");

    JPanel pane = (JPanel) getContentPane();
    pane.setLayout(new GridBagLayout());

    int nflags = SAMRecordFlagPredicate.FLAGS.length;
    GridBagConstraints c = new GridBagConstraints();

    int nrows = 0;
    c.ipadx = 5;
    c.ipady = 2;
    c.gridx = 0;
    c.gridwidth = 2;
    c.anchor = GridBagConstraints.WEST;
    c.gridy = nrows++;

    // MAPQ
    pane.add(new JLabel(" By Mappying Quality (mapq) cut-off:"), c);

    c.gridy = nrows++;
    c.gridwidth = 1;
    final JTextField cutOff = new JTextField(12);
    if (bamView.getSamRecordMapQPredicate() != null)
      cutOff.setText(Integer.toString(bamView.getSamRecordMapQPredicate().cutOff));

    cutOff.addKeyListener(
        new KeyAdapter() {
          public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) setQualityCutOff(cutOff, bamView);
          }
        });
    pane.add(cutOff, c);

    c.gridx = 1;
    final JButton setCutOff = new JButton("SET");
    setCutOff.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            setQualityCutOff(cutOff, bamView);
          }
        });
    pane.add(setCutOff, c);

    // FLAGS
    c.gridwidth = 2;
    c.gridx = 0;
    c.gridy = nrows++;
    pane.add(new JSeparator(), c);

    c.gridy = nrows++;
    pane.add(new JLabel(" By SAM FLAG column:"), c);
    c.gridy = nrows++;
    pane.add(new JLabel(" Select below to show or hide only the reads with "), c);
    c.gridy = nrows++;
    pane.add(new JLabel(" the flag set."), c);

    final JComboBox flagCombo[] = new JComboBox[nflags];

    final String[] items = {"", "SHOW", "HIDE"};
    c.gridwidth = 1;
    for (int j = 0; j < nflags; j++) {
      flagCombo[j] = new JComboBox(items);
      if (SAMRecordFlagPredicate.FLAGS_DESCRIPTION[j].equalsIgnoreCase("Read Unmapped"))
        flagCombo[j].setSelectedItem("HIDE");

      flagCombo[j].addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              filterChange(bamView, flagCombo);
            }
          });

      c.gridy = nrows++;
      c.gridx = 0;
      pane.add(flagCombo[j], c);
      c.gridx = 1;
      pane.add(new JLabel(SAMRecordFlagPredicate.FLAGS_DESCRIPTION[j]), c);
    }

    JButton closeFrame = new JButton("Close");
    closeFrame.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            setVisible(false);
          }
        });
    c.gridx = 1;
    c.gridy = nrows++;
    c.fill = GridBagConstraints.NONE;
    pane.add(closeFrame, c);

    pack();

    rightJustifyFrame(this);
    setVisible(true);
  }