Selection d'objets empilés
This commit is contained in:
parent
04927ed4c0
commit
805ff7b813
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
|
||||
<properties>
|
||||
<comment>This file is automaticaly generated by AdecWatt application at 5:39 PM on Apr 15, 2019.</comment>
|
||||
<comment>This file is automaticaly generated by AdecWatt application at 10:39 AM on Apr 17, 2019.</comment>
|
||||
<entry key="DownloaddataChecked">true</entry>
|
||||
<entry key="RoleFurnitureManager">true</entry>
|
||||
<entry key="Uploadhelp-en_USChecked">false</entry>
|
||||
@ -29,16 +29,16 @@
|
||||
<entry key="Country">FR</entry>
|
||||
<entry key="SearchOrder">5</entry>
|
||||
<entry key="FilePlace">North</entry>
|
||||
<entry key="AboutLocation">[x=0,y=26]</entry>
|
||||
<entry key="AboutLocation">[x=3 200,y=146]</entry>
|
||||
<entry key="SearchUndocked">false</entry>
|
||||
<entry key="FileChecked">true</entry>
|
||||
<entry key="FrameLocation">[x=738,y=247]</entry>
|
||||
<entry key="FrameLocation">[x=73,y=212]</entry>
|
||||
<entry key="EditPlace">North</entry>
|
||||
<entry key="Uploadhelp-fr_FRChecked">false</entry>
|
||||
<entry key="CheckPeriod">Day</entry>
|
||||
<entry key="AboutChecked">false</entry>
|
||||
<entry key="LicenceLocation">[x=0,y=26]</entry>
|
||||
<entry key="JConsoleLocation">[x=0,y=26]</entry>
|
||||
<entry key="LicenceLocation">[x=3 200,y=146]</entry>
|
||||
<entry key="JConsoleLocation">[x=3 200,y=146]</entry>
|
||||
<entry key="PlacementChecked">true</entry>
|
||||
<entry key="SliderUndocked">false</entry>
|
||||
<entry key="SliderOrder">2</entry>
|
||||
@ -61,7 +61,7 @@
|
||||
<entry key="HelpUndocked">false</entry>
|
||||
<entry key="ManualChecked">false</entry>
|
||||
<entry key="RemoteRemovehelp-br_FR_galloChecked">false</entry>
|
||||
<entry key="LastCheck">20190415</entry>
|
||||
<entry key="LastCheck">20190417</entry>
|
||||
<entry key="RemoteRemovehelp-br_FR_bretonChecked">false</entry>
|
||||
<entry key="HttpServerChecked">false</entry>
|
||||
<entry key="LicenceChecked">false</entry>
|
||||
@ -70,7 +70,7 @@
|
||||
<entry key="RemoteRemovehelp-imagesChecked">false</entry>
|
||||
<entry key="Uploadhelp-br_FR_galloChecked">false</entry>
|
||||
<entry key="EditUndocked">false</entry>
|
||||
<entry key="ManualLocation">[x=0,y=26]</entry>
|
||||
<entry key="ManualLocation">[x=3 200,y=146]</entry>
|
||||
<entry key="PlacementUndocked">false</entry>
|
||||
<entry key="RemoteRemovehelp-fr_FRChecked">false</entry>
|
||||
<entry key="PlacementPlace">North</entry>
|
||||
|
BIN
data/images/button/MagnetPolicies.png
Normal file
BIN
data/images/button/MagnetPolicies.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 688 B |
@ -122,6 +122,8 @@ import adecWatt.model.Segm;
|
||||
|
||||
// ========================================
|
||||
public void updateLocation () {
|
||||
if (currentPos == null)
|
||||
return;
|
||||
Point pos = jWorkspaceView.scaleModelToView (currentPos);
|
||||
pos.x -= getWidth ()/2;
|
||||
pos.y -= getHeight ()/2;
|
||||
|
85
src/java/adecWatt/view/JOverlapItemPopup.java
Normal file
85
src/java/adecWatt/view/JOverlapItemPopup.java
Normal file
@ -0,0 +1,85 @@
|
||||
package adecWatt.view;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import adecWatt.model.Item;
|
||||
import adecWatt.control.AdecWattManager;
|
||||
|
||||
@SuppressWarnings ("serial") public class JOverlapItemPopup extends JPopupMenu {
|
||||
JWorkspaceView<?> jWorkspaceView;
|
||||
MouseEvent mouseEvent;
|
||||
|
||||
public JOverlapItemPopup (JWorkspaceView<?> jWorkspaceView, MouseEvent mouseEvent) {
|
||||
this.jWorkspaceView = jWorkspaceView;
|
||||
this.mouseEvent = mouseEvent;
|
||||
Point pos = mouseEvent.getPoint ();
|
||||
ArrayList<Item> overlapItems = jWorkspaceView.findItems (pos);
|
||||
if (mouseEvent.getID () == MouseEvent.MOUSE_PRESSED && !SwingUtilities.isRightMouseButton (mouseEvent) &&
|
||||
jWorkspaceView.selectedItems.size () > 0) {
|
||||
for (final JItem jItem : jWorkspaceView.selectedItems.values ())
|
||||
if (overlapItems.contains (jItem.getItem ())) {
|
||||
jWorkspaceView.startDrag (jItem.getItem (), mouseEvent.getPoint ());
|
||||
return;
|
||||
}
|
||||
}
|
||||
switch (overlapItems.size ()) {
|
||||
case 0:
|
||||
select (null);
|
||||
return;
|
||||
case 1:
|
||||
select (overlapItems.get (0));
|
||||
return;
|
||||
}
|
||||
if (SwingUtilities.isRightMouseButton (mouseEvent) && jWorkspaceView.selectedItems.size () > 0) {
|
||||
if (jWorkspaceView.performPopup (mouseEvent))
|
||||
return;
|
||||
}
|
||||
for (final Item item : overlapItems) {
|
||||
JMenuItem menuItem = new JMenuItem (item.getName (), item.getParentUnit ().getIcon (16));
|
||||
menuItem.setActionCommand (item.getName ());
|
||||
menuItem.addActionListener (new ActionListener () {
|
||||
public void actionPerformed (ActionEvent e) {
|
||||
select (item);
|
||||
}
|
||||
});
|
||||
add (menuItem);
|
||||
}
|
||||
show (jWorkspaceView, pos.x, pos.y);
|
||||
}
|
||||
|
||||
public void select (Item item) {
|
||||
switch (mouseEvent.getID ()) {
|
||||
case MouseEvent.MOUSE_PRESSED:
|
||||
if (SwingUtilities.isRightMouseButton (mouseEvent)) {
|
||||
if (jWorkspaceView.performPopup (mouseEvent))
|
||||
return;
|
||||
jWorkspaceView.performSelection (item, mouseEvent);
|
||||
jWorkspaceView.performPopup (mouseEvent);
|
||||
return;
|
||||
}
|
||||
jWorkspaceView.performSelection (item, mouseEvent);
|
||||
break;
|
||||
case MouseEvent.MOUSE_CLICKED:
|
||||
if (mouseEvent.getClickCount () > 1) {
|
||||
// double click
|
||||
if (jWorkspaceView.selectedItems.size () < 1)
|
||||
jWorkspaceView.setSelectedItems (item);
|
||||
ArrayList<Item> param = new ArrayList<Item> ();
|
||||
for (final JItem jItem : jWorkspaceView.selectedItems.values ())
|
||||
param.add (jItem.getItem ());
|
||||
jWorkspaceView.adecWatt.broadcastDisplay (AdecWattManager.actionDisplayItem, param);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@ -163,16 +163,14 @@ import adecWatt.model.unit.Workspace;
|
||||
public ArrayList<Item> findItems (Point pos) {
|
||||
return workspace.findItems (scaleViewToModel (pos), closePixelsItems/scale);
|
||||
}
|
||||
public Hashtable<Item, ArrayList<Acc>> findAccs (Point pos, ArrayList<Item> overlap) {
|
||||
public Hashtable<Item, ArrayList<Acc>> findAccs (Point pos, Item<?,?,?> item) {
|
||||
Hashtable<Item, ArrayList<Acc>> result = new Hashtable<Item, ArrayList<Acc>> ();
|
||||
if (overlap ==null)
|
||||
if (item ==null)
|
||||
return result;
|
||||
Point2D.Double realPos = scaleViewToModel (new Point (pos.x, pos.y));
|
||||
for (Item item : overlap) {
|
||||
ArrayList<Acc> accs = item.findAccs (realPos, closePixelsAccs/scale);
|
||||
if (accs.size () > 0)
|
||||
result.put (item, accs);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -220,36 +218,16 @@ import adecWatt.model.unit.Workspace;
|
||||
adecWatt.broadcastDisplay (AdecWattManager.actionDisplayAcc, selectedAcc.getAcc ());
|
||||
return;
|
||||
}
|
||||
ArrayList<Item> overlapItems = findItems (e.getPoint ());
|
||||
if (e.getClickCount () > 1) {
|
||||
// double click
|
||||
if (selectedItems.size () > 1)
|
||||
for (Item item : overlapItems)
|
||||
if (selectedItems.containsKey (item.getId ()))
|
||||
// XXX info multiple
|
||||
return;
|
||||
if (overlapItems.size () < 1)
|
||||
return;
|
||||
setSelectedItems (overlapItems.get ((overlapItems.indexOf (lastSelectedItem)+1)%overlapItems.size ()));
|
||||
List<Item> param = Arrays.asList (lastSelectedItem);
|
||||
adecWatt.broadcastDisplay (AdecWattManager.actionDisplayItem, param);
|
||||
return;
|
||||
}
|
||||
new JOverlapItemPopup (this, e);
|
||||
}
|
||||
public void mousePressed (MouseEvent e) {
|
||||
requestFocusInWindow ();
|
||||
jAdecWatt.setCurrentWorkspace (workspace);
|
||||
if (SwingUtilities.isRightMouseButton (e)) {
|
||||
if (performPopup (e))
|
||||
return;
|
||||
performSelection (e);
|
||||
performPopup (e);
|
||||
return;
|
||||
}
|
||||
if (e.isControlDown ()) {
|
||||
rotation (e);
|
||||
return;
|
||||
}
|
||||
performSelection (e);
|
||||
new JOverlapItemPopup (this, e);
|
||||
}
|
||||
protected boolean performPopup (MouseEvent e) {
|
||||
if (selectedAcc != null) {
|
||||
@ -263,17 +241,20 @@ import adecWatt.model.unit.Workspace;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private ArrayList<Item> overlapItems;
|
||||
protected void performSelection (MouseEvent e) {
|
||||
//private ArrayList<Item> overlapItems;
|
||||
public void startDrag (Item<?,?,?> item, Point mPos) {
|
||||
firstClick = lastClick = mPos;
|
||||
selectionRefHandle (item, mPos);
|
||||
}
|
||||
public void performSelection (Item<?,?,?> item, MouseEvent e) {
|
||||
// XXX YYY peut-être passer la liste
|
||||
Point mPos = e.getPoint ();
|
||||
setSelectedAcc ();
|
||||
overlapItems = findItems (mPos);
|
||||
if (overlapItems.size () < 1) {
|
||||
if (item == null) {
|
||||
startsZoneSelection (e);
|
||||
return;
|
||||
}
|
||||
firstClick = lastClick = mPos;
|
||||
Hashtable<Item, ArrayList<Acc>> overlapAccs = findAccs (mPos, overlapItems);
|
||||
Hashtable<Item, ArrayList<Acc>> overlapAccs = findAccs (mPos, item);
|
||||
if (overlapAccs.size () > 0) {
|
||||
lastSelectedAccId = (lastSelectedAccId+1)%nbOverlapAccs (overlapAccs);
|
||||
setSelectedAcc (overlapAccs, lastSelectedAccId);
|
||||
@ -282,7 +263,8 @@ import adecWatt.model.unit.Workspace;
|
||||
lastSelectedAccId = -1;
|
||||
// XXX revoir si overlapAccs deja selectionnes
|
||||
if (e.isShiftDown ()) {
|
||||
invertItemSelection (overlapItems.get (0));
|
||||
//invertItemSelection (overlapItems.get (0));
|
||||
invertItemSelection (item);
|
||||
if (selectedItems.size () < 1) {
|
||||
firstClick = lastClick = null;
|
||||
refHandle = null;
|
||||
@ -291,14 +273,7 @@ import adecWatt.model.unit.Workspace;
|
||||
// XXX changement du choix de la poignée de référence ?
|
||||
return;
|
||||
}
|
||||
if (selectedItems.size () > 0)
|
||||
for (Item item : overlapItems)
|
||||
if (selectedItems.containsKey (item.getId ())) {
|
||||
selectionRefHandle (item, mPos);
|
||||
return;
|
||||
}
|
||||
Item item = overlapItems.get ((overlapItems.indexOf (lastSelectedItem)+1) % overlapItems.size ());
|
||||
selectionRefHandle (item, mPos);
|
||||
startDrag (item, mPos);
|
||||
setSelectedItems (item);
|
||||
}
|
||||
public void selectionRefHandle (Item item, Point mPos) {
|
||||
@ -544,6 +519,8 @@ import adecWatt.model.unit.Workspace;
|
||||
JItem jItem = selectedItems.get (itemId);
|
||||
Item item = jItem.getItem ();
|
||||
double [] bounds = jItem.getCurrentBounds ();
|
||||
if (bounds == null)
|
||||
continue;
|
||||
int [] x = new int[4];
|
||||
int [] y = new int[4];
|
||||
for (int i = 0, j = 1, k = 0; k < 4; i += 2, j += 2, k++) {
|
||||
@ -673,7 +650,7 @@ import adecWatt.model.unit.Workspace;
|
||||
Point2D.Double refHandle;
|
||||
DimensionDouble handleOff;
|
||||
public void dragItems (MouseEvent e) {
|
||||
if (notEditable () || firstClick == null)
|
||||
if (notEditable () || firstClick == null || handleOff == null)
|
||||
return;
|
||||
Point newPos = e.getPoint ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user