You can subscribe to this list here.
| 2008 | Jan | Feb | Mar | Apr | May | Jun (46) | Jul (37) | Aug (154) | Sep (140) | Oct (132) | Nov (104) | Dec (67) | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009 | Jan (113) | Feb (73) | Mar (102) | Apr (106) | May (114) | Jun (67) | Jul (116) | Aug (48) | Sep (108) | Oct (296) | Nov (56) | Dec (53) | 
| 2010 | Jan (95) | Feb (31) | Mar (40) | Apr (12) | May (10) | Jun (27) | Jul (19) | Aug (81) | Sep (48) | Oct (45) | Nov (40) | Dec (7) | 
| 2011 | Jan (16) | Feb (32) | Mar (55) | Apr (38) | May (24) | Jun (37) | Jul (12) | Aug (16) | Sep (97) | Oct (90) | Nov (101) | Dec (89) | 
| 2012 | Jan (18) | Feb (2) | Mar (54) | Apr (69) | May (97) | Jun (131) | Jul (70) | Aug (48) | Sep (48) | Oct (119) | Nov (194) | Dec (60) | 
| 2013 | Jan (73) | Feb (35) | Mar (42) | Apr (28) | May (7) | Jun (17) | Jul (27) | Aug (10) | Sep (38) | Oct (12) | Nov (4) | Dec (16) | 
| 2014 | Jan (33) | Feb (37) | Mar (19) | Apr (3) | May (47) | Jun (26) | Jul (22) | Aug | Sep (10) | Oct (30) | Nov (24) | Dec (19) | 
| 2015 | Jan (13) | Feb (16) | Mar (36) | Apr (19) | May (5) | Jun (5) | Jul (3) | Aug (11) | Sep (22) | Oct (7) | Nov (14) | Dec | 
| 2016 | Jan | Feb (26) | Mar (13) | Apr (61) | May | Jun | Jul (4) | Aug | Sep | Oct (27) | Nov (14) | Dec (21) | 
| 2017 | Jan (30) | Feb (4) | Mar (3) | Apr (5) | May (69) | Jun (29) | Jul (1) | Aug | Sep | Oct | Nov | Dec | 
| 
      
      
      From: <bma...@us...> - 2008-06-27 14:41:22
      
     | 
| Revision: 3660
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3660&view=rev
Author:   bmarchan
Date:     2008-06-27 07:41:22 -0700 (Fri, 27 Jun 2008)
Log Message:
-----------
Bug#31 : Erreur d'affichage de colonne sur le tableau des valeurs.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java	2008-06-24 14:43:19 UTC (rev 3659)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java	2008-06-27 14:41:22 UTC (rev 3660)
@@ -203,7 +203,7 @@
         return EbliLib.getS("Ferm\xE9/Ouvert");
       }
       final int r = _column - (fermeOuvert_ ? 4 : 3);
-      return ligne_.getAttribute(r).getLongName();
+      return att_[r].getLongName();
     }
 
     public int getRowCount() {
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java	2008-06-24 14:43:19 UTC (rev 3659)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java	2008-06-27 14:41:22 UTC (rev 3660)
@@ -198,7 +198,7 @@
       default:
       }
       final int r = _column - 3;
-      return ligne_.getAttribute(r).getLongName();
+      return att_[r].getLongName();
     }
 
     public int getRowCount() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-24 14:44:54
      
     | 
| Revision: 3659
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3659&view=rev
Author:   bmarchan
Date:     2008-06-24 07:43:19 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
L'?\195?\169tat de visibilit?\195?\169 des groupes de calques d?\195?\169pend de ses sous calques.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java	2008-06-24 14:41:54 UTC (rev 3658)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java	2008-06-24 14:43:19 UTC (rev 3659)
@@ -268,8 +268,16 @@
   }
   
   /**
-   * Met les sous calques en mode visible/invisible.
+   * On force le mode visible dependant des sous calques, car les calques sont des components. 
+   * Les components fils ne sont affich\xE9s que si les components parents sont visibles.
    */
