diff --git a/src/main/java/ui/TDiagramMouseManager.java b/src/main/java/ui/TDiagramMouseManager.java index 2d1018f2e44aa28f2a1fb423df3d05a91d452904..c5ad2a57ebc3d9e50b632c2b08e2616a02d30e29 100755 --- a/src/main/java/ui/TDiagramMouseManager.java +++ b/src/main/java/ui/TDiagramMouseManager.java @@ -41,6 +41,8 @@ package ui; import ui.window.JDialogSearchBox; import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; @@ -57,6 +59,7 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen private TDiagramPanel tdp; private TGComponent tgc; + private TGComponent lastSelectedComponent = null; private int oldx; private int oldy; @@ -99,9 +102,8 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen //System.out.println("Titi"); if (e.getButton() == MouseEvent.BUTTON3) { //System.out.println("toto"); - if (selected == TGComponentManager.EDIT) { - tdp.openPopupMenu(e.getX(), e.getY()); - } + setSelection(e.getX(), e.getY()); + tdp.openPopupMenu(e.getX(), e.getY()); } //System.out.println("mode = " + tdp.mode + " selected=" + selected); @@ -120,7 +122,8 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT)& (e.getButton() == MouseEvent.BUTTON1)) { - //search if an element is pointed + setSelection(e.getX(), e.getY()); + //search if an element is pointed boolean actionMade = false; tgc = tdp.componentPointed(); //System.out.println("Working on TGC=" + tgc); @@ -455,9 +458,41 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen tdp.getGUI().changeMade(tdp, TDiagramPanel.NEW_COMPONENT); tdp.repaint(); } - + + //If one click is done for selection + if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) { + setSelection(e.getX(), e.getY()); + } } + /** + * Set the selection on the clicked component + * @author Fabien Tessier + */ + public void setSelection(int x, int y) { + tdp.unselectClickSelectedComponents(); //Unselect all components + tgc = null; + for (TGComponent tgc: tdp.componentList) { + TGComponent tgcTmp = tgc.isOnMeHL(x, y); + if (tgcTmp != null && !tgcTmp.hidden) { //Component clicked + this.tgc = tgcTmp; + break; + } + } + if (tgc != null) { //A component has been clicked + lastSelectedComponent = tgc; + tdp.setSelect(true); + tgc.singleClick(tdp.getGUI().getFrame(), x, y); + } + else { + tdp.setSelect(false); + lastSelectedComponent = null; + tdp.componentPointed = null; + } + tdp.getGUI().changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT); + tdp.repaint(); + } + public void stopAddingConnector() { //TraceManager.addDev("Stop Adding connector in tdmm"); tdp.mode = TDiagramPanel.NORMAL; @@ -510,7 +545,7 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen } } - if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT) && (selectedComponent == false)){ + if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT) && (selectedComponent == false) && (!tdp.isSelect())){ byte info = tdp.highlightComponent(e.getX(), e.getY()); if (info > 1) { tgc = tdp.componentPointed(); @@ -644,5 +679,5 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen // // public void removeSelectedComponentFromList(){ // this.selectedMultiComponents.clear(); -// } +// } } diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java index 377d6fd324798af19dcf7423aab2c3cc82c6ecb8..28d1d714911ba5f6acf8860a33f75e78516de726 100755 --- a/src/main/java/ui/TDiagramPanel.java +++ b/src/main/java/ui/TDiagramPanel.java @@ -111,6 +111,7 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { protected TGConnectingPoint selectedConnectingPoint; protected CAMSConnectingPoint selectedCAMSConnectingPoints; protected TGComponent componentPointed; + protected TGComponent lastClickComponent = null; protected TGComponent componentPopup; protected TToolBar ttb; protected TGComponent fatherOfRemoved; @@ -190,6 +191,7 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { protected int sel = 5; protected boolean showSelectionZone = false; protected boolean selectedTemp = true; + protected boolean select = false; private boolean isScaled; private boolean overcomeShowing = false; @@ -739,9 +741,11 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { for (TGComponent tgc: this.componentList) { //state = tgc.getState(); tgcTmp = tgc.isOnMeHL(x, y); - if (tgcTmp != null) { + if ((tgcTmp != null && (!select || tgcTmp.isClickSelected())) || tgc.isClickSelected()) { if (!pointedElementFound) { componentPointed = tgcTmp; + if (componentPointed == null) + componentPointed = tgc; tgc.setState(TGState.POINTED); String tooltip = componentPointed.getToolTipText(); if (tooltip!=null && tooltip.length()>0){ @@ -755,7 +759,10 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { tgc.setState(TGState.NORMAL); } } else { - tgc.setState(TGState.NORMAL); + if (tgcTmp != null && tgcTmp.father != null) + tgc.setState(TGState.POINTED); + else + tgc.setState(TGState.NORMAL); } } @@ -1150,8 +1157,23 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { tgc.setState(TGState.NORMAL); } } - - + + /** + * Unselect all components (triggered when a single click is done) + * @author Fabien Tessier + */ + public void unselectClickSelectedComponents() { + for (TGComponent tgc: this.componentList) { + tgc.select(false); + tgc.clickSelect(false); + tgc.setState(TGState.NORMAL); + for (TGComponent tgcTmp: tgc.getRecursiveAllInternalComponent()) { + tgcTmp.select(false); + tgcTmp.clickSelect(false); + tgcTmp.setState(TGState.NORMAL); + } + } + } public boolean showSelectionZone(int x, int y) { if (GraphicLib.isInRectangle(x, y, xSel, ySel, widthSel, heightSel)) { @@ -3376,4 +3398,12 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { public MainGUI getMainGUI(){ //Ajout CD pour creation d'un panel depuis un block return mgui; } + + public boolean isSelect() { + return select; + } + + public void setSelect(boolean b) { + select = b; + } } diff --git a/src/main/java/ui/TGCWithInternalComponent.java b/src/main/java/ui/TGCWithInternalComponent.java index efdac0c6d597451414380ed9bd4820a9d7971b77..1b2d6e71a192ec96a0abb56b59dcdb8d8c620fb0 100755 --- a/src/main/java/ui/TGCWithInternalComponent.java +++ b/src/main/java/ui/TGCWithInternalComponent.java @@ -62,8 +62,11 @@ public abstract class TGCWithInternalComponent extends TGComponent{ if (s != TGState.POINTER_ON_ME) { setStateInternalTGComponent(s); if (s == TGState.POINTED) { - if (selectedInternalComponent != null) { + if (selectedInternalComponent != null) { + if(!tdp.select || (tdp.select && tdp.componentPointed == selectedInternalComponent)) //Check if this is the selected component selectedInternalComponent.setState(TGState.POINTER_ON_ME); + else + selectedInternalComponent.setState(TGState.POINTED); } else { if (father == null) { state = TGState.POINTER_ON_ME; diff --git a/src/main/java/ui/TGComponent.java b/src/main/java/ui/TGComponent.java index b1b5abaf81b731344528f738af2f00ce842de0b3..7d927979f8bb0bce1e24ab282102aee1c49fc09a 100755 --- a/src/main/java/ui/TGComponent.java +++ b/src/main/java/ui/TGComponent.java @@ -171,6 +171,7 @@ public abstract class TGComponent implements CDElement, GenericTree { protected int state; protected boolean selected; + protected boolean isSelect = false; protected int distanceSelected = 5; @@ -1522,6 +1523,10 @@ public abstract class TGComponent implements CDElement, GenericTree { if (tgc != null) { return tgc; } + if (tgcomponent[i].isClickSelected()) + { + return tgcomponent[i]; + } } return null; } @@ -2723,6 +2728,22 @@ public abstract class TGComponent implements CDElement, GenericTree { return b; } + /** + * Highlight the selected component + * @author Fabien Tessier + */ + public final boolean singleClick(JFrame frame, int x, int y) + { + boolean b = true; + isSelect = true; + tdp.highlightComponent(x, y); + if (moveable) { + + } + + return b; + } + public final void actionOnRemove(){ if (removable) { myActionWhenRemoved(); @@ -3208,4 +3229,12 @@ public abstract class TGComponent implements CDElement, GenericTree { tgcomponent[i].searchForText(text, elements); } } + + public boolean isClickSelected() { + return isSelect; + } + + public void clickSelect(boolean b) { + isSelect = b; + } }