1
1
package at .gmi .nordborglab .widgets .gwasgeneviewer .client ;
2
2
3
+ import java .util .ArrayList ;
4
+
3
5
import org .danvk .dygraphs .client .Dygraphs ;
4
6
import org .danvk .dygraphs .client .Dygraphs .Options ;
5
7
import org .danvk .dygraphs .client .events .HightlightHandler ;
8
+ import org .danvk .dygraphs .client .events .SelectHandler ;
9
+ import org .danvk .dygraphs .client .events .UnderlayHandler ;
6
10
import org .danvk .dygraphs .client .events .UnhighlightHandler ;
7
11
import org .danvk .dygraphs .client .events .ZoomHandler ;
12
+ import org .danvk .dygraphs .client .events .UnderlayHandler .UnderlayEvent ;
8
13
9
14
import at .gmi .nordborglab .widgets .geneviewer .client .GeneViewer ;
10
15
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 ;
11
18
import at .gmi .nordborglab .widgets .geneviewer .client .event .ZoomResizeEvent ;
12
19
import at .gmi .nordborglab .widgets .geneviewer .client .event .ZoomResizeHandler ;
13
20
@@ -28,31 +35,35 @@ public class GWASGeneViewer extends Composite {
28
35
interface ScatterGenomeChartUiBinder extends UiBinder <Widget , GWASGeneViewer > { }
29
36
30
37
@ UiField Dygraphs scatterChart ;
31
- @ UiField HTMLPanel genomeViewContainer ;
38
+ @ UiField HTMLPanel geneViewerContainer ;
32
39
@ UiField Label chromosome_label ;
33
- @ UiField GeneViewer genomeView ;
40
+ @ UiField GeneViewer geneViewer ;
34
41
35
42
//Scatterchart settings
36
43
private static int DYGRAPHOFFSET = 31 ;
37
44
protected double max_value ;
38
45
protected String color ;
46
+ protected String gene_marker_color ;
39
47
protected int pointSize =2 ;
40
48
protected int chr_length ;
41
49
protected int scatterChartHeight =200 ;
42
50
protected DataTable dataTable ;
43
51
protected boolean isScatterChartLoaded = false ;
44
52
53
+ protected SelectHandler selectHandler =null ;
54
+ protected ClickGeneHandler clickGeneHandler = null ;
45
55
46
56
//GenomeView settings
47
57
protected Integer minZoomLevelForGenomeView = 1500000 ;
48
- protected boolean isGenomeViewLoaded = false ;
58
+ protected boolean isGeneViewerLoaded = false ;
49
59
50
60
//General settings
51
61
protected String chromosome ;
52
62
protected int width = 1000 ;
53
- protected int genomeViewHeight = 200 ;
63
+ protected int geneViewerHeight = 200 ;
54
64
protected DataSource datasource = null ;
55
65
66
+ protected ArrayList <Gene > displayGenes = new ArrayList <Gene >();
56
67
57
68
58
69
@@ -61,37 +72,53 @@ public GWASGeneViewer() {
61
72
initGenomeView ();
62
73
}
63
74
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 ) {
65
76
this .chromosome = chromosome ;
66
77
this .color = color ;
67
78
this .width =width ;
68
79
this .datasource = datasource ;
80
+ this .gene_marker_color = gene_marker_color ;
69
81
initWidget (uiBinder .createAndBindUi (this ));
70
82
initGenomeView ();
71
83
}
72
84
85
+ public String getChromosome () {
86
+ return chromosome ;
87
+ }
73
88
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
+ }
74
99
75
100
private void initGenomeView ()
76
101
{
77
102
try
78
103
{
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 () {
82
107
@ Override
83
108
public void run () {
84
- isGenomeViewLoaded = true ;
85
- genomeView .addZoomResizeHandler (new ZoomResizeHandler () {
109
+ isGeneViewerLoaded = true ;
110
+ geneViewer .addZoomResizeHandler (new ZoomResizeHandler () {
86
111
87
112
@ Override
88
113
public void onZoomResize (ZoomResizeEvent event ) {
89
114
if (event .stop -event .start > minZoomLevelForGenomeView )
90
- genomeViewContainer .setVisible (false );
115
+ geneViewerContainer .setVisible (false );
91
116
if (isScatterChartLoaded )
92
117
scatterChart .setValueRangeX (event .start ,event .stop );
93
118
}
94
119
});
120
+ if (clickGeneHandler != null )
121
+ geneViewer .addClickGeneHandler (clickGeneHandler );
95
122
}
96
123
});
97
124
}
@@ -100,24 +127,30 @@ public void onZoomResize(ZoomResizeEvent event) {
100
127
}
101
128
}
102
129
130
+ public void refresh () {
131
+ scatterChart .redraw ();
132
+ }
133
+
103
134
public void draw (DataTable dataTable ,double max_value , int chr_length )
104
135
{
105
136
this .dataTable = dataTable ;
106
137
this .max_value = max_value ;
107
138
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 );
112
143
this .drawScatterChart ();
144
+ if (selectHandler != null )
145
+ scatterChart .addSelectHandler (selectHandler );
113
146
scatterChart .addZoomHandler (new ZoomHandler () {
114
147
115
148
@ Override
116
149
public void onZoom (ZoomEvent event ) {
117
150
118
151
if (event .maxX - event .minX <= minZoomLevelForGenomeView )
119
152
{
120
- genomeView .updateZoom (event .minX , event .maxX );
153
+ geneViewer .updateZoom (event .minX , event .maxX );
121
154
toggleGenomeViewVisible (true );
122
155
}
123
156
else
@@ -129,15 +162,15 @@ public void onZoom(ZoomEvent event) {
129
162
130
163
@ Override
131
164
public void onHighlight (HighlightEvent event ) {
132
- genomeView .setSelectionLine (event .xVal );
165
+ geneViewer .setSelectionLine (event .xVal );
133
166
}
134
167
});
135
168
136
169
scatterChart .addUnhighlightHandler (new UnhighlightHandler () {
137
170
138
171
@ Override
139
172
public void onUnhighlight (UnhighlightEvent event ) {
140
- genomeView .hideSelectionLine ();
173
+ geneViewer .hideSelectionLine ();
141
174
}
142
175
});
143
176
}
@@ -147,6 +180,27 @@ protected void drawScatterChart()
147
180
chromosome_label .setText (chromosome );
148
181
Dygraphs .Options options = Dygraphs .Options .create ();
149
182
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 );
150
204
scatterChart .setID (chromosome );
151
205
scatterChart .draw (dataTable ,setOptions (options ));
152
206
isScatterChartLoaded = true ;
@@ -171,7 +225,7 @@ protected Options setOptions(Dygraphs.Options options){
171
225
172
226
173
227
public void toggleGenomeViewVisible (boolean visible ) {
174
- genomeViewContainer .setVisible (visible );
228
+ geneViewerContainer .setVisible (visible );
175
229
}
176
230
177
231
public void setMinZoomLevelForGenomeView (Integer minZoomLevelForGenomeView ) {
@@ -199,7 +253,23 @@ public void setScatterChartHeight(int scatterChartHeight) {
199
253
this .scatterChartHeight = scatterChartHeight ;
200
254
}
201
255
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 ;
204
274
}
205
275
}
0 commit comments