+  public boolean isVisible() {
+    return getTousCalques().length==1 ? super.isVisible():isAllChildrenUnvisible() ? false:true;
+  }
+  
+  /**
+   * Met les sous calques en mode visible/invisible.<br>
+   */
   public void setVisible(boolean _b) {
     super.setVisible(_b);
     
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-24 14:42:02
      
     | 
| Revision: 3658
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3658&view=rev
Author:   bmarchan
Date:     2008-06-24 07:41:54 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
Suppression du d?\195?\169calage lors de l'op?\195?\169ration "dupliquer".
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java	2008-06-24 13:23:15 UTC (rev 3657)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java	2008-06-24 14:41:54 UTC (rev 3658)
@@ -279,7 +279,7 @@
 
     GrSegment pdec=new GrSegment(new GrPoint(0,5,0),new GrPoint(5,0,0));
     pdec.autoApplique(getVersReel());
-    if (!getModelePoly().copyGlobal(selection_, pdec.getVx(), pdec.getVy(), _cmd)) return false;
+    if (!getModelePoly().copyGlobal(selection_, 0/*pdec.getVx()*/, 0/*pdec.getVy()*/, _cmd)) return false;
     
     // Changement de selection.
     int[] isels=new int[selection_.getNbSelectedIndex()];
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java	2008-06-24 13:23:15 UTC (rev 3657)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java	2008-06-24 14:41:54 UTC (rev 3658)
@@ -191,7 +191,7 @@
 
     GrSegment pdec=new GrSegment(new GrPoint(0,5,0),new GrPoint(5,0,0));
     pdec.autoApplique(getVersReel());
-    if (!getMultiPointModel().copyGlobal(selection_, pdec.getVx(), pdec.getVy(), _cmd)) return false;
+    if (!getMultiPointModel().copyGlobal(selection_, 0/*pdec.getVx()*/, 0/*pdec.getVy()*/, _cmd)) return false;
     
     // Changement de selection.
     int[] isels=new int[selection_.getNbSelectedIndex()];
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java	2008-06-24 13:23:15 UTC (rev 3657)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java	2008-06-24 14:41:54 UTC (rev 3658)
@@ -274,7 +274,7 @@
 
     GrSegment pdec=new GrSegment(new GrPoint(0,5,0),new GrPoint(5,0,0));
     pdec.autoApplique(getVersReel());
-    if (!((ZModelePointEditable)modele_).copyGlobal(selection_, pdec.getVx(), pdec.getVy(), _cmd)) return false;
+    if (!((ZModelePointEditable)modele_).copyGlobal(selection_, 0/*pdec.getVx()*/, 0/*pdec.getVy()*/, _cmd)) return false;
     
     // Changement de selection.
     int[] isels=new int[selection_.getNbSelectedIndex()];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-24 13:23:18
      
     | 
| Revision: 3657
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3657&view=rev
Author:   bmarchan
Date:     2008-06-24 06:23:15 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
Gestion modifi?\195?\169e de la visibilit?\195?\169 des calques dans l'arbre.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalque.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java	2008-06-24 13:20:43 UTC (rev 3656)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java	2008-06-24 13:23:15 UTC (rev 3657)
@@ -1,700 +1,715 @@
-/**
- * @creation 1998-09-02
- * @modification $Date: 2007-05-04 13:49:43 $
- * @license GNU General Public License 2
- * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
- * @mail de...@fu...
- */
-package org.fudaa.ebli.calque;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Insets;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseEvent;
-import java.util.EventObject;
-import java.util.Observable;
-import java.util.Observer;
-
-import javax.swing.*;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.InternalFrameEvent;
-import javax.swing.event.InternalFrameListener;
-import javax.swing.tree.TreeCellEditor;
-import javax.swing.tree.TreeCellRenderer;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreePath;
-
-import com.memoire.bu.BuBorderLayout;
-import com.memoire.bu.BuBorders;
-import com.memoire.bu.BuCheckBox;
-import com.memoire.bu.BuDynamicMenu;
-import com.memoire.bu.BuLib;
-import com.memoire.bu.BuLightBorder;
-import com.memoire.bu.BuMenu;
-import com.memoire.bu.BuTextField;
-import com.memoire.bu.BuVerticalLayout;
-
-import org.fudaa.ctulu.CtuluLib;
-import org.fudaa.ctulu.CtuluLibString;
-import org.fudaa.ctulu.CtuluResource;
-import org.fudaa.ctulu.gui.CtuluLibSwing;
-import org.fudaa.ctulu.gui.CtuluPopupMenu;
-
-import org.fudaa.ebli.commun.EbliLib;
-import org.fudaa.ebli.commun.EbliPopupListener;
-import org.fudaa.ebli.ressource.EbliResource;
-
-class BArbreNormalMenu extends BuMenu {
-
-  /**
-   * @param _arbre l'arbre de calques
-   */
-  BArbreNormalMenu(final BArbreCalqueModel _arbre) {
-    super(EbliResource.EBLI.getString("Calques"), "CALQUES");
-    addMenuItem(EbliResource.EBLI.getString("Visible"), "VISIBLE_OUI", null, true, 0, _arbre);
-    addMenuItem(EbliResource.EBLI.getString("Cach\xE9"), "VISIBLE_NON", null, true, 0, _arbre);
-    addSeparator();
-    addMenuItem(EbliResource.EBLI.getString("Att\xE9nu\xE9"), "ATTENUE_OUI", null, true, 0, _arbre);
-    addMenuItem(EbliResource.EBLI.getString("Normal"), "ATTENUE_NON", null, true, 0, _arbre);
-    addSeparator();
-    addMenuItem(EbliResource.EBLI.getString("Rapide"), "RAPIDE_OUI", null, true);
-    addMenuItem(EbliResource.EBLI.getString("Normal"), "RAPIDE_NON", null, true, 0, _arbre);
-    addSeparator();
-    addMenuItem(EbliResource.EBLI.getString("Gel\xE9"), "GELE_OUI", null, true, 0, _arbre);
-    addMenuItem(EbliResource.EBLI.getString("Actif"), "GELE_NON", null, true, 0, _arbre);
-    addSeparator();
-    addMenuItem(EbliResource.EBLI.getString("En premier"), "PREMIER", EbliResource.EBLI.getIcon("enpremier"), true, 0,
-        _arbre);
-    addMenuItem(CtuluLib.getS("Monter"), "MONTER", CtuluResource.CTULU.getIcon("monter"), true, 0, _arbre);
-    addMenuItem(CtuluLib.getS("Descendre"), "DESCENDRE", CtuluResource.CTULU.getIcon("descendre"), true, 0, _arbre);
-    addMenuItem(EbliResource.EBLI.getString("En dernier"), "DERNIER", EbliResource.EBLI.getIcon("endernier"), true, 0,
-        _arbre);
-    addSeparator();
-    addMenuItem(EbliResource.EBLI.getString("D\xE9truire"), "DETRUIRE", CtuluResource.CTULU.getIcon("detruire"), true, 0,
-        _arbre);
-  }
-}
-
-class ZBArbreNormalMenu extends BuDynamicMenu {
-
-  BArbreCalqueModel arbre_;
-
-  boolean noLayer_;
-
-  /**
-   * Constructeur.
-   * 
-   * @param _arbre l'arbre de calques
-   */
-  ZBArbreNormalMenu(final BArbreCalqueModel _arbre) {
-    super(EbliResource.EBLI.getString("calques s\xE9lectionn\xE9s"), "LAYER_STATE");
-    arbre_ = _arbre;
-  }
-
-  /**
-   * *
-   */
-  protected void build() {
-    final BCalque c = arbre_.getSelectedCalque();
-    if ((c == null) && (!noLayer_)) {
-      noLayer_ = true;
-      removeAll();
-      addMenuItem(EbliLib.getS("Pas de calques s\xE9lectionn\xE9s"), "NO_LAYER", false);
-    }
-    if ((noLayer_ || (getMenuComponentCount() == 0)) && (c != null)) {
-      removeAll();
-      noLayer_ = false;
-      arbre_.fillMenu(this);
-    }
-  }
-
-  /**
-   * *
-   */
-  protected boolean isActive() {
-    return true;
-  }
-}
-
-/**
- * Un arbre de calques. Composant graphique de representation de la hierarchie des calques sous forme d'arbre.
- * 
- * @version $Id: BArbreCalque.java,v 1.35 2007-05-04 13:49:43 deniger Exp $
- * @author Guillaume Desnoix
- */
-
-public class BArbreCalque extends JTree implements InternalFrameListener, Observer {
-
-  class ArbreCellEditor extends AbstractCellEditor implements TreeCellEditor {
-
-    ArbreCell1 editor_;
-
-    BCalque cqEdite_;
-
-    // la largeur par defaut pour la case a cocher 'visible'
-    int cbWidth_;
-
-    // la hauteur par defaut pour la case a cocher 'visible'
-    int cbHeight_;
-
-    ArbreCellEditor() {
-      editor_ = new ArbreCell1(true);
-      editor_.cbVisible_.addActionListener(new ActionListener() {
-
-        public void actionPerformed(final ActionEvent _e) {
-          if (cqEdite_ != null) {
-            cqEdite_.setVisible(editor_.cbVisible_.isSelected());
-            fireEditingStopped();
-          }
-
-        }
-      });
-      editor_.r1_.addKeyListener(new KeyListener() {
-
-        public void keyPressed(final KeyEvent _e) {}
-
-        public void keyReleased(final KeyEvent _e) {
-          if (_e.getKeyCode() == KeyEvent.VK_ENTER && editor_.r1_.getText() != null
-              && editor_.r1_.getText().trim().length() > 0) {
-            cqEdite_.setTitle(editor_.r1_.getText());
-            fireEditingStopped();
-          }
-        }
-
-        public void keyTyped(final KeyEvent _e) {
-
-        }
-      });
-      editor_.r1_.addFocusListener(new FocusListener() {
-
-        public void focusGained(final FocusEvent _e) {
-          editor_.r1_.setBackground(UIManager.getColor("TextField.background"));
-          editor_.r1_.setForeground(Color.BLACK);
-        }
-
-        public void focusLost(final FocusEvent _e) {}
-      });
-
-      // on recupere les dimensions par defaut
-      final Dimension d = editor_.cbVisible_.getPreferredSize();
-      cbHeight_ = d.height;
-      cbWidth_ = d.width;
-
-    }
-
-    public boolean isCellEditable(final EventObject _anEvent) {
-      // le calque est mis a null s'il n'est pas edite
-      if (_anEvent instanceof MouseEvent) {
-        final MouseEvent e = (MouseEvent) _anEvent;
-        if (e.isConsumed()) {
-          return false;
-        }
-        if (e.getButton() != MouseEvent.BUTTON1) {
-          return false;
-        }
-        final TreePath p = getClosestPathForLocation(e.getX(), e.getY());
-        if (p != null) {
-          final BCalque cq = (BCalque) p.getLastPathComponent();
-          // on recupere le rectangle englobant de la cellule
-          final Rectangle r = getRowBounds(getRowForPath(p));
-          // calcul de l'enveloppe de la case a cocher
-//          // la case a cocher est a droite ....
-//          final int maxX = r.x + r.width;
-//          final int minX = maxX - cbWidth_;
-//          final int minY = r.y;
-//          final int maxY = minY + cbHeight_;
-//          if (e.getX() >= minX && e.getX() <= maxX && e.getY() >= minY && e.getY() <= maxY) {
-//            return true;
-//          }
-//          // pour modifier le nom
-//          else if (e.getClickCount() == 2 && (e.getX() > r.x + cq.getIconWidth()) && (e.getX() < minX)
-//              && cq.isTitleModifiable()) {
-//            return true;
-//          }
-          // la case a cocher est a gauche, pour plus de facilit\xE9 d'acc\xE8s ....
-          final int maxX = r.x + cbWidth_;
-          final int minX = r.x;
-          final int minY = r.y+4;
-          final int maxY = minY + cbHeight_;
-          if (e.getX() >= minX && e.getX() <= maxX && e.getY() >= minY && e.getY() <= maxY) {
-            return true;
-          }
-          // pour modifier le nom
-          else if (e.getClickCount() == 2 && (e.getX() > r.x +cbWidth_+ cq.getIconWidth()) && (e.getX() < r.x+r.width)
-              && cq.isTitleModifiable()) {
-            return true;
-          }
-
-        }
-      }
-      return false;
-    }
-
-    public boolean shouldSelectCell(final EventObject _anEvent) {
-      return false;
-    }
-
-    public Object getCellEditorValue() {
-      return null;
-    }
-
-    protected void fireEditingStopped() {
-      getArbreModel().getRootCalque().requestFocusInWindow();
-      super.fireEditingStopped();
-    }
-
-    public Component getTreeCellEditorComponent(final JTree _tree, final Object _value, final boolean _isSelected,
-        final boolean _expanded, final boolean _leaf, final int _row) {
-      cqEdite_ = (BCalque) _value;
-      editor_.getTreeCellRendererComponent(_tree, _value, _isSelected, _expanded, _leaf, _row, true);
-      editor_.r1_.setEditable(cqEdite_.isTitleModifiable());
-      return editor_;
-    }
-
-  }
-
-  public static BArbreNormalMenu buildNormalMenu(final BArbreCalqueModel _m) {
-    return new BArbreNormalMenu(_m);
-  }
-
-  public static ZBArbreNormalMenu buildZNormalMenu(final BArbreCalqueModel _m) {
-    return new ZBArbreNormalMenu(_m);
-  }
-
-  /**
-   * construit un arbre editable sans modele.
-   */
-  public BArbreCalque() {
-    this(true);
-  }
-
-  public BArbreCalque(final BArbreCalqueModel _m) {
-    this(_m, true);
-  }
-
-  public BArbreCalque(final BArbreCalqueModel _m, final boolean _editable) {
-    this(_editable);
-    setModel(_m);
-  }
-
-  /**
-   * @param _editable true si l'arbre doit etre editable.
-   */
-  public BArbreCalque(final boolean _editable) {
-    setShowsRootHandles(true);
-    setFocusable(false);
-    setBorder(new EmptyBorder(5, 5, 5, 5));
-
-    final ArbreCell1 c = new ArbreCell1(_editable);
-    setCellRenderer(c);
-    if (_editable) {
-      setEditable(_editable);
-      setCellEditor(new ArbreCellEditor());
-    }
-
-    c.doLayout();
-    setRowHeight(35);
-    addMouseListener(new PopupListener());
-    setExpandsSelectedPaths(true);
-  }
-
-  class PopupListener extends EbliPopupListener {
-    public void popup(final Component _c, final int _xe, final int _ye) {
-      int xe = _xe;
-      int ye = _ye;
-      final int selRow = getRowForLocation(xe, ye);
-      if (selRow != -1) {
-        final TreePath selPath = getPathForLocation(xe, ye);
-        final Object selObject = selPath.getLastPathComponent();
-        final JPopupMenu menu = buildPopupMenu((BCalque) selObject);
-        xe = 20 - menu.getSize().width;
-        ye -= 5;
-        menu.show(_c, xe, ye);
-      }
-    }
-  }
-
-  public BArbreNormalMenu buildNormalMenu() {
-    return new BArbreNormalMenu(getArbreModel());
-  }
-
-  public JPopupMenu buildPopupMenu(final BCalque _calque) {
-    final CtuluPopupMenu r = new CtuluPopupMenu();
-    getArbreModel().fillPopupMenu(r);
-    return r;
-  }
-
-  public ZBArbreNormalMenu buildZNormalMenu() {
-    return new ZBArbreNormalMenu(getArbreModel());
-  }
-
-  public BArbreCalqueModel getArbreModel() {
-    return (BArbreCalqueModel) getModel();
-  }
-
-  /**
-   * Retourne le calque racine de l'arbre.
-   */
-  public BCalque getCalque() {
-    if (getArbreModel() == null) {
-      return null;
-    }
-    return getArbreModel().getRootCalque();
-  }
-
-  // private void setSelectionCalque(BCalque cq, TreePath tp) {
-  // TreeModel model= getModel();
-  // Object n= tp.getLastPathComponent();
-  // TreePath tpo= tp;
-  // int count= model.getChildCount(n);
-  // for (int i= 0; i < count; i++) {
-  // Object o= model.getChild(n, i);
-  // tpo= tp.pathByAddingChild(o);
-  // if (o == cq) {
-  // expandPath(tpo);
-  // setSelectionPath(tpo);
-  // return;
-  // } else
-  // setSelectionCalque(cq, tpo);
-  // }
-  // }
-  /**
-   * Renvoie le calque selectionne.
-   */
-  public BCalque[] getSelection() {
-    return getArbreModel().getSelection();
-  }
-
-  /**
-   * Permet de mettre a jour le model de l'arbre.
-   */
-  public void internalFrameActivated(final InternalFrameEvent _e) {
-    final JInternalFrame f = _e.getInternalFrame();
-    if (f instanceof EbliFilleCalquesInterface) {
-      final BArbreCalqueModel c = ((EbliFilleCalquesInterface) f).getArbreCalqueModel();
-      if (c != getModel()) {
-        setModel(c);
-      }
-    }
-  }
-
-  public void internalFrameClosed(final InternalFrameEvent _e) {
-    final JInternalFrame f = _e.getInternalFrame();
-    if (f instanceof EbliFilleCalquesInterface) {
-      final BArbreCalqueModel c = ((EbliFilleCalquesInterface) f).getArbreCalqueModel();
-      if (c == getModel()) {
-        // maj
-        getSelectionModel().clearSelection();
-        setModel(null);
-      }
-    }
-  }
-
-  public void internalFrameClosing(final InternalFrameEvent _e) {}
-
-  public void internalFrameDeactivated(final InternalFrameEvent _e) {}
-
-  public void internalFrameDeiconified(final InternalFrameEvent _e) {}
-
-  public void internalFrameIconified(final InternalFrameEvent _e) {}
-
-  public void internalFrameOpened(final InternalFrameEvent _e) {}
-
-  /**
-   * Permet de rafraichir l'arbre. Appelle la methode refresh du model.
-   */
-  public void refresh() {
-    if (getArbreModel() != null) {
-      getArbreModel().refresh();
-    }
-  }
-
-  /**
-   * Met a jour le modele et la selection.
-   * 
-   * @param _m le nouveau modele
-   */
-  public final void setModel(final BArbreCalqueModel _m) {
-    if (getModel()!=null)
-      ((BArbreCalqueModel)getModel()).getObservable().deleteObserver(this);
-    if (_m!=null)
-      _m.getObservable().addObserver(this);
-    
-    // pour eviter d'initialiser l'ancien model de selection
-    super.setSelectionModel(null);
-    super.setModel(_m);
-    if (_m != null) {
-      final TreePath p = _m.getTreeSelectionModel().getSelectionPath();
-      super.setSelectionModel(_m.getTreeSelectionModel());
-      if (p != null) {
-        final TreePath par = p.getParentPath();
-        if (par != null) {
-          expandPath(par);
-        }
-      }
-    }
-  }
-
-  /**
-   * appelle setModel(BarbreCalqueModel).
-   */
-  public void setModel(final TreeModel _m) {
-    if (_m instanceof BArbreCalqueModel) {
-      setModel((BArbreCalqueModel) _m);
-    }
-  }
-
-  /**
-   * Selectionne un claque dans l'arbre.
-   */
-  public void setSelectionCalque(final BCalque _cq) {
-    getArbreModel().setSelectionCalque(_cq);
-  }
-
-  public void updateUI() {
-    super.updateUI();
-    setRowHeight(35);
-  }
-
-  /**
-   * Representation d'un calque dans un cellule de l'arbre. Elle associe au nom du calque son icone, et la dessine
-   * devant. Elle dessine aussi l'etat du calque (attenue, rapide, gele) sous la forme d'une chaine de caracteres.
-   * Utilisee pour tous les lnk
-   */
-
-  public static class ArbreCell1 extends JPanel implements TreeCellRenderer {
-
-    private final Color treeForeground_ = UIManager.getColor("Tree.foreground");
-
-    private final Color treeBackground_ = UIManager.getColor("Tree.background");
-
-    private final Color treeSelectionForeground_ = UIManager.getColor("Tree.selectionForeground");
-
-    private final Color treeSelectionBakground_ = UIManager.getColor("Tree.selectionBackground");
-
-    JCheckBox cbVisible_;
-    JLabel lbSelect_;
-
-    final JTextField r1_;
-
-    final JLabel r2_;
-
-    final JLabel r3_;
-
-    /**
-     * @param _editable true si editable
-     */
-    public ArbreCell1(final boolean _editable) {
-      r1_ = new BuTextField();
-      r1_.setEditable(false);
-      r1_.setBorder(null);
-      r2_ = new JLabel(" ");
-      r2_.setPreferredSize(new Dimension(80, 12));
-      r3_ = new JLabel(" ");
-      r3_.setPreferredSize(new Dimension(25,25));
-      lbSelect_=new JLabel(EbliResource.EBLI.getIcon("selection.gif"));
-      lbSelect_.setOpaque(false);
-      JPanel pnLeft=new JPanel();
-      pnLeft.setLayout(new BuVerticalLayout(1,true,true));
-      pnLeft.setOpaque(false);
-      
-      final JPanel r4 = new JPanel(new BuBorderLayout(0, 1, true, true));
-      r4.add(r1_, BuBorderLayout.CENTER);
-      r4.add(r2_, BuBorderLayout.SOUTH);
-      r4.setOpaque(false);
-      final BuBorderLayout lay = new BuBorderLayout(2, 1, true, true);
-      lay.setYAlign(0);
-      setLayout(lay);
-      add(r3_, BuBorderLayout.CENTER);
-      add(r4, BuBorderLayout.EAST);
-      
-      if (_editable) {
-        cbVisible_ = new BuCheckBox();
-        // pour ne pas tout dessiner
-        cbVisible_.setOpaque(false);
-        cbVisible_.setToolTipText(EbliLib.getS("Visible"));
-        cbVisible_.setVerticalAlignment(SwingConstants.TOP);
-        cbVisible_.setHorizontalAlignment(SwingConstants.RIGHT);
-        cbVisible_.setMargin(new Insets(0, 0, 0, 0));
-        pnLeft.add(cbVisible_);
-      }
-      pnLeft.add(lbSelect_);
-      add(pnLeft, BuBorderLayout.WEST);
-      setOpaque(true);
-    }
-
-    final BuLightBorder light_ = new BuLightBorder(BuLightBorder.RAISED, 3);
-
-    public Component getTreeCellRendererComponent(final JTree _tree, final Object _value, final boolean _selected,
-        final boolean _expanded, final boolean _leaf, final int _row, final boolean _hasFocus) {
-      r1_.setText(_value.toString());
-      final Font ft = _tree.getFont();
-      r1_.setFont(ft);
-      r2_.setFont(BuLib.deriveFont(ft, -2));
-      String calqueInfo = null;
-      final StringBuffer s = new StringBuffer();
-      if (_value instanceof BCalque) {
-        final BCalque calque = (BCalque) _value;
-        r3_.setIcon(calque);
-        // Si on souhaite pouvoir retailler l'icon du calque.
-//        r3_.setIcon(CtuluLibImage.resize(calque,r3_.getPreferredSize().width,r3_.getPreferredSize().height));
-        
-        calqueInfo = (String) calque.getClientProperty("CalqueInfo");
-        if (calqueInfo != null) {
-          s.append(calqueInfo);
-        }
-        if (calque instanceof BCalqueAffichage) {
-
-          final BCalqueAffichage ca = (BCalqueAffichage) calque;
-          if (ca.isRapide()) {
-            if (s.length() > 0) {
-              s.append(CtuluLibString.ESPACE);
-            }
-            s.append(EbliResource.EBLI.getString("rapide"));
-          }
-
-          if (ca.isAttenue()) {
-            if (s.length() > 0) {
-              s.append(CtuluLibString.ESPACE);
-            }
-            s.append(EbliResource.EBLI.getString("att\xE9nu\xE9"));
-          }
-        }
-        if (calque instanceof BCalqueInteraction) {
-          final BCalqueInteraction ci = (BCalqueInteraction) calque;
-          if (ci.isGele()) {
-            if (s.length() > 0) {
-              s.append(CtuluLibString.ESPACE);
-            }
-            s.append(EbliResource.EBLI.getString("gel\xE9"));
-          }
-        }
-        if (calque instanceof ZCalqueAffichageDonneesAbstract) {
-          final ZCalqueAffichageDonneesAbstract cq = (ZCalqueAffichageDonneesAbstract) calque;
-          lbSelect_.setVisible(!cq.isSelectionEmpty());
-        }
-        else {
-          lbSelect_.setVisible(false);
-        }
-        if (!calque.isVisible()) {
-          if (s.length() > 0) {
-            s.append(CtuluLibString.ESPACE);
-          }
-          s.append(EbliResource.EBLI.getString("cach\xE9"));
-          // si l'edition est validee on met a jour l'etat
-          if (cbVisible_ != null) {
-            cbVisible_.setSelected(false);
-          }
-        }
-        // si l'edition est validee on met a jour l'etat
-        else if (cbVisible_ != null) {
-          cbVisible_.setSelected(true);
-        }
-      }
-      r2_.setText(s.toString());
-      if (_selected) {
-        final Color bg = treeSelectionBakground_;
-        final Color fg = treeSelectionForeground_;
-        setBackground(bg);
-        setForeground(fg);
-        r1_.setBackground(bg);
-        r1_.setForeground(fg);
-        r2_.setBackground(bg);
-        r2_.setForeground(fg);
-        r3_.setBackground(bg);
-        r3_.setForeground(fg);
-        setBorder(light_);
-      } else {
-        final Color bg = treeBackground_;
-        final Color fg = treeForeground_;
-        setBackground(bg);
-        setForeground(fg);
-        r1_.setBackground(bg);
-        r1_.setForeground(fg);
-        r2_.setBackground(bg);
-        r2_.setForeground(fg);
-        r3_.setBackground(bg);
-        r3_.setForeground(fg);
-        setBorder(BuBorders.EMPTY3333);
-      }
-      final StringBuffer tooltip = new StringBuffer(60);
-      tooltip.append("<html><body style=\"margin:1px;\">");
-      final JComponent cq = (JComponent) _value;
-      final String link = CtuluLibSwing.getHelpUrl(cq);
-      if (link == null) {
-        tooltip.append(_value.toString());
-      } else {
-        tooltip.append("<a href=\"").append(link).append("\">").append(_value.toString()).append("</a>");
-      }
-
-      final String text = r2_.getText();
-      if (text.length() > 0) {
-        tooltip.append("<br>").append(text);
-      }
-
-      final Object val = cq.getClientProperty(Action.SHORT_DESCRIPTION);
-      if (val != null) {
-        tooltip.append("<br>").append(val.toString());
-      }
-      tooltip.append("</body></html>");
-      final String str = tooltip.toString();
-      ArbreCell1.this.setToolTipText(str);
-      r1_.setToolTipText(str);
-      r2_.setToolTipText(str);
-      r3_.setToolTipText(str);
-      if (cbVisible_ != null) {
-        cbVisible_.setToolTipText(str);
-      }
-      return this;
-    }
-  }
-
-  /**
-   * Representation d'un calque dans une cellule de l'arbre. Elle est toute simple: nom du calque dans un label.
-   * Utilisee dans les looks Windows et Motif
-   */
-
-  public static class ArbreCellLabel extends JLabel implements TreeCellRenderer {
-    Color selectedBack_ = UIManager.getColor("Tree.selectionBackground");
-    Color selectedFor_ = UIManager.getColor("Tree.selectionForeground");
-
-    public ArbreCellLabel() {
-      this.setOpaque(true);
-      setPreferredSize(new Dimension(120, 25));
-    }
-
-    public Component getTreeCellRendererComponent(final JTree _tree, final Object _value, final boolean _selected,
-        final boolean _expanded, final boolean _leaf, final int _row, final boolean _hasFocus) {
-      this.setFont(_tree.getFont());
-      setIcon((Icon) _value);
-      setText(_value.toString());
-      if (_selected) {
-        setBackground(selectedBack_);
-        setForeground(selectedFor_);
-      } else {
-        setBackground(UIManager.getColor("Tree.background"));
-        setForeground(UIManager.getColor("Tree.foreground"));
-      }
-      return this;
-    }
-  }
-
-  /* (non-Javadoc)
-   * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
-   */
-  public void update(Observable o, Object arg) {
-    repaint();
-  }
-}
-/**
- * Modele de donnees pour l'arbre de calques.
- */
+/**
+ * @creation 1998-09-02
+ * @modification $Date: 2007-05-04 13:49:43 $
+ * @license GNU General Public License 2
+ * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail de...@fu...
+ */
+package org.fudaa.ebli.calque;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Insets;
+import java.awt.Rectangle;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.util.EventObject;
+import java.util.Observable;
+import java.util.Observer;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.InternalFrameEvent;
+import javax.swing.event.InternalFrameListener;
+import javax.swing.tree.TreeCellEditor;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+
+import com.memoire.bu.BuBorderLayout;
+import com.memoire.bu.BuBorders;
+import com.memoire.bu.BuCheckBox3States;
+import com.memoire.bu.BuDynamicMenu;
+import com.memoire.bu.BuLib;
+import com.memoire.bu.BuLightBorder;
+import com.memoire.bu.BuMenu;
+import com.memoire.bu.BuTextField;
+import com.memoire.bu.BuVerticalLayout;
+
+import org.fudaa.ctulu.CtuluLib;
+import org.fudaa.ctulu.CtuluLibString;
+import org.fudaa.ctulu.CtuluResource;
+import org.fudaa.ctulu.gui.CtuluLibSwing;
+import org.fudaa.ctulu.gui.CtuluPopupMenu;
+
+import org.fudaa.ebli.commun.EbliLib;
+import org.fudaa.ebli.commun.EbliPopupListener;
+import org.fudaa.ebli.ressource.EbliResource;
+
+class BArbreNormalMenu extends BuMenu {
+
+  /**
+   * @param _arbre l'arbre de calques
+   */
+  BArbreNormalMenu(final BArbreCalqueModel _arbre) {
+    super(EbliResource.EBLI.getString("Calques"), "CALQUES");
+    addMenuItem(EbliResource.EBLI.getString("Visible"), "VISIBLE_OUI", null, true, 0, _arbre);
+    addMenuItem(EbliResource.EBLI.getString("Cach\xE9"), "VISIBLE_NON", null, true, 0, _arbre);
+    addSeparator();
+    addMenuItem(EbliResource.EBLI.getString("Att\xE9nu\xE9"), "ATTENUE_OUI", null, true, 0, _arbre);
+    addMenuItem(EbliResource.EBLI.getString("Normal"), "ATTENUE_NON", null, true, 0, _arbre);
+    addSeparator();
+    addMenuItem(EbliResource.EBLI.getString("Rapide"), "RAPIDE_OUI", null, true);
+    addMenuItem(EbliResource.EBLI.getString("Normal"), "RAPIDE_NON", null, true, 0, _arbre);
+    addSeparator();
+    addMenuItem(EbliResource.EBLI.getString("Gel\xE9"), "GELE_OUI", null, true, 0, _arbre);
+    addMenuItem(EbliResource.EBLI.getString("Actif"), "GELE_NON", null, true, 0, _arbre);
+    addSeparator();
+    addMenuItem(EbliResource.EBLI.getString("En premier"), "PREMIER", EbliResource.EBLI.getIcon("enpremier"), true, 0,
+        _arbre);
+    addMenuItem(CtuluLib.getS("Monter"), "MONTER", CtuluResource.CTULU.getIcon("monter"), true, 0, _arbre);
+    addMenuItem(CtuluLib.getS("Descendre"), "DESCENDRE", CtuluResource.CTULU.getIcon("descendre"), true, 0, _arbre);
+    addMenuItem(EbliResource.EBLI.getString("En dernier"), "DERNIER", EbliResource.EBLI.getIcon("endernier"), true, 0,
+        _arbre);
+    addSeparator();
+    addMenuItem(EbliResource.EBLI.getString("D\xE9truire"), "DETRUIRE", CtuluResource.CTULU.getIcon("detruire"), true, 0,
+        _arbre);
+  }
+}
+
+class ZBArbreNormalMenu extends BuDynamicMenu {
+
+  BArbreCalqueModel arbre_;
+
+  boolean noLayer_;
+
+  /**
+   * Constructeur.
+   * 
+   * @param _arbre l'arbre de calques
+   */
+  ZBArbreNormalMenu(final BArbreCalqueModel _arbre) {
+    super(EbliResource.EBLI.getString("calques s\xE9lectionn\xE9s"), "LAYER_STATE");
+    arbre_ = _arbre;
+  }
+
+  /**
+   * *
+   */
+  protected void build() {
+    final BCalque c = arbre_.getSelectedCalque();
+    if ((c == null) && (!noLayer_)) {
+      noLayer_ = true;
+      removeAll();
+      addMenuItem(EbliLib.getS("Pas de calques s\xE9lectionn\xE9s"), "NO_LAYER", false);
+    }
+    if ((noLayer_ || (getMenuComponentCount() == 0)) && (c != null)) {
+      removeAll();
+      noLayer_ = false;
+      arbre_.fillMenu(this);
+    }
+  }
+
+  /**
+   * *
+   */
+  protected boolean isActive() {
+    return true;
+  }
+}
+
+/**
+ * Un arbre de calques. Composant graphique de representation de la hierarchie des calques sous forme d'arbre.
+ * 
+ * @version $Id: BArbreCalque.java,v 1.35 2007-05-04 13:49:43 deniger Exp $
+ * @author Guillaume Desnoix
+ */
+
+public class BArbreCalque extends JTree implements InternalFrameListener, Observer {
+
+  class ArbreCellEditor extends AbstractCellEditor implements TreeCellEditor {
+
+    ArbreCell1 editor_;
+
+    BCalque cqEdite_;
+
+    // la largeur par defaut pour la case a cocher 'visible'
+    int cbWidth_;
+
+    // la hauteur par defaut pour la case a cocher 'visible'
+    int cbHeight_;
+
+    ArbreCellEditor() {
+      editor_ = new ArbreCell1(true);
+      editor_.cbVisible_.addItemListener(new ItemListener() {
+
+        public void itemStateChanged(ItemEvent e) {
+          if (cqEdite_ != null) {;
+            cqEdite_.setVisible(editor_.cbVisible_.isSelected());
+            fireEditingStopped();
+          }
+        }
+      });
+      editor_.r1_.addKeyListener(new KeyListener() {
+
+        public void keyPressed(final KeyEvent _e) {}
+
+        public void keyReleased(final KeyEvent _e) {
+          if (_e.getKeyCode() == KeyEvent.VK_ENTER && editor_.r1_.getText() != null
+              && editor_.r1_.getText().trim().length() > 0) {
+            cqEdite_.setTitle(editor_.r1_.getText());
+            fireEditingStopped();
+          }
+        }
+
+        public void keyTyped(final KeyEvent _e) {
+
+        }
+      });
+      editor_.r1_.addFocusListener(new FocusListener() {
+
+        public void focusGained(final FocusEvent _e) {
+          editor_.r1_.setBackground(UIManager.getColor("TextField.background"));
+          editor_.r1_.setForeground(Color.BLACK);
+        }
+
+        public void focusLost(final FocusEvent _e) {}
+      });
+
+      // on recupere les dimensions par defaut
+      final Dimension d = editor_.cbVisible_.getPreferredSize();
+      cbHeight_ = d.height;
+      cbWidth_ = d.width;
+
+    }
+
+    public boolean isCellEditable(final EventObject _anEvent) {
+      // le calque est mis a null s'il n'est pas edite
+      if (_anEvent instanceof MouseEvent) {
+        final MouseEvent e = (MouseEvent) _anEvent;
+        if (e.isConsumed()) {
+          return false;
+        }
+        if (e.getButton() != MouseEvent.BUTTON1) {
+          return false;
+        }
+        final TreePath p = getClosestPathForLocation(e.getX(), e.getY());
+        if (p != null) {
+          final BCalque cq = (BCalque) p.getLastPathComponent();
+          // on recupere le rectangle englobant de la cellule
+          final Rectangle r = getRowBounds(getRowForPath(p));
+          // calcul de l'enveloppe de la case a cocher
+//          // la case a cocher est a droite ....
+//          final int maxX = r.x + r.width;
+//          final int minX = maxX - cbWidth_;
+//          final int minY = r.y;
+//          final int maxY = minY + cbHeight_;
+//          if (e.getX() >= minX && e.getX() <= maxX && e.getY() >= minY && e.getY() <= maxY) {
+//            return true;
+//          }
+//          // pour modifier le nom
+//          else if (e.getClickCount() == 2 && (e.getX() > r.x + cq.getIconWidth()) && (e.getX() < minX)
+//              && cq.isTitleModifiable()) {
+//            return true;
+//          }
+          // la case a cocher est a gauche, pour plus de facilit\xE9 d'acc\xE8s ....
+          final int maxX = r.x + cbWidth_;
+          final int minX = r.x;
+          final int minY = r.y+4;
+          final int maxY = minY + cbHeight_;
+          if (e.getX() >= minX && e.getX() <= maxX && e.getY() >= minY && e.getY() <= maxY) {
+            return true;
+          }
+          // pour modifier le nom
+          else if (e.getClickCount() == 2 && (e.getX() > r.x +cbWidth_+ cq.getIconWidth()) && (e.getX() < r.x+r.width)
+              && cq.isTitleModifiable()) {
+            return true;
+          }
+
+        }
+      }
+      return false;
+    }
+
+    public boolean shouldSelectCell(final EventObject _anEvent) {
+      return false;
+    }
+
+    public Object getCellEditorValue() {
+      return null;
+    }
+
+    protected void fireEditingStopped() {
+      getArbreModel().getRootCalque().requestFocusInWindow();
+      super.fireEditingStopped();
+    }
+
+    public Component getTreeCellEditorComponent(final JTree _tree, final Object _value, final boolean _isSelected,
+        final boolean _expanded, final boolean _leaf, final int _row) {
+      cqEdite_ = (BCalque) _value;
+      editor_.getTreeCellRendererComponent(_tree, _value, _isSelected, _expanded, _leaf, _row, true);
+      editor_.r1_.setEditable(cqEdite_.isTitleModifiable());
+      return editor_;
+    }
+
+  }
+
+  public static BArbreNormalMenu buildNormalMenu(final BArbreCalqueModel _m) {
+    return new BArbreNormalMenu(_m);
+  }
+
+  public static ZBArbreNormalMenu buildZNormalMenu(final BArbreCalqueModel _m) {
+    return new ZBArbreNormalMenu(_m);
+  }
+
+  /**
+   * construit un arbre editable sans modele.
+   */
+  public BArbreCalque() {
+    this(true);
+  }
+
+  public BArbreCalque(final BArbreCalqueModel _m) {
+    this(_m, true);
+  }
+
+  public BArbreCalque(final BArbreCalqueModel _m, final boolean _editable) {
+    this(_editable);
+    setModel(_m);
+  }
+
+  /**
+   * @param _editable true si l'arbre doit etre editable.
+   */
+  public BArbreCalque(final boolean _editable) {
+    setShowsRootHandles(true);
+    setFocusable(false);
+    setBorder(new EmptyBorder(5, 5, 5, 5));
+
+    final ArbreCell1 c = new ArbreCell1(_editable);
+    setCellRenderer(c);
+    if (_editable) {
+      setEditable(_editable);
+      setCellEditor(new ArbreCellEditor());
+    }
+
+    c.doLayout();
+    setRowHeight(35);
+    addMouseListener(new PopupListener());
+    setExpandsSelectedPaths(true);
+  }
+
+  class PopupListener extends EbliPopupListener {
+    public void popup(final Component _c, final int _xe, final int _ye) {
+      int xe = _xe;
+      int ye = _ye;
+      final int selRow = getRowForLocation(xe, ye);
+      if (selRow != -1) {
+        final TreePath selPath = getPathForLocation(xe, ye);
+        final Object selObject = selPath.getLastPathComponent();
+        final JPopupMenu menu = buildPopupMenu((BCalque) selObject);
+        xe = 20 - menu.getSize().width;
+        ye -= 5;
+        menu.show(_c, xe, ye);
+      }
+    }
+  }
+
+  public BArbreNormalMenu buildNormalMenu() {
+    return new BArbreNormalMenu(getArbreModel());
+  }
+
+  public JPopupMenu buildPopupMenu(final BCalque _calque) {
+    final CtuluPopupMenu r = new CtuluPopupMenu();
+    getArbreModel().fillPopupMenu(r);
+    return r;
+  }
+
+  public ZBArbreNormalMenu buildZNormalMenu() {
+    return new ZBArbreNormalMenu(getArbreModel());
+  }
+
+  public BArbreCalqueModel getArbreModel() {
+    return (BArbreCalqueModel) getModel();
+  }
+
+  /**
+   * Retourne le calque racine de l'arbre.
+   */
+  public BCalque getCalque() {
+    if (getArbreModel() == null) {
+      return null;
+    }
+    return getArbreModel().getRootCalque();
+  }
+
+  // private void setSelectionCalque(BCalque cq, TreePath tp) {
+  // TreeModel model= getModel();
+  // Object n= tp.getLastPathComponent();
+  // TreePath tpo= tp;
+  // int count= model.getChildCount(n);
+  // for (int i= 0; i < count; i++) {
+  // Object o= model.getChild(n, i);
+  // tpo= tp.pathByAddingChild(o);
+  // if (o == cq) {
+  // expandPath(tpo);
+  // setSelectionPath(tpo);
+  // return;
+  // } else
+  // setSelectionCalque(cq, tpo);
+  // }
+  // }
+  /**
+   * Renvoie le calque selectionne.
+   */
+  public BCalque[] getSelection() {
+    return getArbreModel().getSelection();
+  }
+
+  /**
+   * Permet de mettre a jour le model de l'arbre.
+   */
+  public void internalFrameActivated(final InternalFrameEvent _e) {
+    final JInternalFrame f = _e.getInternalFrame();
+    if (f instanceof EbliFilleCalquesInterface) {
+      final BArbreCalqueModel c = ((EbliFilleCalquesInterface) f).getArbreCalqueModel();
+      if (c != getModel()) {
+        setModel(c);
+      }
+    }
+  }
+
+  public void internalFrameClosed(final InternalFrameEvent _e) {
+    final JInternalFrame f = _e.getInternalFrame();
+    if (f instanceof EbliFilleCalquesInterface) {
+      final BArbreCalqueModel c = ((EbliFilleCalquesInterface) f).getArbreCalqueModel();
+      if (c == getModel()) {
+        // maj
+        getSelectionModel().clearSelection();
+        setModel(null);
+      }
+    }
+  }
+
+  public void internalFrameClosing(final InternalFrameEvent _e) {}
+
+  public void internalFrameDeactivated(final InternalFrameEvent _e) {}
+
+  public void internalFrameDeiconified(final InternalFrameEvent _e) {}
+
+  public void internalFrameIconified(final InternalFrameEvent _e) {}
+
+  public void internalFrameOpened(final InternalFrameEvent _e) {}
+
+  /**
+   * Permet de rafraichir l'arbre. Appelle la methode refresh du model.
+   */
+  public void refresh() {
+    if (getArbreModel() != null) {
+      getArbreModel().refresh();
+    }
+  }
+
+  /**
+   * Met a jour le modele et la selection.
+   * 
+   * @param _m le nouveau modele
+   */
+  public final void setModel(final BArbreCalqueModel _m) {
+    if (getModel()!=null)
+      ((BArbreCalqueModel)getModel()).getObservable().deleteObserver(this);
+    if (_m!=null)
+      _m.getObservable().addObserver(this);
+    
+    // pour eviter d'initialiser l'ancien model de selection
+    super.setSelectionModel(null);
+    super.setModel(_m);
+    if (_m != null) {
+      final TreePath p = _m.getTreeSelectionModel().getSelectionPath();
+      super.setSelectionModel(_m.getTreeSelectionModel());
+      if (p != null) {
+        final TreePath par = p.getParentPath();
+        if (par != null) {
+          expandPath(par);
+        }
+      }
+    }
+  }
+
+  /**
+   * appelle setModel(BarbreCalqueModel).
+   */
+  public void setModel(final TreeModel _m) {
+    if (_m instanceof BArbreCalqueModel) {
+      setModel((BArbreCalqueModel) _m);
+    }
+  }
+
+  /**
+   * Selectionne un claque dans l'arbre.
+   */
+  public void setSelectionCalque(final BCalque _cq) {
+    getArbreModel().setSelectionCalque(_cq);
+  }
+
+  public void updateUI() {
+    super.updateUI();
+    setRowHeight(35);
+  }
+
+  /**
+   * Representation d'un calque dans un cellule de l'arbre. Elle associe au nom du calque son icone, et la dessine
+   * devant. Elle dessine aussi l'etat du calque (attenue, rapide, gele) sous la forme d'une chaine de caracteres.
+   * Utilisee pour tous les lnk
+   */
+
+  public static class ArbreCell1 extends JPanel implements TreeCellRenderer {
+    private final Color treeForeground_ = UIManager.getColor("Tree.foreground");
+    private final Color treeBackground_ = UIManager.getColor("Tree.background");
+    private final Color treeSelectionForeground_ = UIManager.getColor("Tree.selectionForeground");
+    private final Color treeSelectionBakground_ = UIManager.getColor("Tree.selectionBackground");
+
+    /** Le calque est visible ou non */
+    BuCheckBox3States cbVisible_;
+    /** Le calque contient ou non des selections. */
+    JLabel lbSelect_;
+    /** Nom du calque */
+    final JTextField r1_;
+    /** Etat du calque - gel\xE9, rapide, etc... */
+    final JLabel r2_;
+    /** Icone du calque */
+    final JLabel r3_;
+    /** Le panneau \xE0 droite */
+    final JPanel pnRight_;
+
+    /**
+     * @param _editable true si editable
+     */
+    public ArbreCell1(final boolean _editable) {
+      r1_ = new BuTextField();
+      r1_.setEditable(false);
+      r1_.setBorder(null);
+      r2_ = new JLabel(" ");
+      r2_.setPreferredSize(new Dimension(80, 12));
+      r3_ = new JLabel(" ");
+      r3_.setPreferredSize(new Dimension(25,25));
+      lbSelect_=new JLabel(EbliResource.EBLI.getIcon("selection.gif"));
+      lbSelect_.setOpaque(false);
+      JPanel pnLeft=new JPanel();
+      pnLeft.setBorder(BorderFactory.createEmptyBorder(0,3,0,0));
+      pnLeft.setLayout(new BuVerticalLayout(1,true,true));
+      pnLeft.setOpaque(false);
+      
+      final JPanel r4 = new JPanel(new BuBorderLayout(2, 1, true, true));
+      r4.add(r1_, BuBorderLayout.CENTER);
+      r4.add(r2_, BuBorderLayout.SOUTH);
+      r4.setOpaque(false);
+      final BuBorderLayout lay = new BuBorderLayout(2, 1, true, true);
+      lay.setYAlign(0);
+      setLayout(lay);
+      pnRight_=new JPanel();
+      pnRight_.setLayout(new BuBorderLayout(2,1,true,true));
+      pnRight_.add(r3_, BuBorderLayout.CENTER);
+      pnRight_.add(r4, BuBorderLayout.EAST);
+      
+      if (_editable) {
+        cbVisible_ = new BuCheckBox3States();
+        cbVisible_.acceptOnly2StatesWhenClicked(true);
+        // pour ne pas tout dessiner
+        cbVisible_.setOpaque(false);
+        cbVisible_.setToolTipText(EbliLib.getS("Visible"));
+        cbVisible_.setVerticalAlignment(SwingConstants.TOP);
+        cbVisible_.setHorizontalAlignment(SwingConstants.RIGHT);
+        cbVisible_.setMargin(new Insets(5, 0, 0, 0));
+        pnLeft.add(cbVisible_);
+      }
+      pnLeft.add(lbSelect_);
+      add(pnLeft, BuBorderLayout.WEST);
+      add(pnRight_,BuBorderLayout.CENTER);
+      setOpaque(true);
+    }
+
+    final BuLightBorder light_ = new BuLightBorder(BuLightBorder.RAISED, 3);
+
+    public Component getTreeCellRendererComponent(final JTree _tree, final Object _value, final boolean _selected,
+        final boolean _expanded, final boolean _leaf, final int _row, final boolean _hasFocus) {
+      r1_.setText(_value.toString());
+      final Font ft = _tree.getFont();
+      r1_.setFont(ft);
+      r2_.setFont(BuLib.deriveFont(ft, -2));
+      String calqueInfo = null;
+      final StringBuffer s = new StringBuffer();
+      if (_value instanceof BCalque) {
+        final BCalque calque = (BCalque) _value;
+        r3_.setIcon(calque);
+        // Si on souhaite pouvoir retailler l'icon du calque.
+//        r3_.setIcon(CtuluLibImage.resize(calque,r3_.getPreferredSize().width,r3_.getPreferredSize().height));
+        
+        calqueInfo = (String) calque.getClientProperty("CalqueInfo");
+        if (calqueInfo != null) {
+          s.append(calqueInfo);
+        }
+        if (calque instanceof BCalqueAffichage) {
+
+          final BCalqueAffichage ca = (BCalqueAffichage) calque;
+          if (ca.isRapide()) {
+            if (s.length() > 0) {
+              s.append(CtuluLibString.ESPACE);
+            }
+            s.append(EbliResource.EBLI.getString("rapide"));
+          }
+
+          if (ca.isAttenue()) {
+            if (s.length() > 0) {
+              s.append(CtuluLibString.ESPACE);
+            }
+            s.append(EbliResource.EBLI.getString("att\xE9nu\xE9"));
+          }
+        }
+        if (calque instanceof BCalqueInteraction) {
+          final BCalqueInteraction ci = (BCalqueInteraction) calque;
+          if (ci.isGele()) {
+            if (s.length() > 0) {
+              s.append(CtuluLibString.ESPACE);
+            }
+            s.append(EbliResource.EBLI.getString("gel\xE9"));
+          }
+        }
+        if (calque instanceof ZCalqueAffichageDonneesAbstract) {
+          final ZCalqueAffichageDonneesAbstract cq = (ZCalqueAffichageDonneesAbstract) calque;
+          lbSelect_.setVisible(!cq.isSelectionEmpty());
+        }
+        else {
+          lbSelect_.setVisible(false);
+        }
+        if (calque instanceof BGroupeCalque && calque.getCalques().length>0) {
+          final BGroupeCalque cq = (BGroupeCalque) calque;
+          if (cq.isAllChildrenVisible()) 
+            cbVisible_.setState(BuCheckBox3States.STATE_SELECTED);
+          else if (cq.isAllChildrenUnvisible())
+            cbVisible_.setState(BuCheckBox3States.STATE_DESELECTED);
+          else
+            cbVisible_.setState(BuCheckBox3States.STATE_MIXED);
+        }
+        else if (!calque.isVisible()) {
+          if (s.length() > 0) {
+            s.append(CtuluLibString.ESPACE);
+          }
+          s.append(EbliResource.EBLI.getString("cach\xE9"));
+          // si l'edition est validee on met a jour l'etat
+          if (cbVisible_ != null) {
+            cbVisible_.setState(BuCheckBox3States.STATE_DESELECTED);
+          }
+        }
+        // si l'edition est validee on met a jour l'etat
+        else if (cbVisible_ != null) {
+          cbVisible_.setState(BuCheckBox3States.STATE_SELECTED);
+        }
+      }
+      r2_.setText(s.toString());
+      setBackground(treeBackground_);
+      setForeground(treeForeground_);
+      if (_selected) {
+        final Color bg = treeSelectionBakground_;
+        final Color fg = treeSelectionForeground_;
+        pnRight_.setBackground(bg);
+        pnRight_.setForeground(fg);
+        r1_.setBackground(bg);
+        r1_.setForeground(fg);
+        r2_.setBackground(bg);
+        r2_.setForeground(fg);
+        r3_.setBackground(bg);
+        r3_.setForeground(fg);
+        pnRight_.setBorder(light_);
+      } else {
+        final Color bg = treeBackground_;
+        final Color fg = treeForeground_;
+        pnRight_.setBackground(bg);
+        pnRight_.setForeground(fg);
+        r1_.setBackground(bg);
+        r1_.setForeground(fg);
+        r2_.setBackground(bg);
+        r2_.setForeground(fg);
+        r3_.setBackground(bg);
+        r3_.setForeground(fg);
+        pnRight_.setBorder(BuBorders.EMPTY3333);
+      }
+      final StringBuffer tooltip = new StringBuffer(60);
+      tooltip.append("<html><body style=\"margin:1px;\">");
+      final JComponent cq = (JComponent) _value;
+      final String link = CtuluLibSwing.getHelpUrl(cq);
+      if (link == null) {
+        tooltip.append(_value.toString());
+      } else {
+        tooltip.append("<a href=\"").append(link).append("\">").append(_value.toString()).append("</a>");
+      }
+
+      final String text = r2_.getText();
+      if (text.length() > 0) {
+        tooltip.append("<br>").append(text);
+      }
+
+      final Object val = cq.getClientProperty(Action.SHORT_DESCRIPTION);
+      if (val != null) {
+        tooltip.append("<br>").append(val.toString());
+      }
+      tooltip.append("</body></html>");
+      final String str = tooltip.toString();
+      ArbreCell1.this.setToolTipText(str);
+      r1_.setToolTipText(str);
+      r2_.setToolTipText(str);
+      r3_.setToolTipText(str);
+      if (cbVisible_ != null) {
+        cbVisible_.setToolTipText(str);
+      }
+      return this;
+    }
+  }
+
+  /**
+   * Representation d'un calque dans une cellule de l'arbre. Elle est toute simple: nom du calque dans un label.
+   * Utilisee dans les looks Windows et Motif
+   */
+
+  public static class ArbreCellLabel extends JLabel implements TreeCellRenderer {
+    Color selectedBack_ = UIManager.getColor("Tree.selectionBackground");
+    Color selectedFor_ = UIManager.getColor("Tree.selectionForeground");
+
+    public ArbreCellLabel() {
+      this.setOpaque(true);
+      setPreferredSize(new Dimension(120, 25));
+    }
+
+    public Component getTreeCellRendererComponent(final JTree _tree, final Object _value, final boolean _selected,
+        final boolean _expanded, final boolean _leaf, final int _row, final boolean _hasFocus) {
+      this.setFont(_tree.getFont());
+      setIcon((Icon) _value);
+      setText(_value.toString());
+      if (_selected) {
+        setBackground(selectedBack_);
+        setForeground(selectedFor_);
+      } else {
+        setBackground(UIManager.getColor("Tree.background"));
+        setForeground(UIManager.getColor("Tree.foreground"));
+      }
+      return this;
+    }
+  }
+
+  /* (non-Javadoc)
+   * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
+   */
+  public void update(Observable o, Object arg) {
+    repaint();
+  }
+}
+/**
+ * Modele de donnees pour l'arbre de calques.
+ */
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalque.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalque.java	2008-06-24 13:20:43 UTC (rev 3656)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalque.java	2008-06-24 13:23:15 UTC (rev 3657)
@@ -1,976 +1,1002 @@
-/*
- * @file         BCalque.java
- * @creation     1998-08-25
- * @modification $Date: 2007-05-04 13:49:42 $
- * @license      GNU General Public License 2
- * @copyright    (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
- * @mail         de...@fu...
- */
-package org.fudaa.ebli.calque;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionListener;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.swing.Icon;
-import javax.swing.JMenuItem;
-import javax.swing.SwingUtilities;
-
-import com.memoire.bu.BuMenuItem;
-import com.memoire.bu.BuResource;
-import com.memoire.bu.BuTextField;
-import com.memoire.fu.Fu;
-import com.memoire.fu.FuLib;
-import com.memoire.fu.FuLog;
-
-import org.fudaa.ctulu.CtuluLib;
-import org.fudaa.ctulu.CtuluLibArray;
-import org.fudaa.ctulu.CtuluLibString;
-import org.fudaa.ctulu.gui.CtuluDialogPanel;
-
-import org.fudaa.ebli.commun.CalqueLayout;
-import org.fudaa.ebli.commun.EbliActionInterface;
-import org.fudaa.ebli.commun.EbliComponentFactory;
-import org.fudaa.ebli.commun.EbliLib;
-import org.fudaa.ebli.commun.EbliUIProperties;
-import org.fudaa.ebli.controle.BConfigurableInterface;
-import org.fudaa.ebli.controle.BConfigurePaletteTargetInterface;
-import org.fudaa.ebli.controle.BSelecteurCheckBox;
-import org.fudaa.ebli.controle.BSelecteurColorChooser;
-import org.fudaa.ebli.controle.BSelecteurReduitFonteNewVersion;
-import org.fudaa.ebli.controle.BSelecteurTargetInterface;
-import org.fudaa.ebli.controle.BSelecteurTextField;
-import org.fudaa.ebli.geometrie.GrBoite;
-import org.fudaa.ebli.geometrie.GrMorphisme;
-import org.fudaa.ebli.geometrie.GrPoint;
-import org.fudaa.ebli.repere.AbstractCalque;
-
-/**
- * Une classe de base pour tous les calques. Elle gere les transformations du repere et l'organisation des calques en
- * une hierarchie arborescente. Un calque peut etre de trois sortes:
- * <UL>
- * <LI>un groupe de calques: structurant, regroupant plusieurs calques ou familles de calques,
- * <LI>un calque d'affichage: calque representant des donnees a l'ecran,
- * <LI>un calque d'interaction: gerant les evenements exterieurs et generalement associe a un calque d'affichage (ex:
- * BCalqueDessin et BCalqueDessinInteraction).
- * </UL>
- * 
- * @version $Id: BCalque.java,v 1.54 2007-05-04 13:49:42 deniger Exp $
- * @author Guillaume Desnoix , Axel von Arnim
- */
-public abstract class BCalque extends AbstractCalque implements Icon, BConfigurePaletteTargetInterface {
-  public static final Comparator createComparator() {
-    return new Comparator() {
-
-      public int compare(final Object _o1, final Object _o2) {
-        if ((_o1 instanceof BCalque) && (_o2 instanceof BCalque)) {
-          int i = ((BCalque) _o1).getTitle().compareTo(((BCalque) _o2).getTitle());
-          if ((i == 0) && (_o1 != _o2)) {
-            i = ((BCalque) _o1).getName().compareTo(((BCalque) _o2).getName());
-            if (i == 0) {
-              return _o1.hashCode() - _o2.hashCode();
-            }
-          }
-          return i;
-        }
-        throw new IllegalArgumentException();
-      }
-    };
-  }
-
-  public static BCalque findCalqueByName(final BCalque[] _cq, final String _name) {
-    if (_cq != null && _name != null) {
-      for (int i = 0; i < _cq.length; i++) {
-        if (_name.equals(_cq[i].getName())) {
-          return _cq[i];
-        }
-      }
-    }
-    return null;
-
-  }
-
-  public static int findCalqueIdxByName(final BCalque[] _cq, final String _name) {
-    if (_cq != null && _name != null) {
-      for (int i = 0; i < _cq.length; i++) {
-        if (_name.equals(_cq[i].getName())) {
-          return i;
-        }
-      }
-    }
-    return -1;
-
-  }
-
-  private boolean destructible_;
-
-  // Informations
-  /**
-   * Chaine affichee dans l'arbre des calques.
-   */
-  private String title_;
-
-  private transient GrMorphisme versEcran_;
-
-  private transient GrMorphisme versReel_;
-
-  EbliActionInterface[] actions_;
-
-  // Proprietes
-  protected boolean rapide_;
-
-  /**
-   * Constructeur. Le constructeur initialise les transformations versEcran et versReel avec la transformation identite.
-   * versEcran transforme les coordonnees reelles en coordonnees ecran et versReel fait l'inverse. versEcran sert a
-   * l'affichage des objets et versReel a la gestion de la souris dans le repere reel.
-   */
-  protected BCalque() {
-    super();
-    // ajustement_ = false;
-    destructible_ = true;
-    versEcran_ = GrMorphisme.identite();
-    versReel_ = GrMorphisme.identite();
-    super.setOpaque(false);
-    setLayout(new CalqueLayout());
-    setRequestFocusEnabled(false);
-    setDoubleBuffered(false);
-  }
-
-  /**
-   * Methode de la classe Container surchargee. Elle est appelee lors de l'ajout d'un nouveau sous-calque. Elle
-   * initialise les transformations versEcran et versReel aux valeurs du calque hote.
-   * 
-   * @param _comp calque a ajouter
-   * @param _constraints contraintes de layout
-   * @param _index indice dans la liste de calques
-   * @see java.awt.Container#add(java.awt.Component)
-   */
-  protected void addImpl(final Component _comp, final Object _constraints, final int _index) {
-    BCalque calque = null;
-    if (_comp instanceof BCalque) {
-      calque = (BCalque) _comp;
-      final int idx = getDirectCalqueIdx(calque);
-      if (idx >= 0) {
-        calque.putClientProperty("oldIndice", new Integer(idx));
-      }
-      calque.setVersEcran(getVersEcran());
-      calque.setVersReel(getVersReel());
-    }
-    super.addImpl(_comp, _constraints, _index);
-    if (calque != null) {
-      calque.putClientProperty("oldIndice", new Integer(getDirectCalqueIdx(calque)));
-    }
-  }
-
-  protected GrBoite getClipEcran(final Graphics _g) {
-    Rectangle clip = _g == null ? null : _g.getClipBounds();
-    if (clip == null) {
-      clip = new Rectangle(0, 0, getWidth(), getHeight());
-    }
-    return new GrBoite(new GrPoint(clip.x, clip.y, 0.), new GrPoint(clip.x + clip.width - 1, clip.y + clip.height - 1,
-        0.));
-  }
-
-  protected Dimension getTargetDimension(final GrMorphisme _versEcran, final GrMorphisme _versReel) {
-    return getTargetDimension(_versEcran, _versReel, null);
-  }
-
-  protected Dimension getTargetDimension(final GrMorphisme _versEcran, final GrMorphisme _versReel, final Dimension _d) {
-    if (_versEcran == null) {
-      return null;
-    }
-    if (getVersEcran().isSame(_versEcran)) {
-      if (Fu.DEBUG && FuLog.isDebug()) {
-        FuLog.debug("ECA: target is same size");
-      }
-      return getSize(_d);
-    }
-    if (Fu.DEBUG && FuLog.isDebug()) {
-      FuLog.debug("ECA: target is not same size");
-    }
-    final GrMorphisme versReel = _versReel;
-    final GrPoint p = new GrPoint();
-    final GrPoint p1 = new GrPoint(getWidth(), getHeight(), 0);
-    p.autoApplique(versReel);
-    p1.autoApplique(versReel);
-    p.autoApplique(_versEcran);
-    p1.autoApplique(_versEcran);
-    final Dimension r = _d == null ? new Dimension() : _d;
-    r.height = (int) Math.abs(p.y_ - p1.y_);
-    r.width = (int) Math.abs(p.x_ - p1.x_);
-    return r;
-  }
-
-  /**
-   * ajouter un listener pour les evts de selection.
-   */
-  public void addSelectionListener(final ZSelectionListener _l) {
-    listenerList.add(ZSelectionListener.class, _l);
-  }
-
-  /**
-   * @param _visitor le visitor
-   * @return true si la visite doit continuer
-   */
-  public final boolean apply(final BCalqueVisitor _visitor) {
-    if (_visitor.visit(this)) {
-      final int nb = getComponentCount();
-      for (int i = 0; i < nb; i++) {
-        if (!((BCalque) getComponent(i)).apply(_visitor)) {
-          return false;
-        }
-      }
-      return true;
-    }
-    return false;
-
-  }
-
-  public JMenuItem createRenamerItem() {
-    return new BuMenuItem(BuResource.BU.getIcon("aucun"), BuResource.BU.getString("renommer")) {
-
-      protected void fireActionPerformed(final ActionEvent _event) {
-        super.fireActionPerformed(_event);
-        final BuTextField ft = new BuTextField(getTitle());
-        ft.setColumns(12);
-        final CtuluDialogPanel pn = new CtuluDialogPanel() {
-
-          public void apply() {
-            BCalque.this.setTitle(ft.getText());
-          }
-
-          public boolean valide() {
-            final String txt = ft.getText();
-            if (txt.length() == 0) {
-              setErrorText(CtuluLib.getS("Le champ est vide") + '!');
-              return false;
-            }
-            return true;
-          }
-        };
-        pn.addLabel(BuResource.BU.getString("renommer"));
-        pn.add(ft);
-        pn.afficheModale(this, BuResource.BU.getString("renommer..."));
-      }
-    };
-
-  }
-
-  public void descendre() {
-    final Container p = getParent();
-    if (p instanceof BCalque) {
-      ((BCalque) p).descendre(this);
-    }
-  }
-
-  /**
-   * Place le calque specifie en tete de la liste des fils.
-   * 
-   * @see #enPremier()
-   */
-  public void descendre(final BCalque _c) {
-    if (_c == null) {
-      return;
-    }
-    final Component[] cqs = getComponents();
-    if (cqs == null) {
-      return;
-    }
-    final int idx = CtuluLibArray.findObjectEgalEgal(cqs, _c);
-    if (idx >= 0 && idx < cqs.length - 1) {
-      add(_c, idx + 1);
-      _c.revalidate();
-    }
-  }
-
-  /**
-   * Detruit ce calque. Equivalent a pere.detruire(this)
-   * 
-   * @see #detruire(BCalque)
-   */
-  public void detruire() {
-    if (!isDestructible()) {
-      return;
-    }
-    final Container p = getParent();
-    if (p instanceof BCalque) {
-      ((BCalque) p).detruire(this);
-    }
-  }
-
-  public BSelecteurTargetInterface getVisibleTitleTarget() {
-    return new BCalqueSelecteurTitleVisibleTarget(this);
-  }
-
-  /**
-   * Detruit le calque specifie de la liste des fils.
-   * 
-   * @see #detruire()
-   */
-  public void detruire(final BCalque _c) {
-    if (_c.isDestructible()) {
-      final BCalque[] cq = _c.getCalques();
-      for (int i = 0; i < cq.length; i++) {
-        _c.detruire(cq[i]);
-      }
-      final BVueCalque p = (BVueCalque) SwingUtilities.getAncestorOfClass(BVueCalque.class, this);
-      if (p != null) {
-        if (_c instanceof MouseListener) {
-          p.removeMouseListener((MouseListener) _c);
-        }
-        if (_c instanceof MouseMotionListener) {
-          p.removeMouseMotionListener((MouseMotionListener) _c);
-        }
-      }
-      // pour pouvoir etre recuperer par l'arbre des calques
-      _c.putClientProperty("oldIndice", new Integer(getDirectCalqueIdx(_c)));
-      remove(_c);
-      revalidate();
-      if (p != null) {
-        p.repaint();
-      }
-    }
-  }
-
-  /**
-   * Place ce calque en fin de la liste des calques fils du pere. Equivalent a pere.enDernier(this)
-   * 
-   * @see #enDernier(BCalque)
-   */
-  public void enDernier() {
-    final Container p = getParent();
-    if (p instanceof BCalque) {
-      ((BCalque) p).enDernier(this);
-    }
-  }
-
-  /**
-   * Place le calque specifie en fin de la liste des fils.
-   * 
-   * @see #enDernier()
-   */
-  public void enDernier(final BCalque _c) {
-    if (_c == null) {
-      return;
-    }
-    add(_c);
-    _c.revalidate();
-  }
-
-  JMenuItem[] spec_;
-
-  protected void buildSpecificMenuItemsForAction(final List _l) {
-
-  }
-
-  public final JMenuItem[] getSpecificMenuItems() {
-    if (spec_ == null) {
-      final List l = new ArrayList();
-      buildSpecificMenuItemsForAction(l);
-      if (!CtuluLibArray.isEmpty(getActions())) {
-        final EbliActionInterface[] act = getActions();
-        for (int i = 0; i < act.length; i++) {
-          if (act[i] == null) {
-            l.add(null);
-          } else
-          {
-            ac...
 
[truncated message content] | 
| 
      
      
      From: <bma...@us...> - 2008-06-24 13:20:38
      
     | 
| Revision: 3656
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3656&view=rev
Author:   bmarchan
Date:     2008-06-24 06:20:43 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
Le composant est totalement modifi?\195?\169 pour ?\195?\170tre visuellement plus parlant.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuCheckBox3States.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuCheckBox3States.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuCheckBox3States.java	2008-06-20 14:53:29 UTC (rev 3655)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuCheckBox3States.java	2008-06-24 13:20:43 UTC (rev 3656)
@@ -1,236 +1,302 @@
-/**
- * @modification $Date: 2006-09-19 14:35:04 $
- * @statut       unstable
- * @file         BuCheckBox3States.java
- * @version      0.43
- * @author       Bertrand Marchand
- * @email        gui...@de...
- * @license      GNU General Public License 2 (GPL2)
- * @copyright    1998-2005 Guillaume Desnoix
- * (c)1998-2001 Bertrand Marchand
- */
-
-package com.memoire.bu;
-
-/**
- * @creation     15/12/98
- * @modification 05/01/99
- * @statut       instable
- */
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.Vector;
-
-import javax.swing.Icon;
-
-/**
- * Un checkbox permettant 3 \xE9tats (activ\xE9, d\xE9sactiv\xE9, mixte). Dans ce dernier
- * cas, le bouton appara\xEEt en gris\xE9
- * @version 0.02, 05/01/99
- * @author Bertrand Marchand
- */
-public class BuCheckBox3States extends BuCheckBox
-{
-  public static final int STATE_MIXED      = 0;                    // On reprend les status Item pour rester compatible avec la m\xE9thode
-  public static final int STATE_SELECTED   = ItemEvent.SELECTED;   // ItemEvent.getStateChanged(). On rajoute un \xE9tat BuCheckBox3States.STATE_MIXED.
-  public static final int STATE_DESELECTED = ItemEvent.DESELECTED;
-
-  private int state_;                      // Etat (SELECTED, DESELECTED, MIXED)
-  private Icon iconStateMixed = null;      // L'icon de status mixte (pourrait par la suite \xEAtre issu de iconDefault).
-  private Icon iconDefault = null;         // L'icon donn\xE9 par le programmeur
-  private Vector itemListenerList = null;  // Les items listener du composant
-  private boolean defaultEvent_;           // Definit si l'\xE9venement ItemEvent provient d'une des classes m\xE8res
-
-
-  /**
-   * Creates an initially deselected checkbox button with no text, no icon.
-   */
-  public BuCheckBox3States () {
-    this(null, null, STATE_DESELECTED);
-  }
-
-  /**
-   * Creates an initially deselected checkbox with an icon.
-   *
-   * @param icon  the Icon image to display
-   */
-  public BuCheckBox3States(Icon icon) {
-    this(null, icon, STATE_DESELECTED);
-  }
-
-  /**
-   * Creates a checkbox with an icon and specifies its state.
-   *
-   * @param icon  the Icon image to display
-   * @param state an int value indicating the initial selection
-   *        state. The possible values are STATE_DESELECTED,
-   *        STATE_SELECTED, STATE_MIXED.
-   */
-  public BuCheckBox3States(Icon icon, int state) {
-    this(null, icon, state);
-  }
-
-  /**
-   * Creates an initially deselected checkbox with text.
-   *
-   * @param text the text of the checkbox.
-   */
-  public BuCheckBox3States (String text) {
-    this(text, null, STATE_DESELECTED);
-  }
-
-  /**
-   * Creates a checkbox with text and specifies its state.
-   *
-   * @param text the text of the checkbox.
-   * @param state an int value indicating the initial selection
-   *        state. The possible values are STATE_DESELECTED,
-   *        STATE_SELECTED, STATE_MIXED.
-   */
-  public BuCheckBox3States (String text, int state) {
-    this(text, null, state);
-  }
-
-  /**
-   * Creates an initially deselected checkbox with
-   * the specified text and icon.
-   *
-   * @param text the text of the checkbox.
-   * @param icon  the Icon image to display
-   */
-  public BuCheckBox3States(String text, Icon icon) {
-    this(text, icon, STATE_DESELECTED);
-  }
-
-  /**
-   * Creates a checkbox with the specified text and icon and specifies its state.
-   *
-   * @param text the text of the checkbox.
-   * @param icon  the Icon image to display
-   * @param state an int value indicating the initial selection
-   *        state. The possible values are STATE_DESELECTED,
-   *        STATE_SELECTED, STATE_MIXED.
-   */
-  public BuCheckBox3States(String text, Icon icon, int state) {
-    setText(text);
-    setIcon(icon);
-    iconDefault = icon;
-    iconStateMixed = new IconStateMixed();
-    itemListenerList = new Vector();
-    defaultEvent_ = true;
-    this.setState(state);
-  }
-
-  /**
-   * Affectation du status (SELECTED, DESELECTED, MIXED)
-   */
-  public void setState(int state) {
-    defaultEvent_ = false;
-    //int vp = state_;
-    state_ = state;
-    switch (state) {
-     case STATE_SELECTED:
-      setIcon(iconDefault);
-      setSelected(true);
-      break;
-     case STATE_DESELECTED:
-      setIcon(iconDefault);
-      setSelected(false);
-      break;
-     case STATE_MIXED:
-      setIcon(iconStateMixed);
-      fireItemStateChanged(new ItemEvent(this,ItemEvent.ITEM_STATE_CHANGED,this,
-                           state));
-      fireStateChanged();
-      break;
-    }
-    defaultEvent_ = true;
-  }
-
-  /**
-   * Retourne le status (SELECTED, DESELECTED, MIXED)
-   */
-  public int getState() {
-    return state_;
-  }
-
-  /**
-   * adds an ItemListener to the checkbox
-   */
-  public void addItemListener(ItemListener l) {
-    itemListenerList.addElement(l);
-  }
-
-  /**
-   * removes an ItemListener from the button
-   */
-  public void removeItemListener(ItemListener l) {
-    itemListenerList.removeElement(l);
-  }
-
-  protected void fireItemStateChanged(ItemEvent event) {
-    // Evenement en provenance des classes m\xE8res => On ne notifie pas les listeners, mais
-    // on remodifie l'\xE9tat du bouton.
-    if (defaultEvent_) {
-      setState((state_+1)%3);
-      return;
-    }
-    ItemEvent evt = new ItemEvent(this,event.getID(),event.getItem(),event.getStateChange());
-    if (itemListenerList != null)
-    for (int i=0; i<itemListenerList.size(); i++) {
-      ((ItemListener) itemListenerList.elementAt(i)).itemStateChanged(evt);
-    }
-  }
-  /**
-   * Doit \xEAtre remplac\xE9 par <I>setState</I>
-   */
-//  public void setSelected(boolean state) {
-//    throw new RuntimeException("BuCheckBox3States : utilisez 'setState' a la place de 'setSelected'");
-//  }
-
-  /**
-   * Doit \xEAtre remplac\xE9 par <I>getState</I>
-   */
-//  public boolean isSelected() {
-//    throw new RuntimeException("BuCheckBox3States : utilisez 'getState' a la place de 'isSelected'");
-//  }
-
-  // Classe de trace de l'icon pour un status STATE_MIXED
-
-  public  static final class IconStateMixed implements Icon {
-
-    public int getIconHeight() {
-      return 13;
-    }
-
-    public int getIconWidth() {
-      return 13;
-    }
-
-    public void paintIcon(Component _c, Graphics _g, int _x, int _y) {
-      int w=getIconWidth();
-      int h=getIconHeight();
-
-      _g.setColor(Color.lightGray);
-      _g.fillRect(_x,_y,w-2,h-1);
-      _g.setColor(Color.gray);
-      _g.drawLine(_x+w-1,_y,_x,_y);
-      _g.drawLine(_x,_y,_x,_y+h-1);
-      _g.setColor(Color.white);
-      _g.drawLine(_x,_y+h-1,_x+w-1,_y+h-1);
-      _g.drawLine(_x+w-1,_y+h-1,_x+w-1,_y);
-
-      _g.setColor(Color.gray);
-      _g.drawLine(_x+3,_y+3,_x+w-5,_y+h-5);
-      _g.drawLine(_x+4,_y+3,_x+w-5,_y+h-6);
-      _g.drawLine(_x+3,_y+4,_x+w-6,_y+h-5);
-      _g.drawLine(_x+3,_y+h-5,_x+w-5,_y+3);
-      _g.drawLine(_x+3,_y+h-6,_x+w-6,_y+3);
-      _g.drawLine(_x+4,_y+h-5,_x+w-5,_y+4);
-    }
-  }
-}
+/*
+ * @creation     23 juin 2008
+ * @modification $Date:$
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package com.memoire.bu;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.plaf.ActionMapUIResource;
+
+import java.awt.GridLayout;
+import java.awt.event.*;
+
+/**
+ * Un checkbox permettant 3 \xE9tats (activ\xE9, d\xE9sactiv\xE9, mixte). Dans ce dernier
+ * cas, le bouton appara\xEEt en gris\xE9.
+ * Le code est repris d'un composant ThreeStateCheckBox
+ * <p>
+ * Important : Ce composant n'envoie pas d'\xE9venement ActionEvent. Seuls les
+ * evenements ItemEvent sont g\xE9r\xE9s.<br>
+ * Dans le cas ou l'\xE9tat est "mixed", un evenement ItemEvent avec l'etat
+ * correspondant STATE_MIXED est envoy\xE9.
+ *<p>
+ * Maintenance tip - There were some tricks to getting this code
+ * working:
+ *
+ * 1. You have to overwite addMouseListener() to do nothing
+ * 2. You have to add a mouse event on mousePressed by calling
+ * super.addMouseListener()
+ * 3. You have to replace the UIActionMap for the keyboard event
+ * "pressed" with your own one.
+ * 4. You have to remove the UIActionMap for the keyboard event
+ * "released".
+ * 5. You have to grab focus when the next state is entered,
+ * otherwise clicking on the component won't get the focus.
+ * 6. You have to make a BuCheckBox3StatesDecorator as a button model that
+ * wraps the original button model and does state management.
+ * 
+ * @author Bertrand Marchand
+ */
+public class BuCheckBox3States extends JCheckBox {
+  /** Etat Mixte du checkbox */
+  public static final int STATE_MIXED      = 0;
+  /** Etat Selected du checkbox */
+  public static final int STATE_SELECTED   = ItemEvent.SELECTED;
+  /** Etat Deselected du checkbox */
+  public static final int STATE_DESELECTED = ItemEvent.DESELECTED;
+
+  private final BuCheckbox3StatesDecorator model;
+
+  public BuCheckBox3States(String text, Icon icon, int initial){
+    super(text, icon);
+    // Add a listener for when the mouse is pressed
+    super.addMouseListener(new MouseAdapter() {
+      public void mousePressed(MouseEvent e) {
+        grabFocus();
+        model.nextState();
+      }
+    });
+    // Reset the keyboard action map
+    ActionMap map = new ActionMapUIResource();
+    map.put("pressed", new AbstractAction() {
+      public void actionPerformed(ActionEvent e) {
+        grabFocus();
+        model.nextState();
+      }
+    });
+    map.put("released", null);
+    SwingUtilities.replaceUIActionMap(this, map);
+    // set the model to the adapted model
+    model = new BuCheckbox3StatesDecorator(getModel());
+    setModel(model);
+    setState(initial);
+  }
+  public BuCheckBox3States(String text, int initial) {
+    this(text, null, initial);
+  }
+  public BuCheckBox3States(String text) {
+    this(text, STATE_MIXED);
+  }
+  public BuCheckBox3States() {
+    this(null);
+  }
+
+  /** No one may add mouse listeners, not even Swing! */
+  public void addMouseListener(MouseListener l) { }
+  /**
+   * Set the new state to either SELECTED, NOT_SELECTED or
+   * DONT_CARE.  If state == null, it is treated as DONT_CARE.
+   */
+  public void setState(int state) { model.setState(state); }
+  /** Return the current state, which is determined by the
+   * selection status of the model. */
+  public int getState() { return model.getState(); }
+  public void setSelected(boolean b) {
+    if (b) {
+      setState(STATE_SELECTED);
+    } else {
+      setState(STATE_DESELECTED);
+    }
+  }
+  
+  /**
+   * The button accept only 2 states when clicked : SELECTED, or NOT_SELECTED
+   * @param _b true : Only 2 states. 3 otherwise.
+   */
+  public void acceptOnly2StatesWhenClicked(boolean _b) {
+    model.acceptOnly2StatesWhenClicked(_b);
+  }
+  
+  /**
+   * Exactly which Design Pattern is this?  Is it an Adapter,
+   * a Proxy or a Decorator?  In this case, my vote lies with the
+   * Decorator, because we are extending functionality and
+   * "decorating" the original model with a more powerful model.
+   */
+  private class BuCheckbox3StatesDecorator implements ButtonModel {
+    private final ButtonModel other;
+    private boolean only2States_=false;
+    private BuCheckbox3StatesDecorator(ButtonModel other) {
+      this.other = other;
+    }
+    private void setState(int state) {
+      if (state == STATE_DESELECTED) {
+        other.setArmed(false);
+        setPressed(false);
+        setSelected(false);
+      } else if (state == STATE_SELECTED) {
+        other.setArmed(false);
+        setPressed(false);
+        setSelected(true);
+      } else { // either "null" or DONT_CARE
+        other.setArmed(true);
+        setPressed(true);
+        setSelected(true);
+        fireItemStateChanged(new ItemEvent(this,ItemEvent.ITEM_STATE_CHANGED,this,STATE_MIXED));
+      }
+    }
+    /**
+     * The current state is embedded in the selection / armed
+     * state of the model.
+     *
+     * We return the SELECTED state when the checkbox is selected
+     * but not armed, DONT_CARE state when the checkbox is
+     * selected and armed (grey) and NOT_SELECTED when the
+     * checkbox is deselected.
+     */
+    private int getState() {
+      if (isSelected() && !isArmed()) {
+        // normal black tick
+        return STATE_SELECTED;
+      } else if (isSelected() && isArmed()) {
+        // don't care grey tick
+        return STATE_MIXED;
+      } else {
+        // normal deselected
+        return STATE_DESELECTED;
+      }
+    }
+    /** We rotate between NOT_SELECTED, SELECTED and DONT_CARE.*/
+    private void nextState() {
+      int current = getState();
+      if (current == STATE_DESELECTED) {
+        setState(STATE_SELECTED);
+      } else if (current == STATE_SELECTED) {
+        if (only2States_)
+          setState(STATE_DESELECTED);
+        else
+          setState(STATE_MIXED);
+      } else if (current == STATE_MIXED) {
+        setState(STATE_DESELECTED);
+      }
+    }
+    /** Filter: No one may change the armed status except us. */
+    public void setArmed(boolean b) {
+    }
+    /** We disable focusing on the component when it is not
+     * enabled. */
+    public void setEnabled(boolean b) {
+      setFocusable(b);
+      other.setEnabled(b);
+    }
+    /** All these methods simply delegate to the "other" model
+     * that is being decorated. */
+    public boolean isArmed() { return other.isArmed(); }
+    public boolean isSelected() { return other.isSelected(); }
+    public boolean isEnabled() { return other.isEnabled(); }
+    public boolean isPressed() { return other.isPressed(); }
+    public boolean isRollover() { return other.isRollover(); }
+    public void setSelected(boolean b) { other.setSelected(b); }
+    public void setPressed(boolean b) { other.setPressed(b); }
+    public void setRollover(boolean b) { other.setRollover(b); }
+    public void setMnemonic(int key) { other.setMnemonic(key); }
+    public int getMnemonic() { return other.getMnemonic(); }
+    public void setActionCommand(String s) {
+      other.setActionCommand(s);
+    }
+    public String getActionCommand() {
+      return other.getActionCommand();
+    }
+    public void setGroup(ButtonGroup group) {
+      other.setGroup(group);
+    }
+    public void addActionListener(ActionListener l) {
+      other.addActionListener(l);
+    }
+    public void removeActionListener(ActionListener l) {
+      other.removeActionListener(l);
+    }
+    public void addItemListener(ItemListener l) {
+      other.addItemListener(l);
+    }
+    public void removeItemListener(ItemListener l) {
+      other.removeItemListener(l);
+    }
+    public void addChangeListener(ChangeListener l) {
+      other.addChangeListener(l);
+    }
+    public void removeChangeListener(ChangeListener l) {
+      other.removeChangeListener(l);
+    }
+    public Object[] getSelectedObjects() {
+      return other.getSelectedObjects();
+    }
+    public void acceptOnly2StatesWhenClicked(boolean _b) {
+      only2States_=_b;
+    }
+  }
+  
+  public static void main(String args[]) throws Exception {
+    JFrame frame = new JFrame("BuCheckBox3States");
+    frame.getContentPane().setLayout(new GridLayout(0, 1, 5, 5));
+    final BuCheckBox3States swingBox = new BuCheckBox3States(
+        "Testing the 3states checkbox");
+//    swingBox.acceptOnly2StatesWhenClicked(true);
+    swingBox.setState(BuCheckBox3States.STATE_MIXED);
+
+    swingBox.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        System.out.println("3states actionPerformed");
+      }
+    });
+    swingBox.addChangeListener(new ChangeListener() {
+      public void stateChanged(ChangeEvent e) {
+        System.out.println("3states stateChanged");
+      }
+    });
+    swingBox.addItemListener(new ItemListener() {
+      public void itemStateChanged(ItemEvent e) {
+        System.out.println("3states itemStateChanged");
+      }
+    });
+    swingBox.setMnemonic('T');
+    frame.getContentPane().add(swingBox);
+
+    JCheckBox normal=new JCheckBox("The normal checkbox");
+    normal.addActionListener(new ActionListener() {
+      public void actionPerformed(ActionEvent e) {
+        System.out.println("normal actionPerformed");
+      }
+    });
+    normal.addChangeListener(new ChangeListener() {
+      public void stateChanged(ChangeEvent e) {
+        System.out.println("normal stateChanged");
+      }
+    });
+    normal.addItemListener(new ItemListener() {
+      public void itemStateChanged(ItemEvent e) {
+        System.out.println("normal itemStateChanged");
+      }
+    });
+
+    frame.getContentPane().add(normal);
+    UIManager.setLookAndFeel(
+        UIManager.getSystemLookAndFeelClassName());
+    final BuCheckBox3States winBox = new BuCheckBox3States(
+        "Testing the 3states checkbox");
+    frame.getContentPane().add(winBox);
+    final JCheckBox winNormal = new JCheckBox(
+        "The normal checkbox");
+    frame.getContentPane().add(winNormal);
+    // wait for 3 seconds, then enable all check boxes
+    new Thread() { {start();}
+      public void run() {
+        try {
+          winBox.setEnabled(false);
+          winNormal.setEnabled(false);
+          Thread.sleep(3000);
+          winBox.setEnabled(true);
+          winNormal.setEnabled(true);
+        } catch (InterruptedException ex) { }
+      }
+    };
+    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+    frame.pack();
+    frame.setVisible(true);
+  }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-20 14:53:23
      
     | 
| Revision: 3655
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3655&view=rev
Author:   bmarchan
Date:     2008-06-20 07:53:29 -0700 (Fri, 20 Jun 2008)
Log Message:
-----------
Mise a jour de l'arbre des calques en fonction des g?\195?\169ometries s?\195?\169lectionn?\195?\169es.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/selection.gif
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java	2008-06-20 14:51:55 UTC (rev 3654)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java	2008-06-20 14:53:29 UTC (rev 3655)
@@ -68,7 +68,7 @@
  * @author Guillaume Desnoix , Axel von Arnim, Fred deniger
  */
 public class ZEbliCalquesPanel extends BuPanel implements EbliFilleCalquesInterface, BCalqueContextuelListener,
-    CtuluImageProducer, BCalqueSaverTargetInterface, EbliFindable, ActionListener {
+    CtuluImageProducer, BCalqueSaverTargetInterface, EbliFindable, ActionListener, ZSelectionListener  {
 
   protected class AnimAdapter extends EbliAnimationSourceAbstract {
 
@@ -382,6 +382,7 @@
     
     scene_=new ZScene(gcDonnees_,controller_.getCqSelectionI());
     scene_.setRestrictedToCalqueActif(true);
+    scene_.addSelectionListener(this);
     modelArbre_.addTreeModelListener(scene_);
   }
 
@@ -909,4 +910,11 @@
     return selection;
   }
 
+  /*
+   * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent)
+   */
+  public void selectionChanged(ZSelectionEvent _evt) {
+    modelArbre_.fireObservableChanged();
+  }
+
 }
\ No newline at end of file
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/selection.gif
===================================================================
(Binary files differ)
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/selection.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-20 14:51:55 UTC (rev 3654)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-20 14:53:29 UTC (rev 3655)
@@ -43,7 +43,7 @@
  * @author fred deniger
  * @version $Id: MdlVisuPanel.java,v 1.1.2.6 2008/05/13 12:10:21 bmarchan Exp $
  */
-public class MdlVisuPanel extends FSigVisuPanel implements ZSelectionListener {
+public class MdlVisuPanel extends FSigVisuPanel {
 
 //  final FSigLayerGroup parent_;
   BGroupeCalque cqImg_;
@@ -61,7 +61,6 @@
     initCalques(true);
     installLayerActions();
     getScene().setRestrictedToCalqueActif(false);
-    getScene().addSelectionListener(this);
   }
 
   protected FSigEditor createGisEditor() {
@@ -193,10 +192,12 @@
     cqMdl1d_.add(cqTrace);
   }
 
-  /*
+  /**
+   * Mise a jour des actions.
    * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent)
    */
   public void selectionChanged(ZSelectionEvent _evt) {
+    super.selectionChanged(_evt);
     EbliActionInterface act=EbliActionMap.getInstance().getAction("DUPLIQUER");
     act.setEnabled(!getScene().isSelectionEmpty());
   }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-20 14:51:55
      
     | 
| Revision: 3654
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3654&view=rev
Author:   bmarchan
Date:     2008-06-20 07:51:55 -0700 (Fri, 20 Jun 2008)
Log Message:
-----------
L'arbre des calques devient observer de son modele BArbreCalqueModel. Ceci pour qu'il soit mis a jour en cas de modification du modele.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java	2008-06-20 09:52:16 UTC (rev 3653)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java	2008-06-20 14:51:55 UTC (rev 3654)
@@ -21,6 +21,8 @@
 import java.awt.event.KeyListener;
 import java.awt.event.MouseEvent;
 import java.util.EventObject;
+import java.util.Observable;
+import java.util.Observer;
 
 import javax.swing.*;
 import javax.swing.border.EmptyBorder;
@@ -39,6 +41,7 @@
 import com.memoire.bu.BuLightBorder;
 import com.memoire.bu.BuMenu;
 import com.memoire.bu.BuTextField;
+import com.memoire.bu.BuVerticalLayout;
 
 import org.fudaa.ctulu.CtuluLib;
 import org.fudaa.ctulu.CtuluLibString;
@@ -129,7 +132,7 @@
  * @author Guillaume Desnoix
  */
 
-public class BArbreCalque extends JTree implements InternalFrameListener {
+public class BArbreCalque extends JTree implements InternalFrameListener, Observer {
 
   class ArbreCellEditor extends AbstractCellEditor implements TreeCellEditor {
 
@@ -421,6 +424,11 @@
    * @param _m le nouveau modele
    */
   public final void setModel(final BArbreCalqueModel _m) {
+    if (getModel()!=null)
+      ((BArbreCalqueModel)getModel()).getObservable().deleteObserver(this);
+    if (_m!=null)
+      _m.getObservable().addObserver(this);
+    
     // pour eviter d'initialiser l'ancien model de selection
     super.setSelectionModel(null);
     super.setModel(_m);
@@ -474,6 +482,7 @@
     private final Color treeSelectionBakground_ = UIManager.getColor("Tree.selectionBackground");
 
     JCheckBox cbVisible_;
+    JLabel lbSelect_;
 
     final JTextField r1_;
 
@@ -492,6 +501,12 @@
       r2_.setPreferredSize(new Dimension(80, 12));
       r3_ = new JLabel(" ");
       r3_.setPreferredSize(new Dimension(25,25));
+      lbSelect_=new JLabel(EbliResource.EBLI.getIcon("selection.gif"));
+      lbSelect_.setOpaque(false);
+      JPanel pnLeft=new JPanel();
+      pnLeft.setLayout(new BuVerticalLayout(1,true,true));
+      pnLeft.setOpaque(false);
+      
       final JPanel r4 = new JPanel(new BuBorderLayout(0, 1, true, true));
       r4.add(r1_, BuBorderLayout.CENTER);
       r4.add(r2_, BuBorderLayout.SOUTH);
@@ -501,6 +516,7 @@
       setLayout(lay);
       add(r3_, BuBorderLayout.CENTER);
       add(r4, BuBorderLayout.EAST);
+      
       if (_editable) {
         cbVisible_ = new BuCheckBox();
         // pour ne pas tout dessiner
@@ -508,9 +524,11 @@
         cbVisible_.setToolTipText(EbliLib.getS("Visible"));
         cbVisible_.setVerticalAlignment(SwingConstants.TOP);
         cbVisible_.setHorizontalAlignment(SwingConstants.RIGHT);
-        cbVisible_.setMargin(new Insets(8, 0, 0, 0));
-        add(cbVisible_, BuBorderLayout.WEST);
+        cbVisible_.setMargin(new Insets(0, 0, 0, 0));
+        pnLeft.add(cbVisible_);
       }
+      pnLeft.add(lbSelect_);
+      add(pnLeft, BuBorderLayout.WEST);
       setOpaque(true);
     }
 
@@ -560,6 +578,13 @@
             s.append(EbliResource.EBLI.getString("gel\xE9"));
           }
         }
+        if (calque instanceof ZCalqueAffichageDonneesAbstract) {
+          final ZCalqueAffichageDonneesAbstract cq = (ZCalqueAffichageDonneesAbstract) calque;
+          lbSelect_.setVisible(!cq.isSelectionEmpty());
+        }
+        else {
+          lbSelect_.setVisible(false);
+        }
         if (!calque.isVisible()) {
           if (s.length() > 0) {
             s.append(CtuluLibString.ESPACE);
@@ -662,6 +687,13 @@
       return this;
     }
   }
+
+  /* (non-Javadoc)
+   * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
+   */
+  public void update(Observable o, Object arg) {
+    repaint();
+  }
 }
 /**
  * Modele de donnees pour l'arbre de calques.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-20 09:52:17
      
     | 
| Revision: 3653
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3653&view=rev
Author:   bmarchan
Date:     2008-06-20 02:52:16 -0700 (Fri, 20 Jun 2008)
Log Message:
-----------
Un peu de doc
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java	2008-06-20 09:31:00 UTC (rev 3652)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java	2008-06-20 09:52:16 UTC (rev 3653)
@@ -34,12 +34,12 @@
   int cqType_;
 
   /**
-   * Creation de l'action.
-   * @param _title
-   * @param _icon
-   * @param _cqType Le type de calque ({@link MdlLayerFactory})
-   * @param _parent
-   * @param _editor
+   * Construit l'action.
+   * @param _title Label de l'action
+   * @param _icon L'icone pour l'action.
+   * @param _cqType Le type de calque (Voir {@link MdlLayerFactory})
+   * @param _parent Le calque parent dans lequel sera cr\xE9\xE9 le calque.
+   * @param _editor L'\xE9diteur.
    */
   public CalqueNewCalqueAction(String _title, Icon _icon, int _cqType, BCalque _parent, FSigEditor _editor) {
     super(_title, _icon, "CREER");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cla...@us...> - 2008-06-20 09:30:53
      
     | 
| Revision: 3652
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3652&view=rev
Author:   clavreul
Date:     2008-06-20 02:31:00 -0700 (Fri, 20 Jun 2008)
Log Message:
-----------
Vestige du passage de cvs ?\195?\160 subversion
Removed Paths:
-------------
    trunk/CVSROOT/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 13:57:06
      
     | 
| Revision: 3651
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3651&view=rev
Author:   bmarchan
Date:     2008-06-19 06:57:11 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Impl?\195?\169mentation de la gestion des calques de singularit?\195?\169.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dProfile.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dCloudPersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLevelPersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dProfilePersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -26,6 +26,7 @@
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLevel;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dZone;
+import org.fudaa.fudaa.modeleur.layer.MdlLayerFactory;
 import org.fudaa.fudaa.modeleur.layer.MdlModel2dCloud;
 import org.fudaa.fudaa.modeleur.layer.MdlModel2dLevel;
 import org.fudaa.fudaa.modeleur.layer.MdlModel2dProfile;
@@ -92,10 +93,16 @@
   }
   
   protected void installLayerActions() {
-    EbliActionInterface actNewCloud=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque semis"),FudaaResource.FUDAA.getIcon("ajouter"),"NEW_LAYER2D_CLOUD",cqAlti_,getGisEditor());
-    EbliActionInterface actNewLevel=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque courbes de niveaux"),FudaaResource.FUDAA.getIcon("ajouter"),"NEW_LAYER2D_LEVEL",cqAlti_,getGisEditor());
-    EbliActionInterface actNewProfile=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque profils"),FudaaResource.FUDAA.getIcon("ajouter"),"NEW_LAYER2D_PROFILE",cqAlti_,getGisEditor());
+    EbliActionInterface actNewCloud=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque semis"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CLOUD,cqAlti_,getGisEditor());
+    EbliActionInterface actNewLevel=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque courbes de niveaux"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_LEVEL,cqAlti_,getGisEditor());
+    EbliActionInterface actNewProfile=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque profils"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_PROFILE,cqAlti_,getGisEditor());
     cqAlti_.setActions(new EbliActionInterface[] { actNewCloud, actNewLevel, actNewProfile });
+    
+    EbliActionInterface actNewZone=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque zones"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_ZONE,cqSing_,getGisEditor());
+    EbliActionInterface actNewCnt=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque contours"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CONTOUR,cqSing_,getGisEditor());
+    EbliActionInterface actNewConst=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque lignes de contraintes"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CONST_LINE,cqSing_,getGisEditor());
+    EbliActionInterface actNewDir=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque lignes directions"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_DIR_LINE,cqSing_,getGisEditor());
+    cqSing_.setActions(new EbliActionInterface[] { actNewZone, actNewCnt, actNewConst, actNewDir});
 
     EbliActionInterface actImport = new FSigImageImportAction(this, cqImg_);
     cqImg_.setActions(new EbliActionInterface[] { actImport });
@@ -125,15 +132,15 @@
 
     if (!_build) return;
     
-    MdlLayer2dLevel cqLevel=MdlLayer2dLevel.createNew(getGisEditor());
+    MdlLayer2dLevel cqLevel=new MdlLayer2dLevel(getGisEditor());
     cqLevel.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqLevel.getExtName()));
     cqAlti_.add(cqLevel);
 
-    MdlLayer2dCloud cqCloud=MdlLayer2dCloud.createNew(getGisEditor());
+    MdlLayer2dCloud cqCloud=new MdlLayer2dCloud(getGisEditor());
     cqCloud.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqCloud.getExtName()));
     cqAlti_.add(cqCloud);
     
-    MdlLayer2dProfile cqProfile=MdlLayer2dProfile.createNew(getGisEditor());
+    MdlLayer2dProfile cqProfile=new MdlLayer2dProfile(getGisEditor());
     cqProfile.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqProfile.getExtName()));
     cqAlti_.add(cqProfile);
   }
