Package edu.stanford.genetics.treeview.plugin.karyoview

Source Code of edu.stanford.genetics.treeview.plugin.karyoview.DisplaySettingsPanel

/* BEGIN_HEADER                                              Java TreeView
*
* $Author: rqluk $
* $RCSfile: DisplaySettingsPanel.java,v $
* $Revision: 1.1 $
* $Date: 2006-08-16 19:13:49 $
* $Name:  $
*
* This file is part of Java TreeView
* Copyright (C) 2001-2003 Alok Saldanha, All Rights Reserved. Modified by Alex Segal 2004/08/13. Modifications Copyright (C) Lawrence Berkeley Lab.
*
* This software is provided under the GNU GPL Version 2. In particular,
*
* 1) If you modify a source file, make a comment in it containing your name and the date.
* 2) If you distribute a modified version, you must do it under the GPL 2.
* 3) Developers are encouraged but not required to notify the Java TreeView maintainers at alok@genome.stanford.edu when they make a useful addition. It would be nice if significant contributions could be merged into the main distribution.
*
* A full copy of the license can be found in gpl.txt or online at
* http://www.gnu.org/licenses/gpl.txt
*
* END_HEADER
*/
package edu.stanford.genetics.treeview.plugin.karyoview;

import edu.stanford.genetics.treeview.*;
import edu.stanford.genetics.treeview.app.*;
import edu.stanford.genetics.treeview.model.TVModel;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.io.*;

class DisplaySettingsPanel extends JPanel implements SettingsPanel {
 
  private KaryoColorPresets presets;
  /** Setter for presets */
  public void setPresets(KaryoColorPresets presets) {
    this.presets = presets;
  }
  /** Getter for presets */
  public KaryoColorPresets getPresets() {
    return presets;
  }
 
  private KaryoPanel karyoPanel;
  /** Setter for karyoPanel */
  public void setKaryoPanel(KaryoPanel karyoPanel) {
    this.karyoPanel = karyoPanel;
  }
  /** Getter for karyoPanel */
  public KaryoPanel getKaryoPanel() {
    return karyoPanel;
  }
 

  public static final void main(String [] argv) {
    LinkedViewApp statview = new LinkedViewApp();
    ViewFrame testf = new LinkedViewFrame(statview);

    KaryoPanel kp = new KaryoPanel(new TVModel()new TreeSelection(2), testf, new DummyConfigNode("Display Settings Panel"));
    KaryoColorPresets kcp = new KaryoColorPresets();


    DisplaySettingsPanel panel = new DisplaySettingsPanel(kp, kcp, testf);
    panel.revalidate();
    JFrame test = new JFrame("Test Display Settings Panel");
    test.getContentPane().add(panel);
    test.pack();
    test.setVisible(true);
  }
 
  public DisplaySettingsPanel(KaryoPanel karyoPanel, KaryoColorPresets presets, ViewFrame frame) {
    setKaryoPanel(karyoPanel);
    setPresets(presets);
    setFrame(frame);
    addWidgets();
  }

  private ViewFrame frame  = null;
  /** Setter for frame */
  public void setFrame(ViewFrame frame) {
    this.frame = frame;
  }
  /** Getter for frame */
  public ViewFrame getFrame() {
    return frame;
  }
  private ColorConfigPanel colorPanel;
  private ColorPresetsPanel colorPresetsPanel;
  private DrawPanel drawPanel;
  private ScalePanel scalePanel;
  private SelectedPanel selectedPanel;
  private void addWidgets() {
    setLayout(new GridBagLayout());
    GridBagConstraints gc = new GridBagConstraints();
    gc.weightx = 100;
    gc.weighty = 100;
    gc.gridx = 0;
    gc.gridy = 0;
    gc.gridwidth = 1;
    gc.gridheight = 1;
   
    add(new JLabel("Draw"),gc);
    gc.gridx = 1;
    drawPanel = new DrawPanel();
    add(drawPanel,gc);
   
    gc.gridx = 0;
    gc.gridy = 1;
    add(new JLabel("Scale Lines"), gc);
    gc.gridx = 1;
    scalePanel = new ScalePanel();
    add(scalePanel,gc);
   
    gc.gridx = 0;
    gc.gridy = 2;
    add(new JLabel("Colors"), gc);
    gc.gridx = 1;
    colorPanel = new ColorConfigPanel();
    add(colorPanel,gc);
   
    gc.gridx = 0;
    gc.gridy = 3;
    add(new JLabel("Selected"), gc);
    gc.gridx = 1;
    selectedPanel = new SelectedPanel();
    add(selectedPanel,gc);
  }
 
  public void synchronizeTo() {
    selectedPanel.setValues();
    drawPanel.setValues();
    scalePanel.setValues();
  }
 
  public void synchronizeFrom() {
    selectedPanel.getValues();
    drawPanel.getValues();
    scalePanel.getValues();
  }
 
