/* * The MIT License (MIT) * * Copyright (c) 2007-2015 Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.broad.igv.track; import org.broad.igv.renderer.ContinuousColorScale; import org.broad.igv.renderer.DataRange; import org.broad.igv.renderer.Renderer; import org.broad.igv.session.Persistable; import org.broad.igv.ui.panel.IGVPopupMenu; import org.broad.igv.ui.panel.MouseableRegion; import org.broad.igv.ui.panel.ReferenceFrame; import org.broad.igv.util.ResourceLocator; import htsjdk.tribble.Feature; import java.awt.*; import java.awt.event.MouseEvent; import java.util.Collection; import java.util.List; /** * @author jrobinso */ public interface Track extends Persistable{ enum DisplayMode { COLLAPSED, SQUISHED, EXPANDED } /** * Return an identifier for the track. The identifier should be unique in the context of a session. For * files that produce a single track (e.g. wig) the absolute path name for the underlying file can be * used. * * @return */ String getId(); /** * Return true if the track is ready to paint (has all required data loaded). * * @param frame * @return */ boolean isReadyToPaint(ReferenceFrame frame); /** * Load required resources ot paint the reference frame. * * @param frame */ void load(ReferenceFrame frame); /** * Return true if a track can be filtered by sample annotation. * * @return */ boolean isFilterable(); /** * Render the track in the supplied rectangle. It is the responsibility of the track to draw within the * bounds of the rectangle. * * @param context the render context * @param rect the track bounds, relative to the enclosing DataPanel bounds. */ void render(RenderContext context, Rectangle rect); /** * Render the track as an overlay, presumably on another track. * * @param context the render context * @param rect the track bounds, relative to the enclosing DataPanel bounds. */ void overlay(RenderContext context, Rectangle rect); /** * Render the name of the track. Both the track and visible rectangles are supplied so the implementor * can adjust the placing of the name based on the current viewport. This is used to center track names * on the viewport for large tracks that extend outside the viewport. * * @param graphics * @param trackRectangle the track bounds, relative to the enclosing DataPanel bounds. * @param visibleRectangle */ void renderName(Graphics2D graphics, Rectangle trackRectangle, Rectangle visibleRectangle); void renderAttributes(Graphics2D graphics, Rectangle trackRectangle, Rectangle visibleRect, List<String> names, List<MouseableRegion> mouseRegions); void setName(String name); String getName(); String getNameValueString(int y); String getSample(); void setUrl(String url); ResourceLocator getResourceLocator(); /** * Return ALL ResourceLocators associated with this track. * For most tracks, this will just be a collection of size 1 * @return */ Collection<ResourceLocator> getResourceLocators(); void setAttributeValue(String key, String value); void removeAttribute(String key); String getAttributeValue(String attributeKey); void setVisible(boolean isVisible); boolean isVisible(); void setOverlayed(boolean overlayVisible); TrackType getTrackType(); void setHeight(int preferredHeight); void setHeight(int preferredHeight, boolean force); void setY(int top); int getY(); void setColorScale(ContinuousColorScale colorScale); ContinuousColorScale getColorScale(); int getHeight(); int getMinimumHeight(); /** * Manually specify the data range. * {@code autoScale} must be turned off elsewhere, if applicable * @param axisDefinition */ void setDataRange(DataRange axisDefinition); boolean hasDataRange(); DataRange getDataRange(); Color getColor(); void setColor(Color color); Color getAltColor(); void setAltColor(Color color); void setWindowFunction(WindowFunction type); WindowFunction getWindowFunction(); void setRendererClass(Class rc); Renderer getRenderer(); void setSelected(boolean selected); boolean isSelected(); boolean isSortable(); boolean isShowDataRange(); String getValueStringAt(String chr, double position, int mouseX, int mouseY, ReferenceFrame frame); float getRegionScore(String chr, int start, int end, int zoom, RegionScoreType type, String frameName); float getRegionScore(String chr, int start, int end, int zoom, RegionScoreType type, String frameName, List<Track> tracks); void setFontSize(int h); int getFontSize(); boolean handleDataClick(TrackClickEvent e); void handleNameClick(MouseEvent e); Collection<WindowFunction> getAvailableWindowFunctions(); void setProperties(TrackProperties trackProperties); Feature getFeatureAtMousePosition(TrackClickEvent e); void setSampleId(String sampleId); float logScaleData(float dataY); boolean isRegionScoreType(RegionScoreType type); int getVisibilityWindow(); void setVisibilityWindow(int i); boolean isItemRGB(); boolean isUseScore(); float getViewLimitMin(); float getViewLimitMax(); DisplayMode getDisplayMode(); void setDisplayMode(DisplayMode mode); IGVPopupMenu getPopupMenu(final TrackClickEvent te); boolean isDrawYLine(); float getYLine(); void dispose(); boolean getAutoScale(); void setAutoScale(boolean autoScale); }