@@ -151,19 +158,19 @@
 
     if (!_build) return;
     
-    MdlLayer2dContour cqCnt=MdlLayer2dContour.createNew(getGisEditor());
+    MdlLayer2dContour cqCnt=new MdlLayer2dContour(getGisEditor());
     cqCnt.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqCnt.getExtName()));
     cqSing_.add(cqCnt);
 
-    MdlLayer2dZone cqZone=MdlLayer2dZone.createNew(getGisEditor());
+    MdlLayer2dZone cqZone=new MdlLayer2dZone(getGisEditor());
     cqZone.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqZone.getExtName()));
     cqSing_.add(cqZone);
     
-    MdlLayer2dConstraintLine cqConst=MdlLayer2dConstraintLine.createNew(getGisEditor());
+    MdlLayer2dConstraintLine cqConst=new MdlLayer2dConstraintLine(getGisEditor());
     cqConst.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqConst.getExtName()));
     cqSing_.add(cqConst);
     
-    MdlLayer2dDirectionLine cqDirect=MdlLayer2dDirectionLine.createNew(getGisEditor());
+    MdlLayer2dDirectionLine cqDirect=new MdlLayer2dDirectionLine(getGisEditor());
     cqDirect.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqDirect.getExtName()));
     cqSing_.add(cqDirect);
   }
