How to create your own track
- Your track codes must be placed in gwt client folder (e.g., org.utgenome.gwt.utgb.client.track.lib)
- An example track:
/** * A simple wrapper for old UTGB tracks * * @author leo * */ public class LegacyTrack extends TrackBase { private DockPanel _panel = new DockPanel(); private Image trackImage = new Image(); private LegacyTrackInfo _legacyTrackInfo; private TrackConfig _config = new TrackConfig(this); private int offset = 0; public static TrackFactory factory() { return new TrackFactory(){ public Track newInstance() { return new LegacyTrack(); } }; } public LegacyTrack() { this(new LegacyTrackInfo()); } public LegacyTrack(LegacyTrackInfo trackInfo) { super(trackInfo.getName()); this._legacyTrackInfo = trackInfo; _panel.add(trackImage, DockPanel.CENTER); } public int getDefaultWindowHeight() { return 100; } public Widget getWidget() { return _panel; } public void onChangeTrackWindow(TrackWindow newWindow) { _legacyTrackInfo.setStart(newWindow.getStartOnGenome()); _legacyTrackInfo.setEnd(newWindow.getEndOnGenome()); draw(); } public void draw() { int windowSize = getTrackGroup().getTrackWindow().getWindowWidth(); _legacyTrackInfo.setWidth(windowSize); String imageUrl = _legacyTrackInfo.getImageURL(offset); trackImage.setUrl(imageUrl); } public void onChangeTrackGroupProperty(TrackGroupPropertyChange change) { String[] relatedProperty = {"species", "revision", "target"}; if(!change.containsOneOf(relatedProperty)) return; // no related change String species = change.getProperty("species", _legacyTrackInfo.getSpecies()); String revision = change.getProperty("revision", _legacyTrackInfo.getRevision()); String target = change.getProperty("target", _legacyTrackInfo.getTarget()); _legacyTrackInfo.setSpecies(species); _legacyTrackInfo.setRevision(revision); _legacyTrackInfo.setTarget(target); // sync with the configuration panel _config.setParameter("species", species); _config.setParameter("revision", revision); _config.setParameter("target", target); draw(); } public void setUp(TrackFrame trackFrame, TrackGroup group) { trackFrame.pack(); TrackWindow w = group.getTrackWindow(); _legacyTrackInfo.setStart(w.getStartOnGenome()); _legacyTrackInfo.setEnd(w.getEndOnGenome()); trackImage.addLoadListener(new LoadListener() { public void onError(Widget sender) { trackImage.setUrl(Design.IMAGE_NOT_AVAILABLE); } public void onLoad(Widget sender) { getFrame().onUpdateTrackWidget(); }} ); // set up the configuration panel _config.addConfigParameter("Track Name", new StringType("name"), _legacyTrackInfo.getName()); _config.addConfigParameter("Track Image URL", new StringType("baseURL"), _legacyTrackInfo.getBaseURL()); _config.addConfigParameter("Species", new StringType("species"), _legacyTrackInfo.getSpecies()); _config.addConfigParameter("Revision", new StringType("revision"), _legacyTrackInfo.getRevision()); _config.addConfigParameter("Target", new StringType("target"), _legacyTrackInfo.getTarget()); _config.addConfigParameter("Offset", new IntegerType("offset"), Integer.toString(offset)); } public TrackConfig getConfig() { return _config; } public void restoreProperties(Properties properties) { _legacyTrackInfo.setBaseURL(properties.get("baseURL", _legacyTrackInfo.getBaseURL())); _legacyTrackInfo.setSpecies(properties.get("species", _legacyTrackInfo.getSpecies())); _legacyTrackInfo.setRevision(properties.get("revision", _legacyTrackInfo.getRevision())); _legacyTrackInfo.setTarget(properties.get("target", _legacyTrackInfo.getTarget())); offset = properties.getInt("offset", offset); } public void saveProperties(Properties saveData) { saveData.add("baseURL", _legacyTrackInfo.getBaseURL()); saveData.add("species", _legacyTrackInfo.getSpecies()); saveData.add("revision", _legacyTrackInfo.getRevision()); saveData.add("target", _legacyTrackInfo.getTarget()); saveData.add("offset", offset); } public void onChangeTrackConfig(TrackConfigChange change) { if(change.contains("name")) getTrackInfo().setTrackName(change.getValue("name")); boolean drawFlag = false; if(change.contains("offset")) { offset = change.getIntValue("offset"); drawFlag = true; } String[] param = {"baseURL", "species", "revision", "target"}; if(change.containsOneOf(param)) { _legacyTrackInfo.setBaseURL(change.getValue("baseURL")); _legacyTrackInfo.setSpecies(change.getValue("species")); _legacyTrackInfo.setRevision(change.getValue("revision")); _legacyTrackInfo.setTarget(change.getValue("target")); drawFlag = true; } if(drawFlag) draw(); } }
- Extend TrackBase? class
- Implement factory() method
public static TrackFactory factory() { return new TrackFactory(){ public Track newInstance() { return new LegacyTrack(); } }; }
- Implement factory() method
- Implement getWidget() method
- The returned widget is used to display track content
- Set the default size of your track
- via getDefaultWindowHight() method (pixel size)
- Override draw() method when rewrite of your track is necessary
- This method is used for updating track content on changes of track group properties
- If you want to redraw the track content, call getFrame().onUpdateTrackWidget() insted of directly calling draw() method.
- onUpdateTrackWidget() automatically resize track frame according to your track widget size.
- To detect sequence location change, override onChangeTrackWindow() method.
- To detect other track group property change, override onChangeTrackGroupProperty() method.
- To add option configuration panel, create an instance of TrackConfig?, then override getTrackConfig() method.
- If this method returns non-null instance, configuration button appears in your track frame.
- Put all initialization codes of your track into setUp(...) method
- To save your track state into view XML file, override saveProperties() method.
- To load saved properties into your track from the user-specified XML file, override restoreProperties() method.
- Edit the TrackFactorySetup? class as as to this class can instantiate your Track class.
- In Eclipse, run TrackLoaderGenerator? (launch file is located at eclipse/TrackLoaderGenerator.launch) does this task.
Last modified 17 years ago
Last modified on 10/12/07 22:06:43