Package edu.stanford.genetics.treeview.plugin.dendroview

Source Code of edu.stanford.genetics.treeview.plugin.dendroview.CharDendroView

/* BEGIN_HEADER                                              Java TreeView
*
* $Author: rqluk $
* $RCSfile: CharDendroView.java,v $
* $Revision: 1.1 $
* $Date: 2006-08-16 19:13:45 $
* $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.dendroview;

import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JDialog;
import javax.swing.JScrollBar;

import edu.stanford.genetics.treeview.*;

/**
*  This class encapsulates a dendrogram view, which is the classic Eisen
*  treeview. It uses a drag grid panel to lay out a bunch of linked
*  visualizations of the data, a la Eisen. In addition to laying out
*  components, it also manages the GlobalZoomMap. This is necessary since both
*  the GTRView (gene tree) and KnnGlobalView need to know where to lay out genes
*  using the same map. The zoom map is managed by the ViewFrame- it represents
*  the selected genes, and potentially forms a link between different views,
*  only one of which is the KnnDendroView.
*
* @author     Alok Saldanha <alok@genome.stanford.edu>
* @version $Revision: 1.1 $ $Date: 2006-08-16 19:13:45 $
*/
public class CharDendroView extends DendroView {
  /**
   *  Constructor for the CharDendroView object
   *
   * @param  vFrame  parent ViewFrame of CharDendroView
   * @param  configNode   node in which to store persistent configuration info (if desired)
   */
  public CharDendroView(ViewFrame vFrame, ConfigNode configNode) {
    super(vFrame.getDataModel(), configNode, vFrame, "CharDendroView");
    // this is where it gets interesting...
    setArraySelection(new TreeSelection(arrayDrawer.getNumCol()));
  }
 


