-
Fabien Tessier authoredFabien Tessier authored
TDiagramMouseManager.java 26.56 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
*
* ludovic.apvrille AT enst.fr
*
* This software is a computer program whose purpose is to allow the
* edition of TURTLE analysis, design and deployment diagrams, to
* allow the generation of RT-LOTOS or Java code from this diagram,
* and at last to allow the analysis of formal validation traces
* obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
* from INRIA Rhone-Alpes.
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL license and that you accept its terms.
*/
package ui;
import ui.window.JDialogSearchBox;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
/**
* Class TDiagramMouseManager
* Mouse management for all diagrams
* Creation: 21/12/2003
* @version 1.1 06/07/2004
* @author Ludovic APVRILLE
*/
public class TDiagramMouseManager extends MouseAdapter {//implements MouseListener, MouseMotionListener {
private TDiagramPanel tdp;
private TGComponent tgc;
private TGComponent lastSelectedComponent = null;
private int oldx;
private int oldy;
private int oldwidth;
private int oldheight;
private int cdx;
private int cdy;
private int cdwidth;
private int cdheight;
private int decx;
private int decy;
private int resizeInfo;
private boolean selectedComponent = false;
//private Point p;
private TGConnectingPoint cp;
//private TGConnector tgcon;
private TGConnector tgco;
private CDElement [] cde;
private boolean isOut;
//store selected components
private java.util.List<String> selectedMultiComponents=new ArrayList<String>();
// Constructor
public TDiagramMouseManager(TDiagramPanel _tdp) {
tdp = _tdp;
}
// Mouse operations
@Override
public void mousePressed(MouseEvent e) {
int selected = tdp.getGUI().getTypeButtonSelected();
//System.out.println("Titi");
if (e.getButton() == MouseEvent.BUTTON3) {
//System.out.println("toto");
setSelection(e.getX(), e.getY());
tdp.openPopupMenu(e.getX(), e.getY());
}
//System.out.println("mode = " + tdp.mode + " selected=" + selected);
if ((tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) && (e.getButton() == MouseEvent.BUTTON1) && (tdp.isInSelectedRectangle(e.getX(), e.getY()))){
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
tdp.mode = TDiagramPanel.MOVING_SELECTED_COMPONENTS;
tdp.setMovingSelectedComponents();
cdx = tdp.getXSelected();
cdy = tdp.getYSelected();
oldx = cdx;
oldy = cdy;
decx = e.getX() - cdx;
decy = e.getY() - cdy;
}
if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT)& (e.getButton() == MouseEvent.BUTTON1)) {
setSelection(e.getX(), e.getY());
//search if an element is pointed
boolean actionMade = false;
tgc = tdp.componentPointed();
//System.out.println("Working on TGC=" + tgc);
if (tgc == null) {
// making a selection of components
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
tdp.mode = TDiagramPanel.SELECTING_COMPONENTS;
tdp.setSelectingComponents(e.getX(), e.getY());
} else {
// Resize, move, or make a connector
if (tgc.isUserResizable() && ((resizeInfo=tgc.getResizeZone(e.getX(), e.getY())) != 0)) {
actionMade = true;
// Resize
//System.out.println("Resize");
tgc.setState(TGState.RESIZING);
tgc.updateMinMaxSize();
//tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
tdp.mode = TDiagramPanel.RESIZING_COMPONENT;
cdx = tgc.getX();
cdy = tgc.getY();
cdwidth = tgc.getWidth();
cdheight = tgc.getHeight();
oldx = cdx;
oldy = cdy;
oldwidth = cdwidth;
oldheight = cdheight;
decx = e.getX() - cdx;
decy = e.getY() - cdy;
}
if (!actionMade) {
TGConnectingPoint p1;
//System.out.println("Working on TGC=" + tgc);
if (tgc.getDefaultConnector() != -1) {
p1 = tgc.getFreeTGConnectingPointAtAndCompatible(e.getX(), e.getY(), tgc.getDefaultConnector());
if ((p1 != null) && (p1.isOut())) {
// add connector
actionMade = true;
tdp.setSelectedTGConnectingPoint(p1);
tdp.getGUI().actionOnButton(TGComponentManager.CONNECTOR, tgc.getDefaultConnector());
tdp.mode = TDiagramPanel.ADDING_CONNECTOR;
tdp.addingTGConnector();
cp = p1;
tdp.setAddingTGConnector(e.getX(), e.getY());
//tdp.repaint();
setSelection(p1.container.getX(), p1.container.getY());
}
}
}
if ((!actionMade) && (tgc.isMoveable())) {
actionMade = true;
//Move
tgc.setState(TGState.MOVING);
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
tdp.mode = TDiagramPanel.MOVING_COMPONENT;
cdx = tgc.getX();
cdy = tgc.getY();
oldx = cdx;
oldy = cdy;
decx = e.getX() - cdx;
decy = e.getY() - cdy;
}
if ((!actionMade) &&(tgc instanceof TGConnector)) {
// moving segment of connector ?
actionMade = true;
tgco = (TGConnector)tgc;
cde = tgco.getPointedSegment(e.getX(), e.getY());
if (cde != null) {
if ((!tgco.isP1(cde[0])) && (!tgco.isP2(cde[1]))) {
// moving segment
tgc.setState(TGState.MOVING);
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
tdp.mode = TDiagramPanel.MOVE_CONNECTOR_SEGMENT;
oldx = cde[0].getX();
oldy = cde[0].getY();
decx = e.getX();
decy = e.getY();
} else {
if ((tgco.isP1(cde[0])) && (tgco.isP2(cde[1]))) {
// we choose one of the two -> the closer one to the click
cde = tgco.closerPToClickFirst(e.getX(), e.getY());
} else {
if (tgco.isP2(cde[1])) {
cde[1] = cde[0];
cde[0] = tgco.getTGConnectingPointP2();
}
}
isOut = cde[0] != tgco.getTGConnectingPointP2();
// moving connector head
tdp.setMovingHead(e.getX(), e.getY(), cde[1].getX(), cde[1].getY());
tgc.setState(TGState.MOVING);
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
tdp.mode = TDiagramPanel.MOVE_CONNECTOR_HEAD;
tdp.setConnectorHead(tgco);
((TGConnectingPoint)cde[0]).setFree(true);
//System.out.println("Moving connector head");
if (isOut) {
tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
} else {
tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
}
oldx = cde[0].getX();
oldy = cde[0].getY();
decx = e.getX();
decy = e.getY();
}
}
}
}
}
if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.CONNECTOR) & (e.getButton() == MouseEvent.BUTTON1)) {
// connector adding
// search for an selected connecting point
TGConnectingPoint p1;
p1 = tdp.getSelectedTGConnectingPoint();
if ((p1 != null) && (p1.isOut())){
tdp.mode = TDiagramPanel.ADDING_CONNECTOR;
tdp.addingTGConnector();
cp = p1;
tdp.setAddingTGConnector(e.getX(), e.getY());
tdp.repaint();
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (tdp.mode == TDiagramPanel.MOVING_SELECTED_COMPONENTS) {
tdp.mode = TDiagramPanel.SELECTED_COMPONENTS;
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
tdp.setStopMovingSelectedComponents();
if ((oldx != tdp.getXSelected()) || (oldy != tdp.getYSelected())) {
tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
}
tdp.repaint();
}
if (tdp.mode == TDiagramPanel.MOVING_COMPONENT) {
tgc.setState(TGState.POINTED);
tdp.mode = TDiagramPanel.NORMAL;
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
if ((oldx != tgc.getX()) || (oldy != tgc.getY())) {
//System.out.println("change2");
tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
}
setSelection(e.getX(), e.getY());
}
if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
tgc.setState(TGState.POINTED);
tdp.mode = TDiagramPanel.NORMAL;
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
if ((oldx != tgc.getX()) || (oldy != tgc.getY()) || (oldwidth != tgc.getWidth()) || (oldheight != tgc.getHeight())) {
//System.out.println("change2");
tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
}
setSelection(e.getX(), e.getY());
}
if (tdp.mode == TDiagramPanel.SELECTING_COMPONENTS) {
tdp.endSelectComponents();
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
tdp.repaint();
}
if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_SEGMENT) {
tgc.setState(TGState.POINTED);
tdp.mode = TDiagramPanel.NORMAL;
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
if ((oldx != cde[0].getX()) || (oldy != cde[0].getY())) {
tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
}
}
if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_HEAD) {
tgc.setState(TGState.POINTED);
tdp.mode = TDiagramPanel.NORMAL;
TGConnectingPoint p;
p = tdp.getSelectedTGConnectingPoint();
if (p != null) {
((TGConnectingPoint)cde[0]).setFree(true);
p.setFree(false);
if (isOut) {
tgco.setP1(p);
} else {
tgco.setP2(p);
}
tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_CONNECTOR);
if (tgco instanceof SpecificActionAfterMove) {
((SpecificActionAfterMove)tgco).specificActionAfterMove();
}
} else {
((TGConnectingPoint)cde[0]).setFree(false);
}
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
tdp.repaint();
}
}
@Override
public void mouseClicked(MouseEvent e) {
//System.out.println("MouseClick: " + e.getClickCount());
//open a Search Dialog with seleted component's value
if ( (e.getButton() == MouseEvent.BUTTON1) && e.isAltDown()) {
byte info = tdp.hoveredComponent(e.getX(), e.getY());
if (info > 1) {
tgc = tdp.componentHovered();
String search = tgc.getValue();
if (tdp.mgui.searchBox==null ) {
tdp.mgui.searchBox = new JDialogSearchBox(tdp.getGUI().getFrame(), "Search Box", selectedMultiComponents, this);
}
else {
if (tdp.mgui.searchBox.isShowing()) {
tdp.mgui.searchBox.addValueListKeyword(search);
tdp.mgui.searchBox.setVisible( true );
} else{
tdp.mgui.searchBox=null;
tdp.mgui.searchBox = new JDialogSearchBox(tdp.getGUI().getFrame(), "Search Box", selectedMultiComponents, this);
}
}
}
}
//author:Huy TRUONG
//add component's value into list by clicking on component and holding Ctrl
if ((e.getButton() == MouseEvent.BUTTON1) && e.isControlDown()){
tgc = tdp.componentPointed();
//set text of seach field on menubar
tdp.mgui.getMainBar().search.setText(tgc.getValue());
if ( null == tdp.mgui.searchBox || ! tdp.mgui.searchBox.isShowing()){
selectedMultiComponents.add(tgc.getValue());
//TraceManager.addDev("Selected components: " + selectedMultiComponents.toString());
}
else {
if (tdp.mgui.searchBox.isShowing())
{
tdp.mgui.searchBox.addValueListKeyword(tgc.getValue());
selectedMultiComponents.clear();
}
else{
selectedMultiComponents.add(tgc.getValue());
tdp.mgui.searchBox.removeValueListKeyword();
}
}
}else
selectedMultiComponents.clear();
// clear the list when release Ctrl and click
//--
if (tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
if ((e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)){
tdp.mode = TDiagramPanel.NORMAL;
tdp.mgui.setMode(MainGUI.CUTCOPY_KO);
tdp.mgui.setMode(MainGUI.EXPORT_LIB_KO);
tdp.unselectSelectedComponents();
tdp.repaint();
}
return;
}
int selected = tdp.getGUI().getTypeButtonSelected();
if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)){
//System.out.println("Double click");
tgc = tdp.componentPointed();
if (tgc != null) {
//System.out.println("Component pointed: " + tgc.getName());
if (tgc.doubleClick(tdp.getGUI().getFrame(), e.getX(), e.getY())) {
//System.out.println("Change4");
tdp.getGUI().changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
tdp.repaint();
}
}
}
if ((selected == TGComponentManager.CONNECTOR) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
// if there is a close connecting point
if (tdp.mode == TDiagramPanel.ADDING_CONNECTOR) {
TGConnectingPoint p1;
p1 = tdp.getSelectedTGConnectingPoint();
if (p1 != null) {
if ((p1 != cp) && (p1.isIn())) {
tdp.finishAddingConnector(p1);
tdp.mode = TDiagramPanel.NORMAL;
tdp.getGUI().setEditMode();
//System.out.println("Change3");
tdp.getGUI().changeMade(tdp, TDiagramPanel.NEW_CONNECTOR);
tdp.repaint();
}
} else {
// no close connecting point -> adding point
tdp.addPointToTGConnector(e.getX(), e.getY());
tdp.repaint();
}
}
}
if ((selected == TGComponentManager.CONNECTOR) && (e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)) {
if (tdp.mode == TDiagramPanel.ADDING_CONNECTOR) {
tdp.mode = TDiagramPanel.NORMAL;
tdp.stopAddingConnector(true);
tdp.getGUI().setEditMode();
tdp.repaint();
} else {
tdp.getGUI().setEditMode();
tdp.repaint();
}
}
if ((selected == TGComponentManager.COMPONENT) &&(e.getButton() == MouseEvent.BUTTON1)){
TGComponent comp = tdp.addComponent(e.getX(), e.getY(), true);
tdp.autoConnect(comp);
tdp.getGUI().setEditMode();
//System.out.println("change1");
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.requestFocusInWindow();
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
if (!(tgc instanceof TGConnector) && tgc.moveable)
tdp.getGUI().setMode(MainGUI.COMPONENT_SELECTED);
else
tdp.getGUI().setMode(MainGUI.OPENED);
lastSelectedComponent = tgc;
tdp.setSelect(true);
tgc.singleClick(tdp.getGUI().getFrame(), x, y);
}
else {
tdp.getGUI().setMode(MainGUI.OPENED);
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;
tdp.stopAddingConnector(true);
//tdp.getGUI().setEditMode();
//tdp.repaint();
}
public void setCursor(int info) {
switch(info) {
case 1:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
break;
case 2:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
break;
case 3:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
break;
case 4:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
break;
case 5:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
break;
case 6:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
break;
case 7:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
break;
case 8:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
break;
default:
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
@Override
public void mouseMoved(MouseEvent e) {
tdp.currentX = e.getX();
tdp.currentY = e.getY();
int selected = tdp.getGUI().getTypeButtonSelected();
if (tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
if (tdp.showSelectionZone(e.getX(), e.getY())) {
tdp.repaint();
}
}
if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT)){
byte info = 0;
if (!tdp.isSelect())
info = tdp.highlightComponent(e.getX(), e.getY());
if (info > 1 || tdp.isSelect()) {
tgc = tdp.componentPointed();
if (tgc.isUserResizable()) {
setCursor(tgc.getResizeZone(e.getX(), e.getY()));
} else {
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
} else {
tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
if ((info == 1) || (info == 3)) {
tdp.updateJavaCode();
tdp.repaint();
}
}
if ((selected == TGComponentManager.CONNECTOR) && (tdp.mode == TDiagramPanel.NORMAL)) { // is connectingPointShow selected
if(tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tdp.getMGUI().getIdButtonSelected())) {
tdp.repaint();
}
}
if ((selected == TGComponentManager.CONNECTOR) && (tdp.mode == TDiagramPanel.ADDING_CONNECTOR)) {
tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tdp.getMGUI().getIdButtonSelected());
tdp.setAddingTGConnector(e.getX(), e.getY());
tdp.repaint();
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (tdp.mode == TDiagramPanel.MOVING_COMPONENT) {
tgc.setMoveCd(e.getX() - decx, e.getY() - decy);
tdp.repaint();
return;
}
if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
applyResize(e.getX(), e.getY());
tdp.repaint();
return;
}
if (tdp.mode == TDiagramPanel.MOVING_SELECTED_COMPONENTS) {
tdp.moveSelected(e.getX() - decx, e.getY() - decy);
tdp.repaint();
return;
}
if (tdp.mode == TDiagramPanel.SELECTING_COMPONENTS) {
tdp.updateSelectingComponents(e.getX(), e.getY());
tdp.repaint();
return;
}
if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_SEGMENT) {
cde[0].setCd(cde[0].getX() + e.getX() - decx, cde[0].getY() + e.getY() - decy);
cde[1].setCd(cde[1].getX() + e.getX() - decx, cde[1].getY() + e.getY() - decy);
decx = e.getX();
decy = e.getY();
tdp.repaint();
}
if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_HEAD) {
tdp.setMovingHead(e.getX(), e.getY(), cde[1].getX(), cde[1].getY());
if (isOut) {
tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
} else {
tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
}
tdp.repaint();
}
}
public void applyResize(int choicex, int choicey) {
Point px, py;
switch(resizeInfo) {
case 1:
px = tgc.modifyInX(choicex);
py = tgc.modifyInY(choicey);
tgc.setUserResize(px.x, py.x, px.y, py.y);
break;
case 2:
py = tgc.modifyInY(choicey);
tgc.setUserResize(cdx, py.x, cdwidth, py.y);
break;
case 3:
px = tgc.modifyInWidth(choicex);
py = tgc.modifyInY(choicey);
tgc.setUserResize(px.x, py.x, px.y, py.y);
break;
case 4:
//System.out.println("Modify in X");
px = tgc.modifyInX(choicex);
tgc.setUserResize(px.x, cdy, px.y, cdheight);
break;
case 5:
px = tgc.modifyInWidth(choicex);
tgc.setUserResize(px.x, cdy, px.y, cdheight);
break;
case 6:
px = tgc.modifyInX(choicex);
py = tgc.modifyInHeight(choicey);
tgc.setUserResize(px.x, py.x, px.y, py.y);
break;
case 7:
py = tgc.modifyInHeight(choicey);
tgc.setUserResize(cdx, py.x, cdwidth, py.y);
break;
case 8:
px = tgc.modifyInWidth(choicex);
py = tgc.modifyInHeight(choicey);
tgc.setUserResize(px.x, py.x, px.y, py.y);
break;
default:
}
}
//Author: huytruong
public java.util.List<String> getSelectComponents(){
return selectedMultiComponents ;
}
public void clearSelectComponents(){
this.selectedMultiComponents.clear();
}
public TDiagramPanel getTdp() {
return tdp;
}
//
// public void removeSelectedComponentFromList(){
// this.selectedMultiComponents.clear();
// }
}