@@ -181,7 +188,7 @@
 
     if (!_build) return;
     
-    MdlLayer1dTrace cqTrace=MdlLayer1dTrace.createNew(getGisEditor());
+    MdlLayer1dTrace cqTrace=new MdlLayer1dTrace(getGisEditor());
     cqTrace.setName(BGroupeCalque.findUniqueChildName(cqMdl1d_, cqTrace.getExtName()));
     cqMdl1d_.add(cqTrace);
   }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/CalqueNewCalqueAction.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -13,10 +13,13 @@
 
 import org.fudaa.ebli.calque.BCalque;
 import org.fudaa.ebli.calque.BGroupeCalque;
+import org.fudaa.ebli.calque.ZCalqueAffichageDonnees;
 import org.fudaa.ebli.commun.EbliActionSimple;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dCloud;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLevel;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.modeleur.layer.MdlLayerFactory;
+import org.fudaa.fudaa.modeleur.layer.MdlLayerInterface;
 import org.fudaa.fudaa.sig.layer.FSigEditor;
 
 /**
@@ -28,31 +31,26 @@
   
   FSigEditor editor_;
   BCalque parent_;
+  int cqType_;
 
   /**
-   * @param _m l'arbre des calques
+   * Creation de l'action.
+   * @param _title
+   * @param _icon
+   * @param _cqType Le type de calque ({@link MdlLayerFactory})
+   * @param _parent
+   * @param _editor
    */
