From: <had...@us...> - 2008-08-04 20:47:11
|
Revision: 3706 http://fudaa.svn.sourceforge.net/fudaa/?rev=3706&view=rev Author: hadouxad Date: 2008-08-04 20:47:14 +0000 (Mon, 04 Aug 2008) Log Message: ----------- AFFECT?\195?\137 - # 40: L?\195?\169gende pour les courbe 1d d?\195?\169dut de cr?\195?\169ation du manager de widget legendes reste a corriger 1)la position des widget par rapport au graphe 2)l ajout des icones et trac?\195?\169 Modified Paths: -------------- branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java Added Paths: ----------- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/courbe/WidgetLegendeManager.java Added: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/courbe/WidgetLegendeManager.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/courbe/WidgetLegendeManager.java (rev 0) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/courbe/WidgetLegendeManager.java 2008-08-04 20:47:14 UTC (rev 3706) @@ -0,0 +1,171 @@ +package org.fudaa.ebli.courbe; + + + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.fudaa.ctulu.CtuluResource; +import org.fudaa.ctulu.image.CtuluImageProducer; +import org.fudaa.ctulu.image.CtuluLibImage; +import org.netbeans.api.visual.action.ActionFactory; +import org.netbeans.api.visual.graph.GraphScene; +import org.netbeans.api.visual.laf.LookFeel; +import org.netbeans.api.visual.model.ObjectState; +import org.netbeans.api.visual.widget.ImageWidget; +import org.netbeans.api.visual.widget.LayerWidget; + +import sun.awt.image.ToolkitImage; + +/** + * Classe qui g\xE9n\xE8re les l\xE9gendes de chacun des graphes + * + * + * @author Adrien Hadoux + * + */ + +public class WidgetLegendeManager { + + + static List<ImageWidget> listeWidgets=null; + + //gap vertical entre chaque widget legendes + final static int Vgap=10; + //gap horizontal entre chaque widget legendes + final static int Hgap=10; + + final static int widthDefault=100; + final static int heightDefault=30; + + + public static void createWidgetLegendeGraphe(GraphScene scene,LayerWidget visu,EGGraphe graphe, Rectangle areaGraphe) { + + + listeWidgets=new ArrayList<ImageWidget>(); + + //-- cr\xE9ation, affichage et ajout du listener du graphe pour chacune des widgets suivantes --// + + for(int i=0; i<graphe.getModel().getCourbes().length;i++){ + + final EGCourbe courbe=graphe.getModel().getCourbes()[i]; + final int cpt=i; + + + + //--creation d un nouveau widget image --// + final ImageWidget legendeWidget=new ImageWidget (scene){ + public void notifyStateChanged(ObjectState previousState, + ObjectState newState) { + LookFeel lookFeel = getScene().getLookFeel(); + // setBorder(lookFeel.getBorder(newState)); + // setForeground(lookFeel.getForeground(newState)); + + setBorder(lookFeel.getBorder(newState)); + // setBorder(newState.isSelected() ? + // (DEFAULT_SELECTED_BORDER) : + // (newState.isHovered() ? RESIZE_BORDER + // : DEFAULT_BORDER)); + //repaint(); + + } + + //-- redessinne la l\xE9gende + protected void paintWidget() { + + // recuperation du rectangle contour + Rectangle rec = getClientArea(); + Graphics2D g=getGraphics(); + + g.translate(rec.x, rec.y); + + + //dimension du cadre de la l\xE9gende // + int widthCadre=rec.width; + int heightCadre=rec.height; + + //cas initial: dessin vide + if(widthCadre==0) + widthCadre=widthDefault; + if(heightCadre==0) + heightCadre=heightDefault; + + g.setColor(Color.GRAY); + g.drawRect(rec.x, rec.y,widthCadre - 1, heightCadre - 1); + + //-- dessin du titre et des lignes --// + g.setFont(new Font("Serif",Font.PLAIN,rec.height/2)); + g.drawString(courbe.getTitle(),rec.x + Hgap/2 , (int)(rec.y + rec.height/2)); + //FIXME Comment je peux obtenir les icones et les lignes et les dimensionner? + } + + }; +legendeWidget.setPreferredSize(new Dimension(widthDefault,heightDefault)); + + //-- ajouter le listener EGGraphe pour ecouter et \xE9ettre a jour els l\xE9gendes --// + graphe.getModel().addModelListener(new EGGrapheModelListener() { + + public void structureChanged() { + legendeWidget.repaint(); + + } + + public void courbeContentChanged(EGObject _c, boolean restore) { + legendeWidget.repaint(); + + } + + public void courbeAspectChanged(EGObject _c, boolean _visibil) { + legendeWidget.repaint(); + // TODO Auto-generated method stub + + } + + public void axeContentChanged(EGAxe _c) { + legendeWidget.repaint(); + + } + + public void axeAspectChanged(EGAxe _c) { + legendeWidget.repaint(); + + } + }); + + //-- ajouter les actions liees au widget --// + legendeWidget.getActions().addAction( ActionFactory.createResizeAction()); + legendeWidget.getActions().addAction(ActionFactory.createMoveAction()); + legendeWidget.getActions().addAction(scene.createWidgetHoverAction()); + + + + //-- ajout de la widget dans la liste --// + listeWidgets.add(legendeWidget); + + //-- positionner le widget dans la scene par rapport au graphe et a ses autres widgets --// + //FIXME am\xE9eliorer en discuter avec Fred + legendeWidget.setPreferredLocation (new Point ((widthDefault+Hgap)*cpt, Vgap)); + + scene.addChild(legendeWidget); + + }//fin for + + //-- positionner le widget dans la scene par rapport au graphe et a ses autres widgets --// + //TODO am\xE9eliorer en discuter avec Fred + //visu.addChildren(listeWidgets); + + } + + +} Property changes on: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/courbe/WidgetLegendeManager.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java 2008-08-04 12:24:25 UTC (rev 3705) +++ branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java 2008-08-04 20:47:14 UTC (rev 3706) @@ -9,132 +9,395 @@ import java.awt.Color; import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.util.Collections; +import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; +import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.WindowConstants; +import javax.swing.text.Utilities; -import com.memoire.bu.BuBorderLayout; -import com.memoire.bu.BuPanel; -import com.memoire.bu.BuScrollPane; - +import org.fudaa.ctulu.CtuluResource; +import org.fudaa.ctulu.gui.CtuluLibSwing; +import org.fudaa.ctulu.image.CtuluLibImage; import org.fudaa.ctulu.iterator.LogarithmicNumberIterator; - +import org.fudaa.ebli.courbe.EGAxe; import org.fudaa.ebli.courbe.EGAxeHorizontal; import org.fudaa.ebli.courbe.EGAxeVertical; import org.fudaa.ebli.courbe.EGCourbeChild; import org.fudaa.ebli.courbe.EGCourbeModelDefault; import org.fudaa.ebli.courbe.EGFillePanel; import org.fudaa.ebli.courbe.EGGraphe; +import org.fudaa.ebli.courbe.EGGrapheModelListener; import org.fudaa.ebli.courbe.EGGrapheTreeModel; import org.fudaa.ebli.courbe.EGGroup; +import org.fudaa.ebli.courbe.EGObject; +import org.fudaa.ebli.courbe.WidgetLegendeManager; import org.fudaa.ebli.trace.TraceLigne; import org.fudaa.ebli.trace.TraceLigneModel; +import org.netbeans.api.visual.action.ActionFactory; +import org.netbeans.api.visual.graph.GraphScene; +import org.netbeans.api.visual.laf.LookFeel; +import org.netbeans.api.visual.model.ObjectState; +import org.netbeans.api.visual.widget.ImageWidget; +import org.netbeans.api.visual.widget.LabelWidget; +import org.netbeans.api.visual.widget.LayerWidget; +import org.netbeans.api.visual.widget.Widget; +import org.netbeans.api.visual.widget.general.IconNodeWidget; +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuPanel; +import com.memoire.bu.BuScrollPane; + /** * @author Fred Deniger * @version $Id: TestGraphe2.java,v 1.8 2007-01-17 10:45:17 deniger Exp $ */ public final class TestGraphe2 { - private TestGraphe2() { - super(); - } + private TestGraphe2() { + super(); + } - /** - * @param _args non utilise - */ - public static void main(final String[] _args) { - final EGGrapheTreeModel grapheModel = new EGGrapheTreeModel(); - final EGGraphe g = new EGGraphe(grapheModel); - final EGAxeHorizontal x = new EGAxeHorizontal(false); - x.setTitre("temps"); - x.setUnite("sec"); - x.setBounds(0.0001, 1000000); - x.setAxisIterator(new LogarithmicNumberIterator()); - x.setGraduations(true); - g.setXAxe(x); - EGGroup gr = new EGGroup(); - gr.setTitle("gr 1"); - EGCourbeModelDefault m = new EGCourbeModelDefault(new double[] { 0.0001, 3, 4, 1000000 }, new double[] { 10000, 4, - 5, 3 }); - EGCourbeChild c = new EGCourbeChild(gr); - m.setTitle("toto bleue"); - c.setModel(m); - c.setAspectContour(Color.cyan); + /** + * @param _args + * non utilise + */ + public static void main(final String[] _args) { + final EGGrapheTreeModel grapheModel = new EGGrapheTreeModel(); + final EGGraphe g = new EGGraphe(grapheModel); + final EGAxeHorizontal x = new EGAxeHorizontal(false); + x.setTitre("temps"); + x.setUnite("sec"); + x.setBounds(0.0001, 1000000); + x.setAxisIterator(new LogarithmicNumberIterator()); + x.setGraduations(true); + g.setXAxe(x); + EGGroup gr = new EGGroup(); + gr.setTitle("gr 1"); + EGCourbeModelDefault m = new EGCourbeModelDefault(new double[] { + 0.0001, 3, 4, 1000000 }, new double[] { 10000, 4, 5, 3 }); + EGCourbeChild c = new EGCourbeChild(gr); + m.setTitle("toto bleue"); + c.setModel(m); + c.setAspectContour(Color.cyan); - gr.addEGComponent(c); + gr.addEGComponent(c); - m = new EGCourbeModelDefault(new double[] { 0.0002, 5, 7, 900000 }, new double[] { 0.001, 1, 3, 4 }); - c = new EGCourbeChild(gr); - c.setAspectContour(Color.RED); - m.setTitle("toto rouge"); - c.setModel(m); + m = new EGCourbeModelDefault(new double[] { 0.0002, 5, 7, 900000 }, + new double[] { 0.001, 1, 3, 4 }); + c = new EGCourbeChild(gr); + c.setAspectContour(Color.RED); + m.setTitle("toto rouge"); + c.setModel(m); - gr.addEGComponent(c); + gr.addEGComponent(c); - EGAxeVertical y = new EGAxeVertical(); - y.setGraduations(true); - y.setGrille(new TraceLigneModel(TraceLigne.LISSE, 1, Color.LIGHT_GRAY)); - y.setDroite(true); - y.setAxisIterator(new LogarithmicNumberIterator()); - y.setBounds(0.0001, 10000); - y.setLineColor(Color.blue); - y.setTitre("essai 2"); - gr.setAxeY(y); - grapheModel.add(gr); - gr = new EGGroup(); - gr.setTitle("gr 2"); - m = new EGCourbeModelDefault(new double[] { 1, 8, 9, 10 }, new double[] { 10, 4, 2, 24 }); - c = new EGCourbeChild(gr); - c.setAspectContour(Color.yellow); - m.setTitle("toto jaune"); - c.setModel(m); - gr.addEGComponent(c); - y = new EGAxeVertical(); - y.setGraduations(true); - y.setBounds(0, 55); - y.setTitre("essai 1"); - gr.setAxeY(y); - gr.addEGComponent(c); - m = new EGCourbeModelDefault(new double[] { 1, 3, 4, 5 }, new double[] { 14, 54, 25, 43 }); - c = new EGCourbeChild(gr); - m.setTitle("toto vert"); - c.setAspectContour(Color.green); - c.setModel(m); - gr.addEGComponent(c); - grapheModel.add(gr); - final JFrame f = new JFrame(); - f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); - final BuPanel p = new BuPanel(); - p.setLayout(new BuBorderLayout()); + EGAxeVertical y = new EGAxeVertical(); + y.setGraduations(true); + y.setGrille(new TraceLigneModel(TraceLigne.LISSE, 1, Color.LIGHT_GRAY)); + y.setDroite(true); + y.setAxisIterator(new LogarithmicNumberIterator()); + y.setBounds(0.0001, 10000); + y.setLineColor(Color.blue); + y.setTitre("essai 2"); + gr.setAxeY(y); + grapheModel.add(gr); + gr = new EGGroup(); + gr.setTitle("gr 2"); + m = new EGCourbeModelDefault(new double[] { 1, 8, 9, 10 }, + new double[] { 10, 4, 2, 24 }); + c = new EGCourbeChild(gr); + c.setAspectContour(Color.yellow); + m.setTitle("toto jaune"); + c.setModel(m); + gr.addEGComponent(c); + y = new EGAxeVertical(); + y.setGraduations(true); + y.setBounds(0, 55); + y.setTitre("essai 1"); + gr.setAxeY(y); + gr.addEGComponent(c); + m = new EGCourbeModelDefault(new double[] { 1, 3, 4, 5 }, new double[] { + 14, 54, 25, 43 }); + c = new EGCourbeChild(gr); + m.setTitle("toto vert"); + c.setAspectContour(Color.green); + c.setModel(m); + gr.addEGComponent(c); + grapheModel.add(gr); + final JFrame f = new JFrame(); + f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + f.setSize(new Dimension(1024,768)); + final BuPanel p = new BuPanel(); + p.setLayout(new BuBorderLayout()); - g.setPreferredSize(new Dimension(200, 300)); - g.setSize(g.getPreferredSize()); - final JTree t = new JTree(grapheModel); - t.setSelectionModel(grapheModel.getSelectionModel()); - t.setRootVisible(false); - p.add(new BuScrollPane(t), BuBorderLayout.EAST); - p.doLayout(); - f.setContentPane(p); - final EGFillePanel pn = new EGFillePanel(g); + g.setPreferredSize(new Dimension(200, 300)); + g.setSize(g.getPreferredSize()); + final JTree t = new JTree(grapheModel); + t.setSelectionModel(grapheModel.getSelectionModel()); + t.setRootVisible(false); + p.add(new BuScrollPane(t), BuBorderLayout.EAST); + p.doLayout(); + f.setContentPane(p); + final EGFillePanel pn = new EGFillePanel(g); + final GraphScene scene = new GraphScene() { + LayerWidget visu; - p.add(pn, BuBorderLayout.CENTER); - final JMenu menu = new JMenu(); - menu.setName("essai"); - menu.setText("essai"); - pn.fillSpecificMenu(menu); - final JMenuBar b = new JMenuBar(); - b.add(menu); - f.setJMenuBar(b); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + { + visu = new LayerWidget(this); + addChild(visu); + } - f.pack(); - f.show(); - g.computeMarges(); - g.fullRepaint(); + @Override + protected Widget attachNodeWidget(Object arg0) { + final EGGraphe courbe = (EGGraphe) arg0; + final Widget graphe = new Widget(this) { + public void notifyStateChanged(ObjectState previousState, + ObjectState newState) { + LookFeel lookFeel = getScene().getLookFeel(); + // setBorder(lookFeel.getBorder(newState)); + // setForeground(lookFeel.getForeground(newState)); + setBorder(lookFeel.getBorder(newState)); + // setBorder(newState.isSelected() ? + // (DEFAULT_SELECTED_BORDER) : + // (newState.isHovered() ? RESIZE_BORDER + // : DEFAULT_BORDER)); - } + } + + @Override + protected void paintWidget() { + Rectangle rec = getClientArea(); + + // BufferedImage image = courbe.produceImage( + // rec.width - 1, rec.height - 1, + // Collections.EMPTY_MAP); + getGraphics().translate(rec.x, rec.y); + courbe.setSize(rec.width - 1, + rec.height - 1); + courbe.computeMarges(getGraphics()); + courbe.dessine(getGraphics(), rec.width - 1, + rec.height - 1, false ); + } + // } + }; + courbe.getModel().addModelListener(new EGGrapheModelListener() { + + public void structureChanged() { + repaint(); + + } + + public void courbeContentChanged(EGObject _c, boolean restore) { + repaint(); + + } + + public void courbeAspectChanged(EGObject _c, boolean _visibil) { + graphe.paint(); + paint(); + // TODO Auto-generated method stub + + } + + public void axeContentChanged(EGAxe _c) { + repaint(); + + } + + public void axeAspectChanged(EGAxe _c) { + repaint(); + + } + }); + graphe.setPreferredSize(new Dimension(100, 100)); + visu.addChild(graphe); + + +// //creation d un label widget +// LabelWidget labelWidget=new LabelWidget(this, "test") { +// public void notifyStateChanged(ObjectState previousState, +// ObjectState newState) { +// LookFeel lookFeel = getScene().getLookFeel(); +// // setBorder(lookFeel.getBorder(newState)); +// // setForeground(lookFeel.getForeground(newState)); +// +// setBorder(lookFeel.getBorder(newState)); +// // recuperation du rectangle contour +// Rectangle rec = getClientArea(); +// //setFont(new Font("Times New Roman", Font.PLAIN,rec.width )); +// repaint(); +// +// // setBorder(newState.isSelected() ? +// // (DEFAULT_SELECTED_BORDER) : +// // (newState.isHovered() ? RESIZE_BORDER +// // : DEFAULT_BORDER)); +// +// } +// +// +// +// +// +// +// +// }; +// +// +// //marche pas il faut un container jscrollpane +// //graphe.getActions().addAction(ActionFactory.createCenteredZoomAction (500)); +// +// +// labelWidget.getActions().addAction(ActionFactory.createResizeAction()); +// labelWidget.getActions().addAction(ActionFactory.createMoveAction()); +// labelWidget.getActions().addAction(this.createWidgetHoverAction()); +// //zoom de la scene en maintenant ctrl + molette +// labelWidget.getActions().addAction(ActionFactory.createZoomAction()); +// +// +// // +// labelWidget.getActions().addAction(ActionFactory.createPanAction()); +// +// //-- ajout du labelWidget dans le visuel --// +// visu.addChild(labelWidget); +// +// +// //creation d un image widget + ImageWidget imageWidget=new ImageWidget (this,CtuluResource.CTULU.getImage("crystal_oui")){ + public void notifyStateChanged(ObjectState previousState, + ObjectState newState) { + LookFeel lookFeel = getScene().getLookFeel(); + // setBorder(lookFeel.getBorder(newState)); + // setForeground(lookFeel.getForeground(newState)); + + setBorder(lookFeel.getBorder(newState)); + // setBorder(newState.isSelected() ? + // (DEFAULT_SELECTED_BORDER) : + // (newState.isHovered() ? RESIZE_BORDER + // : DEFAULT_BORDER)); + repaint(); + + } + + //-- redessinne la l\xE9gende + protected void paintWidget() { + + // recuperation du rectangle contour + Rectangle rec = getClientArea(); + Graphics2D g=getGraphics(); + + g.translate(rec.x, rec.y); + + + //dimension du cadre de la l\xE9gende // + int widthCadre=rec.width; + int heightCadre=rec.height; + + //cas initial: dessin vide + if(widthCadre==0) + widthCadre=10; + if(heightCadre==0) + heightCadre=10; + + + g.fillRect(rec.x, rec.y,widthCadre - 1, heightCadre - 1); + //courbe.setSize(rec.width - 1,rec.height - 1); + //courbe.computeMarges(getGraphics()); + //courbe.dessine(getGraphics(), rec.width - 1,rec.height - 1, false ); + + + } + + }; + + + WidgetLegendeManager.createWidgetLegendeGraphe(this, visu, courbe, graphe.getClientArea()); + + + //ajout des resize et drag + imageWidget.getActions().addAction( ActionFactory.createResizeAction()); + imageWidget.getActions().addAction(ActionFactory.createMoveAction()); + imageWidget.getActions().addAction(this.createWidgetHoverAction()); + //ajout du label widget + visu.addChild (imageWidget); + + + //test avec iconwidget + IconNodeWidget iconNode = new IconNodeWidget (this); + iconNode.setImage (CtuluResource.CTULU.getImage("crystal_non")); + iconNode.setLabel ("MyIconNode"); + this.addChild (iconNode); + this.getActions ().addAction (ActionFactory.createCenteredZoomAction (1.1)); + this.getActions ().addAction (ActionFactory.createPanAction ()); + // assign HoverAction - the actual hovered widget is held by the scene + iconNode.getActions ().addAction (this.createWidgetHoverAction ()); + // MoveAction has to be after the hover action + // otherwise MoveAction will always consume the event and HoverAction will never be invoked + iconNode.getActions ().addAction (ActionFactory.createMoveAction ()); + + + // proprietes graphes + graphe.getActions().addAction( + ActionFactory.createResizeAction()); + graphe.getActions().addAction(ActionFactory.createMoveAction()); + graphe.getActions().addAction(this.createWidgetHoverAction()); + return graphe; + } + + @Override + protected Widget attachEdgeWidget(Object arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + protected void attachEdgeTargetAnchor(Object arg0, Object arg1, + Object arg2) { + // TODO Auto-generated method stub + + } + + @Override + protected void attachEdgeSourceAnchor(Object arg0, Object arg1, + Object arg2) { + // TODO Auto-generated method stub + + } + }; + + + + + + + // debut + // scene.addNode(g); + scene.addNode(g); + // fin + p.add(new JScrollPane(scene.createView()), BuBorderLayout.CENTER); + final JMenu menu = new JMenu(); + menu.setName("essai"); + menu.setText("essai"); + pn.fillSpecificMenu(menu); + final JMenuBar b = new JMenuBar(); + b.add(menu); + f.setJMenuBar(b); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + //f.pack(); + f.show(); + scene.setFont(CtuluLibSwing.getMiniFont()); + g.computeMarges(scene.getGraphics()); + g.fullRepaint(); + + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |