Skip to content

Commit 3b6f06b

Browse files
author
Seren
committed
Function addSelectionHandler and addClickGeneHanlder added. variables renamed from GenomeView to GeneViewer and function setDisplayGenes to highlight genes in scatterplot added
1 parent 9db7243 commit 3b6f06b

File tree

1 file changed

+91
-21
lines changed

1 file changed

+91
-21
lines changed

src/at/gmi/nordborglab/widgets/gwasgeneviewer/client/GWASGeneViewer.java

Lines changed: 91 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
package at.gmi.nordborglab.widgets.gwasgeneviewer.client;
22

3+
import java.util.ArrayList;
4+
35
import org.danvk.dygraphs.client.Dygraphs;
46
import org.danvk.dygraphs.client.Dygraphs.Options;
57
import org.danvk.dygraphs.client.events.HightlightHandler;
8+
import org.danvk.dygraphs.client.events.SelectHandler;
9+
import org.danvk.dygraphs.client.events.UnderlayHandler;
610
import org.danvk.dygraphs.client.events.UnhighlightHandler;
711
import org.danvk.dygraphs.client.events.ZoomHandler;
12+
import org.danvk.dygraphs.client.events.UnderlayHandler.UnderlayEvent;
813

914
import at.gmi.nordborglab.widgets.geneviewer.client.GeneViewer;
1015
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.DataSource;
16+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.Gene;
17+
import at.gmi.nordborglab.widgets.geneviewer.client.event.ClickGeneHandler;
1118
import at.gmi.nordborglab.widgets.geneviewer.client.event.ZoomResizeEvent;
1219
import at.gmi.nordborglab.widgets.geneviewer.client.event.ZoomResizeHandler;
1320

