From: <emm...@us...> - 2008-11-05 14:50:06
|
Revision: 4172 http://fudaa.svn.sourceforge.net/fudaa/?rev=4172&view=rev Author: emmanuel_martin Date: 2008-11-05 14:49:55 +0000 (Wed, 05 Nov 2008) Log Message: ----------- Ajout de la possibilit?\195?\169 de changer l'ordre des g?\195?\169om?\195?\169tries dans le model via la palette de visibilit?\195?\169 Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCollection.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/crystal22_descendre.png branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/crystal22_monter.png Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/crystal22_descendre.png =================================================================== (Binary files differ) Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/crystal22_descendre.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:keywords + Id Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/crystal22_monter.png =================================================================== (Binary files differ) Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/crystal22_monter.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCollection.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCollection.java 2008-11-05 13:41:57 UTC (rev 4171) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCollection.java 2008-11-05 14:49:55 UTC (rev 4172) @@ -10,7 +10,9 @@ import java.util.List; import java.util.TreeSet; +import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.collection.CtuluListObject; import com.vividsolutions.jts.geom.Coordinate; @@ -398,4 +400,25 @@ Assert.shouldNeverReachHere(); } + /** + * Permute les deux g\xE9om\xE9tries indiqu\xE9es par les deux index pass\xE9s en param\xE8tre. + * Si les index sont incoh\xE9rents, {@link IllegalArgumentException} est lev\xE9. + * @param _index1 l'index de la premi\xE8re g\xE9om\xE9trie + * @param _index2 l'index de la seconde gom\xE9trie + * @param _cmd le command manager pour le undo/redo + */ + public void switchGeometries(int _index1, int _index2, CtuluCommandContainer _cmd){ + if(_index1<0||_index1>geometry_.getSize()-1||_index2<0||_index2>geometry_.getSize()-1) + throw new IllegalArgumentException("Au moins l'un des deux index est incoh\xE9rent."); + if(_index1!=_index2){ + CtuluCommandComposite cmd=new CtuluCommandComposite(); + // Permutation de la g\xE9om\xE9trie + Object tmp=geometry_.getValueAt(_index1); + geometry_.set(_index1, geometry_.getValueAt(_index2), cmd); + geometry_.set(_index2, tmp, cmd); + if(_cmd!=null) + _cmd.addCmd(cmd.getSimplify()); + } + } + } \ No newline at end of file Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java 2008-11-05 13:41:57 UTC (rev 4171) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java 2008-11-05 14:49:55 UTC (rev 4172) @@ -18,7 +18,9 @@ import com.vividsolutions.jts.geom.GeometryFactory; import org.fudaa.ctulu.CtuluCommand; +import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.ProgressionInterface; import org.fudaa.ctulu.collection.CtuluCollection; import org.fudaa.ctulu.collection.CtuluCollectionDoubleEdit; @@ -772,5 +774,30 @@ getData(i).remove(_i, _c); } } - } + } + + /** + * Permute les deux g\xE9om\xE9tries indiqu\xE9es par les deux index pass\xE9s en param\xE8tre. + * Si les index sont incoh\xE9rents, {@link IllegalArgumentException} est lev\xE9. + * @param _index1 l'index de la premi\xE8re g\xE9om\xE9trie + * @param _index2 l'index de la seconde gom\xE9trie + * @param _cmd le command manager pour le undo/redo + */ + public void switchGeometries(int _index1, int _index2, CtuluCommandContainer _cmd){ + if(_index1<0||_index1>geometry_.getSize()-1||_index2<0||_index2>geometry_.getSize()-1) + throw new IllegalArgumentException("Au moins l'un des deux index est incoh\xE9rent."); + if(_index1!=_index2){ + CtuluCommandComposite cmd=new CtuluCommandComposite(); + // Permutation des g\xE9om\xE9tries + super.switchGeometries(_index1, _index2, cmd); + // Permutation des valeurs d'attributs + for(int i=0;i<attr_.length;i++){ + Object tmp=attr_[i].getObjectValueAt(_index1); + attr_[i].setObject(_index1, attr_[i].getObjectValueAt(_index2), cmd); + attr_[i].setObject(_index2, tmp, _cmd); + } + if(_cmd!=null) + _cmd.addCmd(cmd.getSimplify()); + } + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-11-05 13:41:57 UTC (rev 4171) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-11-05 14:49:55 UTC (rev 4172) @@ -15,7 +15,9 @@ import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.Arrays; import java.util.EventObject; import java.util.HashMap; import java.util.List; @@ -56,12 +58,15 @@ import org.fudaa.ebli.calque.ZSelectionListener; import org.fudaa.ebli.commun.BPalettePanelInterface; import org.fudaa.ebli.commun.EbliLib; +import org.jfree.util.ArrayUtilities; import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuButton; import com.memoire.bu.BuCheckBox; import com.memoire.bu.BuComboBox; import com.memoire.bu.BuLabel; import com.memoire.bu.BuPanel; +import com.memoire.bu.BuResource; import com.memoire.bu.BuScrollPane; import com.vividsolutions.jts.geom.Geometry; @@ -95,6 +100,8 @@ protected boolean onlyInvisible_; protected final CtuluTable table_; protected TableModel geomTableModel_; + protected BuButton btUp_; + protected BuButton btDown_; /** * @param _treeModel @@ -137,11 +144,22 @@ table_=new CtuluTable(); table_.getSelectionModel().addListSelectionListener(this); add(new BuScrollPane(table_), BuBorderLayout.CENTER); + // Ajout des boutons de d\xE9placement des g\xE9om\xE9tries \\ + Container btCont=new Container(); + btCont.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); + btUp_=new BuButton(BuResource.BU.getIcon("crystal22_monter")); + btDown_=new BuButton(BuResource.BU.getIcon("crystal22_descendre")); + btUp_.addActionListener(this); + btDown_.addActionListener(this); + btCont.add(btUp_); + btCont.add(btDown_); + add(btCont, BuBorderLayout.SOUTH); // Ajout des informations \\ fillCalqueComboBox(); calque_.addActionListener(this); cb.addChangeListener(this); fillTableGeometry(); + updateBtMovement(); } /** @@ -320,13 +338,13 @@ calque_.setSelectedItem(selectedItem); else calque_.setSelectedIndex(0); - updateListen(); + updateListenAndMoveBt(); } /** * Met \xE0 jour l'\xE9coute des calques et de leurs model */ - private void updateListen(){ + protected void updateListenAndMoveBt(){ // Suppression de l'\xE9coute de tout les calques for(int i=0;i<listenCalques_.length;i++){ listenCalques_[i].removeSelectionListener(this); @@ -350,6 +368,8 @@ listenCalques_[i].addSelectionListener(this); ((ZModeleGeometry) listenCalques_[i].modeleDonnees()).addModelListener(this); } + // Mise \xE0 jour des boutons de d\xE9placement + updateBtMovement(); } /** @@ -461,12 +481,99 @@ } } + protected void updateBtMovement(){ + boolean base=calque_.getSelectedItem()!=allCalquesEntry_&&table_.getSelectedRowCount()>0; + boolean enableUp=false; + boolean enableDown=false; + if(base){ + boolean prob=false; + int i=0; + while(!prob&&++i<table_.getRowCount()) + prob=!table_.getSelectionModel().isSelectedIndex(i-1)&&table_.getSelectionModel().isSelectedIndex(i); + enableUp=prob; + prob=false; + i=table_.getRowCount()-1; + while(!prob&&--i>=0) + prob=!table_.getSelectionModel().isSelectedIndex(i+1)&&table_.getSelectionModel().isSelectedIndex(i); + enableDown=prob; + } + btUp_.setEnabled(enableUp); + btDown_.setEnabled(enableDown); + } /** + * Retourne vrai si _value est dans _table + * @param _value + * @param _table + * @return + */ + private boolean in(int _value, int[] _table){ + boolean found=false; + int i=-1; + while(!found&&++i<_table.length) + found=_table[i]==_value; + return found; + } + + /** + * "remonte" d'1 les g\xE9om\xE9tries selectionn\xE9es dans leur calque. C'est \xE0 dire + * que si une g\xE9om\xE9trie \xE9tait \xE0 l'index 6, elle passe \xE0 l'index 5 (l'ancienne + * g\xE9om\xE9trie \xE0 5 passe \xE0 6). + */ + protected void moveUpSelectedGeometies(){ + int[] selection=table_.getSelectedRows(); + ArrayList<Integer> newSelection=new ArrayList<Integer>(); + Arrays.sort(selection); + int lastIndexCompute=-1; + for(int i=0;i<selection.length;i++){ + if(selection[i]>0&&(!in(selection[i]-1, selection)||selection[i]-1==lastIndexCompute)){ + newSelection.add(selection[i]-1); + lastIndexCompute=selection[i]; + ZModeleGeometry model=(ZModeleGeometry) ((ZCalqueAffichageDonneesInterface) table_.getModel().getValueAt(selection[i], 2)).modeleDonnees(); + int indexGeom=((Integer) table_.getModel().getValueAt(selection[i], 3)).intValue(); + model.getGeomData().switchGeometries(indexGeom, indexGeom-1, cmd_); + } + else + newSelection.add(selection[i]); + } + // R\xE9tablissement de la selection dans le tableau + table_.getSelectionModel().clearSelection(); + for(int i=0;i<newSelection.size();i++) + table_.getSelectionModel().addSelectionInterval(newSelection.get(i), newSelection.get(i)); + } + + /** + * "descend" d'1 les g\xE9om\xE9tries selectionn\xE9es dans leur calque. C'est \xE0 dire + * que si une g\xE9om\xE9trie \xE9tait \xE0 l'index 5, elle passe \xE0 l'index 6 (l'ancienne + * g\xE9om\xE9trie \xE0 6 passe \xE0 5). + */ + protected void moveDownSelectedGeometies(){ + int[] selection=table_.getSelectedRows(); + ArrayList<Integer> newSelection=new ArrayList<Integer>(); + Arrays.sort(selection); + int lastIndexCompute=-1; + for(int i=selection.length-1;i>=0;i--){ + if(selection[i]<(table_.getRowCount()-1)&&(!in(selection[i]+1, selection)||selection[i]+1==lastIndexCompute)){ + newSelection.add(selection[i]+1); + lastIndexCompute=selection[i]; + ZModeleGeometry model=(ZModeleGeometry) ((ZCalqueAffichageDonneesInterface) table_.getModel().getValueAt(selection[i], 2)).modeleDonnees(); + int indexGeom=((Integer) table_.getModel().getValueAt(selection[i], 3)).intValue(); + model.getGeomData().switchGeometries(indexGeom, indexGeom+1, cmd_); + } + else + newSelection.add(selection[i]); + } + // R\xE9tablissement de la selection dans le tableau + table_.getSelectionModel().clearSelection(); + for(int i=0;i<newSelection.size();i++) + table_.getSelectionModel().addSelectionInterval(newSelection.get(i), newSelection.get(i)); + } + + /** * Est appel\xE9e par EditVisibilityAction quand la palette est d\xE9couverte. */ public void doShow(){ - updateListen(); + updateListenAndMoveBt(); } /** @@ -508,11 +615,17 @@ return false; } - // Changement dans le comboBox des calques \\ + // Changement dans le comboBox des calques ou dans les boutons de d\xE9placements \\ public void actionPerformed(ActionEvent e) { - updateListen(); - fillTableGeometry(); + if(e.getSource()==calque_){ + updateListenAndMoveBt(); + fillTableGeometry(); + } + else if(e.getSource()==btUp_) + moveUpSelectedGeometies(); + else if(e.getSource()==btDown_) + moveDownSelectedGeometies(); } //Changement dans le checkBox onlyInvisible \\ @@ -540,7 +653,7 @@ fillCalqueComboBox(); } - // Modification dans le ou les claque(s) \xE9cout\xE9(s). + // Modification dans le ou les model(s) \xE9cout\xE9(s). public void attributeAction(Object _source, int att, GISAttributeInterface _att, int _action) { fillTableGeometry(); @@ -561,7 +674,7 @@ if(_att==GISAttributeConstants.TITRE) table_.getModel().setValueAt(_value, i, 0); else - table_.getModel().setValueAt(_value==GISAttributeConstants.ATT_VAL_TRUE ? true : false, i, 1); + table_.getModel().setValueAt(_value.equals(GISAttributeConstants.ATT_VAL_TRUE) ? true : false, i, 1); } else // Mise \xE0 jour de toutes les g\xE9om\xE9tries. @@ -579,6 +692,7 @@ if (listenSelection) { listenSelection=false; updateTableSelection(_evt.getSource()); + updateBtMovement(); listenSelection=true; } } @@ -589,6 +703,7 @@ if (listenSelection) { listenSelection=false; updateCalqueSelection(); + updateBtMovement(); listenSelection=true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |