Author: echatellier Date: 2010-12-08 16:38:02 +0100 (Wed, 08 Dec 2010) New Revision: 299 Url: http://nuiton.org/repositories/revision/nuiton-matrix/299 Log: Begin jfreechart rendering Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/JFreeChartRenderer.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixPanelRenderer.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphComboRenderer.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphMatrixNDDataset.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphRendererComboBoxModel.java trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/JFreeChartPanel.java trunk/nuiton-matrix-gui/src/main/resources/icons/chart_curve.png Modified: trunk/nuiton-matrix-gui/pom.xml trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixRenderer.java trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java trunk/pom.xml Modified: trunk/nuiton-matrix-gui/pom.xml =================================================================== --- trunk/nuiton-matrix-gui/pom.xml 2010-12-08 14:28:25 UTC (rev 298) +++ trunk/nuiton-matrix-gui/pom.xml 2010-12-08 15:38:02 UTC (rev 299) @@ -34,12 +34,12 @@ <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> </dependency> - + <dependency> <groupId>org.nuiton.i18n</groupId> <artifactId>nuiton-i18n</artifactId> </dependency> - + <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> @@ -50,6 +50,10 @@ <artifactId>jaxx-runtime</artifactId> </dependency> + <dependency> + <groupId>jfree</groupId> + <artifactId>jfreechart</artifactId> + </dependency> </dependencies> Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixRenderer.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixRenderer.java 2010-12-08 14:28:25 UTC (rev 298) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixRenderer.java 2010-12-08 15:38:02 UTC (rev 299) @@ -43,7 +43,7 @@ public interface MatrixRenderer { /** - * Renderer panel for matrix. + * Renderer component for matrix. * * @param matrix matrix to display * @return component Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/JFreeChartRenderer.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/JFreeChartRenderer.java (rev 0) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/JFreeChartRenderer.java 2010-12-08 15:38:02 UTC (rev 299) @@ -0,0 +1,84 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package org.nuiton.math.matrix.viewer.renderer; + +import static org.nuiton.i18n.I18n._; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +import javax.swing.Icon; +import javax.swing.JComboBox; +import javax.swing.JPanel; + +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.CategoryAxis; +import org.jfree.chart.plot.CategoryPlot; +import org.jfree.chart.renderer.AbstractRenderer; +import org.nuiton.math.matrix.MatrixND; +import org.nuiton.math.matrix.viewer.MatrixRenderer; +import org.nuiton.math.matrix.viewer.renderer.jfreechart.GraphRendererComboBoxModel; +import org.nuiton.math.matrix.viewer.renderer.jfreechart.JFreeChartPanel; +import org.nuiton.util.Resource; + +/** + * Matrix jfreechart renderer + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class JFreeChartRenderer implements MatrixRenderer { + + /* + * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getPanel(org.nuiton.math.matrix.MatrixND) + */ + @Override + public Component getPanel(MatrixND matrix) { + JFreeChartPanel panel = new JFreeChartPanel(matrix); + return panel; + } + /* + * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getIcon() + */ + @Override + public Icon getIcon() { + return Resource.getIcon("/icons/chart_curve.png"); + } + + /* + * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getName() + */ + @Override + public String getName() { + return _("nuitonmatrix.viewer.renderer.jfreechart"); + } + +} Property changes on: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/JFreeChartRenderer.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixPanelRenderer.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixPanelRenderer.java (rev 0) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixPanelRenderer.java 2010-12-08 15:38:02 UTC (rev 299) @@ -0,0 +1,79 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package org.nuiton.math.matrix.viewer.renderer; + +import static org.nuiton.i18n.I18n._; + +import java.awt.Component; + +import javax.swing.Icon; +import javax.swing.JScrollPane; +import javax.swing.JTable; + +import org.nuiton.math.matrix.MatrixND; +import org.nuiton.math.matrix.viewer.MatrixRenderer; +import org.nuiton.util.Resource; + +/** + * Matrix panel renderer. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class MatrixPanelRenderer implements MatrixRenderer { + + /* + * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getPanel(org.nuiton.math.matrix.MatrixND) + */ + @Override + public Component getPanel(MatrixND matrix) { + + JTable table = new JTable(); + table.setModel(new MatrixInfoTableModel(matrix)); + return new JScrollPane(table); + } + + /* + * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getIcon() + */ + @Override + public Icon getIcon() { + return Resource.getIcon("/icons/table.png"); + } + + /* + * @see org.nuiton.math.matrix.viewer.MatrixRenderer#getName() + */ + @Override + public String getName() { + return _("nuitonmatrix.viewer.renderer.panel"); + } + + +} Property changes on: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/MatrixPanelRenderer.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphComboRenderer.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphComboRenderer.java (rev 0) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphComboRenderer.java 2010-12-08 15:38:02 UTC (rev 299) @@ -0,0 +1,83 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2002 - 2010 Ifremer, CodeLutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-2.0.html>. + * #L% + */ + +package org.nuiton.math.matrix.viewer.renderer.jfreechart; + +import static org.nuiton.i18n.I18n._; + +import java.awt.Component; + +import javax.swing.DefaultListCellRenderer; +import javax.swing.JList; + +import org.jfree.chart.renderer.category.AreaRenderer; +import org.jfree.chart.renderer.category.BarRenderer; +import org.jfree.chart.renderer.category.BarRenderer3D; +import org.jfree.chart.renderer.category.LineAndShapeRenderer; +import org.jfree.chart.renderer.category.LineRenderer3D; +import org.jfree.chart.renderer.category.MinMaxCategoryRenderer; +import org.jfree.chart.renderer.category.StackedAreaRenderer; +import org.jfree.chart.renderer.category.StackedBarRenderer; + +/** + * GraphComboRenderer. + * + * Created: Thu Sep 12 19:55:10 2002 + * + * @author <a href="mailto:seb.regnier@free.fr"></a> + * @version $Revision$ + */ +public class GraphComboRenderer extends DefaultListCellRenderer { + + /** serialVersionUID */ + private static final long serialVersionUID = 5439698068065934760L; + + public Component getListCellRendererComponent(JList liste, Object o, + int attributeIndex, boolean isSelected, boolean hasFocus) { + super.getListCellRendererComponent(liste, o, attributeIndex, + isSelected, hasFocus); + if (o instanceof StackedBarRenderer) { + setText(_("nuitonmatrix.viewer.graphcomborender.bar.stacked")); + } else if (o instanceof BarRenderer3D) { + setText(_("nuitonmatrix.viewer.graphcomborender.bar.3d")); + } else if (o instanceof BarRenderer) { + setText(_("nuitonmatrix.viewer.graphcomborender.bar")); + } else if (o instanceof StackedAreaRenderer) { + setText(_("nuitonmatrix.viewer.graphcomborender.surface.stacked")); + } else if (o instanceof AreaRenderer) { + setText(_("nuitonmatrix.viewer.graphcomborender.surface")); + } else if (o instanceof LineRenderer3D) { + setText(_("nuitonmatrix.viewer.graphcomborender.line.3d")); + } else if (o instanceof LineAndShapeRenderer) { + setText(_("nuitonmatrix.viewer.graphcomborender.line")); + } else if (o instanceof MinMaxCategoryRenderer) { + setText(_("nuitonmatrix.viewer.graphcomborender.min.max")); + } else { + setText((o == null) ? "" : o.toString()); + } + return this; + } + +}// GraphComboRenderer Property changes on: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphComboRenderer.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphMatrixNDDataset.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphMatrixNDDataset.java (rev 0) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphMatrixNDDataset.java 2010-12-08 15:38:02 UTC (rev 299) @@ -0,0 +1,254 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2002 - 2010 Ifremer, CodeLutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-2.0.html>. + * #L% + */ + +package org.nuiton.math.matrix.viewer.renderer.jfreechart; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.ResourceBundle; + +import org.jfree.data.category.CategoryDataset; +import org.jfree.data.general.AbstractSeriesDataset; +import org.jfree.data.resources.DataPackageResources; +import org.nuiton.math.matrix.MatrixND; + +/** + * GraphMatrixNDDataset. + * + * Created: Fri May 17 16:26:19 2002 + * + * @author <a href="mailto:seb.regnier@free.fr"></a> + * @version $Revision$ + */ +public class GraphMatrixNDDataset extends AbstractSeriesDataset implements CategoryDataset { + + /** serialVersionUID. */ + private static final long serialVersionUID = -891382923646394164L; + + /** The series names. */ + protected List<?> seriesNames; + + /** The categories. */ + protected List<?> categories; + + /** Storage for the data. */ + protected MatrixND mat; + + public GraphMatrixNDDataset(MatrixND mat) { + this(mat.getSemantic(1), mat.getSemantic(0), mat); + } + + /** + * Constructs a GraphMatrixNDDataset, populates it with the matrix, and uses the + * supplied names for the series and the supplied objects for the categories. + * + * @param seriesNames series names. + * @param categories categories. + * @param mat matrix. + */ + public GraphMatrixNDDataset(List<?> seriesNames, List<?> categories, MatrixND mat) { + + this.mat = mat; + + if (mat != null && mat.getDimCount() > 1) { + + String baseName = DataPackageResources.class.getCanonicalName(); + ResourceBundle resources = ResourceBundle.getBundle(baseName); + + int series_count = mat.getDim(1); + if (series_count > 0) { + + // set up the series names... + if (seriesNames != null) { + + if (seriesNames.size() != series_count) { + throw new IllegalArgumentException( + "DefaultCategoryDataset: the number of " + + "series names does not match the number of series in the data."); + } + + this.seriesNames = seriesNames; + } else { + String prefix = resources + .getString("series.default-prefix") + + " "; + this.seriesNames = this.generateNames(series_count, prefix); + } + + if (mat.getDimCount() > 1) { + // set up the category names... + int categoryCount = mat.getDim(0); + if (categories != null) { + if (categories.size() != categoryCount) { + throw new IllegalArgumentException( + "DefaultCategoryDataset: the number of " + + "categories does not match the number of categories in the data."); + } + this.categories = categories; + } else { + String prefix = resources + .getString("categories.default-prefix") + + " "; + this.categories = this.generateNames(categoryCount, + prefix); + } + } else { + this.categories = null; + } + } else { + this.seriesNames = null; + this.categories = null; + } + } else { + this.seriesNames = null; + this.categories = null; + } + } + + /** + * Generates an array of names, by appending a space plus an integer (starting with 1) + * to the supplied prefix string. + * + * @param count number of names required. + * @param prefix name prefix. + */ + protected List<String> generateNames(int count, String prefix) { + List<String> result = new ArrayList<String>(); + String name; + for (int i = 0; i < count; i++) { + name = prefix + (i + 1); + result.add(name); + } + return result; + } + + /* + * @see org.jfree.data.general.AbstractSeriesDataset#getSeriesCount() + */ + @Override + public int getSeriesCount() { + int result = 0; + if (mat != null && mat.getDimCount() > 1) { + result = mat.getDim(1); + } + return result; + } + + /* + * @see org.jfree.data.general.AbstractSeriesDataset#getSeriesKey(int) + */ + @Override + public Comparable getSeriesKey(int series) { + return seriesNames.get(series).toString(); + } + + /* + * @see org.jfree.data.KeyedValues2D#getColumnIndex(java.lang.Comparable) + */ + @Override + public int getColumnIndex(Comparable key) { + return categories.indexOf(key); + } + + /* + * @see org.jfree.data.KeyedValues2D#getColumnKey(int) + */ + @Override + public Comparable getColumnKey(int column) { + return categories.get(column).toString(); + } + + /* + * @see org.jfree.data.KeyedValues2D#getColumnKeys() + */ + @Override + public List getColumnKeys() { + + // the CategoryDataset interface expects a list of categories, but we've stored them in + // an array... + if (categories == null) { + return Collections.EMPTY_LIST; + } else { + return Collections.unmodifiableList(categories); + } + } + + /* + * @see org.jfree.data.KeyedValues2D#getRowIndex(java.lang.Comparable) + */ + @Override + public int getRowIndex(Comparable key) { + return seriesNames.indexOf(key); + } + + /* + * @see org.jfree.data.KeyedValues2D#getRowKey(int) + */ + @Override + public Comparable getRowKey(int row) { + return seriesNames.get(row).toString(); + } + + /* + * @see org.jfree.data.KeyedValues2D#getRowKeys() + */ + @Override + public List getRowKeys() { + return seriesNames; + } + + /* + * @see org.jfree.data.KeyedValues2D#getValue(java.lang.Comparable, java.lang.Comparable) + */ + @Override + public Number getValue(Comparable rowKey, Comparable columnKey) { + return new Double(mat.getValue(columnKey, rowKey)); + } + + /* + * @see org.jfree.data.Values2D#getColumnCount() + */ + @Override + public int getColumnCount() { + return categories.size(); + } + + /* + * @see org.jfree.data.Values2D#getRowCount() + */ + @Override + public int getRowCount() { + return seriesNames.size(); + } + + /* + * @see org.jfree.data.Values2D#getValue(int, int) + */ + @Override + public Number getValue(int row, int column) { + return new Double(mat.getValue(column, row)); + } +} // GraphMatrixNDDataset Property changes on: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphMatrixNDDataset.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphRendererComboBoxModel.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphRendererComboBoxModel.java (rev 0) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphRendererComboBoxModel.java 2010-12-08 15:38:02 UTC (rev 299) @@ -0,0 +1,120 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package org.nuiton.math.matrix.viewer.renderer.jfreechart; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.DefaultComboBoxModel; + +import org.jfree.chart.labels.StandardCategoryToolTipGenerator; +import org.jfree.chart.renderer.category.AreaRenderer; +import org.jfree.chart.renderer.category.BarRenderer; +import org.jfree.chart.renderer.category.BarRenderer3D; +import org.jfree.chart.renderer.category.CategoryItemRenderer; +import org.jfree.chart.renderer.category.LineAndShapeRenderer; +import org.jfree.chart.renderer.category.LineRenderer3D; +import org.jfree.chart.renderer.category.MinMaxCategoryRenderer; +import org.jfree.chart.renderer.category.StackedAreaRenderer; +import org.jfree.chart.renderer.category.StackedBarRenderer; + +/** + * JfreeChart renderer combo box model. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class GraphRendererComboBoxModel extends DefaultComboBoxModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = 5084118137199817098L; + + protected List<CategoryItemRenderer> rendererList; + + public GraphRendererComboBoxModel() { + rendererList = new ArrayList<CategoryItemRenderer>(); + loadRenderers(); + } + + protected void loadRenderers() { + + // rendu : vertical bar + BarRenderer barRenderer = new BarRenderer(); + barRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(barRenderer); + + // rendu : vertical bar 3d + BarRenderer3D barRenderer3D = new BarRenderer3D(); + barRenderer3D.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(barRenderer3D); + + // rendu stacked bar + StackedBarRenderer stackedBarRenderer = new StackedBarRenderer(); + stackedBarRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(stackedBarRenderer); + + // rendu aire + AreaRenderer areaRenderer = new AreaRenderer(); + areaRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(areaRenderer); + + // rendu aire empilée + StackedAreaRenderer stackedAreaRenderer = new StackedAreaRenderer(); + stackedAreaRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(stackedAreaRenderer); + + // rendu line aire + LineAndShapeRenderer lineAndShapeRenderer = new LineAndShapeRenderer(); + lineAndShapeRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(lineAndShapeRenderer); + + // rendu ligne 3d + LineRenderer3D lineRenderer3D = new LineRenderer3D(); + lineRenderer3D.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(lineRenderer3D); + + // rendu mix/max + MinMaxCategoryRenderer minMaxCategoryRenderer = new MinMaxCategoryRenderer(); + minMaxCategoryRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); + rendererList.add(minMaxCategoryRenderer); + + // auto select first + setSelectedItem(barRenderer); + } + + @Override + public int getSize() { + return rendererList.size(); + } + + @Override + public Object getElementAt(int index) { + return rendererList.get(index); + } +} Property changes on: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/GraphRendererComboBoxModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/JFreeChartPanel.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/JFreeChartPanel.java (rev 0) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/JFreeChartPanel.java 2010-12-08 15:38:02 UTC (rev 299) @@ -0,0 +1,108 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package org.nuiton.math.matrix.viewer.renderer.jfreechart; + +import static org.nuiton.i18n.I18n._; + +import java.awt.BorderLayout; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +import javax.swing.JComboBox; +import javax.swing.JPanel; + +import org.jfree.chart.ChartPanel; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.CategoryAxis; +import org.jfree.chart.axis.CategoryLabelPositions; +import org.jfree.chart.axis.NumberAxis3D; +import org.jfree.chart.axis.ValueAxis; +import org.jfree.chart.plot.CategoryPlot; +import org.jfree.chart.renderer.category.CategoryItemRenderer; +import org.jfree.data.category.CategoryDataset; +import org.nuiton.math.matrix.MatrixND; + +/** + * Jfreechart rendering panel. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class JFreeChartPanel extends JPanel { + + /** serialVersionUID. */ + private static final long serialVersionUID = 97401315671737565L; + + protected MatrixND matrix; + + protected JFreeChart chart; + + public JFreeChartPanel(MatrixND matrix) { + super(new BorderLayout()); + this.matrix = matrix; + + buildPanel(); + } + + protected void buildPanel() { + + // renderer combo box + JComboBox rendererComboBox = new JComboBox(); + GraphRendererComboBoxModel rendererComboBoxModel = new GraphRendererComboBoxModel(); + rendererComboBox.setModel(rendererComboBoxModel); + rendererComboBox.setRenderer(new GraphComboRenderer()); + add(rendererComboBox, BorderLayout.NORTH); + + // data model + CategoryDataset categoryDataset = new GraphMatrixNDDataset(matrix); + + // abscisse (nom + valeur à la verticale) + CategoryAxis horizontalAxis = new CategoryAxis(); + horizontalAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); + horizontalAxis.setLabel(_(matrix.getDimensionName(0))); + + // ordonnées (valeur seule) + ValueAxis verticalAxis = new NumberAxis3D(); + + // plot + CategoryPlot categoryPlot = new CategoryPlot(categoryDataset, horizontalAxis, verticalAxis, (CategoryItemRenderer)rendererComboBox.getSelectedItem()); + chart = new JFreeChart(_(matrix.getName()), JFreeChart.DEFAULT_TITLE_FONT, categoryPlot, true); + ChartPanel chartPanel = new ChartPanel(chart); + add(chartPanel, BorderLayout.CENTER); + + // add listener combobox > chart + rendererComboBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + CategoryItemRenderer renderer = (CategoryItemRenderer)e.getItem(); + chart.getCategoryPlot().setRenderer(renderer); + } + }); + } +} Property changes on: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/renderer/jfreechart/JFreeChartPanel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties =================================================================== --- trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties 2010-12-08 14:28:25 UTC (rev 298) +++ trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_en_GB.properties 2010-12-08 15:38:02 UTC (rev 299) @@ -17,5 +17,13 @@ nuitonmatrix.menu.csv.import.file=Import from file nuitonmatrix.menu.csv.import.position=Import at current position nuitonmatrix.menu.option.semantics=Export/Copy with semantics +nuitonmatrix.viewer.graphcomborender.bar=Verticals bar rendering +nuitonmatrix.viewer.graphcomborender.bar.3d=3D verticals bars rendering +nuitonmatrix.viewer.graphcomborender.bar.stacked=Stacked verticals bars rendering +nuitonmatrix.viewer.graphcomborender.line=Line rendering +nuitonmatrix.viewer.graphcomborender.line.3d=3D line rendering +nuitonmatrix.viewer.graphcomborender.min.max=Min/max rendering +nuitonmatrix.viewer.graphcomborender.surface=Area rendering +nuitonmatrix.viewer.graphcomborender.surface.stacked=Stacked area rendering nuitonmatrix.viewer.renderer.data=Data nuitonmatrix.viewer.sum=Sum Modified: trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties =================================================================== --- trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties 2010-12-08 14:28:25 UTC (rev 298) +++ trunk/nuiton-matrix-gui/src/main/resources/i18n/nuiton-matrix-gui_fr_FR.properties 2010-12-08 15:38:02 UTC (rev 299) @@ -17,5 +17,13 @@ nuitonmatrix.menu.csv.import.file=Importer depuis un fichier nuitonmatrix.menu.csv.import.position=Importer \u00E0 la position courante nuitonmatrix.menu.option.semantics=Exporter/Copier avec la s\u00E9mantique +nuitonmatrix.viewer.graphcomborender.bar=Rendu en barres verticales +nuitonmatrix.viewer.graphcomborender.bar.3d=Rendu en barres verticales 3D +nuitonmatrix.viewer.graphcomborender.bar.stacked=Rendu en barres verticales empil\u00E9es +nuitonmatrix.viewer.graphcomborender.line=Rendu en ligne +nuitonmatrix.viewer.graphcomborender.line.3d=Rendu en ligne 3D +nuitonmatrix.viewer.graphcomborender.min.max=Rendu en MinMax +nuitonmatrix.viewer.graphcomborender.surface=Rendu en aire +nuitonmatrix.viewer.graphcomborender.surface.stacked=Rendu en aires empil\u00E9es nuitonmatrix.viewer.renderer.data=Donn\u00E9es nuitonmatrix.viewer.sum=Somme Added: trunk/nuiton-matrix-gui/src/main/resources/icons/chart_curve.png =================================================================== (Binary files differ) Property changes on: trunk/nuiton-matrix-gui/src/main/resources/icons/chart_curve.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java =================================================================== --- trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java 2010-12-08 14:28:25 UTC (rev 298) +++ trunk/nuiton-matrix-gui/src/test/java/org/nuiton/math/matrix/viewer/MatrixViewerPanelTest.java 2010-12-08 15:38:02 UTC (rev 299) @@ -34,6 +34,7 @@ import org.nuiton.math.matrix.MatrixFactory; import org.nuiton.math.matrix.MatrixHelper; import org.nuiton.math.matrix.MatrixND; +import org.nuiton.math.matrix.viewer.renderer.JFreeChartRenderer; import org.nuiton.math.matrix.viewer.renderer.MatrixInfoTableRenderer; /** @@ -74,20 +75,26 @@ /** * Test d'un affichage simple, par defaut. - * @throws InterruptedException */ @Test - public void testViewerPanel() throws InterruptedException { + public void testViewerPanel() { JFrame frame = new JFrame(); MatrixViewerPanel panel = new MatrixViewerPanel(); MatrixND testMatrix = getTestMatrix(); panel.addMatrix(testMatrix, testMatrix); panel.addMatrixRenderer(new MatrixInfoTableRenderer()); + panel.addMatrixRenderer(new JFreeChartRenderer()); frame.add(panel); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); + + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-12-08 14:28:25 UTC (rev 298) +++ trunk/pom.xml 2010-12-08 15:38:02 UTC (rev 299) @@ -69,6 +69,12 @@ </exclusions> </dependency> + <dependency> + <groupId>jfree</groupId> + <artifactId>jfreechart</artifactId> + <version>1.0.12</version> + <scope>compile</scope> + </dependency> </dependencies> </dependencyManagement>