@@ -28,31 +35,35 @@ public class GWASGeneViewer extends Composite {
2835
interface ScatterGenomeChartUiBinder extends UiBinder<Widget, GWASGeneViewer> { }
2936

3037
@UiField Dygraphs scatterChart;
31-
@UiField HTMLPanel genomeViewContainer;
38+
@UiField HTMLPanel geneViewerContainer;
3239
@UiField Label chromosome_label;
33-
@UiField GeneViewer genomeView;
40+
@UiField GeneViewer geneViewer;
3441

3542
//Scatterchart settings
3643
private static int DYGRAPHOFFSET = 31;
3744
protected double max_value;
3845
protected String color;
46+
protected String gene_marker_color;
3947
protected int pointSize =2;
4048
protected int chr_length;
4149
protected int scatterChartHeight=200;
4250
protected DataTable dataTable;
4351
protected boolean isScatterChartLoaded = false;
4452

53+
protected SelectHandler selectHandler=null;
54+
protected ClickGeneHandler clickGeneHandler = null;
4555

4656
//GenomeView settings
4757
protected Integer minZoomLevelForGenomeView = 1500000;
48-
protected boolean isGenomeViewLoaded = false;
58+
protected boolean isGeneViewerLoaded = false;
4959

5060
//General settings
5161
protected String chromosome;
5262
protected int width = 1000;
53-
protected int genomeViewHeight = 200;
63+
protected int geneViewerHeight = 200;
5464
protected DataSource datasource = null;
5565

66+
protected ArrayList<Gene> displayGenes = new ArrayList<Gene>();
5667

5768

5869

@@ -61,37 +72,53 @@ public GWASGeneViewer() {
6172
initGenomeView();
6273
}
6374

64-
public GWASGeneViewer(String chromosome,String color,int width,DataSource datasource) {
75+
public GWASGeneViewer(String chromosome,String color,String gene_marker_color,int width,DataSource datasource) {
6576
this.chromosome = chromosome;
6677
this.color = color;
6778
this.width=width;
6879
this.datasource = datasource;
80+
this.gene_marker_color = gene_marker_color;
6981
initWidget(uiBinder.createAndBindUi(this));
7082
initGenomeView();
7183
}
7284

85+
public String getChromosome() {
86+
return chromosome;
87+
}
7388

89+
public void addDisplayGene(Gene gene)
90+
{
91+
if (gene.getChromosome().equals(this.chromosome))
92+
displayGenes.add(gene);
93+
}
94+
95+
public void clearDisplayGenes()
96+
{
97+
displayGenes.clear();
98+
}
7499

75100
private void initGenomeView()
76101
{
77102
try
78103
{
79-
genomeView.setLength(chr_length);
80-
genomeView.setSize(width - DYGRAPHOFFSET, genomeViewHeight);
81-
genomeView.load(new Runnable() {
104+
geneViewer.setLength(chr_length);
105+
geneViewer.setSize(width - DYGRAPHOFFSET, geneViewerHeight);
106+
geneViewer.load(new Runnable() {
82107
@Override
83108
public void run() {
84-
isGenomeViewLoaded = true;
85-
genomeView.addZoomResizeHandler(new ZoomResizeHandler() {
109+
isGeneViewerLoaded = true;
110+
geneViewer.addZoomResizeHandler(new ZoomResizeHandler() {
86111

87112
@Override
88113
public void onZoomResize(ZoomResizeEvent event) {
89114
if (event.stop-event.start > minZoomLevelForGenomeView)
90-
genomeViewContainer.setVisible(false);
115+
geneViewerContainer.setVisible(false);
91116
if (isScatterChartLoaded)
92117
scatterChart.setValueRangeX(event.start,event.stop);
93118
}
94119
});
120+
if (clickGeneHandler != null)
121+
geneViewer.addClickGeneHandler(clickGeneHandler);
95122
}
96123
});
97124
}
@@ -100,24 +127,30 @@ public void onZoomResize(ZoomResizeEvent event) {
100127
}
101128
}
102129

130+
public void refresh() {
131+
scatterChart.redraw();
132+
}
133+
103134
public void draw(DataTable dataTable,double max_value, int chr_length)
104135
{
105136
this.dataTable = dataTable;
106137
this.max_value = max_value;
107138
this.chr_length = chr_length;
108-
genomeView.setLength(chr_length);
109-
genomeView.setChromosome(chromosome);
110-
genomeView.setDataSource(datasource);
111-
genomeView.setSize(width - DYGRAPHOFFSET, genomeViewHeight);
139+
geneViewer.setLength(chr_length);
140+
geneViewer.setChromosome(chromosome);
141+
geneViewer.setDataSource(datasource);
142+
geneViewer.setSize(width - DYGRAPHOFFSET, geneViewerHeight);
112143
this.drawScatterChart();
144+
if (selectHandler != null)
145+
scatterChart.addSelectHandler(selectHandler);
113146
scatterChart.addZoomHandler(new ZoomHandler() {
114147

115148
@Override
116149
public void onZoom(ZoomEvent event) {
117150

118151
if (event.maxX - event.minX<= minZoomLevelForGenomeView)
119152
{
120-
genomeView.updateZoom(event.minX, event.maxX);
153+
geneViewer.updateZoom(event.minX, event.maxX);
121154
toggleGenomeViewVisible(true);
122155
}
123156
else
@@ -129,15 +162,15 @@ public void onZoom(ZoomEvent event) {
129162

130163
@Override
131164
public void onHighlight(HighlightEvent event) {
132-
genomeView.setSelectionLine(event.xVal);
165+
geneViewer.setSelectionLine(event.xVal);
133166
}
134167
});
135168

136169
scatterChart.addUnhighlightHandler(new UnhighlightHandler() {
137170

138171
@Override
139172
public void onUnhighlight(UnhighlightEvent event) {
140-
genomeView.hideSelectionLine();
173+
geneViewer.hideSelectionLine();
141174
}
142175
});
143176
}
@@ -147,6 +180,27 @@ protected void drawScatterChart()
147180
chromosome_label.setText(chromosome);
148181
Dygraphs.Options options = Dygraphs.Options.create();
149182
options = setOptions(options);
183+
scatterChart.addUnderlayHandler(new UnderlayHandler() {
184+
185+
@Override
186+
public void onUnderlay(UnderlayEvent event) {
187+
for (Gene gene:displayGenes) {
188+
if (gene.getChromosome().equals(chromosome))
189+
{
190+
double left = event.dygraph.toDomXCoord(gene.getStart());
191+
double right = event.dygraph.toDomXCoord(gene.getEnd());
192+
double length = right - left;
193+
if (length < 1)
194+
{
195+
left = left -0.5;
196+
length = 1;
197+
}
198+
event.canvas.setFillStyle(gene_marker_color);
199+
event.canvas.fillRect(left, event.area.getY(), length, event.area.getH());
200+
}
201+
}
202+
}
203+
},options);
150204
scatterChart.setID(chromosome);
151205
scatterChart.draw(dataTable,setOptions(options));
152206
isScatterChartLoaded = true;
@@ -171,7 +225,7 @@ protected Options setOptions(Dygraphs.Options options){
171225

172226

173227
public void toggleGenomeViewVisible(boolean visible) {
174-
genomeViewContainer.setVisible(visible);
228+
geneViewerContainer.setVisible(visible);
175229
}
176230

177231
public void setMinZoomLevelForGenomeView(Integer minZoomLevelForGenomeView) {
@@ -199,7 +253,23 @@ public void setScatterChartHeight(int scatterChartHeight) {
199253
this.scatterChartHeight = scatterChartHeight;
200254
}
201255

202-
public void setGenomeViewHeight(int genomeViewHeight) {
203-
this.genomeViewHeight = genomeViewHeight;
256+
public void setGeneViewerHeight(int geneViewerHeight) {
257+
this.geneViewerHeight = geneViewerHeight;
258+
}
259+
260+
public void addSelectionHandler(SelectHandler handler) {
261+
if (isScatterChartLoaded) {
262+
scatterChart.addSelectHandler(handler);
263+
}
264+
else
265+
this.selectHandler = handler;
266+
}
267+
268+
public void addClickGeneHandler(ClickGeneHandler handler) {
269+
if (isGeneViewerLoaded) {
270+
geneViewer.addClickGeneHandler(handler);
271+
}
272+
else
273+
this.clickGeneHandler = handler;
204274
}
205275
}

0 commit comments

Comments
 (0)