  public void populateExportMenu(Menu menu)
  {
    /*
    PostscriptExportPanel doesn't currently support character drawing. Otherwise, this works.
   
    MenuItem psItem = new MenuItem("Export to Postscript...", new MenuShortcut(KeyEvent.VK_X));
    psItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
       
       
        MapContainer initXmap, initYmap;
        if ((arraySelection.getNSelectedIndexes() != 0) || (geneSelection.getNSelectedIndexes() != 0)){
          initXmap = getZoomXmap();
          initYmap = getZoomYmap();
        } else {
          initXmap = getGlobalXmap();
          initYmap = getGlobalYmap();
        }
        PostscriptExportPanel psePanel = new PostscriptExportPanel
        (arraynameview.getHeaderInfo(),
        getModel().getGeneHeaderInfo(),
        geneSelection, arraySelection,
        invertedTreeDrawer,
        leftTreeDrawer, arrayDrawer, initXmap, initYmap);
        psePanel.setSourceSet(dataModel.getFileSet());
        psePanel.setGeneFont(textview.getFont());
        psePanel.setArrayFont(arraynameview.getFont());
        psePanel.setIncludedArrayHeaders(arraynameview.getHeaderSummary().getIncluded());
        psePanel.setIncludedGeneHeaders(textview.getHeaderSummary().getIncluded());
        final JDialog popup = new CancelableSettingsDialog(viewFrame, "Export to Postscript", psePanel);
        popup.pack();
        popup.setVisible(true);
      }
    });
    menu.add(psItem);
    */
   
    MenuItem bitmapItem = new MenuItem("Export to Image...");
    bitmapItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
       
        MapContainer initXmap, initYmap;
        if ((getArraySelection().getNSelectedIndexes() != 0) || (getGeneSelection().getNSelectedIndexes() != 0)){
          initXmap = getZoomXmap();
          initYmap = getZoomYmap();
        } else {
          initXmap = getGlobalXmap();
          initYmap = getGlobalYmap();
        }
       
        BitmapExportPanel bitmapPanel = new BitmapExportPanel
        (arraynameview.getHeaderInfo(),
        getDataModel().getGeneHeaderInfo(),
        getGeneSelection(), getArraySelection(),
        invertedTreeDrawer,
        leftTreeDrawer, arrayDrawer, initXmap, initYmap,
        true);
        bitmapPanel.setSourceSet(getDataModel().getFileSet());
        bitmapPanel.setGeneFont(textview.getFont());
        bitmapPanel.setArrayFont(arraynameview.getFont());
        bitmapPanel.setIncludedArrayHeaders(arraynameview.getHeaderSummary().getIncluded());
        bitmapPanel.setIncludedGeneHeaders(textview.getHeaderSummary().getIncluded());
       
        final JDialog popup = new CancelableSettingsDialog(viewFrame, "Export to Image", bitmapPanel);
        popup.pack();
        popup.setVisible(true);
      }
    });
    menu.add(bitmapItem);
   
   
  }

  /**
   *  This method should be called only during initial setup of the modelview
   *
   *  It sets up the views and binds them all to config nodes.
   *
   */
  protected void setupViews() {

    CharColorExtractor colorExtractor = new CharColorExtractor();
   
    hintpanel = new MessagePanel("Usage Hints");
    statuspanel = new MessagePanel("View Status");

    CharArrayDrawer cArrayDrawer = new CharArrayDrawer();
    cArrayDrawer.setColorExtractor(colorExtractor);
    // set data first to avoid adding auto-genereated contrast to documentConfig.
    cArrayDrawer.setHeaderInfo(getDataModel().getGeneHeaderInfo(), getConfigNode().getAttribute("headerName", "ALN"));
    arrayDrawer = cArrayDrawer;




    ((Observable)getDataModel()).addObserver(arrayDrawer);

    globalview = new GlobalView();
   
   
    // scrollbars, mostly used by maps
    globalXscrollbar = new JScrollBar(JScrollBar.HORIZONTAL, 0,1,0,1);
    globalYscrollbar = new JScrollBar(JScrollBar.VERTICAL,0,1,0,1);
    zoomXscrollbar = new JScrollBar(JScrollBar.HORIZONTAL, 0,1,0,1);
    zoomYscrollbar = new JScrollBar(JScrollBar.VERTICAL,0,1,0,1);



     zoomXmap = new MapContainer();
     zoomXmap.setDefaultScale(12.0);
     zoomXmap.setScrollbar(zoomXscrollbar);
     zoomYmap = new MapContainer();
     zoomYmap.setDefaultScale(12.0);
     zoomYmap.setScrollbar(zoomYscrollbar);

     // globalmaps tell globalview, atrview, and gtrview
     // where to draw each data point.
  // the scrollbars "scroll" by communicating with the maps.
    globalXmap = new MapContainer();
    globalXmap.setDefaultScale(2.0);
    globalXmap.setScrollbar(globalXscrollbar);
    globalYmap = new MapContainer();
    globalYmap.setDefaultScale(2.0);
    globalYmap.setScrollbar(globalYscrollbar);

    globalview.setXMap(globalXmap);
    globalview.setYMap(globalYmap);

    globalview.setZoomYMap(getZoomYmap());
    globalview.setZoomXMap(getZoomXmap());
    globalview.setArrayDrawer(arrayDrawer);

    charHeaderInfo = new CharHeaderInfo(arrayDrawer.getNumCol());
    arraynameview = new ArrayNameView(charHeaderInfo);
    arraynameview.setUrlExtractor(viewFrame.getArrayUrlExtractor());

    leftTreeDrawer = new LeftTreeDrawer();
    gtrview = new GTRView();
    gtrview.setMap(globalYmap);
    gtrview.setLeftTreeDrawer(leftTreeDrawer);
    gtrview.getHeaderSummary().setIncluded(new int [] {0,3});
   
    invertedTreeDrawer = new InvertedTreeDrawer();
    atrview = new ATRView();
    atrview.setMap(globalXmap);
    atrview.setInvertedTreeDrawer(invertedTreeDrawer);
    atrview.getHeaderSummary().setIncluded(new int [] {0,3});

    atrzview = new ATRZoomView();
    atrzview.setZoomMap(getZoomXmap());
    atrzview.setHeaderSummary(atrview.getHeaderSummary());
    atrzview.setInvertedTreeDrawer(invertedTreeDrawer);

    zoomview = new ZoomView();
    zoomview.setYMap(getZoomYmap());
    zoomview.setXMap(getZoomXmap());
    zoomview.setArrayDrawer(arrayDrawer);

    arraynameview.setMapping(getZoomXmap());

    textview = new TextViewManager(getDataModel().getGeneHeaderInfo(), viewFrame.getUrlExtractor());
    textview.setMap(getZoomYmap());

    doDoubleLayout();
   
    // reset persistent popups
    settingsFrame = null;
    settingsPanel = null;

    // urls
    colorExtractor.bindConfig(getFirst("ColorExtractor"));
   

    bindTrees();
   
    zoomview.setHeaders(getDataModel().getGeneHeaderInfo(), charHeaderInfo);
    zoomview.setShowVal(true);
    globalXmap.bindConfig(getFirst("GlobalXMap"));
    globalYmap.bindConfig(getFirst("GlobalYMap"));
    getZoomXmap().bindConfig(getFirst("ZoomXMap"));
    getZoomYmap().bindConfig(getFirst("ZoomYMap"));

    textview.bindConfig(getFirst("TextViewParent"));
//    arraynameview.bindConfig(getFirst("ArrayNameView"));

    // perhaps I could remember this stuff in the MapContainer...
    globalXmap.setIndexRange(0, arrayDrawer.getNumCol() - 1);
    globalYmap.setIndexRange(0, arrayDrawer.getNumRow() - 1);
    getZoomXmap().setIndexRange(-1, -1);
    getZoomYmap().setIndexRange(-1, -1);

    globalXmap.notifyObservers();
    globalYmap.notifyObservers();
    getZoomXmap().notifyObservers();
    getZoomYmap().notifyObservers();
  }
  private HeaderInfo charHeaderInfo;
}
class CharHeaderInfo implements HeaderInfo {
  String [] holder = new String [1];
  String [] names = new String [1];
  int numChars;
  CharHeaderInfo(int n) {
    numChars = n;
  }

  public String[] getHeader(int i) {
    holder[0] = "" + i;
    return holder;
  }

  public String getHeader(int i, String name) {
    return "" + i;
  }
  public String getHeader(int rowIndex, int columnIndex) {
    return "" + rowIndex;
  }

  public String[] getNames() {
    names[0] = "Column";
    return names;
  }

  public int getNumNames() {
    return 1;
  }

  public int getNumHeaders() {
    return numChars;
  }

  public int getIndex(String name) {
    return 0;
  }

  public int getHeaderIndex(String id) {
    return 0;
  }
  /**
   * noop, since this object is static.
   */
  public void addObserver(Observer o) {}   
  public void deleteObserver(Observer o) {}   
  public boolean addName(String name, int location) {return false;}
  public boolean setHeader(int i, String name, String value) {return false;}
  public boolean getModified() {return false;}
  public void setModified(boolean mod) {}   
}
TOP

Related Classes of edu.stanford.genetics.treeview.plugin.dendroview.CharDendroView

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.