From 1b4a4c12058c44ea7d43a6d305387554acd50196 Mon Sep 17 00:00:00 2001 From: Olivier Maury <Olivier.Maury@inrae.fr> Date: Tue, 30 Jul 2024 10:08:58 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Pr=C3=A9ciser=20le=20titre=20du=20graphique?= =?UTF-8?q?=20et=20ajouter=20le=20logo.=20fixes=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../www/client/ui/chart/DailyValuesChart.java | 11 +-- .../www/client/ui/chart/LogoPlugin.java | 73 +++++++++++++++++++ .../www/client/view/RightPanelView.java | 1 + 3 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/DailyValuesChart.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/DailyValuesChart.java index 64b76c7..c73f2f3 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/DailyValuesChart.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/DailyValuesChart.java @@ -72,8 +72,8 @@ public final class DailyValuesChart extends TimeSeriesLineChart { this.unit = summary.getIndicator().getUnit(); final String subtitle = MSGS.chartSubtitle(summary.getDate(), unit); - setTitle(CSTS.dailyValues(), subtitle); - setCredits(); + setTitle(CSTS.dailyValues() + " − " + DateUtils.getYear(summary.getDate()), subtitle); + setPlugins(); final TimeSeriesLineDataset q5Dataset = this.newDataset(); setDatasetColor(q5Dataset); @@ -111,19 +111,20 @@ public final class DailyValuesChart extends TimeSeriesLineChart { final CartesianTimeSeriesAxis axis = this.getOptions().getScales().getTimeAxis(); axis.getTime().setUnit(TimeUnit.MONTH); axis.getTime().getDisplayFormats().setDisplayFormat(TimeUnit.MONTH, "MMM"); - axis.getTitle().setText("" + DateUtils.getYear(summary.getDate())); - axis.getTitle().setDisplay(true); final CartesianLinearAxis axis2 = this.getOptions().getScales().getLinearAxis(); axis2.setDisplay(true); axis2.setBeginAtZero(true); axis2.setStacked(false); + axis2.getTitle().setDisplay(true); + axis2.getTitle().setText(summary.getIndicator().getDescription()); this.getData().setDatasets(q5Dataset, dataset, q95Dataset); } - private void setCredits() { + private void setPlugins() { this.getPlugins().add(new CreditsPlugin()); + this.getPlugins().add(new LogoPlugin()); } private void setTitle(final String title, final String subtitle) { diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java new file mode 100644 index 0000000..bad34b1 --- /dev/null +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java @@ -0,0 +1,73 @@ +package fr.agrometinfo.www.client.ui.chart; + +import org.pepstock.charba.client.IsChart; +import org.pepstock.charba.client.dom.elements.CastHelper; +import org.pepstock.charba.client.dom.elements.Context2dItem; +import org.pepstock.charba.client.plugins.AbstractPlugin; + +import com.google.gwt.canvas.client.Canvas; +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.ImageElement; + +/** + * Append RF+AgroMetInfo logo on the chart. + * + * @author Olivier Maury + */ +public class LogoPlugin extends AbstractPlugin { + /** + * Width of logo. + */ + private static final double LOGO_WIDTH = 150; + + /** + * Coefficient between Div width and logo width in canvas. + * + * Value found after tests. + */ + private static final double LOGO_WIDTH_COEFF = 0.45; + + /** + * Width / height computed from SVG file. + */ + private static final double LOGO_SIZE_RATIO = 2.1087; + + /** + * The application logo. + */ + private final ImageElement logoImg = Document.get().createImageElement(); + + /** + * Constructor. + */ + public LogoPlugin() { + super("Logo"); + // Load the image once for all + logoImg.setSrc("app/img/logo_etat-agrometinfo.svg"); + } + + @Override + public void onAfterDraw(final IsChart chart) { + GWT.log("LogoPlugin.onAfterShow()"); + final Context2dItem ctx = chart.getCanvas().getContext2d(); + // limit logo width to available space on left side + final double logoWidth = Math.min(LOGO_WIDTH, chart.getChartElement().getClientWidth() * LOGO_WIDTH_COEFF); + // Charba Canvas only accept a canvas as image + // 1. create a GWT canvas with the logo + final Canvas logoCanvas = Canvas.createIfSupported(); + logoCanvas.getContext2d().drawImage(logoImg, // + 0d, // + 0d, // + logoWidth, // + logoWidth / LOGO_SIZE_RATIO // + ); + // 2. convert GWT canvas to Charba Canvas and draw it + ctx.drawImage(CastHelper.toCanvas(logoCanvas.getCanvasElement()), // + 0d, // + 0d, // + logoWidth, // + logoWidth / LOGO_SIZE_RATIO // + ); + } +} diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/view/RightPanelView.java b/www-client/src/main/java/fr/agrometinfo/www/client/view/RightPanelView.java index 8fe7c34..c1e1ab3 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/view/RightPanelView.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/view/RightPanelView.java @@ -135,6 +135,7 @@ public final class RightPanelView implements RightPanelPresenter.View { private void createLineChart() { GWT.log("RightPanelView.createLineChart()"); chart = new DailyValuesChart(summary); + chart.getChartElement().getStyle().setWidth("100%"); lineChartContainer.setHeight("300px"); lineChartContainer.clearElement(); -- GitLab From 5883b7fd469416acec33700dd4a4b1a09f2327a2 Mon Sep 17 00:00:00 2001 From: Olivier Maury <Olivier.Maury@inrae.fr> Date: Tue, 30 Jul 2024 10:10:18 +0200 Subject: [PATCH 2/2] Checkstyle --- .../java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java index bad34b1..ad540cb 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java @@ -15,7 +15,7 @@ import com.google.gwt.dom.client.ImageElement; * * @author Olivier Maury */ -public class LogoPlugin extends AbstractPlugin { +public final class LogoPlugin extends AbstractPlugin { /** * Width of logo. */ -- GitLab