3
3
import java .util .ArrayList ;
4
4
import java .util .List ;
5
5
6
+ import org .danvk .dygraphs .client .DygraphOptions ;
6
7
import org .danvk .dygraphs .client .Dygraphs ;
7
- import org .danvk .dygraphs .client .Dygraphs .Options ;
8
+ import org .danvk .dygraphs .client .DygraphsJS ;
9
+ import org .danvk .dygraphs .client .events .Canvas ;
8
10
import org .danvk .dygraphs .client .events .HightlightHandler ;
9
11
import org .danvk .dygraphs .client .events .SelectHandler ;
10
12
import org .danvk .dygraphs .client .events .UnderlayHandler ;
19
21
import at .gmi .nordborglab .widgets .geneviewer .client .event .ZoomResizeEvent ;
20
22
import at .gmi .nordborglab .widgets .geneviewer .client .event .ZoomResizeHandler ;
21
23
24
+ import com .google .gwt .canvas .dom .client .Context2d ;
25
+ import com .google .gwt .canvas .dom .client .FillStrokeStyle ;
22
26
import com .google .gwt .core .client .GWT ;
23
27
import com .google .gwt .core .client .JsArray ;
24
28
import com .google .gwt .core .client .JsArrayInteger ;
@@ -215,6 +219,13 @@ public void onZoom(ZoomEvent event) {
215
219
}
216
220
else
217
221
{
222
+
223
+ //Bugfix for http://code.google.com/p/dygraphs/issues/detail?id=280&thanks=280&ts=1328714824
224
+ if (event .minX < 0 )
225
+ scatterChart .setValueRangeX (0 , event .maxX );
226
+ else if (event .maxX > viewEnd )
227
+ scatterChart .setValueRangeX (event .minX , viewEnd );
228
+
218
229
if (event .maxX - event .minX <= minZoomLevelForGenomeView )
219
230
{
220
231
toggleGenomeViewVisible (true );
@@ -246,56 +257,62 @@ public void onUnhighlight(UnhighlightEvent event) {
246
257
protected void drawScatterChart ()
247
258
{
248
259
chromosome_label .setText (chromosome );
249
- Dygraphs . Options options = Dygraphs . Options .create ();
260
+ DygraphOptions options = DygraphOptions .create ();
250
261
options = setOptions (options );
251
262
scatterChart .addUnderlayHandler (new UnderlayHandler () {
252
263
253
264
@ Override
254
265
public void onUnderlay (UnderlayEvent event ) {
266
+
267
+ Canvas ctx = event .canvas ;
268
+ DygraphsJS dygraphjs = event .dygraph ;
255
269
for (Gene gene :displayGenes ) {
256
270
if (gene .getChromosome ().equals (chromosome ) && (gene .getStart () >= viewStart || gene .getEnd () <= viewEnd ))
257
271
{
258
- double left = event . dygraph .toDomXCoord (gene .getStart ());
259
- double right = event . dygraph .toDomXCoord (gene .getEnd ());
272
+ double left = dygraphjs .toDomXCoord (gene .getStart ());
273
+ double right = dygraphjs .toDomXCoord (gene .getEnd ());
260
274
double length = right - left ;
261
275
if (length < 1 )
262
276
{
263
277
left = left -0.5 ;
264
278
length = 1 ;
265
279
}
266
- event .canvas .save ();
267
- event .canvas .setFillStyle (gene_marker_color );
268
- event .canvas .fillRect (left , event .area .getY (), length , event .area .getH ());
269
- event .canvas .restore ();
280
+ ctx .save ();
281
+ ctx .setFillStyle (gene_marker_color );
282
+ ctx .setStrokeStyle ("#000000" );
283
+ ctx .fillRect (left , event .area .getY (), length , event .area .getH ());
284
+ ctx .restore ();
270
285
}
271
286
}
272
287
273
288
for (int i =0 ;i <selections .length ();i ++)
274
289
{
275
290
Selection selection = selections .get (i );
276
291
if (selection != null ) {
277
- double posX = event .dygraph .toDomXCoord (dataTable .getValueInt (selection .getRow (), 0 ));
278
- double posY = event .dygraph .toDomYCoord (dataTable .getValueDouble (selection .getRow (), 1 ), 0 );
279
- event .canvas .save ();
280
- event .canvas .beginPath ();
281
- event .canvas .setFillStyle (gene_marker_color );
282
- event .canvas .fillRect (posX -0.5 , posY , 1 , event .area .getH ());
283
- event .canvas .arc (posX , posY , 3 , 0 , 2 *Math .PI , false );
284
- event .canvas .fill ();
285
- event .canvas .restore ();
292
+ double posX = dygraphjs .toDomXCoord (dataTable .getValueInt (selection .getRow (), 0 ));
293
+ double posY = dygraphjs .toDomYCoord (dataTable .getValueDouble (selection .getRow (), 1 ), 0 );
294
+ ctx .save ();
295
+ ctx .setFillStyle (gene_marker_color );
296
+ ctx .setStrokeStyle ("#000000" );
297
+ ctx .beginPath ();
298
+ ctx .arc (posX ,posY ,4 ,0 ,Math .PI *2 ,true );
299
+ ctx .fillRect (posX -0.5 , posY , 1 , dygraphjs .getArea ().getH ());
300
+ ctx .closePath ();
301
+ ctx .fill ();
302
+ ctx .restore ();
286
303
}
287
304
}
288
305
289
306
if (bonferroniThreshold != -1 ) {
290
307
double posY = (int )event .dygraph .toDomYCoord (bonferroniThreshold , 0 )-0.5 ;
291
- int width = event . canvas .getCanvas ().getWidth ();
292
- event . canvas .save ();
293
- event . canvas .beginPath ();
294
- event . canvas .setStrokeStyle (gene_marker_color );
295
- event . canvas .dashedLine (0 , posY , width , posY );
296
- event . canvas .closePath ();
297
- event . canvas .stroke ();
298
- event . canvas .restore ();
308
+ int width = ctx .getCanvas ().getWidth ();
309
+ ctx .save ();
310
+ ctx .beginPath ();
311
+ ctx .setStrokeStyle (gene_marker_color );
312
+ ctx .dashedLine (0 , posY , width , posY );
313
+ ctx .closePath ();
314
+ ctx .stroke ();
315
+ ctx .restore ();
299
316
}
300
317
}
301
318
@@ -312,23 +329,26 @@ public void onUnderlay(UnderlayEvent event) {
312
329
selections .set (0 , selection );
313
330
}
314
331
scatterChart .draw (dataTable ,setOptions (options ));
315
- if (selections .length () > 0 )
316
- scatterChart .setSelections (selections );
332
+ // if (selections.length() > 0)
333
+ scatterChart .setSelections (selections );
317
334
318
335
//scatterChart.setSelections()
319
336
isScatterChartLoaded = true ;
320
337
}
321
338
322
- protected Options setOptions (Dygraphs .Options options ){
339
+
340
+ protected DygraphOptions setOptions (DygraphOptions options ){
323
341
double maxValue = max_value ;
324
342
if (maxValue < bonferroniThreshold )
325
343
maxValue = bonferroniThreshold ;
326
344
options .setStrokeWidth (0.000000001 );
327
345
options .setDrawPoints (true );
328
346
options .setPointSize (pointSize );
329
347
options .setIncludeZero (true );
330
- //options.setWidth(width);
331
- //options.setHeight(scatterChartHeight);
348
+ options .setYlabel ("-log10(p)" );
349
+ options .setYLabelWidth (13.0 );
350
+ options .setXLabelHeight (13.0 );
351
+ options .setXlabel ("Position" );
332
352
options .setAxisLabelFontSize (11 );
333
353
options .setValueRange (0 ,(int )maxValue + 2 );
334
354
options .setyAxisLabelWidth (20 );
@@ -396,9 +416,9 @@ public void addSelectionHandler(SelectHandler handler) {
396
416
public void addClickGeneHandler (ClickGeneHandler handler ) {
397
417
if (isGeneViewerLoaded ) {
398
418
geneViewer .addClickGeneHandler (handler );
399
- }
400
- else
401
- this .clickGeneHandler = handler ;
419
+ }
420
+ else
421
+ this .clickGeneHandler = handler ;
402
422
}
403
423
404
424
public void setSnpPosX (int snpPosX ) {
@@ -422,10 +442,14 @@ public static Selection getSelectionFromPos(DataTable data,int pos) {
422
442
423
443
public void addSelection (Selection selection ) {
424
444
if (selection != null ) {
425
- selections .set ( selections . length (), selection );
445
+ selections .push ( selection );
426
446
}
427
447
}
428
448
449
+ public void clearSelection () {
450
+ selections = JsArray .createArray ().cast ();
451
+ }
452
+
429
453
public static Selection getTopSNP (DataTable data ) {
430
454
Selection selection = null ;
431
455
double top_pValue = -1 ;
0 commit comments