r1882 - in isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui: . factor input widget
Author: sletellier Date: 2009-02-25 15:42:36 +0000 (Wed, 25 Feb 2009) New Revision: 1882 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/factor/ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/factor/EditorHelper.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FormInterval.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalGraphic.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalLabel.java Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoZoneUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonsUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalPanel.java Log: Creation of factor UI Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/factor/EditorHelper.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/factor/EditorHelper.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/factor/EditorHelper.java 2009-02-25 15:42:36 UTC (rev 1882) @@ -0,0 +1,111 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package fr.ifremer.isisfish.ui.factor; + +import fr.ifremer.isisfish.ui.input.InputOneEquationUI; +import fr.ifremer.isisfish.ui.widget.IntervalPanel; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JRadioButton; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.text.JTextComponent; +import org.apache.commons.beanutils.BeanUtils; +import org.codelutin.math.matrix.MatrixND; +import org.codelutin.math.matrix.gui.MatrixPanelEditor; +import org.codelutin.topia.persistence.TopiaEntity; + +/** + * + * @author letellier + */ +public class EditorHelper { + + public JComponent getEditor(JComponent c) { + JComponent result = null; + try { + TopiaEntity e = (TopiaEntity) c.getClientProperty("bean"); + String fieldName = (String) c.getClientProperty("fieldName"); + result = c.getClass().newInstance(); + + if (result instanceof JTextField) { + ((JTextComponent) result).setText(BeanUtils.getProperty(e, fieldName)); + + } else if (result instanceof JTable){ +// ((JTable) result).setText(BeanUtils.getProperty(e, fieldName)); + + } else if (result instanceof MatrixPanelEditor){ + + ((MatrixPanelEditor) result).setMatrix((MatrixND)callMethod(e, fieldName)); + + } else if (result instanceof JComboBox){ +// ((JComboBox) result).setModel(BeanUtils.getProperty(e, fieldName)); + + } else if (result instanceof JCheckBox){ + ((JCheckBox) result).setSelected((Boolean)callMethod(e, fieldName)); + + } else if (result instanceof JRadioButton){ + ((JRadioButton) result).setSelected((Boolean)callMethod(e, fieldName)); + + } else if (result instanceof InputOneEquationUI){ +// ((InputOneEquationUI) result).init(setText(BeanUtils.getProperty(e, fieldName))); + + } else if (result instanceof IntervalPanel){ +// ((IntervalPanel) result).setModel((BeanUtils.getProperty(e, fieldName))); + + } + } catch (Exception ex) { + Logger.getLogger(EditorHelper.class.getName()).log(Level.SEVERE, null, ex); + } + return result; + } + + public Object getValue(JComponent c) { + Object result = null; + if (result instanceof JTextComponent) { + result = ((JTextComponent)result).getText(); + } else if (result instanceof JTable){ +// ((JTable) result).setText(BeanUtils.getProperty(e, fieldName)); + + } else if (result instanceof MatrixPanelEditor){ + result = ((MatrixPanelEditor)result).getMatrix(); + + } else if (result instanceof JComboBox){ +// ((JComboBox) result).setModel(BeanUtils.getProperty(e, fieldName)); + + } else if (result instanceof JCheckBox){ + result = ((JCheckBox)result).isSelected(); + + } else if (result instanceof JRadioButton){ + result = ((JRadioButton)result).isSelected(); + + } else if (result instanceof InputOneEquationUI){ +// ((InputOneEquationUI) result).init(setText(BeanUtils.getProperty(e, fieldName))); + + } else if (result instanceof IntervalPanel){ +// ((IntervalPanel) result).setModel((BeanUtils.getProperty(e, fieldName))); + + } + + return result; + } + + protected Object callMethod(TopiaEntity e, String fieldName){ + Object result = null; + try { + Method m = e.getClass().getMethod("get" + fieldName, null); + result = m.invoke(e, (Object[])null); + } catch (Exception ex) { + Logger.getLogger(EditorHelper.class.getName()).log(Level.SEVERE, null, ex); + } + return result; + } +} Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx 2009-02-25 15:25:59 UTC (rev 1881) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/FisheryRegionUI.jaxx 2009-02-25 15:42:36 UTC (rev 1882) @@ -51,6 +51,7 @@ toolMap.add((Component)toolSet); setButtonTitle(_("isisfish.input.continueCells")); setNextPath("$root/$cells"); +setLayer(true); addPropertyChangeListener("bean", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getOldValue() != null || evt.getNewValue() == null) { @@ -72,6 +73,7 @@ if (region != null){ setFieldMapfilesModel(getBean()); } + setLayer(true); } protected void setFieldMapfilesModel(FisheryRegion region){ DefaultListModel model = new DefaultListModel(); @@ -133,7 +135,9 @@ </row> <row> <cell columns='3' fill='horizontal' weightx='1.0'> - <JTextField id="fieldRegion" text='{jaxx.runtime.SwingUtil.getStringValue(getBean().getName())}' onKeyReleased='getBean().setName(fieldRegion.getText())'/> + <JTextField id="fieldRegion" decorator='boxed' + text='{jaxx.runtime.SwingUtil.getStringValue(getBean().getName())}' + onKeyReleased='getBean().setName(fieldRegion.getText())'/> </cell> </row> <row> @@ -146,7 +150,8 @@ <JLabel text="isisfish.fisheryRegion.latitude.min"/> </cell> <cell columns='2' fill='horizontal' weightx='1.0'> - <JTextField id="fieldLatMin" text='{getBean().getMinLatitude()}' onKeyReleased='getBean().setMinLatitude(Float.parseFloat(fieldLatMin.getText()))'/> + <JTextField id="fieldLatMin" text='{getBean().getMinLatitude()}' decorator='boxed' + onKeyReleased='getBean().setMinLatitude(Float.parseFloat(fieldLatMin.getText()))'/> </cell> </row> <row> @@ -154,7 +159,8 @@ <JLabel text="isisfish.fisheryRegion.latitude.max"/> </cell> <cell columns='2' fill='horizontal' weightx='1.0'> - <JTextField id="fieldLatMax" text='{getBean().getMaxLatitude()}' onKeyReleased='getBean().setMaxLatitude(Float.parseFloat(fieldLatMax.getText()))'/> + <JTextField id="fieldLatMax" text='{getBean().getMaxLatitude()}' decorator='boxed' + onKeyReleased='getBean().setMaxLatitude(Float.parseFloat(fieldLatMax.getText()))'/> </cell> </row> <row> @@ -162,7 +168,8 @@ <JLabel text="isisfish.fisheryRegion.longitude.min"/> </cell> <cell columns='2' fill='horizontal' weightx='1.0'> - <JTextField id="fieldLongMin" text='{getBean().getMinLongitude()}' onKeyReleased='getBean().setMinLongitude(Float.parseFloat(fieldLongMin.getText()))'/> + <JTextField id="fieldLongMin" text='{getBean().getMinLongitude()}' decorator='boxed' + onKeyReleased='getBean().setMinLongitude(Float.parseFloat(fieldLongMin.getText()))'/> </cell> </row> <row> @@ -170,7 +177,8 @@ <JLabel text="isisfish.fisheryRegion.longitude.max"/> </cell> <cell columns='2' fill='horizontal' weightx='1.0'> - <JTextField id="fieldLongMax" text='{getBean().getMaxLongitude()}' onKeyReleased='getBean().setMaxLongitude(Float.parseFloat(fieldLongMax.getText()))'/> + <JTextField id="fieldLongMax" text='{getBean().getMaxLongitude()}' decorator='boxed' + onKeyReleased='getBean().setMaxLongitude(Float.parseFloat(fieldLongMax.getText()))'/> </cell> </row> <row> @@ -183,7 +191,8 @@ <JLabel text="isisfish.fisheryRegion.latitude"/> </cell> <cell columns='2' fill='horizontal' weightx='1.0'> - <JTextField id="fieldCellLengthLatitude" text='{getBean().getCellLengthLatitude()}' onKeyReleased='getBean().setCellLengthLatitude(Float.parseFloat(fieldCellLengthLatitude.getText()))'/> + <JTextField id="fieldCellLengthLatitude" text='{getBean().getCellLengthLatitude()}' decorator='boxed' + onKeyReleased='getBean().setCellLengthLatitude(Float.parseFloat(fieldCellLengthLatitude.getText()))'/> </cell> </row> <row> @@ -191,7 +200,8 @@ <JLabel text="isisfish.fisheryRegion.longitude"/> </cell> <cell columns='2' fill='horizontal' weightx='1.0'> - <JTextField id="fieldCellLengthLongitude" text='{getBean().getCellLengthLongitude()}' onKeyReleased='getBean().setCellLengthLongitude(Float.parseFloat(fieldCellLengthLongitude.getText()))'/> + <JTextField id="fieldCellLengthLongitude" text='{getBean().getCellLengthLongitude()}' decorator='boxed' + onKeyReleased='getBean().setCellLengthLongitude(Float.parseFloat(fieldCellLengthLongitude.getText()))'/> </cell> </row> <row> @@ -223,7 +233,8 @@ <row> <cell columns='3' fill='both' weightx='1.0' weighty='0.4'> <JScrollPane> - <JTextArea id="fieldComment" text='{jaxx.runtime.SwingUtil.getStringValue(getBean().getComment())}' onKeyReleased='getBean().setComment(fieldComment.getText())'/> + <JTextArea id="fieldComment" text='{jaxx.runtime.SwingUtil.getStringValue(getBean().getComment())}' decorator='boxed' + onKeyReleased='getBean().setComment(fieldComment.getText())'/> </JScrollPane> </cell> </row> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-02-25 15:25:59 UTC (rev 1881) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-02-25 15:42:36 UTC (rev 1882) @@ -9,10 +9,23 @@ <!-- Next button title --> <java.lang.String id='nextPath' javaBean='null'/> + <jaxx.runtime.swing.BlockingLayerUI id='layerUI' + blockIcon='{SwingUtil.createImageIcon("building.png")}' + acceptIcon='{SwingUtil.createImageIcon("building_add.png")}' + acceptAction='{new AbstractAction() { private static final long serialVersionUID = 1L; + @Override + public void actionPerformed(ActionEvent e) { + accept(e); + } + }}' /> + <script><![CDATA[ import fr.ifremer.isisfish.ui.WelcomePanelUI; import fr.ifremer.isisfish.entities.FisheryRegion; import org.codelutin.topia.persistence.TopiaEntity; +import javax.swing.JComponent; +import jaxx.runtime.SwingUtil; + public void refresh(){} public InputAction getAction() { return getContextValue(InputAction.class); @@ -30,6 +43,20 @@ getParentContainer(InputUI.class).setTreeSelection(getNextPath()); } public void setBean(TopiaEntity t){}; + +public void setLayer(boolean active) { + System.out.println(active); + for (JComponent boxed : SwingUtil.getLayeredComponents(this)) { + jaxx.runtime.swing.BlockingLayerUI ui = active ? layerUI.clone() : null; + SwingUtil.getLayer(boxed).setUI(ui); + } +} + +protected void accept(ActionEvent e) { + JComponent source = (JComponent) e.getSource(); + System.out.println(source); +} + ]]> </script> <JPanel id='body' constraints='BorderLayout.CENTER'/> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoZoneUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoZoneUI.jaxx 2009-02-25 15:25:59 UTC (rev 1881) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/MetierSeasonInfoZoneUI.jaxx 2009-02-25 15:42:36 UTC (rev 1882) @@ -51,11 +51,9 @@ import fr.ifremer.isisfish.entities.Metier; import fr.ifremer.isisfish.entities.MetierImpl; import jaxx.runtime.swing.Item; - + protected Interval interval = null; - protected IntervalPanel ip = new IntervalPanel(); - displayMetierSeason.add(ip, BorderLayout.CENTER); - boolean init = false; + protected boolean init = false; ip.addPropertyChangeListener(new PropertyChangeListener() { @Override @@ -208,7 +206,7 @@ <JLabel text="isisfish.metierSeasonInfoZone.season" enabled='{isMetierSeasonInfoNotNull()}'/> </cell> <cell fill='horizontal' weightx='1.0'> - <JPanel id='displayMetierSeason' layout='{new BorderLayout()}' enabled='{isMetierSeasonInfoNotNull()}'/> + <IntervalPanel id='ip' enabled='{isMetierSeasonInfoNotNull()}'/> </cell> </row> <row> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonsUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonsUI.jaxx 2009-02-25 15:25:59 UTC (rev 1881) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationSeasonsUI.jaxx 2009-02-25 15:42:36 UTC (rev 1882) @@ -52,11 +52,10 @@ import fr.ifremer.isisfish.ui.widget.Interval; import fr.ifremer.isisfish.ui.widget.IntervalPanel; -MatrixPanelListener listener = null; +protected MatrixPanelListener listener = null; protected Interval interval = null; -protected IntervalPanel ip = new IntervalPanel(); -fieldPopulationSeasonInterval.add(ip, BorderLayout.CENTER); -boolean init = false; + +protected boolean init = false; ip.addPropertyChangeListener(new PropertyChangeListener() { @Override @@ -218,7 +217,7 @@ <JLabel text="isisfish.common.season" enabled='{isPopSeasonInfoNotNull()}'/> </cell> <cell fill='horizontal' weightx='1.0'> - <JPanel id='fieldPopulationSeasonInterval' layout='{new BorderLayout()}' enabled='{isPopSeasonInfoNotNull()}'/> + <IntervalPanel id='ip' enabled='{isPopSeasonInfoNotNull()}'/> </cell> </row> <row> Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FormInterval.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FormInterval.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FormInterval.java 2009-02-25 15:42:36 UTC (rev 1882) @@ -0,0 +1,39 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package fr.ifremer.isisfish.ui.widget; + +import java.awt.Frame; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +/** +* La classe de test +*/ + + + +public class FormInterval extends Frame{ + /** */ + private static final long serialVersionUID = 4911081593147906648L; + + /** + */ + class Quitter extends WindowAdapter{ + public void windowClosing(WindowEvent e){ + e.getWindow().dispose();} + } + + public FormInterval(Interval i){ + IntervalPanel ip = new IntervalPanel(); + this.add(ip); + // ip.setEnabled(false); + ip.setModel(i); + + this.addWindowListener(new Quitter()); + pack(); + } +} + Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalGraphic.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalGraphic.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalGraphic.java 2009-02-25 15:42:36 UTC (rev 1882) @@ -0,0 +1,233 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package fr.ifremer.isisfish.ui.widget; + + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.awt.image.ImageObserver; +import java.util.Observable; +import java.util.Observer; +import javax.swing.JComponent; + +class IntervalGraphic extends JComponent implements Observer{ // IntervalGraphic + + /** */ + private static final long serialVersionUID = -6795996897731533693L; + /** + * des constantes + */ + private static final int HANDLE_WITH = 5; + private static final Cursor DEFAULT_CURSOR = new Cursor(Cursor.DEFAULT_CURSOR); + private static final Cursor W_RESIZE_CURSOR = new Cursor(Cursor.W_RESIZE_CURSOR); + private static final Cursor E_RESIZE_CURSOR = new Cursor(Cursor.E_RESIZE_CURSOR); + private static final Cursor MOVE_CURSOR = new Cursor(Cursor.MOVE_CURSOR); + + //les couleurs + private Color backColor = Color.blue; + private Color foreColor = Color.yellow; + private Color lineColor = Color.yellow.darker(); + + + + protected Interval model; + + /** + * rapport entre le model et la vu + */ + protected float coef; + + /** + * decalage de la position de la souris lors d'un drag par rapport + * a la position de l'element 1 + */ + protected float delta; + + //tous pour changer la selection avec la souris + private boolean inDrag = false; + private int cursorType = 1; + private Cursor mouseCursor; + + + //si vrai le composant est editable + private boolean enable = true; + + class MouseClick extends MouseAdapter{ + public void mouseEntered( MouseEvent e ){ + mouseCursor = getCursor(); + } + public void mousePressed( MouseEvent e ){ + int mouseX=e.getX(); + + if(model.getFirst() <= model.getLast()){ + inDrag = (model.getFirst()*coef - HANDLE_WITH < mouseX) && + (mouseX < (model.getLast()+1)*coef + HANDLE_WITH); + } + else if(model.getFirst() > model.getLast()) { + inDrag = + ((0 <= mouseX) && + (mouseX < (model.getLast()+1)*coef + HANDLE_WITH)) + || + ((model.getFirst()*coef - HANDLE_WITH < mouseX) && + (mouseX <= getSize().width)); + } + if(inDrag) + delta = mouseX - (model.getFirst()*coef); + } + + public void mouseReleased( MouseEvent e ){ + inDrag = false; + } + } + + class MouseMove extends MouseMotionAdapter{ + public void mouseMoved( MouseEvent e ){ + if (!inDrag && enable){ + int x = e.getX(); + //on determine sur quel section on est + if((model.getFirst()*coef - HANDLE_WITH < x ) && + (x < model.getFirst()*coef + HANDLE_WITH)){ + cursorType = 0; + setCursor(W_RESIZE_CURSOR); + }else if(((model.getLast()+1)*coef - HANDLE_WITH <x ) && + (x < (model.getLast()+1)*coef + HANDLE_WITH)){ + cursorType = 2; + setCursor(E_RESIZE_CURSOR); + delta = x - (model.getLast()*coef); + }else{ + boolean bool = + ((model.getFirst() <= model.getLast()) && + (model.getFirst()*coef + HANDLE_WITH < x) && + (x < (model.getLast()+1)*coef - HANDLE_WITH)) + || + ((model.getFirst() > model.getLast()) && + (((0 <= x) && + (x < (model.getLast()+1)*coef - HANDLE_WITH)) + || + ((model.getFirst()*coef + HANDLE_WITH < x) && + (x <= getSize().width)))); + + if ( bool ){ + cursorType = 1; + setCursor(MOVE_CURSOR); + } + else{ + cursorType = 4; + setCursor(DEFAULT_CURSOR); + } + } + } + } + + public void mouseDragged( MouseEvent e ){ + if (inDrag && enable){ + int x=e.getX(); + switch (cursorType){ + case 0: //on tire par le debut + if (x < 0) x = 0; + if (x > getSize().width) x = getSize().width; + model.setFirst(Math.round(x / coef)); + break; + case 1: //on deplace + int decal = Math.round((x-delta)/coef) - model.getFirst(); + model.move(decal); + break; + case 2: //on tire par la fin + if (x < 0) x = 0; + if (x > getSize().width) x = getSize().width; + model.setLast(Math.round((x-coef) / coef)); + break; + } + } + } + } + + /** + * Constructeur + */ + public IntervalGraphic(Interval m){ + super(); + setModel(m); + addMouseListener(new MouseClick()); + addMouseMotionListener(new MouseMove()); + } + + public void setModel(Interval m){ + if(this.model != null) + this.model.deleteObserver(this); + this.model = m; + this.model.addObserver(this); + update(this.model, null); + } + + public void setEnabled(boolean enable){ + this.enable = enable; + } + + /** + * Dessine sur le graphique l'interval courant + */ + protected void redraw( Graphics g ){ + coef = (float)getSize().width / (float)(model.getMax()+1); + + int width = getSize().width; + int height = getSize().height; + + Image ImageBuffer = createImage(width, height); + Graphics tmpg = ImageBuffer.getGraphics(); + + //peindre le fond + tmpg.setColor(backColor); + tmpg.fillRect(0 , 0, width, height); + + //peindre la section + tmpg.setColor(foreColor); + for (Interval.IntervalIterator i=(Interval.IntervalIterator)model.iterator();i.hasNext();){ + int val = i.nextInt(); + tmpg.setColor(foreColor); + tmpg.fillRect(Math.round(val*coef) , 0, + Math.round(coef) , height); + tmpg.setColor(lineColor); + tmpg.drawRect(Math.round(val*coef) , 0, + Math.round(coef) , height); + } + + g.drawImage(ImageBuffer, 0, 0, getSize().width, getSize().height, + new ImageObserver(){ + public boolean imageUpdate( Image img, int infoflags, + int x, int y, + int width, int height ){ + return true; + } + }); + } + + /** + */ + public void paint( Graphics g ){ + redraw(g); + } + + /** + */ + public void update( Graphics g ){ + redraw(g); + } + + /** + * Call by observable object + */ + public void update(Observable o, Object arg){ + repaint(); + } + +} // IntervalGraphic + Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalLabel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalLabel.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalLabel.java 2009-02-25 15:42:36 UTC (rev 1882) @@ -0,0 +1,51 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package fr.ifremer.isisfish.ui.widget; + +import java.util.Observable; +import java.util.Observer; +import javax.swing.JLabel; + +/** +* La vue en label +*/ +class IntervalLabel extends JLabel implements Observer { + /** */ + private static final long serialVersionUID = -6269941008930677478L; + private Interval model = null; + private Object[] renderArray; + + public IntervalLabel(Interval m){ + super(); + setModel(m); + } + + public void setModel(Interval m){ + if(this.model != null) { + this.model.deleteObserver(this); + } + this.model = m; + m.addObserver(this); + update(m, null); + } + + public void setLabelRenderer(Object[] renderArray) { + this.renderArray = renderArray; + } + + public void update(Observable o, Object arg){ + setText(toString(model.getFirst()) + " - " + toString(model.getLast())); + } + + protected String toString(int val) { + if (renderArray != null && renderArray.length > val) { + return String.valueOf(renderArray[val]); + } else { + return String.valueOf(val); + } + } +} + Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalPanel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalPanel.java 2009-02-25 15:25:59 UTC (rev 1881) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/widget/IntervalPanel.java 2009-02-25 15:42:36 UTC (rev 1882) @@ -19,24 +19,10 @@ package fr.ifremer.isisfish.ui.widget; //import org.codelutin.i18n.*; -import java.awt.Color; -import java.awt.Cursor; import java.awt.Dimension; -import java.awt.Frame; -import java.awt.Graphics; import java.awt.GridLayout; -import java.awt.Image; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionAdapter; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.image.ImageObserver; import java.util.Observable; import java.util.Observer; - -import javax.swing.JComponent; -import javax.swing.JLabel; import javax.swing.JPanel; /** @@ -130,285 +116,6 @@ } -/** -* La vue en label -*/ -class IntervalLabel extends JLabel implements Observer { - /** */ - private static final long serialVersionUID = -6269941008930677478L; - private Interval model = null; - private Object[] renderArray; - - public IntervalLabel(Interval m){ - super(); - setModel(m); - } - public void setModel(Interval m){ - if(this.model != null) { - this.model.deleteObserver(this); - } - this.model = m; - m.addObserver(this); - update(m, null); - } - public void setLabelRenderer(Object[] renderArray) { - this.renderArray = renderArray; - } - public void update(Observable o, Object arg){ - setText(toString(model.getFirst()) + " - " + toString(model.getLast())); - } - - protected String toString(int val) { - if (renderArray != null && renderArray.length > val) { - return String.valueOf(renderArray[val]); - } else { - return String.valueOf(val); - } - } -} - - -class IntervalGraphic extends JComponent implements Observer{ // IntervalGraphic - - /** */ - private static final long serialVersionUID = -6795996897731533693L; - /** - * des constantes - */ - private static final int HANDLE_WITH = 5; - private static final Cursor DEFAULT_CURSOR = new Cursor(Cursor.DEFAULT_CURSOR); - private static final Cursor W_RESIZE_CURSOR = new Cursor(Cursor.W_RESIZE_CURSOR); - private static final Cursor E_RESIZE_CURSOR = new Cursor(Cursor.E_RESIZE_CURSOR); - private static final Cursor MOVE_CURSOR = new Cursor(Cursor.MOVE_CURSOR); - - //les couleurs - private Color backColor = Color.blue; - private Color foreColor = Color.yellow; - private Color lineColor = Color.yellow.darker(); - - - - protected Interval model; - - /** - * rapport entre le model et la vu - */ - protected float coef; - - /** - * decalage de la position de la souris lors d'un drag par rapport - * a la position de l'element 1 - */ - protected float delta; - - //tous pour changer la selection avec la souris - private boolean inDrag = false; - private int cursorType = 1; - private Cursor mouseCursor; - - - //si vrai le composant est editable - private boolean enable = true; - - class MouseClick extends MouseAdapter{ - public void mouseEntered( MouseEvent e ){ - mouseCursor = getCursor(); - } - public void mousePressed( MouseEvent e ){ - int mouseX=e.getX(); - - if(model.getFirst() <= model.getLast()){ - inDrag = (model.getFirst()*coef - HANDLE_WITH < mouseX) && - (mouseX < (model.getLast()+1)*coef + HANDLE_WITH); - } - else if(model.getFirst() > model.getLast()) { - inDrag = - ((0 <= mouseX) && - (mouseX < (model.getLast()+1)*coef + HANDLE_WITH)) - || - ((model.getFirst()*coef - HANDLE_WITH < mouseX) && - (mouseX <= getSize().width)); - } - if(inDrag) - delta = mouseX - (model.getFirst()*coef); - } - - public void mouseReleased( MouseEvent e ){ - inDrag = false; - } - } - - class MouseMove extends MouseMotionAdapter{ - public void mouseMoved( MouseEvent e ){ - if (!inDrag && enable){ - int x = e.getX(); - //on determine sur quel section on est - if((model.getFirst()*coef - HANDLE_WITH < x ) && - (x < model.getFirst()*coef + HANDLE_WITH)){ - cursorType = 0; - setCursor(W_RESIZE_CURSOR); - }else if(((model.getLast()+1)*coef - HANDLE_WITH <x ) && - (x < (model.getLast()+1)*coef + HANDLE_WITH)){ - cursorType = 2; - setCursor(E_RESIZE_CURSOR); - delta = x - (model.getLast()*coef); - }else{ - boolean bool = - ((model.getFirst() <= model.getLast()) && - (model.getFirst()*coef + HANDLE_WITH < x) && - (x < (model.getLast()+1)*coef - HANDLE_WITH)) - || - ((model.getFirst() > model.getLast()) && - (((0 <= x) && - (x < (model.getLast()+1)*coef - HANDLE_WITH)) - || - ((model.getFirst()*coef + HANDLE_WITH < x) && - (x <= getSize().width)))); - - if ( bool ){ - cursorType = 1; - setCursor(MOVE_CURSOR); - } - else{ - cursorType = 4; - setCursor(DEFAULT_CURSOR); - } - } - } - } - - public void mouseDragged( MouseEvent e ){ - if (inDrag && enable){ - int x=e.getX(); - switch (cursorType){ - case 0: //on tire par le debut - if (x < 0) x = 0; - if (x > getSize().width) x = getSize().width; - model.setFirst(Math.round(x / coef)); - break; - case 1: //on deplace - int decal = Math.round((x-delta)/coef) - model.getFirst(); - model.move(decal); - break; - case 2: //on tire par la fin - if (x < 0) x = 0; - if (x > getSize().width) x = getSize().width; - model.setLast(Math.round((x-coef) / coef)); - break; - } - } - } - } - - /** - * Constructeur - */ - public IntervalGraphic(Interval m){ - super(); - setModel(m); - addMouseListener(new MouseClick()); - addMouseMotionListener(new MouseMove()); - } - - public void setModel(Interval m){ - if(this.model != null) - this.model.deleteObserver(this); - this.model = m; - this.model.addObserver(this); - update(this.model, null); - } - - public void setEnabled(boolean enable){ - this.enable = enable; - } - - /** - * Dessine sur le graphique l'interval courant - */ - protected void redraw( Graphics g ){ - coef = (float)getSize().width / (float)(model.getMax()+1); - - int width = getSize().width; - int height = getSize().height; - - Image ImageBuffer = createImage(width, height); - Graphics tmpg = ImageBuffer.getGraphics(); - - //peindre le fond - tmpg.setColor(backColor); - tmpg.fillRect(0 , 0, width, height); - - //peindre la section - tmpg.setColor(foreColor); - for (Interval.IntervalIterator i=(Interval.IntervalIterator)model.iterator();i.hasNext();){ - int val = i.nextInt(); - tmpg.setColor(foreColor); - tmpg.fillRect(Math.round(val*coef) , 0, - Math.round(coef) , height); - tmpg.setColor(lineColor); - tmpg.drawRect(Math.round(val*coef) , 0, - Math.round(coef) , height); - } - - g.drawImage(ImageBuffer, 0, 0, getSize().width, getSize().height, - new ImageObserver(){ - public boolean imageUpdate( Image img, int infoflags, - int x, int y, - int width, int height ){ - return true; - } - }); - } - - /** - */ - public void paint( Graphics g ){ - redraw(g); - } - - /** - */ - public void update( Graphics g ){ - redraw(g); - } - - /** - * Call by observable object - */ - public void update(Observable o, Object arg){ - repaint(); - } - -} // IntervalGraphic - - -/** -* La classe de test -*/ - - - -class FormInterval extends Frame{ - /** */ - private static final long serialVersionUID = 4911081593147906648L; - - /** - */ - class Quitter extends WindowAdapter{ - public void windowClosing(WindowEvent e){ - e.getWindow().dispose();} - } - - public FormInterval(Interval i){ - IntervalPanel ip = new IntervalPanel(); - this.add(ip); - // ip.setEnabled(false); - ip.setModel(i); - - this.addWindowListener(new Quitter()); - pack(); - } -}
participants (1)
-
sletellier@users.labs.libre-entreprise.org