package org.iplantc.phyloviewer.client.tree.viewer;
import org.iplantc.phyloviewer.shared.layout.ILayoutData;
import org.iplantc.phyloviewer.shared.model.IDocument;
import org.iplantc.phyloviewer.shared.model.ITree;
import org.iplantc.phyloviewer.shared.render.Camera;
import org.iplantc.phyloviewer.shared.render.CameraCladogram;
import org.iplantc.phyloviewer.shared.render.RenderPreferences;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.HorizontalPanel;
/**
* The ViewCladogram class is a composite of the overview and detail views.
*
* @author adamk
*
*/
public class ViewCladogram extends AnimatedView
{
private DetailView detailView;
private OverviewView overviewView;
public ViewCladogram(int width, int height)
{
super();
detailView = new DetailView(1, 1);
overviewView = new OverviewView(1, 1);
HorizontalPanel panel = new HorizontalPanel();
panel.add(overviewView);
panel.add(detailView);
this.add(panel);
Camera camera = new CameraCladogram();
this.setCamera(camera);
overviewView.setCamera(camera);
detailView.setCamera(camera);
this.setLayoutType(View.LayoutType.LAYOUT_TYPE_CLADOGRAM);
overviewView.setLayoutType(View.LayoutType.LAYOUT_TYPE_CLADOGRAM);
detailView.setLayoutType(View.LayoutType.LAYOUT_TYPE_CLADOGRAM);
this.resize(width, height);
this.addKeyPressHandler(new KeyPressHandler()
{
@Override
public void onKeyPress(KeyPressEvent arg0)
{
final char charCode = arg0.getCharCode();
if(charCode == 'h')
{
overviewView.setVisible(!overviewView.isVisible());
}
}
});
}
public void resize(int width, int height)
{
int overviewWidth = (int)(width * 0.20);
int detailWidth = width - overviewWidth;
overviewView.resize(overviewWidth, height);
detailView.resize(detailWidth, height);
}
public final void render()
{
overviewView.render();
detailView.render();
}
/**
* Set the tree. Make sure both views get the tree.
*/
public final void setDocument(IDocument document)
{
super.setDocument(document);
detailView.setDocument(document);
overviewView.setDocument(document);
overviewView.updateImage();
}
@Override
public ITree getTree()
{
return detailView.getTree();
}
@Override
public boolean isReady()
{
return overviewView.isReady() && detailView.isReady();
}
@Override
public ILayoutData getLayout()
{
return detailView.getLayout();
}
@Override
public String exportImageURL()
{
return detailView.exportImageURL();
}
@Override
public void setRenderPreferences(RenderPreferences rp)
{
super.setRenderPreferences(rp);
detailView.setRenderPreferences(rp);
overviewView.setRenderPreferences(rp);
}
@Override
public void setEventBus(EventBus eventBus)
{
super.setEventBus(eventBus);
detailView.setEventBus(eventBus);
overviewView.setEventBus(eventBus);
// refire events from the sub-views, with this view as source
detailView.addSelectionHandler(refireHandler);
overviewView.addSelectionHandler(refireHandler);
}
public DetailView getDetailView()
{
return this.detailView;
}
}