Commit 2f9d4519 authored by Mathias Chouet's avatar Mathias Chouet :spaghetti:
Browse files

Added zoom functionality on every graph

Showing with 71 additions and 33 deletions
+71 -33
...@@ -136,7 +136,6 @@ export class PabProfileGraphComponent extends ResultsComponent { ...@@ -136,7 +136,6 @@ export class PabProfileGraphComponent extends ResultsComponent {
} }
private zoomComplete() { private zoomComplete() {
console.log("zoom complete du Q !");
this._zoomWasChanged = true; this._zoomWasChanged = true;
this.cd.detectChanges(); this.cd.detectChanges();
} }
...@@ -170,33 +169,6 @@ export class PabProfileGraphComponent extends ResultsComponent { ...@@ -170,33 +169,6 @@ export class PabProfileGraphComponent extends ResultsComponent {
showLine: "true" showLine: "true"
}); });
} }
/* const that = this;
this.graph_options["tooltips"] = {
displayColors: false,
callbacks: {
title: (tooltipItems, data) => {
return this.chartY + " = " + Number(tooltipItems[0].yLabel).toFixed(nDigits);
},
label: (tooltipItem, data) => {
const lines: string[] = [];
const nbLines = that._results.getVariatingParametersSymbols().length;
for (const v of that._results.getVariatingParametersSymbols()) {
const series = that._results.getValuesSeries(v);
const line = v + " = " + series[tooltipItem.index].toFixed(nDigits);
if (v === this.chartX) {
if (nbLines > 1) {
lines.unshift("");
}
lines.unshift(line);
} else {
lines.push(line);
}
}
return lines;
}
}
}; */
} }
public exportAsImage(element: HTMLDivElement) { public exportAsImage(element: HTMLDivElement) {
......
<div class="graph-results-container" #graphResults fxLayout="row wrap" fxLayoutAlign="center center"> <div class="graph-results-container" #graphResults fxLayout="row wrap" fxLayoutAlign="center center">
<div fxFlex="1 1 100%"> <div fxFlex="1 1 100%">
<div class="graph-results-buttons"> <div class="graph-results-buttons">
<button mat-icon-button (click)="exportAsImage(graphResults)"> <button mat-icon-button (click)="resetZoom()" [disabled]="! zoomWasChanged" [title]="uitextResetZoomTitle">
<mat-icon color="primary">replay</mat-icon>
</button>
<button mat-icon-button (click)="exportAsImage(graphResults)" [title]="uitextExportImageTitle">
<mat-icon color="primary">image</mat-icon> <mat-icon color="primary">image</mat-icon>
</button> </button>
<button mat-icon-button *ngIf="! isFullscreen" (click)="setFullscreen(graphResults)"> <button mat-icon-button *ngIf="! isFullscreen" (click)="setFullscreen(graphResults)" [title]="uitextEnterFSTitle">
<mat-icon color="primary" class="scaled12">fullscreen</mat-icon> <mat-icon color="primary" class="scaled12">fullscreen</mat-icon>
</button> </button>
<button mat-icon-button *ngIf="isFullscreen" (click)="exitFullscreen()"> <button mat-icon-button *ngIf="isFullscreen" (click)="exitFullscreen()" [title]="uitextExitFSTitle">
<mat-icon color="primary" class="scaled12">fullscreen_exit</mat-icon> <mat-icon color="primary" class="scaled12">fullscreen_exit</mat-icon>
</button> </button>
</div> </div>
......
...@@ -19,6 +19,12 @@ ...@@ -19,6 +19,12 @@
transform: scale(1.2); transform: scale(1.2);
} }
} }
&:disabled {
mat-icon {
color: #bfbfbf;
}
}
} }
} }
......
import { Component, ViewChild, AfterContentInit, OnInit } from "@angular/core"; import { Component, ViewChild, AfterContentInit, ChangeDetectorRef } from "@angular/core";
import { ChartComponent } from "angular2-chartjs";
import { Observer } from "jalhyd"; import { Observer } from "jalhyd";
...@@ -17,11 +19,17 @@ import { ResultsComponent } from "../fixedvar-results/results.component"; ...@@ -17,11 +19,17 @@ import { ResultsComponent } from "../fixedvar-results/results.component";
] ]
}) })
export class ResultsGraphComponent extends ResultsComponent implements AfterContentInit, Observer { export class ResultsGraphComponent extends ResultsComponent implements AfterContentInit, Observer {
@ViewChild(ChartComponent)
private chartComponent;
private _results: PlottableData; private _results: PlottableData;
/** used to briefly destroy/rebuild the chart component, to refresh axis labels (@see bug #137) */ /** used to briefly destroy/rebuild the chart component, to refresh axis labels (@see bug #137) */
public displayChart = true; public displayChart = true;
private _zoomWasChanged = false;
@ViewChild(GraphTypeSelectComponent) @ViewChild(GraphTypeSelectComponent)
private _graphTypeComponent: GraphTypeSelectComponent; private _graphTypeComponent: GraphTypeSelectComponent;
...@@ -52,9 +60,28 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont ...@@ -52,9 +60,28 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
public constructor( public constructor(
private appSetup: ApplicationSetupService, private appSetup: ApplicationSetupService,
private intlService: I18nService private intlService: I18nService,
private cd: ChangeDetectorRef
) { ) {
super(); super();
// enable zoom and pan (using "chartjs-plugin-zoom" package)
const that = this;
this.graph_options["plugins"] = {
zoom: {
pan: {
enabled: false, // conflicts with drag zoom
mode: "xy",
},
zoom: {
enabled: true,
drag: true, // conflicts with pan; set to false to enable mouse wheel zoom
mode: "xy",
// percentage of zoom on a wheel event
// speed: 0.1,
onZoomComplete: function(t: any) { return function() { t.zoomComplete(); }; }(that)
}
}
};
} }
public set results(r: PlottableData) { public set results(r: PlottableData) {
...@@ -116,6 +143,15 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont ...@@ -116,6 +143,15 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
return this.intlService.localizeText("INFO_PARAMFIELD_GRAPH_SELECT_Y_AXIS"); return this.intlService.localizeText("INFO_PARAMFIELD_GRAPH_SELECT_Y_AXIS");
} }
private zoomComplete() {
this._zoomWasChanged = true;
this.cd.detectChanges();
}
public get zoomWasChanged(): boolean {
return this._zoomWasChanged;
}
public updateView() { public updateView() {
// (re)generate chart // (re)generate chart
switch (this._graphTypeComponent.selectedValue) { switch (this._graphTypeComponent.selectedValue) {
...@@ -316,6 +352,27 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont ...@@ -316,6 +352,27 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
}); // defaults to image/png }); // defaults to image/png
} }
public resetZoom() {
this.chartComponent.chart.resetZoom();
this._zoomWasChanged = false;
}
public get uitextResetZoomTitle() {
return this.intlService.localizeText("INFO_GRAPH_BUTTON_TITLE_RESET_ZOOM");
}
public get uitextExportImageTitle() {
return this.intlService.localizeText("INFO_GRAPH_BUTTON_TITLE_EXPORT_IMAGE");
}
public get uitextEnterFSTitle() {
return this.intlService.localizeText("INFO_GRAPH_BUTTON_TITLE_ENTER_FS");
}
public get uitextExitFSTitle() {
return this.intlService.localizeText("INFO_GRAPH_BUTTON_TITLE_EXIT_FS");
}
// interface Observer // interface Observer
update(sender: any, data: any) { update(sender: any, data: any) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment