Author: echatellier Date: 2010-12-09 16:09:49 +0100 (Thu, 09 Dec 2010) New Revision: 307 Url: http://nuiton.org/repositories/revision/nuiton-matrix/307 Log: Add icon list rendering solution 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-09 10:47:55 UTC (rev 306) +++ trunk/nuiton-matrix-gui/src/main/java/org/nuiton/math/matrix/viewer/MatrixViewerPanel.java 2010-12-09 15:09:49 UTC (rev 307) @@ -29,7 +29,9 @@ import java.awt.BorderLayout; import java.awt.Component; -import java.awt.GridLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -51,6 +53,7 @@ import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JSplitPane; +import javax.swing.JToggleButton; import javax.swing.JToggleButton.ToggleButtonModel; import org.nuiton.math.matrix.MatrixND; @@ -65,7 +68,7 @@ * Last update : $Date$ * By : $Author$ */ -public class MatrixViewerPanel extends JPanel implements ActionListener { +public class MatrixViewerPanel extends JPanel { /** serialVersionUID. */ private static final long serialVersionUID = -5447856858278176837L; @@ -97,6 +100,8 @@ protected RadioButtonRenderingPanel radioPanel; + protected IconButtonRenderingPanel iconPanel; + protected JPanel renderingComponentContainer; /** @@ -258,6 +263,103 @@ } } + /** + * Icon button rendering panel. + * Also contains main render action button (arrow). + */ + protected class IconButtonRenderingPanel extends JPanel implements PropertyChangeListener, ActionListener { + + /** serialVersionUID. */ + private static final long serialVersionUID = 2591696695747738619L; + + protected ButtonGroup buttonGroup; + + public IconButtonRenderingPanel() { + super(new GridBagLayout()); + } + + /* + * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + rebuildPanel(); + validate(); + repaint(); + } + + /** + * Rebuild radio button lists. + */ + protected void rebuildPanel() { + removeAll(); + + JButton renderButton = new JButton(Resource.getIcon("/icons/1rightarrow.png")); + renderButton.setActionCommand("render"); + renderButton.addActionListener(this); + add(renderButton, new GridBagConstraints(0, 0, 1, 1, 1, 1, + GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); + + if (matrixRendererSolution == MatrixRendererSolution.ICON) { + + int index = 1; + buttonGroup = new ButtonGroup(); + for (MatrixRenderer renderer : matrixRenderers) { + JToggleButton radioButton = new JToggleButton(renderer.getIcon()); + radioButton.addActionListener(this); + radioButton.setModel(new RendererButtonModel(renderer)); + buttonGroup.add(radioButton); + add(radioButton, new GridBagConstraints(0, index, 1, 1, 1, 0, + GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); + index++; + } + } + } + + public MatrixRenderer getSelectedRender() { + 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) { + + String actionCommand = e.getActionCommand(); + + if ("render".equals(actionCommand)) { + // get matrix to display + MatrixND matrix = dimensionPanel.getModifiedMatrix(); + + // matrice superieur a 2 dimensions non geree!! + if (matrix.getDimCount() > 2) { + JOptionPane.showMessageDialog(this, _("nuitonmatrix.viewer.matrix.more.2d"), + _("nuitonmatrix.error"), JOptionPane.ERROR_MESSAGE); + } + else { + // get all display component for each renderer + componentForRenderers.clear(); + for (MatrixRenderer matrixRenderer : matrixRenderers) { + Component component = matrixRenderer.getComponent(matrix); + componentForRenderers.put(matrixRenderer, component); + } + + updateSelectedRenderingComponent(); + } + } + else { + // clic on render button + updateSelectedRenderingComponent(); + } + } + } + /** Radio button rendering panel. */ protected class RadioButtonRenderingPanel extends JPanel implements PropertyChangeListener, ActionListener { @@ -267,7 +369,7 @@ protected ButtonGroup buttonGroup; public RadioButtonRenderingPanel() { - super(new GridLayout(1, 0)); + super(new GridBagLayout()); } /* @@ -287,13 +389,16 @@ removeAll(); if (matrixRendererSolution == MatrixRendererSolution.RADIO_BUTTON) { + int index = 0; 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); + add(radioButton, new GridBagConstraints(index, 0, 1, 1, 1, 1, + GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); + index++; } setVisible(true); @@ -340,6 +445,7 @@ MatrixComboBoxModel matrixListComboBoxModel = new MatrixComboBoxModel(); matrixComboBox.setModel(matrixListComboBoxModel); matrixComboBox.setRenderer(new MatrixComboRenderer()); + matrixComboBox.setVisible(matrixComboVisible); addPropertyChangeListener(PROPERTY_MATRIX_COMBO_VISIBLE, matrixComboBox); addPropertyChangeListener(PROPERTY_MATRICES, matrixListComboBoxModel); editionSidePanel.add(matrixComboBox, BorderLayout.NORTH); @@ -349,13 +455,11 @@ editionSidePanel.add(dimensionPanel, BorderLayout.CENTER); // fleche de d'action de rendu - JButton renderButton = new JButton(Resource.getIcon("/icons/1rightarrow.png")); - renderButton.setActionCommand("render"); - renderButton.addActionListener(this); - - editionSidePanel.add(renderButton, BorderLayout.EAST); - // render type : icon + iconPanel = new IconButtonRenderingPanel(); + editionSidePanel.add(iconPanel, BorderLayout.EAST); + addPropertyChangeListener(PROPERTY_MATRIX_RENDERER_SOLUTION, iconPanel); + addPropertyChangeListener(PROPERTY_MATRIX_RENDERERS, iconPanel); // render type : combo box @@ -370,46 +474,22 @@ addPropertyChangeListener(PROPERTY_MATRIX_RENDERERS, radioPanel); } - - /* - * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) - */ - @Override - public void actionPerformed(ActionEvent e) { - - String actionCommand = e.getActionCommand(); - - if ("render".equalsIgnoreCase(actionCommand)) { - - // get matrix to display - MatrixND matrix = dimensionPanel.getModifiedMatrix(); - - // matrice superieur a 2 dimensions non geree!! - if (matrix.getDimCount() > 2) { - JOptionPane.showMessageDialog(this, _("nuitonmatrix.viewer.matrix.more.2d"), - _("nuitonmatrix.error"), JOptionPane.ERROR_MESSAGE); - } - else { - // get all display component for each renderer - componentForRenderers.clear(); - for (MatrixRenderer matrixRenderer : matrixRenderers) { - Component component = matrixRenderer.getComponent(matrix); - componentForRenderers.put(matrixRenderer, component); - } - - updateSelectedRenderingComponent(); - } - } - - } - /** * Set rendering component in rendering container. */ protected void updateSelectedRenderingComponent() { renderingComponentContainer.removeAll(); - MatrixRenderer matrixRenderer = radioPanel.getSelectedRender(); + MatrixRenderer matrixRenderer = null; + switch (matrixRendererSolution) { + case ICON: + matrixRenderer = iconPanel.getSelectedRender(); + break; + case RADIO_BUTTON: + matrixRenderer = radioPanel.getSelectedRender(); + break; + } + if (matrixRenderer != null) { Component component = componentForRenderers.get(matrixRenderer); if (component != null) {
participants (1)
-
echatellier@users.nuiton.org