protected void setRenderContextEdgeTransformers(
      RenderContext<CallGraphNode, CallGraphLink> renderContext) {
    setEdgeLabeler(renderContext);
    renderContext.setEdgeDrawPaintTransformer(
        MapTransformer.<CallGraphLink, Paint>getInstance(edgePaints));
    renderContext.setEdgeStrokeTransformer(
        new Transformer<CallGraphLink, Stroke>() {
          protected final Stroke THIN = new BasicStroke(1);
          protected final Stroke THICK = new BasicStroke(2);

          public Stroke transform(CallGraphLink e) {
            Paint c = edgePaints.get(e);
            if (c == Color.LIGHT_GRAY) return THIN;
            else return THICK;
          }
        });
  }
  public SetupGraphPane() {

    // create a simple graph for the demo
    graph = new SparseMultigraph<Number, Number>();

    this.layout = new StaticLayout<Number, Number>(graph, new Dimension(600, 600));

    vv = new VisualizationViewer<Number, Number>(layout);
    vv.setBackground(Color.white);

    vv.getRenderContext()
        .setVertexLabelTransformer(
            MapTransformer.<Number, String>getInstance(
                LazyMap.<Number, String>decorate(
                    new HashMap<Number, String>(), new ToStringLabeller<Number>())));

    vv.getRenderContext()
        .setEdgeLabelTransformer(
            MapTransformer.<Number, String>getInstance(
                LazyMap.<Number, String>decorate(
                    new HashMap<Number, String>(), new ToStringLabeller<Number>())));

    vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer());

    final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv);
    add(panel);
    Factory<Number> vertexFactory = new VertexFactory();
    Factory<Number> edgeFactory = new EdgeFactory();

    final EditingModalGraphMouse<Number, Number> graphMouse =
        new EditingModalGraphMouse<Number, Number>(
            vv.getRenderContext(), vertexFactory, edgeFactory);

    // the EditingGraphMouse will pass mouse event coordinates to the
    // vertexLocations function to set the locations of the vertices as
    // they are created
    //        graphMouse.setVertexLocations(vertexLocations);
    vv.setGraphMouse(graphMouse);
    vv.addKeyListener(graphMouse.getModeKeyListener());

    graphMouse.setMode(ModalGraphMouse.Mode.EDITING);

    final ScalingControl scaler = new CrossoverScalingControl();
    JButton plus = new JButton("+");
    plus.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            scaler.scale(vv, 1.1f, vv.getCenter());
          }
        });
    JButton minus = new JButton("-");
    minus.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            scaler.scale(vv, 1 / 1.1f, vv.getCenter());
          }
        });

    //        JButton help = new JButton("Help");
    //        help.addActionListener(new ActionListener() {
    //
    //            public void actionPerformed(ActionEvent e) {
    //                JOptionPane.showMessageDialog(vv, instructions);
    //            }});

    AnnotationControls<Number, Number> annotationControls =
        new AnnotationControls<Number, Number>(graphMouse.getAnnotatingPlugin());
    JPanel controls = new JPanel();
    controls.add(plus);
    controls.add(minus);
    JComboBox modeBox = graphMouse.getModeComboBox();
    controls.add(modeBox);
    controls.add(annotationControls.getAnnotationsToolBar());
    // controls.add(help);
    add(controls, BorderLayout.SOUTH);
  }
  public GraphEditorDemo() {

    // create a simple graph for the demo
    graph = new SparseMultigraph<Sommet, Number>();

    Transformer<Sommet, Paint> vertexPaint =
        new Transformer<Sommet, Paint>() {
          private final Color vert = Color.GREEN;
          private final Color bleu = Color.BLUE;
          private final Color rouge = Color.RED;

          public Paint transform(Sommet s) {
            if (s.isColoriee()) {
              return rouge;
            } else {
              if (s.proprietaire == 0) {

                return vert;
              } else {
                return bleu;
              }
            }
          }
        };

    this.layout = new StaticLayout<Sommet, Number>(graph, new Dimension(600, 600));

    vv = new VisualizationViewer<Sommet, Number>(layout);
    vv.setBackground(Color.white);

    vv.getRenderContext()
        .setVertexLabelTransformer(
            MapTransformer.<Sommet, String>getInstance(
                LazyMap.<Sommet, String>decorate(
                    new HashMap<Sommet, String>(), new ToStringLabeller<Sommet>())));

    vv.getRenderContext()
        .setEdgeLabelTransformer(
            MapTransformer.<Number, String>getInstance(
                LazyMap.<Number, String>decorate(
                    new HashMap<Number, String>(), new ToStringLabeller<Number>())));

    vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer());

    vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);

    Container content = getContentPane();
    final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv);
    content.add(panel);
    Factory<Sommet> vertexFactory = new VertexFactory();
    Factory<Number> edgeFactory = new EdgeFactory();

    final EditingModalGraphMouse<Sommet, Number> graphMouse =
        new EditingModalGraphMouse<Sommet, Number>(
            vv.getRenderContext(), vertexFactory, edgeFactory);

    // the EditingGraphMouse will pass mouse event coordinates to the
    // vertexLocations function to set the locations of the vertices as
    // they are created
    //        graphMouse.setVertexLocations(vertexLocations);
    vv.setGraphMouse(graphMouse);
    vv.addKeyListener(graphMouse.getModeKeyListener());

    graphMouse.setMode(ModalGraphMouse.Mode.CREATION);

    final ScalingControl scaler = new CrossoverScalingControl();

    JButton plus = new JButton("+");
    plus.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            scaler.scale(vv, 1.1f, vv.getCenter());
          }
        });
    JButton minus = new JButton("-");
    minus.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            scaler.scale(vv, 1 / 1.1f, vv.getCenter());
          }
        });

    JToggleButton jtb = new JToggleButton("Joueur 1");
    jtb.addItemListener(
        new ItemListener() {
          public void itemStateChanged(ItemEvent ev) {
            if (ev.getStateChange() == ItemEvent.SELECTED) {
              joueurcourant = 1;

            } else if (ev.getStateChange() == ItemEvent.DESELECTED) {
              joueurcourant = 0;
            }
          }
        });

    JToggleButton jtf = new JToggleButton("Final");
    jtf.addItemListener(
        new ItemListener() {
          public void itemStateChanged(ItemEvent ev) {
            if (ev.getStateChange() == ItemEvent.SELECTED) {
              etatfinal = true;

            } else if (ev.getStateChange() == ItemEvent.DESELECTED) {
              etatfinal = false;
            }
          }
        });

    JButton att = new JButton("Attracteur Accessibilité");
    minus.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            ArrayList<Sommet> vertices = (ArrayList<Sommet>) graph.getVertices();
            ArrayList<Sommet> finaux = new ArrayList<Sommet>();
            for (Sommet s : vertices) {
              if (s.isFinal) finaux.add(s);
            }
            colorierAttracteur(finaux, graph.getVertexCount());
          }
        });

    AnnotationControls<Sommet, Number> annotationControls =
        new AnnotationControls<Sommet, Number>(graphMouse.getAnnotatingPlugin());
    JPanel controls = new JPanel();
    controls.add(plus);
    controls.add(minus);
    JComboBox modeBox = graphMouse.getModeComboBox();
    controls.add(modeBox);
    controls.add(jtb);
    controls.add(jtf);
    controls.add(att);
    // controls.add(annotationControls.getAnnotationsToolBar());
    content.add(controls, BorderLayout.SOUTH);
  }