Skip to content
Snippets Groups Projects
AbstractGraphPanel.java 4.98 KiB
Newer Older
  • Learn to ignore specific revisions
  • tjc's avatar
    tjc committed
    /* AbstractGraphPanel
     *
     * created: 2010
     *
     * This file is part of Artemis
     *
     * Copyright(C) 2010  Genome Research Limited
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * as published by the Free Software Foundation; either version 2
     * of the License, or(at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
     *
     */
    package uk.ac.sanger.artemis.components.alignment;
    
    
    import java.awt.Color;
    import java.awt.FontMetrics;
    import java.awt.Graphics2D;
    
    tjc's avatar
    tjc committed
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import java.text.DecimalFormat;
    
    tjc's avatar
    tjc committed
    
    
    tjc's avatar
    tjc committed
    import javax.swing.BorderFactory;
    
    tjc's avatar
    tjc committed
    import javax.swing.JCheckBox;
    
    import javax.swing.JComponent;
    
    tjc's avatar
    tjc committed
    import javax.swing.JLabel;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JTextField;
    
    public class AbstractGraphPanel extends JPanel
    {
      private static final long serialVersionUID = 1L;
      protected int start;
      protected int end;
      protected float pixPerBase;
      
    
      protected BamView bamView;
      protected int windowSize;
      protected int max;
    
    tjc's avatar
    tjc committed
      protected boolean autoWinSize = true;
      protected int userWinSize = 1;
      protected JPopupMenu popup = new JPopupMenu();
      
    
    tjc's avatar
    tjc committed
      public AbstractGraphPanel()
      {
        super();
        setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray));
        setBackground(Color.white);
      }
      
      protected void initPopupMenu(JComponent menu)
    
    tjc's avatar
    tjc committed
      {
        final JMenuItem setScale = new JMenuItem("Set the Window Size...");
        setScale.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent _)
          {
            GridBagLayout gridbag = new GridBagLayout();
            GridBagConstraints c = new GridBagConstraints();
            JPanel pane = new JPanel(gridbag);
            final JTextField newWinSize = new JTextField(Integer.toString(userWinSize), 10);
    
            newWinSize.setEnabled(!autoWinSize);
    
    tjc's avatar
    tjc committed
            final JLabel lab = new JLabel("Window size:");
            c.gridy = 0;
            pane.add(lab, c);
            pane.add(newWinSize, c);
    
    
            final JCheckBox autoSet = new JCheckBox("Automatically set window size", autoWinSize);
    
    tjc's avatar
    tjc committed
            autoSet.addActionListener(new ActionListener()
            {
              public void actionPerformed(ActionEvent e)
              {
                lab.setEnabled(!autoSet.isSelected());
                newWinSize.setEnabled(!autoSet.isSelected());
              }
            });
            c.gridy = 1;
            c.gridwidth = GridBagConstraints.REMAINDER;
            pane.add(autoSet, c);
    
            String window_options[] = { "OK", "Cancel" };
            int select = JOptionPane.showOptionDialog(null, pane, "Window Size",
                JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                window_options, window_options[0]);
    
            if (select == 1)
              return;
            autoWinSize = autoSet.isSelected();
            try
            {
              userWinSize = Integer.parseInt(newWinSize.getText().trim());
            }
            catch (NumberFormatException nfe)
            {
              return;
            }
    
    tjc's avatar
    tjc committed
            bamView.repaint();
    
    tjc's avatar
    tjc committed
          }
        });
    
        menu.add(setScale);
    
    tjc's avatar
    tjc committed
        
        addMouseListener(new PopupListener());
      }
    
      
      /**
       * Draw maximum average value.
       * @param g2
       */
      protected void drawMax(Graphics2D g2)
      {
        DecimalFormat df = new DecimalFormat("0.#");
        String maxStr = df.format((float)max/(float)windowSize);
    
        FontMetrics fm = getFontMetrics(getFont());
        g2.setColor(Color.black);
        
        int xpos = bamView.getJspView().getVisibleRect().width - fm.stringWidth(maxStr) - 
                   bamView.getJspView().getVerticalScrollBar().getWidth();
        g2.drawString(maxStr, xpos, fm.getHeight());
      }
    
    tjc's avatar
    tjc committed
    
      protected void setStartAndEnd(int start, int end)
      {
        this.start = start;
        this.end = end;
      }
    
      protected void setPixPerBase(float pixPerBase)
      {
        this.pixPerBase = pixPerBase;
      }
      
      /**
       * Popup menu listener
       */
       class PopupListener extends MouseAdapter
       {
         JMenuItem gotoMateMenuItem;
         JMenuItem showDetails;
         
         public void mouseClicked(MouseEvent e)
         {
         }
         
         public void mousePressed(MouseEvent e)
         {
           maybeShowPopup(e);
         }
    
         public void mouseReleased(MouseEvent e)
         {
           maybeShowPopup(e);
         }
    
         private void maybeShowPopup(MouseEvent e)
         {
           if(e.isPopupTrigger())
           {
             popup.show(e.getComponent(),
                     e.getX(), e.getY());
           }
         }
       }
    }