-  public CalqueNewCalqueAction(String _title, Icon _icon, String _ac, BCalque _parent, FSigEditor _editor) {
-    super(_title, _icon, _ac);
+  public CalqueNewCalqueAction(String _title, Icon _icon, int _cqType, BCalque _parent, FSigEditor _editor) {
+    super(_title, _icon, "CREER");
     editor_=_editor;
     parent_=_parent;
+    cqType_=_cqType;
   }
 
   public void actionPerformed(final ActionEvent _e) {
-    if (_e.getActionCommand().equals("NEW_LAYER2D_CLOUD")) {
-      MdlLayer2dCloud cq=MdlLayer2dCloud.createNew(editor_);
-      cq.setName(BGroupeCalque.findUniqueChildName(parent_, cq.getExtName()));
-      parent_.enDernier(cq);
-    }
-    else if (_e.getActionCommand().equals("NEW_LAYER2D_LEVEL")) {
-      MdlLayer2dLevel cq=MdlLayer2dLevel.createNew(editor_);
-      cq.setName(BGroupeCalque.findUniqueChildName(parent_, cq.getExtName()));
-      parent_.enDernier(cq);
-    }
-    else if (_e.getActionCommand().equals("NEW_LAYER2D_PROFILE")) {
-      MdlLayer2dProfile cq=MdlLayer2dProfile.createNew(editor_);
-      cq.setName(BGroupeCalque.findUniqueChildName(parent_, cq.getExtName()));
-      parent_.enDernier(cq);
-    }
+    ZCalqueAffichageDonnees cq=MdlLayerFactory.getInstance().createLayer(cqType_, editor_);
+    cq.setName(BGroupeCalque.findUniqueChildName(parent_, ((MdlLayerInterface)cq).getExtName()));
+    parent_.enDernier(cq);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -39,10 +39,14 @@
     setTitle(MdlResource.MDL.getString("Trace profils"));
   }
   
-  public static MdlLayer1dTrace createNew(FSigEditor _editor) {
-    MdlLayer1dTrace cq=new MdlLayer1dTrace(new MdlModel1dTrace(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer1dTrace(FSigEditor _editor) {
+    this(new MdlModel1dTrace(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer1dTrace createNew(FSigEditor _editor) {
+//    MdlLayer1dTrace cq=new MdlLayer1dTrace(new MdlModel1dTrace(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer1dTracePersistence();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -44,10 +44,14 @@
     setTitle(MdlResource.MDL.getString("Semis de points"));
   }
   
-  public static MdlLayer2dCloud createNew(FSigEditor _editor) {
-    MdlLayer2dCloud cq=new MdlLayer2dCloud(new MdlModel2dCloud(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dCloud(FSigEditor _editor) {
+    this(new MdlModel2dCloud(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer2dCloud createNew(FSigEditor _editor) {
+//    MdlLayer2dCloud cq=new MdlLayer2dCloud(new MdlModel2dCloud(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   /**
    * Le manager de persistence. Celui par defaut ne permet par une restauration
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -38,10 +38,14 @@
     setTitle(MdlResource.MDL.getString("Lignes de contraintes"));
   }
   
-  public static MdlLayer2dConstraintLine createNew(FSigEditor _editor) {
-    MdlLayer2dConstraintLine cq=new MdlLayer2dConstraintLine(new MdlModel2dConstraintLine(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dConstraintLine(FSigEditor _editor) {
+    this(new MdlModel2dConstraintLine(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer2dConstraintLine createNew(FSigEditor _editor) {
+//    MdlLayer2dConstraintLine cq=new MdlLayer2dConstraintLine(new MdlModel2dConstraintLine(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer2dConstraintLinePersistence();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -42,10 +42,14 @@
     setTitle(MdlResource.MDL.getString("Contours d'\xE9tude"));
   }
   
-  public static MdlLayer2dContour createNew(FSigEditor _editor) {
-    MdlLayer2dContour cq=new MdlLayer2dContour(new MdlModel2dContour(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dContour(FSigEditor _editor) {
+    this(new MdlModel2dContour(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer2dContour createNew(FSigEditor _editor) {
+//    MdlLayer2dContour cq=new MdlLayer2dContour(new MdlModel2dContour(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer2dContourPersistence();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -39,10 +39,14 @@
     setTitle(MdlResource.MDL.getString("Lignes de direction"));
   }
   
-  public static MdlLayer2dDirectionLine createNew(FSigEditor _editor) {
-    MdlLayer2dDirectionLine cq=new MdlLayer2dDirectionLine(new MdlModel2dDirectionLine(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dDirectionLine(FSigEditor _editor) {
+    this(new MdlModel2dDirectionLine(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer2dDirectionLine createNew(FSigEditor _editor) {
+//    MdlLayer2dDirectionLine cq=new MdlLayer2dDirectionLine(new MdlModel2dDirectionLine(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer2dDirectionLinePersistence();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -44,10 +44,14 @@
     setTitle(MdlResource.MDL.getString("Lignes de niveau"));
   }
   
-  public static MdlLayer2dLevel createNew(FSigEditor _editor) {
-    MdlLayer2dLevel cq=new MdlLayer2dLevel(new MdlModel2dLevel(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dLevel(FSigEditor _editor) {
+    this(new MdlModel2dLevel(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer2dLevel createNew(FSigEditor _editor) {
+//    MdlLayer2dLevel cq=new MdlLayer2dLevel(new MdlModel2dLevel(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer2dLevelPersistence();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -29,7 +29,7 @@
  * @author Bertrand Marchand
  * @version $Id: MdlLayer2dLine.java,v 1.1.2.1 2008/05/13 12:10:44 bmarchan Exp $
  */
-public abstract class MdlLayer2dLine extends FSigLayerLineEditable {
+public abstract class MdlLayer2dLine extends FSigLayerLineEditable implements MdlLayerInterface {
   
   /**
    * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
@@ -89,9 +89,9 @@
   }
 
   
-  /**
-   * Retourne le nom par defaut du calque.
-   * @return Le nom.
-   */
-  public abstract String getExtName();
+//  /**
+//   * Retourne le nom par defaut du calque.
+//   * @return Le nom.
+//   */
+//  public abstract String getExtName();
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -27,7 +27,7 @@
  * @author Bertrand Marchand
  * @version $Id: MdlLayer2dMultiPoint.java,v 1.1.2.1 2008/05/13 12:10:45 bmarchan Exp $
  */
-public abstract class MdlLayer2dMultiPoint extends ZCalqueMultiPointEditable {
+public abstract class MdlLayer2dMultiPoint extends ZCalqueMultiPointEditable implements MdlLayerInterface {
   
   /**
    * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
@@ -85,9 +85,9 @@
     super.detruire();
   }
 
-  /**
-   * Retourne le nom par defaut du calque.
-   * @return Le nom.
-   */
-  public abstract String getExtName();
+//  /**
+//   * Retourne le nom par defaut du calque.
+//   * @return Le nom.
+//   */
+//  public abstract String getExtName();
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dProfile.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dProfile.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dProfile.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -45,10 +45,14 @@
     setTitle(MdlResource.MDL.getString("Profils"));
   }
   
-  public static MdlLayer2dProfile createNew(FSigEditor _editor) {
-    MdlLayer2dProfile cq=new MdlLayer2dProfile(new MdlModel2dProfile(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dProfile(FSigEditor _editor) {
+    this(new MdlModel2dProfile(_editor,_editor.getMng()),_editor);
   }
+  
+//  public static MdlLayer2dProfile createNew(FSigEditor _editor) {
+//    MdlLayer2dProfile cq=new MdlLayer2dProfile(new MdlModel2dProfile(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
 
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer2dProfilePersistence();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -42,11 +42,15 @@
     setTitle(MdlResource.MDL.getString("Zones"));
   }
   
-  public static MdlLayer2dZone createNew(FSigEditor _editor) {
-    MdlLayer2dZone cq=new MdlLayer2dZone(new MdlModel2dZone(_editor,_editor.getMng()), _editor);
-    return cq;
+  public MdlLayer2dZone(FSigEditor _editor) {
+    this(new MdlModel2dZone(_editor,_editor.getMng()),_editor);
   }
 
+//  public static MdlLayer2dZone createNew(FSigEditor _editor) {
+//    MdlLayer2dZone cq=new MdlLayer2dZone(new MdlModel2dZone(_editor,_editor.getMng()), _editor);
+//    return cq;
+//  }
+
   public BCalquePersistenceInterface getPersistenceMng() {
     return new MdlLayer2dZonePersistence();
   }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -21,6 +21,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer1dTrace.createNew(_editor);
+    return new MdlLayer1dTrace(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dCloudPersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dCloudPersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dCloudPersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -44,6 +44,6 @@
   
   @Override
   protected MdlLayer2dMultiPoint createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dCloud.createNew(_editor);
+    return new MdlLayer2dCloud(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -21,6 +21,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dConstraintLine.createNew(_editor);
+    return new MdlLayer2dConstraintLine(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -21,6 +21,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dContour.createNew(_editor);
+    return new MdlLayer2dContour(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -21,6 +21,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dDirectionLine.createNew(_editor);
+    return new MdlLayer2dDirectionLine(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLevelPersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLevelPersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLevelPersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -46,6 +46,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dLevel.createNew(_editor);
+    return new MdlLayer2dLevel(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dProfilePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dProfilePersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dProfilePersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -46,6 +46,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dProfile.createNew(_editor);
+    return new MdlLayer2dProfile(_editor);
   }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java	2008-06-19 13:56:12 UTC (rev 3650)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java	2008-06-19 13:57:11 UTC (rev 3651)
@@ -21,6 +21,6 @@
   
   @Override
   protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
-    return MdlLayer2dZone.createNew(_editor);
+    return new MdlLayer2dZone(_editor);
   }
 }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 13:56:09
      
     | 
| Revision: 3650
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3650&view=rev
Author:   bmarchan
Date:     2008-06-19 06:56:12 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Un factory de cr?\195?\169ation des calques.
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerFactory.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerInterface.java
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerFactory.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerFactory.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerFactory.java	2008-06-19 13:56:12 UTC (rev 3650)
@@ -0,0 +1,71 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:43 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import org.fudaa.ebli.calque.BCalque;
+import org.fudaa.ebli.calque.ZCalqueAffichageDonnees;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Une fabrique de calques.
+ * @author Bertrand Marchand
+ * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $
+ */
+public class MdlLayerFactory {
+  public final static int LAYER2D_CLOUD     =1;
+  public final static int LAYER2D_PROFILE   =2;
+  public final static int LAYER2D_LEVEL     =3;
+  public final static int LAYER2D_CONST_LINE=4;
+  public final static int LAYER2D_DIR_LINE  =5;
+  public final static int LAYER2D_ZONE      =6;
+  public final static int LAYER2D_CONTOUR   =7;
+  public final static int LAYER1D_TRACE     =8;
+  
+  private static MdlLayerFactory factory_=new MdlLayerFactory();
+  
+  /**
+   * Can't instanciate.
+   */
+  private MdlLayerFactory() {}
+  
+  /**
+   * Retourne le singleton.
+   */
+  public static MdlLayerFactory getInstance() {
+    return factory_;
+  }
+  
+  /**
+   * Cr\xE9ation d'un calque d'un type donn\xE9e.
+   * @param _type Le type de calque.
+   * @param _editor L'\xE9diteur associ\xE9 au calque.
+   * @return Le calque nouvellement cr\xE9\xE9.
+   */
+  public ZCalqueAffichageDonnees createLayer(int _type, FSigEditor _editor ) {
+    switch (_type) {
+    case LAYER2D_CLOUD:
+      return new MdlLayer2dCloud(_editor);
+    case LAYER2D_PROFILE:
+      return new MdlLayer2dProfile(_editor);
+    case LAYER2D_LEVEL:
+      return new MdlLayer2dLevel(_editor);
+    case LAYER2D_CONST_LINE:
+      return new MdlLayer2dConstraintLine(_editor);
+    case LAYER2D_DIR_LINE:
+      return new MdlLayer2dDirectionLine(_editor);
+    case LAYER2D_ZONE:
+      return new MdlLayer2dZone(_editor);
+    case LAYER2D_CONTOUR:
+      return new MdlLayer2dContour(_editor);
+    case LAYER1D_TRACE:
+      return new MdlLayer1dTrace(_editor);
+    default:
+      throw new IllegalArgumentException("Bad type");
+    }
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerInterface.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerInterface.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerInterface.java	2008-06-19 13:56:12 UTC (rev 3650)
@@ -0,0 +1,22 @@
+/*
+ * @creation     19 juin 2008
+ * @modification $Date:$
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+/**
+ * Une interface implement\xE9e par tous les calques MDL.
+ * @author Bertrand Marchand
+ * @version $Id:$
+ */
+public interface MdlLayerInterface {
+
+  /**
+   * Retourne le nom par defaut du calque.
+   * @return Le nom.
+   */
+  public String getExtName();
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayerInterface.java
___________________________________________________________________
Name: svn:eol-style
   + native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 10:57:30
      
     | 
| Revision: 3649
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3649&view=rev
Author:   bmarchan
Date:     2008-06-19 03:57:35 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Mise en place des calques 2D non encore impl?\195?\169ment?\195?\169s.
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dConstraintLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dContour.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dDirectionLine.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dZone.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,61 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:43 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import java.awt.Color;
+
+import org.fudaa.ebli.calque.BCalquePersistenceInterface;
+import org.fudaa.ebli.calque.dessin.DeForme;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+import org.fudaa.ebli.trace.TraceLigne;
+import org.fudaa.ebli.trace.TraceLigneModel;
+import org.fudaa.fudaa.modeleur.MdlResource;
+import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dConstraintLinePersistence;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Un calque pour le stockage et la manipulation des lignes de constraintes.
+ * @author Bertrand Marchand
+ * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $
+ */
+public class MdlLayer2dConstraintLine extends MdlLayer2dLine {
+  
+  /**
+   * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
+   * @param _model Modele
+   * @param _editor Editeur.
+   */
+  private MdlLayer2dConstraintLine(ZModeleLigneBriseeEditable _model,  final FSigEditor _editor) {
+    super(_model,_editor);
+    setLineModel(0, new TraceLigneModel(TraceLigne.LISSE, 1.5f, new Color(204,0,0)));
+    setLineModelOuvert(getLineModel(0));
+    setName(getExtName());
+    setTitle(MdlResource.MDL.getString("Lignes de contraintes"));
+  }
+  
+  public static MdlLayer2dConstraintLine createNew(FSigEditor _editor) {
+    MdlLayer2dConstraintLine cq=new MdlLayer2dConstraintLine(new MdlModel2dConstraintLine(_editor,_editor.getMng()), _editor);
+    return cq;
+  }
+
+  public BCalquePersistenceInterface getPersistenceMng() {
+    return new MdlLayer2dConstraintLinePersistence();
+  }
+
+  /**
+   * Retourne le nom par defaut du calque.
+   * @return Le nom.
+   */
+  public String getExtName() {
+    return "const";
+  }
+  
+  public boolean canAddForme(int _typeForme) {
+    return _typeForme==DeForme.LIGNE_BRISEE;
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,65 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:43 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import java.awt.Color;
+
+import org.fudaa.ebli.calque.BCalquePersistenceInterface;
+import org.fudaa.ebli.calque.dessin.DeForme;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+import org.fudaa.ebli.trace.TraceIcon;
+import org.fudaa.ebli.trace.TraceIconModel;
+import org.fudaa.ebli.trace.TraceLigne;
+import org.fudaa.ebli.trace.TraceLigneModel;
+import org.fudaa.fudaa.modeleur.MdlResource;
+import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dContourPersistence;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Un calque pour le stockage et la manipulation des contours d'\xE9tude 2d.
+ * @author Bertrand Marchand
+ * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $
+ */
+public class MdlLayer2dContour extends MdlLayer2dLine {
+  
+  /**
+   * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
+   * @param _model Modele
+   * @param _editor Editeur.
+   */
+  private MdlLayer2dContour(ZModeleLigneBriseeEditable _model,  final FSigEditor _editor) {
+    super(_model,_editor);
+    setLineModel(0, new TraceLigneModel(TraceLigne.TIRETE, 2f, new Color(153,92,0)));
+    setLineModelOuvert(getLineModel(0));
+    setIconModel(0, new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, new Color(153,92,0).darker()));
+    setIconModel(1, new TraceIconModel(getIconModel(0)));
+    setName(getExtName());
+    setTitle(MdlResource.MDL.getString("Contours d'\xE9tude"));
+  }
+  
+  public static MdlLayer2dContour createNew(FSigEditor _editor) {
+    MdlLayer2dContour cq=new MdlLayer2dContour(new MdlModel2dContour(_editor,_editor.getMng()), _editor);
+    return cq;
+  }
+
+  public BCalquePersistenceInterface getPersistenceMng() {
+    return new MdlLayer2dContourPersistence();
+  }
+
+  /**
+   * Retourne le nom par defaut du calque.
+   * @return Le nom.
+   */
+  public String getExtName() {
+    return "contour";
+  }
+  
+  public boolean canAddForme(int _typeForme) {
+    return _typeForme==DeForme.POLYGONE | _typeForme==DeForme.RECTANGLE;
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,62 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:43 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import java.awt.Color;
+
+import org.fudaa.ebli.calque.BCalquePersistenceInterface;
+import org.fudaa.ebli.calque.dessin.DeForme;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+import org.fudaa.ebli.trace.TraceLigne;
+import org.fudaa.ebli.trace.TraceLigneModel;
+import org.fudaa.fudaa.modeleur.MdlResource;
+import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dDirectionLinePersistence;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Un calque pour le stockage et la manipulation des lignes de direction.
+ * @author Bertrand Marchand
+ * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $
+ */
+public class MdlLayer2dDirectionLine extends MdlLayer2dLine {
+  
+  /**
+   * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
+   * @param _model Modele
+   * @param _editor Editeur.
+   */
+  private MdlLayer2dDirectionLine(ZModeleLigneBriseeEditable _model,  final FSigEditor _editor) {
+    super(_model,_editor);
+    setLineModel(0, new TraceLigneModel(TraceLigne.LISSE, 1.5f, new Color(102,102,255)));
+    setLineModelOuvert(getLineModel(0));
+//    _model.addListener(this); A implementer.
+    setName(getExtName());
+    setTitle(MdlResource.MDL.getString("Lignes de direction"));
+  }
+  
+  public static MdlLayer2dDirectionLine createNew(FSigEditor _editor) {
+    MdlLayer2dDirectionLine cq=new MdlLayer2dDirectionLine(new MdlModel2dDirectionLine(_editor,_editor.getMng()), _editor);
+    return cq;
+  }
+
+  public BCalquePersistenceInterface getPersistenceMng() {
+    return new MdlLayer2dDirectionLinePersistence();
+  }
+
+  /**
+   * Retourne le nom par defaut du calque.
+   * @return Le nom.
+   */
+  public String getExtName() {
+    return "direct";
+  }
+  
+  public boolean canAddForme(int _typeForme) {
+    return _typeForme==DeForme.LIGNE_BRISEE;
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dDirectionLine.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,65 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:43 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import java.awt.Color;
+
+import org.fudaa.ebli.calque.BCalquePersistenceInterface;
+import org.fudaa.ebli.calque.dessin.DeForme;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+import org.fudaa.ebli.trace.TraceIcon;
+import org.fudaa.ebli.trace.TraceIconModel;
+import org.fudaa.ebli.trace.TraceLigne;
+import org.fudaa.ebli.trace.TraceLigneModel;
+import org.fudaa.fudaa.modeleur.MdlResource;
+import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dZonePersistence;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Un calque pour le stockage et la manipulation des zones g\xE9om\xE9triques 2d.
+ * @author Bertrand Marchand
+ * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $
+ */
+public class MdlLayer2dZone extends MdlLayer2dLine {
+  
+  /**
+   * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
+   * @param _model Modele
+   * @param _editor Editeur.
+   */
+  private MdlLayer2dZone(ZModeleLigneBriseeEditable _model,  final FSigEditor _editor) {
+    super(_model,_editor);
+    setLineModel(0, new TraceLigneModel(TraceLigne.TIRETE, 2f, new Color(0,153,153)));
+    setLineModelOuvert(getLineModel(0));
+    setIconModel(0, new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, new Color(0,153,153).darker()));
+    setIconModel(1, new TraceIconModel(getIconModel(0)));
+    setName(getExtName());
+    setTitle(MdlResource.MDL.getString("Zones"));
+  }
+  
+  public static MdlLayer2dZone createNew(FSigEditor _editor) {
+    MdlLayer2dZone cq=new MdlLayer2dZone(new MdlModel2dZone(_editor,_editor.getMng()), _editor);
+    return cq;
+  }
+
+  public BCalquePersistenceInterface getPersistenceMng() {
+    return new MdlLayer2dZonePersistence();
+  }
+
+  /**
+   * Retourne le nom par defaut du calque.
+   * @return Le nom.
+   */
+  public String getExtName() {
+    return "zone";
+  }
+  
+  public boolean canAddForme(int _typeForme) {
+    return _typeForme==DeForme.POLYGONE | _typeForme==DeForme.RECTANGLE;
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dConstraintLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dConstraintLine.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dConstraintLine.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,38 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008-05-13 12:10:42 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import org.fudaa.ctulu.CtuluCommandContainer;
+import org.fudaa.ctulu.gis.GISAttribute;
+import org.fudaa.ctulu.gis.GISAttributeConstants;
+import org.fudaa.ctulu.gis.GISZoneListener;
+
+/**
+ * Un mod\xE8le de calque pour le calque 2D des lignes de constraintes. Les lignes sont des polylignes XYZ, non
+ * ferm\xE9es.
+ * 
+ * @author Bertrand Marchand
+ * @version $Id: MdlModel2dProfile.java,v 1.1.2.6 2008-05-13 12:10:42 bmarchan Exp $
+ */
+public class MdlModel2dConstraintLine extends MdlModel2dLine {
+
+  /**
+   * Construction d'un modele avec pile de commandes.
+   * @param _cmd La pile de commandes pour le undo/redo.
+   */
+  public MdlModel2dConstraintLine(final GISZoneListener _listener, final CtuluCommandContainer _cmd) {
+    super(_listener);
+    GISAttribute[] attrs=new GISAttribute[]{
+      GISAttributeConstants.BATHY,
+      GISAttributeConstants.TITRE
+    };
+    // Pas de container de commande pour cette op\xE9ration, sinon conserv\xE9 en undo/redo.
+    getGeomData().setAttributes(attrs, null);
+    getGeomData().setAttributeIsZ(GISAttributeConstants.BATHY);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dConstraintLine.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dContour.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dContour.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dContour.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,37 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/02/21 19:41:56 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import org.fudaa.ctulu.CtuluCommandContainer;
+import org.fudaa.ctulu.gis.GISAttribute;
+import org.fudaa.ctulu.gis.GISAttributeConstants;
+import org.fudaa.ctulu.gis.GISZoneListener;
+
+/**
+ * Un mod\xE8le de calque pour le calque 2D contour d'\xE9tudes. Les contours d'\xE9tude limitent les informations
+ * transmiss lors de l'exportation. Un contour d'\xE9tude est en XY.
+ * @author Bertrand Marchand
+ * @version $Id: MdlModel2dLevel.java,v 1.1.2.6 2008/02/21 19:41:56 bmarchan Exp $
+ */
+public class MdlModel2dContour extends MdlModel2dLine {
+
+  /**
+   * Construction d'un modele de contours avec container de commandes.
+   * @param _listener L'auditeur des modifications du mod\xE8le.
+   * @param _cmd Le container de commandes pour le undo/redo.
+   */
+  public MdlModel2dContour(final GISZoneListener _listener, final CtuluCommandContainer _cmd) {
+    super(_listener);
+    GISAttribute[] attrs=new GISAttribute[]{
+      GISAttributeConstants.TITRE
+    };
+    // Pas de container de commande pour cette op\xE9ration, sinon conserv\xE9 en undo/redo.
+    getGeomData().setAttributes(attrs, null);
+    getGeomData().setAttributeIsZ(null);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dContour.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dDirectionLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dDirectionLine.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dDirectionLine.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,40 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008-05-13 12:10:42 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import org.fudaa.ctulu.CtuluCommandContainer;
+import org.fudaa.ctulu.gis.GISAttribute;
+import org.fudaa.ctulu.gis.GISAttributeConstants;
+import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee;
+import org.fudaa.ctulu.gis.GISZoneListener;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+
+/**
+ * Un mod\xE8le de calque pour le calque 2D des lignes de direction. Les lignes sont des polylignes XYZ, non
+ * ferm\xE9es.
+ * 
+ * @author Bertrand Marchand
+ * @version $Id: MdlModel2dProfile.java,v 1.1.2.6 2008-05-13 12:10:42 bmarchan Exp $
+ */
+public class MdlModel2dDirectionLine extends MdlModel2dLine {
+
+  /**
+   * Construction d'un modele avec pile de commandes.
+   * @param _cmd La pile de commandes pour le undo/redo.
+   */
+  public MdlModel2dDirectionLine(final GISZoneListener _listener, final CtuluCommandContainer _cmd) {
+    super(_listener);
+    GISAttribute[] attrs=new GISAttribute[]{
+      GISAttributeConstants.BATHY,
+      GISAttributeConstants.TITRE
+    };
+    // Pas de container de commande pour cette op\xE9ration, sinon conserv\xE9 en undo/redo.
+    getGeomData().setAttributes(attrs, null);
+    getGeomData().setAttributeIsZ(GISAttributeConstants.BATHY);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dDirectionLine.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dZone.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dZone.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dZone.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,37 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/02/21 19:41:56 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import org.fudaa.ctulu.CtuluCommandContainer;
+import org.fudaa.ctulu.gis.GISAttribute;
+import org.fudaa.ctulu.gis.GISAttributeConstants;
+import org.fudaa.ctulu.gis.GISZoneListener;
+
+/**
+ * Un mod\xE8le de calque pour le calque 2D de zones g\xE9om\xE9triques. Les zones permettent de sp\xE9cifier un strickler par la suite.
+ * Une zone est en XY, ferm\xE9e.
+ * @author Bertrand Marchand
+ * @version $Id: MdlModel2dLevel.java,v 1.1.2.6 2008/02/21 19:41:56 bmarchan Exp $
+ */
+public class MdlModel2dZone extends MdlModel2dLine {
+
+  /**
+   * Construction d'un modele de contours avec container de commandes.
+   * @param _listener L'auditeur des modifications du mod\xE8le.
+   * @param _cmd Le container de commandes pour le undo/redo.
+   */
+  public MdlModel2dZone(final GISZoneListener _listener, final CtuluCommandContainer _cmd) {
+    super(_listener);
+    GISAttribute[] attrs=new GISAttribute[]{
+      GISAttributeConstants.TITRE
+    };
+    // Pas de container de commande pour cette op\xE9ration, sinon conserv\xE9 en undo/redo.
+    getGeomData().setAttributes(attrs, null);
+    getGeomData().setAttributeIsZ(null);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dZone.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,26 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:58 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.persistence;
+
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dConstraintLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Gestion de la persistance pour un calque de lignes de contraintes.
+ * @author Bertrand Marchand
+ * @see MdlLayer2dProfile
+ */
+public class MdlLayer2dConstraintLinePersistence extends MdlLayer2dLinePersistence {
+  
+  @Override
+  protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
+    return MdlLayer2dConstraintLine.createNew(_editor);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dConstraintLinePersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,26 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:58 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.persistence;
+
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dContour;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Gestion de la persistance pour un calque trace 1d.
+ * @author Bertrand Marchand
+ * @see MdlLayer2dProfile
+ */
+public class MdlLayer2dContourPersistence extends MdlLayer2dLinePersistence {
+  
+  @Override
+  protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
+    return MdlLayer2dContour.createNew(_editor);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dContourPersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,26 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:58 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.persistence;
+
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dDirectionLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Gestion de la persistance pour un calque de lignes de direction.
+ * @author Bertrand Marchand
+ * @see MdlLayer2dProfile
+ */
+public class MdlLayer2dDirectionLinePersistence extends MdlLayer2dLinePersistence {
+  
+  @Override
+  protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
+    return MdlLayer2dDirectionLine.createNew(_editor);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dDirectionLinePersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java	2008-06-19 10:57:35 UTC (rev 3649)
@@ -0,0 +1,26 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:58 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.persistence;
+
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dZone;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Gestion de la persistance pour un calque trace 1d.
+ * @author Bertrand Marchand
+ * @see MdlLayer2dProfile
+ */
+public class MdlLayer2dZonePersistence extends MdlLayer2dLinePersistence {
+  
+  @Override
+  protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
+    return MdlLayer2dZone.createNew(_editor);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dZonePersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 10:56:33
      
     | 
| Revision: 3648
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3648&view=rev
Author:   bmarchan
Date:     2008-06-19 03:56:32 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Mise en place des calques 2D non encore impl?\195?\169ment?\195?\169s.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java	2008-06-19 10:55:49 UTC (rev 3647)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java	2008-06-19 10:56:32 UTC (rev 3648)
@@ -96,19 +96,13 @@
 
   }
 
-  public void copy() {
-    getMdlVisuPanel().copy();
-  }
+  public void copy() {}
 
-  public void cut() {
-    getMdlVisuPanel().cut();
-  }
+  public void cut() {}
 
   public void duplicate() {
     getMdlVisuPanel().duplicate();
   }
 
-  public void paste() {
-    getMdlVisuPanel().paste();
-  }
+  public void paste() {}
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-19 10:55:49 UTC (rev 3647)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-19 10:56:32 UTC (rev 3648)
@@ -20,8 +20,12 @@
 import org.fudaa.fudaa.modeleur.action.CalqueNewCalqueAction;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer1dTrace;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dCloud;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dConstraintLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dContour;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dDirectionLine;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLevel;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dZone;
 import org.fudaa.fudaa.modeleur.layer.MdlModel2dCloud;
 import org.fudaa.fudaa.modeleur.layer.MdlModel2dLevel;
 import org.fudaa.fudaa.modeleur.layer.MdlModel2dProfile;
@@ -43,6 +47,7 @@
 //  final FSigLayerGroup parent_;
   BGroupeCalque cqImg_;
   BGroupeCalque cqAlti_;
+  BGroupeCalque cqSing_;
   BGroupeCalque cqMdl1d_;
   
   /**
@@ -79,6 +84,7 @@
   public void initCalques(boolean _build) {
     removeAllCalqueDonnees();
     buildAltiLayerGroup(_build);
+    buildSingLayerGroup(_build);
     buildModel1dLayerGroup(_build);
     buildImageGroup();
     
@@ -132,6 +138,35 @@
     cqAlti_.add(cqProfile);
   }
   
+  /**
+   * Mise en place du groupe des singularit\xE9s 2D.
+   */
+  protected void buildSingLayerGroup(boolean _build) {
+    cqSing_ = new BGroupeCalque();
+    cqSing_.setTitle(MdlResource.MDL.getString("Singularit\xE9s"));
+    cqSing_.setName("gcSing");
+    cqSing_.putClientProperty(Action.SHORT_DESCRIPTION, TrResource.getS("Permet le stockage singularit\xE9s 2D"));
+    cqSing_.setDestructible(false);
+    addCalque(cqSing_);
+
+    if (!_build) return;
+    
+    MdlLayer2dContour cqCnt=MdlLayer2dContour.createNew(getGisEditor());
+    cqCnt.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqCnt.getExtName()));
+    cqSing_.add(cqCnt);
+
+    MdlLayer2dZone cqZone=MdlLayer2dZone.createNew(getGisEditor());
+    cqZone.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqZone.getExtName()));
+    cqSing_.add(cqZone);
+    
+    MdlLayer2dConstraintLine cqConst=MdlLayer2dConstraintLine.createNew(getGisEditor());
+    cqConst.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqConst.getExtName()));
+    cqSing_.add(cqConst);
+    
+    MdlLayer2dDirectionLine cqDirect=MdlLayer2dDirectionLine.createNew(getGisEditor());
+    cqDirect.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqDirect.getExtName()));
+    cqSing_.add(cqDirect);
+  }
   
   /**
    * Mise en place du groupe du mod\xE8le 1d.
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java	2008-06-19 10:55:49 UTC (rev 3647)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java	2008-06-19 10:56:32 UTC (rev 3648)
@@ -7,6 +7,7 @@
  */
 package org.fudaa.fudaa.modeleur.layer;
 
+import java.awt.Color;
 import java.util.ArrayList;
 import java.util.Arrays;
 
@@ -16,6 +17,8 @@
 import org.fudaa.ebli.calque.edition.ZCalqueMultiPointEditable;
 import org.fudaa.ebli.calque.edition.ZModeleMultiPointEditable;
 import org.fudaa.ebli.commun.EbliActionInterface;
+import org.fudaa.ebli.trace.TraceIcon;
+import org.fudaa.ebli.trace.TraceIconModel;
 import org.fudaa.fudaa.modeleur.MdlResource;
 import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dCloudPersistence;
 import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dMultiPointPersistence;
@@ -36,6 +39,8 @@
   private MdlLayer2dCloud(ZModeleMultiPointEditable _model,  final FSigEditor _editor) {
     super(_model,_editor);
     setName(getExtName());
+    setIconModel(0, new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, new Color(0,190,0)));
+
     setTitle(MdlResource.MDL.getString("Semis de points"));
   }
   
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 10:55:41
      
     | 
| Revision: 3647
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3647&view=rev
Author:   bmarchan
Date:     2008-06-19 03:55:49 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Un peu de doc.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html	2008-06-19 10:54:10 UTC (rev 3646)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html	2008-06-19 10:55:49 UTC (rev 3647)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<i>Contient les calques 2D sp\xE9cifiques \xE0 la visualisation dans le modeleur.<p>
+<i>Contient les calques 2D/1D et les mod\xE8les sp\xE9cifiques \xE0 la visualisation dans le modeleur.<p>
 </body>
 </html>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 10:54:02
      
     | 
| Revision: 3646
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3646&view=rev
Author:   bmarchan
Date:     2008-06-19 03:54:10 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Placement du checkbox visibilit?\195?\169 plus appropri?\195?\169.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java	2008-06-19 10:52:35 UTC (rev 3645)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalque.java	2008-06-19 10:54:10 UTC (rev 3646)
@@ -204,16 +204,29 @@
           // on recupere le rectangle englobant de la cellule
           final Rectangle r = getRowBounds(getRowForPath(p));
           // calcul de l'enveloppe de la case a cocher
-          // la case a cocher est a droite ....
-          final int maxX = r.x + r.width;
-          final int minX = maxX - cbWidth_;
-          final int minY = r.y;
+//          // la case a cocher est a droite ....
+//          final int maxX = r.x + r.width;
+//          final int minX = maxX - cbWidth_;
+//          final int minY = r.y;
+//          final int maxY = minY + cbHeight_;
+//          if (e.getX() >= minX && e.getX() <= maxX && e.getY() >= minY && e.getY() <= maxY) {
+//            return true;
+//          }
+//          // pour modifier le nom
+//          else if (e.getClickCount() == 2 && (e.getX() > r.x + cq.getIconWidth()) && (e.getX() < minX)
+//              && cq.isTitleModifiable()) {
+//            return true;
+//          }
+          // la case a cocher est a gauche, pour plus de facilit\xE9 d'acc\xE8s ....
+          final int maxX = r.x + cbWidth_;
+          final int minX = r.x;
+          final int minY = r.y+4;
           final int maxY = minY + cbHeight_;
           if (e.getX() >= minX && e.getX() <= maxX && e.getY() >= minY && e.getY() <= maxY) {
             return true;
           }
           // pour modifier le nom
-          else if (e.getClickCount() == 2 && (e.getX() > r.x + cq.getIconWidth()) && (e.getX() < minX)
+          else if (e.getClickCount() == 2 && (e.getX() > r.x +cbWidth_+ cq.getIconWidth()) && (e.getX() < r.x+r.width)
               && cq.isTitleModifiable()) {
             return true;
           }
@@ -478,7 +491,7 @@
       r2_ = new JLabel(" ");
       r2_.setPreferredSize(new Dimension(80, 12));
       r3_ = new JLabel(" ");
-      r3_.setPreferredSize(new Dimension(25, 25));
+      r3_.setPreferredSize(new Dimension(25,25));
       final JPanel r4 = new JPanel(new BuBorderLayout(0, 1, true, true));
       r4.add(r1_, BuBorderLayout.CENTER);
       r4.add(r2_, BuBorderLayout.SOUTH);
@@ -486,8 +499,8 @@
       final BuBorderLayout lay = new BuBorderLayout(2, 1, true, true);
       lay.setYAlign(0);
       setLayout(lay);
-      add(r3_, BuBorderLayout.WEST);
-      add(r4, BuBorderLayout.CENTER);
+      add(r3_, BuBorderLayout.CENTER);
+      add(r4, BuBorderLayout.EAST);
       if (_editable) {
         cbVisible_ = new BuCheckBox();
         // pour ne pas tout dessiner
@@ -495,8 +508,8 @@
         cbVisible_.setToolTipText(EbliLib.getS("Visible"));
         cbVisible_.setVerticalAlignment(SwingConstants.TOP);
         cbVisible_.setHorizontalAlignment(SwingConstants.RIGHT);
-        cbVisible_.setMargin(new Insets(0, 4, 0, 0));
-        r4.add(cbVisible_, BuBorderLayout.EAST);
+        cbVisible_.setMargin(new Insets(8, 0, 0, 0));
+        add(cbVisible_, BuBorderLayout.WEST);
       }
       setOpaque(true);
     }
@@ -514,6 +527,9 @@
       if (_value instanceof BCalque) {
         final BCalque calque = (BCalque) _value;
         r3_.setIcon(calque);
+        // Si on souhaite pouvoir retailler l'icon du calque.
+//        r3_.setIcon(CtuluLibImage.resize(calque,r3_.getPreferredSize().width,r3_.getPreferredSize().height));
+        
         calqueInfo = (String) calque.getClientProperty("CalqueInfo");
         if (calqueInfo != null) {
           s.append(calqueInfo);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-19 10:52:35
      
     | 
| Revision: 3645
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3645&view=rev
Author:   bmarchan
Date:     2008-06-19 03:52:35 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Resize icone en tenant compte de la transparence.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/image/CtuluLibImage.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/image/CtuluLibImage.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/image/CtuluLibImage.java	2008-06-18 09:11:57 UTC (rev 3644)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/image/CtuluLibImage.java	2008-06-19 10:52:35 UTC (rev 3645)
@@ -302,7 +302,7 @@
   }
 
   public static BufferedImage resize(final BufferedImage _init, final int _newW, final int _newH) {
-    return resize(_init, _newW, _newH, BufferedImage.TYPE_INT_RGB);
+    return resize(_init, _newW, _newH, BufferedImage.TYPE_INT_ARGB);
   }
 
   public static BufferedImage resize(final BufferedImage _init, final int _newW, final int _newH, final int _type) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-18 09:12:21
      
     | 
| Revision: 3644
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3644&view=rev
Author:   bmarchan
Date:     2008-06-18 02:11:57 -0700 (Wed, 18 Jun 2008)
Log Message:
-----------
Correction methode setSelection() mal implement?\195?\169e
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java	2008-06-18 09:09:38 UTC (rev 3643)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java	2008-06-18 09:11:57 UTC (rev 3644)
@@ -17,6 +17,7 @@
 
 import org.nfunk.jep.Variable;
 
+import com.memoire.fu.FuLog;
 import com.vividsolutions.jts.algorithm.SIRtreePointInRing;
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.CoordinateSequence;
@@ -891,9 +892,11 @@
   }
 
   public boolean setSelection(final int[] _idx) {
-    if (isAtomicMode_) {
+    if (!isAtomicMode_) {
       return super.setSelection(_idx);
     }
+    // TODO : Traitement a faire si on est en mode atomique.
+    FuLog.warning("EBL:ZCalqueLigneBrisee.setSelection() can't be called in atomic mode");
     return false;
   }
 
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java	2008-06-18 09:09:38 UTC (rev 3643)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java	2008-06-18 09:11:57 UTC (rev 3644)
@@ -17,6 +17,7 @@
 
 import org.nfunk.jep.Variable;
 
+import com.memoire.fu.FuLog;
 import com.vividsolutions.jts.algorithm.SIRtreePointInRing;
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.CoordinateSequence;
@@ -718,9 +719,11 @@
   }
 
   public boolean setSelection(final int[] _idx) {
-    if (isAtomicMode_) {
+    if (!isAtomicMode_) {
       return super.setSelection(_idx);
     }
+    // TODO : Traitement a faire si on est en mode atomique.
+    FuLog.warning("EBL:ZCalqueLigneBrisee.setSelection() can't be called in atomic mode");
     return false;
   }
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-18 09:11:36
      
     | 
| Revision: 3643
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3643&view=rev
Author:   bmarchan
Date:     2008-06-18 02:09:38 -0700 (Wed, 18 Jun 2008)
Log Message:
-----------
Impl?\195?\169mentation fonction dupliquer geometrie.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModelePointEditable.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -60,6 +60,14 @@
   boolean rotateSelectedObjects(double _angRad, double _xreel0, double _yreel0, CtuluCommandContainer _cmd, CtuluUI _ui);
   
   /**
+   * Duplique les objets s\xE9lectionn\xE9s avec un d\xE9calage suivant X et Y.
+   * @param _cmd le receveur de commande
+   * @param _ui l'interface utilisateur
+   * @return true is commande reussie
+   */
+  public boolean copySelectedObjects(CtuluCommandContainer _cmd, CtuluUI _ui);
+  
+  /**
    * Retourne si la forme d'un certain type peut \xEAtre ajout\xE9e.
    * @param _typeForme Le type de forme
    * @return true si ce type de forme peut \xEAtre ajout\xE9.
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -248,9 +248,9 @@
   public boolean moveSelectedObjects(final double _reelDx, final double _reelDy, final double _reelDz, final CtuluCommandContainer _cmd, final CtuluUI _ui) {
     if (!isSelectionEmpty()) {
       if (isAtomicMode()) {
-        getModelePoly().moveAtomic(selectionMulti_, _reelDx, _reelDy, _reelDz, _cmd, _ui);
+        return getModelePoly().moveAtomic(selectionMulti_, _reelDx, _reelDy, _reelDz, _cmd, _ui);
       } else {
-        getModelePoly().moveGlobal(selection_, _reelDx, _reelDy, _reelDz, _cmd);
+        return getModelePoly().moveGlobal(selection_, _reelDx, _reelDy, _reelDz, _cmd);
       }
     }
 
@@ -262,14 +262,34 @@
   public boolean rotateSelectedObjects(double _angRad, double _xreel0, double _yreel0, CtuluCommandContainer _cmd, CtuluUI _ui) {
     if (!isSelectionEmpty()) {
       if (isAtomicMode()) {
-        getModelePoly().rotateAtomic(selectionMulti_, _angRad, _xreel0, _yreel0, _cmd, _ui);
+        return getModelePoly().rotateAtomic(selectionMulti_, _angRad, _xreel0, _yreel0, _cmd, _ui);
       } else {
-        getModelePoly().rotateGlobal(selection_, _angRad, _xreel0, _yreel0, _cmd);
+        return getModelePoly().rotateGlobal(selection_, _angRad, _xreel0, _yreel0, _cmd);
       }
     }
     return false;
   }
 
+  /*
+   * @see org.fudaa.ebli.calque.edition.ZCalqueEditable#copySelectedObjects(org.fudaa.ctulu.CtuluCommandContainer, org.fudaa.ctulu.CtuluUI)
+   */
+  public boolean copySelectedObjects(CtuluCommandContainer _cmd, CtuluUI _ui) {
+    if (isSelectionEmpty() || isAtomicMode()) return false;
+    int nb=getModelePoly().getNombre();
+
+    GrSegment pdec=new GrSegment(new GrPoint(0,5,0),new GrPoint(5,0,0));
+    pdec.autoApplique(getVersReel());
+    if (!getModelePoly().copyGlobal(selection_, pdec.getVx(), pdec.getVy(), _cmd)) return false;
+    
+    // Changement de selection.
+    int[] isels=new int[selection_.getNbSelectedIndex()];
+    for (int i=0; i<isels.length; i++) {
+      isels[i]=nb+i;
+    }
+    setSelection(isels);
+    return true;
+  }
+  
   public void paintDeplacement(final Graphics2D _g2d, final int _dxEcran, final int _dyEcran, final TraceIcon _trace) {
     if (!isSelectionEmpty()) {
       if (isAtomicMode()) {
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -26,6 +26,7 @@
 import org.fudaa.ebli.geometrie.GrObjet;
 import org.fudaa.ebli.geometrie.GrPoint;
 import org.fudaa.ebli.geometrie.GrPolyligne;
+import org.fudaa.ebli.geometrie.GrSegment;
 import org.fudaa.ebli.trace.TraceIcon;
 import org.fudaa.ebli.trace.TraceLigne;
 
@@ -181,6 +182,26 @@
     }
   }
 
+  /*
+   * @see org.fudaa.ebli.calque.edition.ZCalqueEditable#copySelectedObjects(org.fudaa.ctulu.CtuluCommandContainer, org.fudaa.ctulu.CtuluUI)
+   */
+  public boolean copySelectedObjects(CtuluCommandContainer _cmd, CtuluUI _ui) {
+    if (isSelectionEmpty() || isAtomicMode()) return false;
+    int nb=getMultiPointModel().getNombre();
+
+    GrSegment pdec=new GrSegment(new GrPoint(0,5,0),new GrPoint(5,0,0));
+    pdec.autoApplique(getVersReel());
+    if (!getMultiPointModel().copyGlobal(selection_, pdec.getVx(), pdec.getVy(), _cmd)) return false;
+    
+    // Changement de selection.
+    int[] isels=new int[selection_.getNbSelectedIndex()];
+    for (int i=0; i<isels.length; i++) {
+      isels[i]=nb+i;
+    }
+    setSelection(isels);
+    return true;
+  }
+
   /**
    * Dessine le deplacement pour les sommets selectionn\xE9s.
    * @param _g2d Le contexte graphique.
@@ -318,5 +339,4 @@
   public final void setEditor(final ZEditorInterface _editor) {
     editor_ = _editor;
   }
-
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -33,6 +33,7 @@
 import org.fudaa.ebli.geometrie.GrMorphisme;
 import org.fudaa.ebli.geometrie.GrObjet;
 import org.fudaa.ebli.geometrie.GrPoint;
+import org.fudaa.ebli.geometrie.GrSegment;
 import org.fudaa.ebli.trace.TraceIcon;
 
 import com.memoire.fu.FuLog;
@@ -264,6 +265,26 @@
     return false;
   }
 
+  /*
+   * @see org.fudaa.ebli.calque.edition.ZCalqueEditable#copySelectedObjects(org.fudaa.ctulu.CtuluCommandContainer, org.fudaa.ctulu.CtuluUI)
+   */
+  public boolean copySelectedObjects(CtuluCommandContainer _cmd, CtuluUI _ui) {
+    if (isSelectionEmpty() || isAtomicMode()) return false;
+    int nb=modele_.getNombre();
+
+    GrSegment pdec=new GrSegment(new GrPoint(0,5,0),new GrPoint(5,0,0));
+    pdec.autoApplique(getVersReel());
+    if (!((ZModelePointEditable)modele_).copyGlobal(selection_, pdec.getVx(), pdec.getVy(), _cmd)) return false;
+    
+    // Changement de selection.
+    int[] isels=new int[selection_.getNbSelectedIndex()];
+    for (int i=0; i<isels.length; i++) {
+      isels[i]=nb+i;
+    }
+    setSelection(isels);
+    return true;
+  }
+
   public final void setEditor(final ZEditorInterface _editor) {
     editor_ = _editor;
   }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -744,4 +744,35 @@
     geometries_.removeLignes(_idx, _cmd);
     return true;
   }
+  
+  /**
+   * Copie d'une geom\xE9trie, avec d\xE9calage.
+   */
+  public boolean copyGlobal(CtuluListSelectionInterface _selection, double _dx, double _dy, final CtuluCommandContainer _cmd) {
+    if (geometries_ == null) return false;
+    
+    final CtuluCommandComposite cmp = new CtuluCommandComposite();
+    for (int idx = _selection.getMinIndex(); idx<=_selection.getMaxIndex(); idx++) {
+      if (_selection.isSelected(idx)) {
+        // La g\xE9ometrie, d\xE9cal\xE9e.
+        LineString geom=(LineString)geometries_.getGeometry(idx).clone();
+        CoordinateSequence seq=geom.getCoordinateSequence();
+        for (int i=0; i<seq.size(); i++) {
+          seq.setOrdinate(i,0,seq.getX(i)+_dx);
+          seq.setOrdinate(i,1,seq.getY(i)+_dy);
+        }
+        // Les valeurs d'attribut.
+        Object[] vals=new Object[geometries_.getNbAttributes()];
+        for (int iatt=0; iatt<geometries_.getNbAttributes(); iatt++) {
+          Object val=geometries_.getValue(iatt,idx);
+          int nbpt=geom.getNumPoints();
+          vals[iatt]=geometries_.getAttribute(iatt).createDataForGeom(val, nbpt);
+        }
+        geometries_.addGeometry(geom,vals,cmp);
+      }
+    }
+    
+    if (_cmd!=null) _cmd.addCmd(cmp.getSimplify());
+    return true;
+  }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -18,6 +18,7 @@
 import com.vividsolutions.jts.geom.CoordinateSequence;
 import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.LineString;
 
 import com.memoire.bu.BuTable;
 import com.memoire.fu.FuLog;
@@ -720,4 +721,35 @@
     }
     return r;
   }
+  
+  /**
+   * Copie d'une geom\xE9trie, avec d\xE9calage.
+   */
+  public boolean copyGlobal(CtuluListSelectionInterface _selection, double _dx, double _dy, final CtuluCommandContainer _cmd) {
+    if (geometries_ == null) return false;
+    
+    final CtuluCommandComposite cmp = new CtuluCommandComposite();
+    for (int idx = _selection.getMinIndex(); idx<=_selection.getMaxIndex(); idx++) {
+      if (_selection.isSelected(idx)) {
+        // La g\xE9ometrie, d\xE9cal\xE9e.
+        CoordinateSequence seq=(CoordinateSequence)((GISMultiPoint)geometries_.getGeometry(idx)).getCoordinateSequence().clone();
+        for (int i=0; i<seq.size(); i++) {
+          seq.setOrdinate(i,0,seq.getX(i)+_dx);
+          seq.setOrdinate(i,1,seq.getY(i)+_dy);
+        }
+        GISMultiPoint geom=(GISMultiPoint)GISGeometryFactory.INSTANCE.createMultiPoint(seq);
+        // Les valeurs d'attribut.
+        Object[] vals=new Object[geometries_.getNbAttributes()];
+        for (int iatt=0; iatt<geometries_.getNbAttributes(); iatt++) {
+          Object val=geometries_.getValue(iatt,idx);
+          int nbpt=geom.getNumPoints();
+          vals[iatt]=geometries_.getAttribute(iatt).createDataForGeom(val, nbpt);
+        }
+        geometries_.addGeometry(geom,vals,cmp);
+      }
+    }
+    
+    if (_cmd!=null) _cmd.addCmd(cmp.getSimplify());
+    return true;
+  }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModelePointEditable.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModelePointEditable.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModelePointEditable.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -14,14 +14,18 @@
 
 import com.vividsolutions.jts.geom.CoordinateSequence;
 import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.Point;
 
 import com.memoire.bu.BuTable;
 
 import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.ctulu.CtuluCommandComposite;
 import org.fudaa.ctulu.CtuluCommandContainer;
 import org.fudaa.ctulu.CtuluLib;
 import org.fudaa.ctulu.CtuluLibGeometrie;
 import org.fudaa.ctulu.CtuluLibString;
+import org.fudaa.ctulu.CtuluListSelectionInterface;
+import org.fudaa.ctulu.gis.GISMultiPoint;
 import org.fudaa.ctulu.gis.GISPoint;
 import org.fudaa.ctulu.gis.GISZoneCollection;
 import org.fudaa.ctulu.gis.GISZoneCollectionPoint;
@@ -222,6 +226,37 @@
       }
     }
   }
+  
+  /**
+   * Copie d'une geom\xE9trie, avec d\xE9calage.
+   */
+  public boolean copyGlobal(CtuluListSelectionInterface _selection, double _dx, double _dy, final CtuluCommandContainer _cmd) {
+    if (pts_ == null) return false;
+    
+    final CtuluCommandComposite cmp = new CtuluCommandComposite();
+    for (int idx = _selection.getMinIndex(); idx<=_selection.getMaxIndex(); idx++) {
+      if (_selection.isSelected(idx)) {
+        // La g\xE9ometrie, d\xE9cal\xE9e.
+        Point geom=(Point)pts_.getGeometry(idx).clone();
+        CoordinateSequence seq=geom.getCoordinateSequence();
+        for (int i=0; i<seq.size(); i++) {
+          seq.setOrdinate(i,0,seq.getX(i)+_dx);
+          seq.setOrdinate(i,1,seq.getY(i)+_dy);
+        }
+        // Les valeurs d'attribut.
+        Object[] vals=new Object[pts_.getNbAttributes()];
+        for (int iatt=0; iatt<pts_.getNbAttributes(); iatt++) {
+          Object val=pts_.getValue(iatt,idx);
+          int nbpt=geom.getNumPoints();
+          vals[iatt]=pts_.getAttribute(iatt).createDataForGeom(val, nbpt);
+        }
+        pts_.addGeometry(geom,vals,cmp);
+      }
+    }
+    
+    if (_cmd!=null) _cmd.addCmd(cmp.getSimplify());
+    return true;
+  }
 
   public int getNombre() {
     return pts_.getNumGeometries();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -85,6 +85,20 @@
     }
   }
   
+  /**
+   * Copie les objets s\xE9lectionn\xE9s.
+   */
+  public void copySelectedObjects() {
+    ZCalqueEditable[] cqs=scene_.getEditableLayers();
+    final CtuluCommandComposite cmp = new CtuluCommandComposite();
+    for (int i=0; i<cqs.length; i++) {
+      cqs[i].copySelectedObjects(cmp, ui_);
+    }
+    if (mng_ != null) {
+      mng_.addCmd(cmp.getSimplify());
+    }
+  }
+  
   protected void methodNotImplemented() {
     StackTraceElement stel=new Throwable().getStackTrace()[1];
     String name=stel.getClassName()+"."+stel.getMethodName();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -32,6 +32,7 @@
 import java.util.List;
 import java.util.Locale;
 
+import javax.swing.AbstractAction;
 import javax.swing.AbstractButton;
 import javax.swing.Action;
 import javax.swing.JButton;
@@ -156,24 +157,6 @@
     return idx;
   }
 
-  /**
-   * Retourne l'index d'une commande dans le menu.
-   * @param _mn Le menu
-   * @param _cmd La chaine repr\xE9sentant la commande
-   * @return L'index, ou -1 si non trouv\xE9.
-   */
-  private int indexOfActionInMenu(final BuMenu _mn, String _cmd) {
-    int idx = -1;
-    for (int i = _mn.getItemCount() - 1; i >= 0; i--) {
-      if (_mn.getItem(i) instanceof JMenuItem
-          && _cmd.equals(_mn.getItem(i).getActionCommand())) {
-        idx = i;
-        break;
-      }
-    }
-    return idx;
-  }
-
   private void gestionnaireImpression(final String _commande) {
     final JInternalFrame frame = getCurrentInternalFrame();
     final EbliPageable target;
@@ -275,14 +258,18 @@
     return false;
   }
 
-  
   /**
-   * Cr\xE9ation d'une action ebli a partir d'un item menu.
-   * @return L'action cr\xE9\xE9e, ou null si aucune commande ne correspond.
+   * Remplace un item menu en provenance de Bu par une action, plus g\xE9n\xE9raliste.
+   * @param _command La commande.
+   * @return L'action de remplacement, ou null si la commande n'existait pas.
    */
-  private EbliActionAbstract createActionFromItem(String _command) {
+  protected EbliActionAbstract replaceItemByAction(String _command) {
     JMenuItem it=((JMenuItem)getMainMenuBar().getMenuItem(_command));
     if (it==null) return null;
+    BuMenu mn=(BuMenu)getMainMenuBar().getMenuForAction(_command);
+    if (mn==null) return null;
+    int idx=mn.indexOf(_command);
+    if (idx==-1) return null;
 
     EbliActionAbstract act=new EbliActionSimple(it.getText(),it.getIcon(),it.getActionCommand()) {
       public void actionPerformed(ActionEvent _evt) {
@@ -291,18 +278,23 @@
     };
     act.setDefaultToolTip(it.getToolTipText());
     act.setKey(it.getAccelerator());
+    mn.remove(idx);
+    mn.insert(act,idx)
+    // Pour rester compatible avec Bu.
+      .setName("mi"+_command);
+    
     return act;
   }
-  
+    
   /**
    * Cr\xE9ation des actions sp\xE9cifiques a Fudaa.
    */
   private void buildActions() {
     EbliActionAbstract act;
 
-    act=createActionFromItem("TOUTSELECTIONNER");
+    act=replaceItemByAction("TOUTSELECTIONNER");
     if (act!=null) EbliActionMap.getInstance().addAction(act);
-    act=createActionFromItem("RECHERCHER");
+    act=replaceItemByAction("RECHERCHER");
     if (act!=null) EbliActionMap.getInstance().addAction(act);
 
     act=new EbliActionSimple(CtuluLib.getS("Inverser la s\xE9lection"),BuResource.BU.getIcon("aucun"),"INVERSESELECTION") {
@@ -321,6 +313,9 @@
     act.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
     EbliActionMap.getInstance().addAction(act);
     
+    act=replaceItemByAction("DUPLIQUER");
+    act.setEnabled(false);
+    if (act!=null) EbliActionMap.getInstance().addAction(act);
   }
   
   /**
@@ -495,14 +490,10 @@
   }
   
   protected void rebuildEditionMenu(final BuMenu _dest) {
-    int indSelect=indexOfActionInMenu(_dest, "TOUTSELECTIONNER");
-    _dest.remove(indSelect);
-    _dest.remove(indSelect);
-    _dest.remove(indSelect);
-    _dest.insert(EbliActionMap.getInstance().getAction("TOUTSELECTIONNER"),indSelect);
+    int indSelect=_dest.indexOf("TOUTSELECTIONNER");
+    _dest.remove(indSelect+2);
     _dest.insert(EbliActionMap.getInstance().getAction("INVERSESELECTION"),indSelect+1);
     _dest.insert(EbliActionMap.getInstance().getAction("CLEARSELECTION"),indSelect+2);
-    _dest.insert(EbliActionMap.getInstance().getAction("RECHERCHER"),indSelect+3);
     addConsoleMenu(_dest);
   }
 
@@ -805,8 +796,8 @@
    */
   public void init() {
     super.init();
+    
     buildActions();
-//    addConsoleMenu((BuMenu) getMainMenuBar().getMenu("MENU_EDITION"));
     rebuildEditionMenu((BuMenu) getMainMenuBar().getMenu("MENU_EDITION"));
     
     final BuToolBar tb = getMainToolBar();
@@ -844,7 +835,7 @@
       }
 
     }
-    final BuMenu mn = (BuMenu) getMainMenuBar().getMenu("MENU_FENETRES");
+    BuMenu mn = (BuMenu) getMainMenuBar().getMenu("MENU_FENETRES");
 
     if (mn != null) {
       mn.remove(0);
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -11,6 +11,7 @@
 
 import com.db4o.ObjectContainer;
 
+import com.memoire.bu.BuCutCopyPasteInterface;
 import com.memoire.bu.BuUndoRedoInterface;
 
 import org.fudaa.ctulu.CtuluCommandManager;
@@ -39,7 +40,7 @@
  * @version $Id: MdlFille2d.java,v 1.1.2.1 2008/02/01 14:40:03 bmarchan Exp $
  */
 public class MdlFille2d extends ZEbliFilleCalques implements BuUndoRedoInterface, CtuluExportDataInterface,
-    CtuluImageImporter, CtuluUndoRedoInterface, FudaaSavable {
+    CtuluImageImporter, CtuluUndoRedoInterface, FudaaSavable, BuCutCopyPasteInterface {
 
   public MdlFille2d(FudaaCommonImplementation _ui) {
     super(new MdlVisuPanel(_ui), _ui, null);
@@ -80,7 +81,6 @@
 
   public void undo() {
     getMdlVisuPanel().undo();
-
   }
 
   public void clearCmd(final CtuluCommandManager _source) {
@@ -96,4 +96,19 @@
 
   }
 
+  public void copy() {
+    getMdlVisuPanel().copy();
+  }
+
+  public void cut() {
+    getMdlVisuPanel().cut();
+  }
+
+  public void duplicate() {
+    getMdlVisuPanel().duplicate();
+  }
+
+  public void paste() {
+    getMdlVisuPanel().paste();
+  }
 }
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -10,7 +10,10 @@
 import javax.swing.Action;
 
 import org.fudaa.ebli.calque.BGroupeCalque;
+import org.fudaa.ebli.calque.ZSelectionEvent;
+import org.fudaa.ebli.calque.ZSelectionListener;
 import org.fudaa.ebli.commun.EbliActionInterface;
+import org.fudaa.ebli.commun.EbliActionMap;
 import org.fudaa.ebli.ressource.EbliResource;
 import org.fudaa.fudaa.commun.FudaaLib;
 import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation;
@@ -35,7 +38,7 @@
  * @author fred deniger
  * @version $Id: MdlVisuPanel.java,v 1.1.2.6 2008/05/13 12:10:21 bmarchan Exp $
  */
-public class MdlVisuPanel extends FSigVisuPanel {
+public class MdlVisuPanel extends FSigVisuPanel implements ZSelectionListener {
 
 //  final FSigLayerGroup parent_;
   BGroupeCalque cqImg_;
@@ -50,8 +53,9 @@
   public MdlVisuPanel(FudaaCommonImplementation _impl/*, boolean _createDefault*/) {
     super(_impl);
     initCalques(true);
-    installActions();
+    installLayerActions();
     getScene().setRestrictedToCalqueActif(false);
+    getScene().addSelectionListener(this);
   }
 
   protected FSigEditor createGisEditor() {
@@ -78,10 +82,10 @@
     buildModel1dLayerGroup(_build);
     buildImageGroup();
     
-    installActions();
+    installLayerActions();
   }
   
-  protected void installActions() {
+  protected void installLayerActions() {
     EbliActionInterface actNewCloud=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque semis"),FudaaResource.FUDAA.getIcon("ajouter"),"NEW_LAYER2D_CLOUD",cqAlti_,getGisEditor());
     EbliActionInterface actNewLevel=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque courbes de niveaux"),FudaaResource.FUDAA.getIcon("ajouter"),"NEW_LAYER2D_LEVEL",cqAlti_,getGisEditor());
     EbliActionInterface actNewProfile=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque profils"),FudaaResource.FUDAA.getIcon("ajouter"),"NEW_LAYER2D_PROFILE",cqAlti_,getGisEditor());
@@ -146,4 +150,12 @@
     cqTrace.setName(BGroupeCalque.findUniqueChildName(cqMdl1d_, cqTrace.getExtName()));
     cqMdl1d_.add(cqTrace);
   }
+
+  /*
+   * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent)
+   */
+  public void selectionChanged(ZSelectionEvent _evt) {
+    EbliActionInterface act=EbliActionMap.getInstance().getAction("DUPLIQUER");
+    act.setEnabled(!getScene().isSelectionEmpty());
+  }
 }
\ No newline at end of file
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java	2008-06-18 09:00:45 UTC (rev 3642)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java	2008-06-18 09:09:38 UTC (rev 3643)
@@ -220,6 +220,10 @@
     mng_.undo();
   }
 
+  public void duplicate() {
+    gisEditor_.getSceneEditor().copySelectedObjects();
+  }
+
   /**
    * @return le groupe contenant les donn\xE9es geographiques.
    */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-18 09:01:14
      
     | 
| Revision: 3642
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3642&view=rev
Author:   bmarchan
Date:     2008-06-18 02:00:45 -0700 (Wed, 18 Jun 2008)
Log Message:
-----------
Ajout de methodes d'acc?\195?\168s aux menus par la commande d'action.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenu.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenuBar.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenu.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenu.java	2008-06-18 08:51:48 UTC (rev 3641)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenu.java	2008-06-18 09:00:45 UTC (rev 3642)
@@ -320,7 +320,26 @@
   {
     return addMenuItem(_s,_cmd,true);
   }
+  
+  /**
+   * Retourne l'index de l'item de commande donn\xE9e.
+   * @param _cmd Le nom de la commande.
+   * @return L'index, ou -1 si non trouv\xE9.
+   */
+  public int indexOf(String _cmd) {
+    return indexOf(this,_cmd);
+  }
 
+  private int indexOf(BuMenu _menu, String _cmd) {
+    if (_cmd==null) return -1;
+
+    for (int i=0; i<_menu.getItemCount(); i++) {
+      if (!(_menu.getItem(i) instanceof JMenuItem)) continue;
+      if (_cmd.equals(_menu.getItem(i).getActionCommand())) return i;
+    }
+    return -1;
+  }
+
   public BuMenuItem addMenuItem(String _s, String _cmd,
 				ActionListener _al)
   {
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenuBar.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenuBar.java	2008-06-18 08:51:48 UTC (rev 3641)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/com/memoire/bu/BuMenuBar.java	2008-06-18 09:00:45 UTC (rev 3642)
@@ -22,6 +22,7 @@
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
 import javax.swing.MenuElement;
 
 import com.memoire.fu.FuFactoryInteger;
@@ -232,22 +233,55 @@
     return getMenuItem(this,_name);
   }
 
-  /*
-  public void removeMenu(String _name)
+  /**
+   * Retourne le menu qui contient l'item de commande donn\xE9e, recursivement a 
+   * partir de la barre de menus.
+   * @param _cmd La commande
+   * @return Le menu
+   */
+  public JMenu getMenuForAction(String _cmd)
   {
-    MenuElement[] c=getSubElements();
-    for(int i=0; i<c.length; i++)
-      if(c[i] instanceof JMenu)
-      {
-	JMenu m=(JMenu)c[i];
-	if(m.getName().equals("mn"+_name))
-	  remove(m);
+    return getMenuForAction(this,_cmd);
+  }
+
+  /**
+   * Retourne le menu qui contient l'item de commande donn\xE9e, recursivement a 
+   * partir du menu en parametres.
+   * @param _cmd La commande
+   * @return Le menu
+   */
+  public static JMenu getMenuForAction(MenuElement _menu, String _cmd) {
+    if (_cmd==null) return null;
+
+    JMenu r=null;
+
+    MenuElement[] c=_menu.getSubElements();
+
+    for (int i=0; i<c.length; i++) {
+      if (c[i] instanceof JMenuItem) {
+        JMenuItem m=(JMenuItem)c[i];
+
+        if (m.getActionCommand().equals(_cmd)) {
+          r=(JMenu)((JPopupMenu)m.getParent()).getInvoker();
+          break;
+        }
       }
-    doLayout();
-    validate();
+
+      r=getMenuForAction(c[i], _cmd);
+      if (r!=null)
+        break;
+    }
+
+    return r;
   }
-  */
 
+  /*
+   * public void removeMenu(String _name) { MenuElement[] c=getSubElements();
+   * for(int i=0; i<c.length; i++) if(c[i] instanceof JMenu) { JMenu
+   * m=(JMenu)c[i]; if(m.getName().equals("mn"+_name)) remove(m); } doLayout();
+   * validate(); }
+   */
+
   public void addRecentFile(String _path, String _icon)
   {
     BuMenu m=(BuMenu)getMenu("REOUVRIR");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-18 08:52:07
      
     | 
| Revision: 3641
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3641&view=rev
Author:   bmarchan
Date:     2008-06-18 01:51:48 -0700 (Wed, 18 Jun 2008)
Log Message:
-----------
Renommage methode.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java	2008-06-13 09:57:24 UTC (rev 3640)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java	2008-06-18 08:51:48 UTC (rev 3641)
@@ -38,13 +38,13 @@
   public MdlEditionManager(MdlVisuPanel _panel, CtuluCommandManager _cmd) {
     super(_panel, _cmd);
     setSceneEditor(new MdlSceneEditor(_panel,getSceneEditor().getScene()));
-    installMethods();
+    installActions();
   }
   
   /**
    * Installation des actions propres au modeleur.
    */
-  private void installMethods() {
+  private void installActions() {
     ArrayList<EbliActionInterface> acts=new ArrayList<EbliActionInterface>();
     acts.add(new SceneInterpolationAction((MdlSceneEditor)getSceneEditor()));
     acts.add(new SceneMoveInLayerAction((MdlSceneEditor)getSceneEditor()));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-13 09:57:26
      
     | 
| Revision: 3640
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3640&view=rev
Author:   bmarchan
Date:     2008-06-13 02:57:24 -0700 (Fri, 13 Jun 2008)
Log Message:
-----------
Implementation fonctionnalit?\195?\169 cr?\195?\169ation trace de profils
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel1dTrace.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-12 13:38:48 UTC (rev 3639)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java	2008-06-13 09:57:24 UTC (rev 3640)
@@ -15,6 +15,7 @@
 import org.fudaa.fudaa.commun.FudaaLib;
 import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation;
 import org.fudaa.fudaa.modeleur.action.CalqueNewCalqueAction;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer1dTrace;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dCloud;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLevel;
 import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
@@ -39,6 +40,7 @@
 //  final FSigLayerGroup parent_;
   BGroupeCalque cqImg_;
   BGroupeCalque cqAlti_;
+  BGroupeCalque cqMdl1d_;
   
   /**
    * Construction des calques. Une partie est d\xE9j\xE0 construite par d\xE9faut dans les classes
@@ -73,7 +75,9 @@
   public void initCalques(boolean _build) {
     removeAllCalqueDonnees();
     buildAltiLayerGroup(_build);
+    buildModel1dLayerGroup(_build);
     buildImageGroup();
+    
     installActions();
   }
   
@@ -106,6 +110,7 @@
     cqAlti_.setTitle(MdlResource.MDL.getString("Donn\xE9es altim\xE9triques"));
     cqAlti_.setName("gcAlti");
     cqAlti_.putClientProperty(Action.SHORT_DESCRIPTION, TrResource.getS("Permet le stockage des donn\xE9es altim\xE9triques"));
+    cqAlti_.setDestructible(false);
     addCalque(cqAlti_);
 
     if (!_build) return;
@@ -122,5 +127,23 @@
     cqProfile.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqProfile.getExtName()));
     cqAlti_.add(cqProfile);
   }
+  
+  
+  /**
+   * Mise en place du groupe du mod\xE8le 1d.
+   */
+  protected void buildModel1dLayerGroup(boolean _build) {
+    cqMdl1d_ = new BGroupeCalque();
+    cqMdl1d_.setTitle(MdlResource.MDL.getString("Mod\xE8le 1D"));
+    cqMdl1d_.setName("gcMdl1d");
+    cqMdl1d_.putClientProperty(Action.SHORT_DESCRIPTION, TrResource.getS("Stocke le mod\xE8le"));
+    cqMdl1d_.setDestructible(false);
+    addCalque(cqMdl1d_);
 
-}
+    if (!_build) return;
+    
+    MdlLayer1dTrace cqTrace=MdlLayer1dTrace.createNew(getGisEditor());
+    cqTrace.setName(BGroupeCalque.findUniqueChildName(cqMdl1d_, cqTrace.getExtName()));
+    cqMdl1d_.add(cqTrace);
+  }
+}
\ No newline at end of file
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java	2008-06-13 09:57:24 UTC (rev 3640)
@@ -0,0 +1,62 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:43 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import java.awt.Color;
+
+import org.fudaa.ebli.calque.BCalquePersistenceInterface;
+import org.fudaa.ebli.calque.dessin.DeForme;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+import org.fudaa.ebli.trace.TraceLigne;
+import org.fudaa.ebli.trace.TraceLigneModel;
+import org.fudaa.fudaa.modeleur.MdlResource;
+import org.fudaa.fudaa.modeleur.persistence.MdlLayer1dTracePersistence;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Un calque pour le stockage et la manipulation des donn\xE9es 1d.
+ * @author Bertrand Marchand
+ * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $
+ */
+public class MdlLayer1dTrace extends MdlLayer2dLine {
+  
+  /**
+   * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur.
+   * @param _model Modele
+   * @param _editor Editeur.
+   */
+  private MdlLayer1dTrace(ZModeleLigneBriseeEditable _model,  final FSigEditor _editor) {
+    super(_model,_editor);
+    setLineModel(0, new TraceLigneModel(TraceLigne.TIRETE, 2f, Color.ORANGE.darker()));
+    setLineModelOuvert(getLineModel(0));
+//    _model.addListener(this); A implementer.
+    setName(getExtName());
+    setTitle(MdlResource.MDL.getString("Trace profils"));
+  }
+  
+  public static MdlLayer1dTrace createNew(FSigEditor _editor) {
+    MdlLayer1dTrace cq=new MdlLayer1dTrace(new MdlModel1dTrace(_editor,_editor.getMng()), _editor);
+    return cq;
+  }
+
+  public BCalquePersistenceInterface getPersistenceMng() {
+    return new MdlLayer1dTracePersistence();
+  }
+
+  /**
+   * Retourne le nom par defaut du calque.
+   * @return Le nom.
+   */
+  public String getExtName() {
+    return "trace";
+  }
+  
+  public boolean canAddForme(int _typeForme) {
+    return _typeForme==DeForme.LIGNE_BRISEE;
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer1dTrace.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel1dTrace.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel1dTrace.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel1dTrace.java	2008-06-13 09:57:24 UTC (rev 3640)
@@ -0,0 +1,38 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008-05-13 12:10:42 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.layer;
+
+import org.fudaa.ctulu.CtuluCommandContainer;
+import org.fudaa.ctulu.gis.GISAttribute;
+import org.fudaa.ctulu.gis.GISAttributeConstants;
+import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee;
+import org.fudaa.ctulu.gis.GISZoneListener;
+import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable;
+
+/**
+ * Un mod\xE8le de calque pour le calque 1D des traces de profils. Les traces sont des polylignes XY.
+ * 
+ * @author Bertrand Marchand
+ * @version $Id: MdlModel2dProfile.java,v 1.1.2.6 2008-05-13 12:10:42 bmarchan Exp $
+ */
+public class MdlModel1dTrace extends MdlModel2dLine {
+
+  /**
+   * Construction d'un modele de trace avec pile de commandes.
+   * @param _cmd La pile de commandes pour le undo/redo.
+   */
+  public MdlModel1dTrace(final GISZoneListener _listener, final CtuluCommandContainer _cmd) {
+    super(_listener);
+    GISAttribute[] attrs=new GISAttribute[]{
+      GISAttributeConstants.TITRE
+    };
+    // Pas de container de commande pour cette op\xE9ration, sinon conserv\xE9 en undo/redo.
+    getGeomData().setAttributes(attrs, null);
+    getGeomData().setAttributeIsZ(null);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel1dTrace.java
___________________________________________________________________
Name: svn:eol-style
   + native
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java	2008-06-13 09:57:24 UTC (rev 3640)
@@ -0,0 +1,26 @@
+/*
+ * @creation     20 janv. 08
+ * @modification $Date: 2008/05/13 12:10:58 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur.persistence;
+
+import org.fudaa.fudaa.modeleur.layer.MdlLayer1dTrace;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile;
+import org.fudaa.fudaa.sig.layer.FSigEditor;
+
+/**
+ * Gestion de la persistance pour un calque trace 1d.
+ * @author Bertrand Marchand
+ * @see MdlLayer2dProfile
+ */
+public class MdlLayer1dTracePersistence extends MdlLayer2dLinePersistence {
+  
+  @Override
+  protected MdlLayer2dLine createNewLayer(FSigEditor _editor) {
+    return MdlLayer1dTrace.createNew(_editor);
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer1dTracePersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-12 13:38:40
      
     | 
| Revision: 3639
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3639&view=rev
Author:   bmarchan
Date:     2008-06-12 06:38:48 -0700 (Thu, 12 Jun 2008)
Log Message:
-----------
Bug#21 : Correction CTRL-A sur les calques invisibles.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMultiSpecial.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacWeirLayer.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java	2008-06-12 13:36:36 UTC (rev 3638)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java	2008-06-12 13:38:48 UTC (rev 3639)
@@ -205,6 +205,7 @@
   }
 
   public void selectAll() {
+    if (!isVisible()) return;
     initSelection();
     selection_.addInterval(0, modeleDonnees().getNombre() - 1);
     fireSelectionEvent();
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java	2008-06-12 13:36:36 UTC (rev 3638)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java	2008-06-12 13:38:48 UTC (rev 3639)
@@ -616,4 +616,14 @@
   public boolean isAntialiasing() {
     return antialiasing_;
   }
+  
+  /**
+   * Efface la selection si le calque est rendu invisible.
+   */
+  public void setVisible(boolean _b) {
+    if (isVisible()!=_b) {
+      super.setVisible(_b);
+      if (!_b) clearSelection();
+    }
+  }
 }
\ No newline at end of file
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMultiSpecial.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMultiSpecial.java	2008-06-12 13:36:36 UTC (rev 3638)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMultiSpecial.java	2008-06-12 13:38:48 UTC (rev 3639)
@@ -47,6 +47,8 @@
   }
 
   public void selectAll(){
+    if (!isVisible()) return;
+    
     initSelection();
     final ZModeleDonneesMulti m = getModeleMulti();
     for (int i = m.getNombre() - 1; i >= 0; i--) {
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java	2008-06-12 13:36:36 UTC (rev 3638)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java	2008-06-12 13:38:48 UTC (rev 3639)
@@ -662,6 +662,8 @@
   }
 
   public void selectAll() {
+    if (!isVisible()) return;
+    
     if (!isAtomicMode_) {
       super.selectAll();
       return;
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java	2008-06-12 13:36:36 UTC (rev 3638)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java	2008-06-12 13:38:48 UTC (rev 3639)
@@ -512,6 +512,8 @@
   }
 
   public void selectAll() {
+    if (!isVisible()) return;
+    
     if (!isAtomicMode_) {
       super.selectAll();
       return;
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacWeirLayer.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacWeirLayer.java	2008-06-12 13:36:36 UTC (rev 3638)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacWeirLayer.java	2008-06-12 13:38:48 UTC (rev 3639)
@@ -653,6 +653,8 @@
   }
 
   public void selectAll() {
+    if (!isVisible()) return;
+    
     if (getM().isWorkOnFrontierPt()) {
       super.selectAll();
     }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-12 13:36:31
      
     | 
| Revision: 3638
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3638&view=rev
Author:   bmarchan
Date:     2008-06-12 06:36:36 -0700 (Thu, 12 Jun 2008)
Log Message:
-----------
Implementation fonctionnalit?\195?\169 d?\195?\169cimation
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlDecimationPanel.java
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlDecimationPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlDecimationPanel.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlDecimationPanel.java	2008-06-12 13:36:36 UTC (rev 3638)
@@ -0,0 +1,92 @@
+/*
+ * @creation     25 avr. 08
+ * @modification $Date: 2008-05-13 12:10:11 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ButtonGroup;
+
+import org.fudaa.ctulu.CtuluLib;
+import org.fudaa.ctulu.gui.CtuluDialogPanel;
+
+import com.memoire.bu.BuGridLayout;
+import com.memoire.bu.BuRadioButton;
+import com.memoire.bu.BuTextField;
+
+/**
+ * Un panneau pour les parametres de d\xE9cimation entre 2 sommets ou sur la totalit\xE9 de la polyligne.
+ * @author Bertrand Marchand
+ * @version $Id: MdlInterpolationPanel.java,v 1.1.2.1 2008-05-13 12:10:11 bmarchan Exp $
+ */
+public class MdlDecimationPanel extends CtuluDialogPanel {
+
+  private class InterpolationActionListener implements ActionListener {
+    public void actionPerformed(ActionEvent e) {
+      tfDist_.setEnabled(e.getSource()==rbDist_);
+      tfNbPts_.setEnabled(e.getSource()==rbNbPts_);
+    }
+  }
+  
+  private BuTextField tfNbPts_;
+  private BuTextField tfDist_;
+  private BuRadioButton rbNbPts_;
+  private BuRadioButton rbDist_;
+  private int nbPts_=0;
+  private double dist_=0;
+  
+  public MdlDecimationPanel() {
+    customize();
+  }
+  
+  public void customize() {
+    BuGridLayout lyThis=new BuGridLayout(2,5,5);
+    this.setLayout(lyThis);
+    InterpolationActionListener l=new InterpolationActionListener();
+    ButtonGroup bg=new ButtonGroup();
+
+    rbNbPts_=new BuRadioButton(MdlResource.MDL.getString("Nombre de points supprim\xE9s entre 2 points conserv\xE9s"));
+    rbNbPts_.addActionListener(l);
+    bg.add(rbNbPts_);
+
+    rbDist_=new BuRadioButton(MdlResource.MDL.getString("Distance minimale entre 2 points (m)"));
+    rbDist_.addActionListener(l);
+    bg.add(rbDist_);
+    
+    this.add(rbNbPts_);
+    tfNbPts_=addIntegerText("1");
+    this.add(rbDist_);
+    tfDist_=addDoubleText("1.0");
+    
+    rbNbPts_.doClick();
+  }
+  
+  public boolean valide() {
+    if (rbNbPts_.isSelected() && (tfNbPts_.getText().trim().length()==0 || (nbPts_ = (Integer)tfNbPts_.getValue())<1)) {
+      setErrorText(CtuluLib.getS("Le nombre de points supprim\xE9s doit \xEAtre >=1") + '!');
+      return false;
+    }
+    else if (rbDist_.isSelected() && (tfDist_.getText().trim().length()==0 || (dist_ = (Double)tfDist_.getValue())<=0)) {
+      setErrorText(CtuluLib.getS("La distance minimale entre 2 points doit \xEAtre > 0 ") + '!');
+      return false;
+    }
+    return true;
+  }
+  
+  public int getNbPts() {
+    return nbPts_;
+  }
+  
+  public double getDistance() {
+    return dist_;
+  }
+  
+  public boolean isNbPtsGiven() {
+    return rbNbPts_.isSelected();
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlDecimationPanel.java
___________________________________________________________________
Name: svn:eol-style
   + native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-12 13:36:04
      
     | 
| Revision: 3637
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3637&view=rev
Author:   bmarchan
Date:     2008-06-12 06:36:06 -0700 (Thu, 12 Jun 2008)
Log Message:
-----------
Mise en place fonctionnalite de rafinement de polyligne, Z interpol?\195?\169 a partir des points polyligne
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlRefinementPanel.java
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlRefinementPanel.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlRefinementPanel.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlRefinementPanel.java	2008-06-12 13:36:06 UTC (rev 3637)
@@ -0,0 +1,92 @@
+/*
+ * @creation     25 avr. 08
+ * @modification $Date: 2008-05-13 12:10:11 $
+ * @license      GNU General Public License 2
+ * @copyright    (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail         fud...@li...
+ */
+package org.fudaa.fudaa.modeleur;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.ButtonGroup;
+
+import org.fudaa.ctulu.CtuluLib;
+import org.fudaa.ctulu.gui.CtuluDialogPanel;
+
+import com.memoire.bu.BuGridLayout;
+import com.memoire.bu.BuRadioButton;
+import com.memoire.bu.BuTextField;
+
+/**
+ * Un panneau pour les parametres de rafinement entre 2 sommets ou sur la totalit\xE9 de la polyligne.
+ * @author Bertrand Marchand
+ * @version $Id: MdlInterpolationPanel.java,v 1.1.2.1 2008-05-13 12:10:11 bmarchan Exp $
+ */
+public class MdlRefinementPanel extends CtuluDialogPanel {
+
+  private class RefinementActionListener implements ActionListener {
+    public void actionPerformed(ActionEvent e) {
+      tfDist_.setEnabled(e.getSource()==rbDist_);
+      tfNbPts_.setEnabled(e.getSource()==rbNbPts_);
+    }
+  }
+  
+  private BuTextField tfNbPts_;
+  private BuTextField tfDist_;
+  private BuRadioButton rbNbPts_;
+  private BuRadioButton rbDist_;
+  private int nbPts_=0;
+  private double dist_=0;
+  
+  public MdlRefinementPanel() {
+    customize();
+  }
+  
+  public void customize() {
+    BuGridLayout lyThis=new BuGridLayout(2,5,5);
+    this.setLayout(lyThis);
+    RefinementActionListener l=new RefinementActionListener();
+    ButtonGroup bg=new ButtonGroup();
+
+    rbNbPts_=new BuRadioButton(MdlResource.MDL.getString("Nombre de points ajout\xE9s entre 2 points"));
+    rbNbPts_.addActionListener(l);
+    bg.add(rbNbPts_);
+
+    rbDist_=new BuRadioButton(MdlResource.MDL.getString("Distance maximale entre 2 points (m)"));
+    rbDist_.addActionListener(l);
+    bg.add(rbDist_);
+    
+    this.add(rbNbPts_);
+    tfNbPts_=addIntegerText("1");
+    this.add(rbDist_);
+    tfDist_=addDoubleText("1.0");
+    
+    rbNbPts_.doClick();
+  }
+  
+  public boolean valide() {
+    if (rbNbPts_.isSelected() && (tfNbPts_.getText().trim().length()==0 || (nbPts_ = (Integer)tfNbPts_.getValue())<1)) {
+      setErrorText(CtuluLib.getS("Le nombre de points ajout\xE9s doit \xEAtre >=1") + '!');
+      return false;
+    }
+    else if (rbDist_.isSelected() && (tfDist_.getText().trim().length()==0 || (dist_ = (Double)tfDist_.getValue())<=0)) {
+      setErrorText(CtuluLib.getS("La distance maximale entre 2 points doit \xEAtre > 0 ") + '!');
+      return false;
+    }
+    return true;
+  }
+  
+  public int getNbPts() {
+    return nbPts_;
+  }
+  
+  public double getDistance() {
+    return dist_;
+  }
+  
+  public boolean isNbPtsGiven() {
+    return rbNbPts_.isSelected();
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlRefinementPanel.java
___________________________________________________________________
Name: svn:eol-style
   + native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <bma...@us...> - 2008-06-11 07:59:18
      
     | 
| Revision: 3636
          http://fudaa.svn.sourceforge.net/fudaa/?rev=3636&view=rev
Author:   bmarchan
Date:     2008-06-11 00:59:25 -0700 (Wed, 11 Jun 2008)
Log Message:
-----------
Mise en place fonctionnalite de rafinement de polyligne, Z interpol?\195?\169 a partir des points polyligne.
Modified Paths:
--------------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java
Added Paths:
-----------
    branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneRefinementAction.java
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java	2008-06-11 07:58:11 UTC (rev 3635)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java	2008-06-11 07:59:25 UTC (rev 3636)
@@ -17,6 +17,7 @@
 import org.fudaa.fudaa.modeleur.action.SceneDecimationAction;
 import org.fudaa.fudaa.modeleur.action.SceneInterpolationAction;
 import org.fudaa.fudaa.modeleur.action.SceneMoveInLayerAction;
+import org.fudaa.fudaa.modeleur.action.SceneRefinementAction;
 import org.fudaa.fudaa.sig.layer.FSigEditor;
 import org.fudaa.fudaa.sig.layer.FSigVisuPanel;
 
@@ -48,6 +49,7 @@
     acts.add(new SceneInterpolationAction((MdlSceneEditor)getSceneEditor()));
     acts.add(new SceneMoveInLayerAction((MdlSceneEditor)getSceneEditor()));
     acts.add(new SceneDecimationAction((MdlSceneEditor)getSceneEditor()));
+    acts.add(new SceneRefinementAction((MdlSceneEditor)getSceneEditor()));
     getSceneEditor().getScene().setActions(acts.toArray(new EbliActionAbstract[0]));
   }
   
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java	2008-06-11 07:58:11 UTC (rev 3635)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java	2008-06-11 07:59:25 UTC (rev 3636)
@@ -47,6 +47,8 @@
   MdlDecimationPanel pnDecimation_=null;
   // Pour conserver les valeurs IHM d'un appel a un autre.
   MdlInterpolationPanel pnInterpolation_=null;
+  // Pour conserver les valeurs IHM d'un appel a un autre.
+  MdlRefinementPanel pnRaffinement_=null;
   
   public MdlSceneEditor(MdlVisuPanel _pn, ZScene _scene) {
     super(_scene);
@@ -188,4 +190,44 @@
       super.getScene().clearSelection();
     }
   }
+  
+  /**
+   * Raffine la g\xE9om\xE9trie ou entre 2 sommmets de la g\xE9om\xE9trie s\xE9lectionn\xE9e.
+   */
+  public void refineSelectedGeometries() {
+    if (pnRaffinement_==null)
+      pnRaffinement_=new MdlRefinementPanel();
+    
+    String title;
+    if (getScene().isAtomicMode()) 
+      title=MdlResource.MDL.getString("Raffinement entre 2 sommets");
+    else                           
+      title=MdlResource.MDL.getString("Raffinement sur une polyligne");
+      
+    if (pnRaffinement_.afficheModaleOk(pn_.getFrame(), title)) {
+      // La g\xE9om\xE9trie.
+      int idxGeom=getScene().getSelectionHelper().getUniqueSelectedIdx();
+      Geometry geom=(Geometry)getScene().getObject(idxGeom);
+      int idxdeb;
+      int idxfin;
+      if (getScene().isAtomicMode()) {
+        int[] idxa=getScene().getLayerSelectionMulti().getSelection(idxGeom).getSelectedIndex();
+        idxdeb=idxa[0];
+        idxfin=idxa[1];
+      }
+      else {
+        idxdeb=0;
+        idxfin=geom.getNumPoints()-1;
+      }
+      
+      ZModeleDonnees mdld=getScene().getLayerForId(idxGeom).modeleDonnees();
+      if (mdld instanceof MdlModel2dLine) {
+        MdlModel2dLine mdl=(MdlModel2dLine)mdld;
+        mdl.refine(getScene().sceneId2LayerId(idxGeom),idxdeb,idxfin,pnRaffinement_.isNbPtsGiven()?0:1,
+            pnRaffinement_.getNbPts(),pnRaffinement_.getDistance(),getMng());
+      }
+
+      super.getScene().clearSelection();
+    }
+  }
 }
Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneRefinementAction.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneRefinementAction.java	                        (rev 0)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneRefinementAction.java	2008-06-11 07:59:25 UTC (rev 3636)
@@ -0,0 +1,82 @@
+/*
+ *  @creation     1 avr. 2005
+ *  @modification $Date: 2008-05-13 12:10:55 $
+ *  @license      GNU General Public License 2
+ *  @copyright    (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail de...@fu...
+ */
+package org.fudaa.fudaa.modeleur.action;
+
+import java.awt.event.ActionEvent;
+
+import org.fudaa.ebli.calque.ZScene;
+import org.fudaa.ebli.calque.ZSelectionEvent;
+import org.fudaa.ebli.calque.ZSelectionListener;
+import org.fudaa.ebli.calque.ZScene.SceneSelectionHelper;
+import org.fudaa.ebli.commun.EbliActionSimple;
+import org.fudaa.ebli.ressource.EbliResource;
+import org.fudaa.fudaa.modeleur.MdlSceneEditor;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine;
+import org.fudaa.fudaa.modeleur.layer.MdlLayer2dMultiPoint;
+
+/**
+ * Une action pour raffiner entre 2 sommets ou la totalit\xE9 d'un objets GIS.
+ * @author Bertrand Marchand
+ * @version $Id: SceneInterpolationAction.java,v 1.1.2.1 2008-05-13 12:10:55 bmarchan Exp $
+ */
+public class SceneRefinementAction extends EbliActionSimple implements ZSelectionListener {
+
+  MdlSceneEditor sceneEditor_;
+
+  /**
+   * @param _m l'arbre des calques
+   */
+  public SceneRefinementAction(MdlSceneEditor _sceneEditor) {
+    super(EbliResource.EBLI.getString("Raffiner"), null, "RAFFINER");
+    setSceneEditor(_sceneEditor);
+    sceneEditor_.getScene().addSelectionListener(this);
+  }
+
+  public void actionPerformed(final ActionEvent _e) {
+    sceneEditor_.refineSelectedGeometries();
+  }
+
+  /**
+   * @param _editor l'editeur
+   */
+  private void setSceneEditor(final MdlSceneEditor _sceneEditor) {
+    sceneEditor_ = _sceneEditor;
+  }
+
+  /**
+   * Autoris\xE9 si 2 sommets d'un m\xEAme bloc sont selectionn\xE9s ou 1 g\xE9om\xE9trie compl\xE8te.
+   */
+  public void updateForSelectionChanged() {
+    ZScene scn=sceneEditor_.getScene();
+    SceneSelectionHelper hlp=sceneEditor_.getScene().getSelectionHelper();
+    int idGeom=-1;
+
+    boolean b=true;
+    // Si selection n'est pas vide.
+    b&=!scn.isSelectionEmpty();
+    // Si le nombre d'atomiques est de 2 sur le m\xEAme bloc
+    b&=!scn.isAtomicMode() || (hlp.getNbAtomicSelected()==2 && (idGeom=hlp.getUniqueSelectedIdx())!=-1);
+    // Si le nombre de selectionn\xE9s est de 1 en mode global
+    b&=scn.isAtomicMode() || (idGeom=hlp.getUniqueSelectedIdx())!=-1;
+    // Si la g\xE9om\xE9trie appartient a un calque polylignes.
+    b&=scn.getLayerForId(idGeom) instanceof MdlLayer2dLine;
+
+    super.setEnabled(b);
+  }
+
+  public String getEnableCondition() {
+    return EbliResource.EBLI.getString("<p>En mode sommet, s\xE9lectionner 2 sommets d'un m\xEAme objet<p>En mode global, un objet");
+  }
+  
+  /* (non-Javadoc)
+   * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent)
+   */
+  public void selectionChanged(ZSelectionEvent _evt) {
+    updateForSelectionChanged();
+  }
+}
Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneRefinementAction.java
___________________________________________________________________
Name: svn:eol-style
   + native
Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java
===================================================================
--- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java	2008-06-11 07:58:11 UTC (rev 3635)
+++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java	2008-06-11 07:59:25 UTC (rev 3636)
@@ -72,6 +72,51 @@
   }
   
   /**
+   * Retourne le tableau des coordonn\xE9es de points r\xE9partis uniform\xE9ments entre 2 points.
+   * @param _coords Les coordonn\xE9es des 2 points extr\xE9mit\xE9s
+   * @param _nbpts La distance entre 2 points.
+   * @return Les coordonn\xE9es des points r\xE9partis entre les 2 points extr\xE9mit\xE9s.
+   */
+  private Coordinate[] interpolateCoordinates(Coordinate[] _coords, double _dist) {
+    double distTot=
+      Math.sqrt((_coords[1].x-_coords[0].x)*(_coords[1].x-_coords[0].x)+(_coords[1].y-_coords[0].y)*(_coords[1].y-_coords[0].y));
+    int nbpts=(int)Math.round(distTot/_dist)-1;
+
+    Coordinate[] coords=new Coordinate[nbpts];
+    for (int i=0; i<coords.length; i++) {
+      Coordinate c=new Coordinate();
+      c.x=_coords[0].x+(_coords[1].x-_coords[0].x)*(i+1)*_dist/distTot;
+      c.y=_coords[0].y+(_coords[1].y-_coords[0].y)*(i+1)*_dist/distTot;
+      c.z=_coords[0].z+(_coords[1].z-_coords[0].z)*(i+1)*_dist/distTot;
+      coords[i]=c;
+    }
+    
+    return coords;
+  }
+  
+  /**
+   * Retourne le tableau des coordonn\xE9es de points r\xE9partis uniform\xE9ments entre 2 points.
+   * @param _coords Les coordonn\xE9es des 2 points extr\xE9mit\xE9s
+   * @param _nbpts Le nombre de points a calculer.
+   * @return Les coordonn\xE9es des points r\xE9partis entre les 2 points extr\xE9mit\xE9s.
+   */
+  private Coordinate[] interpolateNCoordinates(Coordinate[] _coords, int _nbpts) {
+    double distTot=
+      Math.sqrt((_coords[1].x-_coords[0].x)*(_coords[1].x-_coords[0].x)+(_coords[1].y-_coords[0].y)*(_coords[1].y-_coords[0].y));
+
+    Coordinate[] coords=new Coordinate[_nbpts];
+    for (int i=0; i<coords.length; i++) {
+      Coordinate c=new Coordinate();
+      c.x=_coords[0].x+(_coords[1].x-_coords[0].x)*(i+1)/(_nbpts+1.);
+      c.y=_coords[0].y+(_coords[1].y-_coords[0].y)*(i+1)/(_nbpts+1.);
+      c.z=_coords[0].z+(_coords[1].z-_coords[0].z)*(i+1)/(_nbpts+1.);
+      coords[i]=c;
+    }
+    
+    return coords;
+  }
+  
+  /**
    * Decime une ligne. La m\xE9thode utilis\xE9e pour d\xE9cimer peut \xEAtre :<p>
    * 0 : Suivant un nombre de points a supprimer entre 2 points conserv\xE9s.<br>
    * 1 : Suivant une distance minimale.
@@ -79,31 +124,30 @@
    * @param _idxdeb L'indice de d\xE9but de d\xE9cimation.
    * @param _idxfin L'indice de fin de d\xE9cimation.
    * @param _meth La m\xE9thode.
-   * @param _nbPts Le nombre de points.
+   * @param _nbpts Le nombre de points.
    * @param _dstmin La distance minimale.
    * @param _cmd Le container de commandes.
    * @return true si modif ok.
    */
-  public boolean decimate(int _idxGeom, int _idxdeb,int _idxfin,int _meth,int _nbPts, double _dstmin, CtuluCommandContainer _cmd) {
+  public boolean decimate(int _idxGeom, int _idxdeb,int _idxfin,int _meth,int _nbpts, double _dstmin, CtuluCommandContainer _cmd) {
     TIntArrayList list=new TIntArrayList();
     
     // Methode par nombre de points.
     if (_meth==0) {
-      int idx=_idxdeb+1+_nbPts;
+      int idx=_idxdeb+1+_nbpts;
       for (int i=_idxdeb+1; i<=_idxfin-1; i++) {
         if (i<idx) {
           list.add(i);
         }
         else {
-          idx=i+1+_nbPts;
+          idx=i+1+_nbpts;
         }
       }
     }
-    // Methode par nombre de points.
+    // Methode par distance mini.
     else if (_meth==1) {
       LineString geom=(LineString)geometries_.getGeometry(_idxGeom);
       CoordinateSequence seq=geom.getCoordinateSequence();
-//      int idx=_idxdeb;
       double dst=0;
       for (int i=_idxdeb+1; i<=_idxfin-1; i++) {
         dst+=Math.sqrt((seq.getX(i)-seq.getX(i-1))*(seq.getX(i)-seq.getX(i-1))+
@@ -113,7 +157,6 @@
         }
         else {
           dst=0;
-//          idx=i;
         }
       }
     }
@@ -122,4 +165,64 @@
     geometries_.removeAtomicValue(_idxGeom, ids, null, _cmd); // L'UI est null, le cas ou moins de 2 points ne peut pas arriver.
     return true;
   }
+  
+  /**
+   * Raffine une ligne. La m\xE9thode utilis\xE9e pour raffiner peut \xEAtre :<p>
+   * 0 : Suivant un nombre de points a ajouter entre 2 points.<br>
+   * 1 : Suivant une distance maximale.
+   * @param _idxGeom La g\xE9om\xE9trie a raffiner.
+   * @param _idxdeb L'indice de d\xE9but de raffinement.
+   * @param _idxfin L'indice de fin de raffinement.
+   * @param _meth La m\xE9thode.
+   * @param _nbpts Le nombre de points.
+   * @param _dstmin La distance maximale.
+   * @param _cmd Le container de commandes.
+   * @return true si modif ok.
+   */
+  public boolean refine(int _idxGeom, int _idxdeb,int _idxfin,int _meth,int _nbpts, double _dstmax, CtuluCommandContainer _cmd) {
+    LineString geom=(LineString)geometries_.getGeometry(_idxGeom);
+    CoordinateSequence seq=geom.getCoordinateSequence();
+    
+    ArrayList coords=new ArrayList(seq.size());
+
+    for (int i=0; i<_idxdeb; i++) {
+      coords.add(seq.getCoordinate(i).clone());
+    }
+    
+    Coordinate[] cexts=new Coordinate[2];
+    // Methode par nombre de points.
+    if (_meth==0) {
+      for (int i=_idxdeb; i<_idxfin; i++) {
+        cexts[0]=seq.getCoordinate(i);
+        cexts[1]=seq.getCoordinate(i+1);
+        Coordinate[] cints=interpolateNCoordinates(cexts,_nbpts);
+        coords.add(cexts[0].clone());
+        for (int j=0; j<cints.length; j++)
+          coords.add(cints[j]);
+      }
+    }
+    // Methode par distance maxi.
+    else if (_meth==1) {
+      for (int i=_idxdeb; i<_idxfin; i++) {
+        double dst=Math.sqrt((seq.getX(i+1)-seq.getX(i))*(seq.getX(i+1)-seq.getX(i))+
+                             (seq.getY(i+1)-seq.getY(i))*(seq.getY(i+1)-seq.getY(i)));
+        int nbpts=(int)(dst/_dstmax);
+        if (dst/_dstmax==(int)(dst/_dstmax)) nbpts--;
+        cexts[0]=seq.getCoordinate(i);
+        cexts[1]=seq.getCoordinate(i+1);
+        Coordinate[] cints=interpolateNCoordinates(cexts, nbpts);
+        coords.add(cexts[0].clone());
+        for (int j=0; j<cints.length; j++)
+          coords.add(cints[j]);
+      }
+    }
+
+    for (int i=_idxfin; i<seq.size(); i++) {
+      coords.add(seq.getCoordinate(i).clone());
+    }
+    
+    GISPolyligne newgeom=(GISPolyligne)GISGeometryFactory.INSTANCE.createLineString((Coordinate[])coords.toArray(new Coordinate[0]));
+    geometries_.setValue(_idxGeom, newgeom, _cmd);
+    return true;
+  }
 }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 |