  /**
  * panel with checkboxes for whether to draw lines and/or bars
  */
  class DrawPanel extends JPanel {
    JCheckBox lineBox, barBox;
    DrawPanel() {
      setAlignmentX(JPanel.LEFT_ALIGNMENT);
      lineBox = new JCheckBox("lines");
      barBox = new JCheckBox("bars");
      add(lineBox);
      add(barBox);
      lineBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            setValues();
        }
      });
      barBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            setValues();
        }
      });
    }
    public void getValues() {
      KaryoDrawer karyoDrawer= karyoPanel.getKaryoDrawer();
      lineBox.setSelected(karyoDrawer.getLineChart());
      barBox.setSelected(karyoDrawer.getBarChart());
      revalidate();
    }
    public void setValues() {
      KaryoDrawer karyoDrawer= karyoPanel.getKaryoDrawer();
      karyoDrawer.setLineChart(lineBox.isSelected());
      karyoDrawer.setBarChart(barBox.isSelected());
      karyoDrawer.notifyObservers();
    }
  }
 
  /**
  * panel with checkboxes and configuration for scale lines
  */
  class ScalePanel extends JPanel {
    JCheckBox aboveBox, belowBox;
    JTextField baseField, maxField;
    ScalePanel() {
      setAlignmentX(JPanel.LEFT_ALIGNMENT);
      aboveBox = new JCheckBox("above");
      belowBox = new JCheckBox("below");
      baseField = new JTextField("2.0");
      maxField = new JTextField("5");

      add(aboveBox);
      add(belowBox);
      add(new JLabel(" base"));
      add(baseField);
      add(new JLabel(" #"));
      add(maxField);
     
      aboveBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            setValues();
        }
      });
      belowBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            setValues();
        }
      });
      baseField.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate  (DocumentEvent e) { setBase();}
        public void removeUpdate  (DocumentEvent e) { setBase();}
        public void changedUpdate (DocumentEvent e) { setBase();}
      });
      maxField.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate  (DocumentEvent e) { setMax();}
        public void removeUpdate  (DocumentEvent e) { setMax();}
        public void changedUpdate (DocumentEvent e) { setMax();}
      });
    }
    public void getValues() {
      KaryoDrawer karyoDrawer= karyoPanel.getKaryoDrawer();
      aboveBox.setSelected(karyoDrawer.getLinesAbove());
      belowBox.setSelected(karyoDrawer.getLinesBelow());
      baseField.setText(reformatDouble(karyoDrawer.getLinesBase()));
      int max = karyoDrawer.getLinesMax();
      maxField.setText(reformatInt(max));
      revalidate();
    }

    public void setBase() {
      KaryoDrawer karyoDrawer= karyoPanel.getKaryoDrawer();
      try {
        Double temp = new Double(baseField.getText());
        karyoDrawer.setLinesBase(temp.doubleValue());
      } catch (java.lang.NumberFormatException e) {
      }
      karyoDrawer.notifyObservers();
    }
    public void setMax() {
      KaryoDrawer karyoDrawer= karyoPanel.getKaryoDrawer();
      try {
        Integer temp = new Integer(maxField.getText());
        karyoDrawer.setLinesMax(temp.intValue());
      } catch (java.lang.NumberFormatException e) {
      }
      karyoDrawer.notifyObservers();
    }

    public void setValues() {
      KaryoDrawer karyoDrawer= karyoPanel.getKaryoDrawer();
      karyoDrawer.setLinesAbove(aboveBox.isSelected());
      karyoDrawer.setLinesBelow(belowBox.isSelected());
      setBase();
      setMax();
      karyoDrawer.notifyObservers();
    }
  }
 
  /**
  * Panel which allows configuration of all colors
  */
  class ColorConfigPanel extends JPanel {
    private final ColorPanel []  colorPanels = new ColorPanel[6];
    ColorConfigPanel() {
      try {
        setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
      } catch (java.lang.NoSuchMethodError err) {
        // god damn MRJ for os 9.
      }
      for (int i =0;i <6;i++) {
        colorPanels[i] = new ColorPanel(i);
      }
      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
      JPanel row1 = new JPanel();
      row1.add(colorPanels[0]);
      row1.add(colorPanels[1]);
      row1.add(colorPanels[2]);
      add(row1);
      JPanel row2 = new JPanel();
      row2.add(colorPanels[3]);
      row2.add(colorPanels[4]);
      row2.add(colorPanels[5]);
      add(row2);
     
     
      JPanel row3 = new JPanel();
      JButton loadButton = new JButton("Load...");
      loadButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          JFileChooser chooser = new JFileChooser();
          int returnVal = chooser.showOpenDialog(DisplaySettingsPanel.this);
          if(returnVal == JFileChooser.APPROVE_OPTION) {
            File f = chooser.getSelectedFile();
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
            colorSet.load(f.getPath());
            for (int i =0;i <6;i++) {
              colorPanels[i].redoColor();
            }
            repaint();
            karyoPanel.getKaryoView().repaint();
              /*
              try {
            } catch (IOException ex) {
              JOptionPane.showMessageDialog(DisplaySettingsPanel.this, "Could not load from " + f.toString() + "\n" + ex);
            }
*/
          }
        }
      });
      row3.add(loadButton);

      JButton saveButton = new JButton("Save...");
      saveButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          JFileChooser chooser = new JFileChooser();
          int returnVal = chooser.showSaveDialog(DisplaySettingsPanel.this);
          if(returnVal == JFileChooser.APPROVE_OPTION) {
            File f = chooser.getSelectedFile();
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
              colorSet.save(f.getPath());
          }
        }
      });
      row3.add(saveButton);

      JButton makeButton = new JButton("Make Preset");
      makeButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          KaryoColorSet temp = new KaryoColorSet();
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
          temp.copyStateFrom(colorSet);
          temp.setName("UserDefined");
          presets.addColorSet(temp);
          colorPresetsPanel.redoLayout();
          colorPresetsPanel.invalidate();
          colorPresetsPanel.revalidate();
          colorPresetsPanel.repaint();
        }
      });
      row3.add(makeButton);

      add(row3);
      colorPresetsPanel = new ColorPresetsPanel();
      add(new JScrollPane(colorPresetsPanel));
    }
    public void copyStateFrom(KaryoColorSet otherSet) {
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
      colorSet.copyStateFrom(otherSet);
      for (int i =0;i <6;i++) {
        colorPanels[i].redoColor();
      }
      repaint();
      karyoPanel.getKaryoView().repaint();
    }
    public void getValues() {}
    public void setValues() {}
  }

  /**
  * this class allows the presets to be selected...
  */
  class ColorPresetsPanel extends JPanel {
    ColorPresetsPanel() {
    redoLayout();
    }
    public void redoLayout() {
    removeAll();
    int nPresets = presets.getNumPresets();
    JButton [] buttons = new JButton[nPresets];
    for (int i = 0; i < nPresets; i++) {
      JButton presetButton = new JButton((presets.getPresetNames()) [i]);
      final int index = i;
      presetButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        colorPanel.copyStateFrom(presets.getColorSet(index));
      }
      });
      add(presetButton);
      buttons[index] = presetButton;
    }
    }
  }
  /**
  * inner class, must be inner so it can notify karyoDrawer when it changes the colorSet.
  */
  public class ColorPanel extends JPanel {
    ColorIcon colorIcon;
    int type;
    public ColorPanel(int i) {
      type = i;
      redoComps();
    }
    public void redoColor() {
      colorIcon.setColor(getColor());
    }
    public void redoComps() {
      removeAll();
      colorIcon = new ColorIcon(10, 10, getColor());
      JButton pushButton = new JButton(getLabel(), colorIcon);
      pushButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          Color trial = JColorChooser.showDialog(ColorPanel.this, "Pick Color for " + getLabel(), getColor());
          if (trial != null) {
            setColor(trial);
            karyoPanel.getKaryoView().repaint();
          }
        }
      });
     
      add(pushButton);
    }
    private void setColor(Color c) {
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
      colorSet.setColor(type, c);
      colorIcon.setColor(getColor());
      repaint();
    }
    private String getLabel() {
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
      return colorSet.getType(type);
    }
    private Color getColor() {
      KaryoDrawer karyoDrawer = getKaryoPanel().getKaryoDrawer();
      KaryoColorSet colorSet = karyoDrawer.getKaryoColorSet();
      return colorSet.getColor(type);
    }
  }
  class SelectedPanel extends JPanel {
    JComboBox iconBox, iconSize;
    private KaryoDrawer karyoDrawer = null;
    /**
     *  Constructor for the SizePanel object
     */
    public SelectedPanel() {
      if (karyoPanel != null) karyoDrawer = karyoPanel.getKaryoDrawer();
      iconBox = new JComboBox();
     
      String [] types = karyoDrawer.getIconTypes();
      for (int i = 0; i <types.length ; i++) {
        iconBox.addItem(types[i]);       
      }
     

      iconSize = new JComboBox();
      int [] sizes = karyoDrawer.getIconSizes();
      for (int i = 0 ; i < sizes.length; i++) {
        iconSize.addItem(reformatInt(sizes[i]));
      }
      add(new JLabel("Highlight Selected with "));
      add(iconBox);
      add(iconSize);
     
      getValues();

      iconBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            setValues();
        }
      }
      );
      iconSize.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            setValues();
        }
      });
    }

    public void getValues() {
      if (karyoDrawer != null) {
        iconBox.setSelectedIndex(karyoDrawer.getIconType());
        iconSize.setSelectedIndex(karyoDrawer.getIconSize());
        revalidate();
      }
    }

    public void setValues() {
      if (karyoDrawer != null) {
        karyoDrawer.setIconType(iconBox.getSelectedIndex());
        karyoDrawer.setIconSize(iconSize.getSelectedIndex());
        karyoDrawer.notifyObservers();
      }
    }
  }
  private static String reformatInt(int td) {
    Integer tx  = new Integer(td);
    return tx.toString();
  }
  private static String reformatDouble(double td) {
    int order = 1;
    if (Math.abs(td) < 0.0000001) {
      return "0.0000";
    }
    while (Math.abs(td * order) < 1000) {
      order *= 10;
    }
    int val    = (int) (td * order);
    Double tx  = new Double(((double) val) / order);
    return tx.toString();
  }

}
TOP

Related Classes of edu.stanford.genetics.treeview.plugin.karyoview.DisplaySettingsPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.