Author: echatellier Date: 2010-12-08 18:42:25 +0100 (Wed, 08 Dec 2010) New Revision: 303 Url: http://nuiton.org/repositories/revision/nuiton-matrix/303 Log: Calcul de tous les rendus pendant l'action de rendu, et affichage au choix du renderer Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java Modified: trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java =================================================================== --- trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java 2010-12-08 16:39:25 UTC (rev 302) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java 2010-12-08 17:42:25 UTC (rev 303) @@ -37,7 +37,9 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.swing.ButtonGroup; import javax.swing.DefaultComboBoxModel; @@ -94,12 +96,19 @@ protected MatrixDimensionPanel dimensionPanel; protected RadioButtonRenderingPanel radioPanel; - + protected JPanel renderingComponentContainer; + /** + * Map entre les renderers et les composants (valorisé par bouton de + * rendu) et utilisé par le choix du renderer. + */ + protected Map<MatrixRenderer, Component> componentForRenderers; + public MatrixViewerPanel() { matrixRenderers = new ArrayList<MatrixRenderer>(); matrices = new ArrayList<MatrixND>(); + componentForRenderers = new HashMap<MatrixRenderer, Component>(); buildPanel(); } @@ -250,7 +259,7 @@ } /** Radio button rendering panel. */ - protected class RadioButtonRenderingPanel extends JPanel implements PropertyChangeListener{ + protected class RadioButtonRenderingPanel extends JPanel implements PropertyChangeListener, ActionListener { /** serialVersionUID. */ private static final long serialVersionUID = -6312518069621077533L; @@ -277,26 +286,39 @@ protected void rebuildPanel() { removeAll(); if (matrixRendererSolution == MatrixRendererSolution.RADIO_BUTTON) { - + buttonGroup = new ButtonGroup(); for (MatrixRenderer renderer : matrixRenderers) { JRadioButton radioButton = new JRadioButton(renderer.getName()); + radioButton.addActionListener(this); radioButton.setModel(new RendererButtonModel(renderer)); buttonGroup.add(radioButton); add(radioButton); } - + setVisible(true); } else { setVisible(false); } } - + public MatrixRenderer getSelectedRender() { - MatrixRenderer renderer = ((RendererButtonModel)buttonGroup.getSelection()).getRenderer(); + MatrixRenderer renderer = null; + RendererButtonModel model = (RendererButtonModel)buttonGroup.getSelection(); + if (model != null) { + renderer = model.getRenderer(); + } return renderer; } + + /* + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + @Override + public void actionPerformed(ActionEvent e) { + updateSelectedRenderingComponent(); + } } /** @@ -358,29 +380,24 @@ String actionCommand = e.getActionCommand(); if ("render".equalsIgnoreCase(actionCommand)) { - - // get selected renderer - MatrixRenderer renderer = null; - switch (matrixRendererSolution) { - case RADIO_BUTTON: - renderer = radioPanel.getSelectedRender(); - break; - default : - - } - + // get matrix to display MatrixND matrix = dimensionPanel.getModifiedMatrix(); + // matrice superieur a 2 dimensions non geree!! if (matrix.getDimCount() > 2) { - // matrice superieur a 2 dimensions non geree!! JOptionPane.showMessageDialog(this, _("nuitonmatrix.viewer.matrix.more.2d"), _("nuitonmatrix.error"), JOptionPane.ERROR_MESSAGE); } else { - // renderer matrix - Component component = renderer.getPanel(matrix); - setRenderingComponent(component); + // get all display component for each renderer + componentForRenderers.clear(); + for (MatrixRenderer matrixRenderer : matrixRenderers) { + Component component = matrixRenderer.getPanel(matrix); + componentForRenderers.put(matrixRenderer, component); + } + + updateSelectedRenderingComponent(); } } @@ -388,12 +405,18 @@ /** * Set rendering component in rendering container. - * - * @param component component to install */ - protected void setRenderingComponent(Component component) { + protected void updateSelectedRenderingComponent() { renderingComponentContainer.removeAll(); - renderingComponentContainer.add(component, BorderLayout.CENTER); + + MatrixRenderer matrixRenderer = radioPanel.getSelectedRender(); + if (matrixRenderer != null) { + Component component = componentForRenderers.get(matrixRenderer); + if (component != null) { + renderingComponentContainer.add(component, BorderLayout.CENTER); + } + } + renderingComponentContainer.validate(); renderingComponentContainer.repaint(); }