diff --git a/Makefile b/Makefile index d3cc72cc16e54f41367eb99e0e185eee24372946..7aa38e5c2a3dcecaa8b71072823e8550ea72e9b5 100755 --- a/Makefile +++ b/Makefile @@ -24,6 +24,8 @@ TIFTRANSLATOR_BINARY = tiftranslator.jar TMLTRANSLATOR_BINARY = tmltranslator.jar RUNDSE_BINARY = rundse.jar REMOTESIMULATOR_BINARY = simulationcontrol.jar +RUNDSE_BINARY = rundse.jar +RUNDSE_JAR_TXT = rundse.txt TTOOL_JAR_TXT = ttool.txt LAUNCHER_JAR_TXT = launcher.txt TIFTRANSLATOR_JAR_TXT = tiftranslator.txt @@ -71,7 +73,7 @@ RELEASE_STD_FILES_WINDIWS_EXE = ttool_windows.bat RELEASE_STD_FILES_XML = manual-HW.xml DrinkMachineV10.xml WebV01.xml Protocol_example1.xml BasicExchange.xml SmartCardProtocol.xml ProtocolPatterns.xml COCOME_V50.xml CoffeeMachine_Avatar.xml Network_Avatar.xml RELEASE_STD_FILES_LIB = TClock1.lib TTimerv01.lib -RELEASE_STD_FILES_BIN = $(TTOOL_CONFIG) $(LAUNCHER_BINARY) $(TTOOL_BINARY) $(TIFTRANSLATOR_BINARY) $(TMLTRANSLATOR_BINARY) $(REMOTESIMULATOR_BINARY) +RELEASE_STD_FILES_BIN = $(TTOOL_CONFIG) $(LAUNCHER_BINARY) $(TTOOL_BINARY) $(TIFTRANSLATOR_BINARY) $(TMLTRANSLATOR_BINARY) $(REMOTESIMULATOR_BINARY) $(RUNDSE_BINARY) RELEASE_STD_FILES_LICENSES = LICENSE LICENSE_CECILL_ENG LICENSE_CECILL_FR @@ -125,7 +127,7 @@ remotesimulator: documentation: $(JAVADOC) $(CLASSPATH) $(TTOOL_SRC) -d $(TTOOL_DOC_HTML) $(TTOOL_SRC)/*.java $(TTOOL_SRC)/*/*.java $(TTOOL_SRC)/*/*/*.java $(TTOOL_SRC)/fr/inria/oasis/vercors/cttool/model/*.java -release: jttooljar launcher tiftranslator tmltranslator remotesimulator ttooljar_std stdrelease +release: jttooljar launcher tiftranslator tmltranslator rundse remotesimulator ttooljar_std stdrelease @echo release done ########## RELEASE @@ -219,7 +221,8 @@ stdrelease: cp $(TTOOL_DOC)/README_bin $(TTOOL_TARGET)/bin cp $(TTOOL_BIN)/configuration.gcf $(TTOOL_TARGET)/bin cp -R $(TTOOL_BIN)/$(TTOOL_LOTOS_H).h $(TTOOL_BIN)/$(TTOOL_LOTOS_H)_?.h $(TTOOL_BIN)/$(TTOOL_LOTOS_H)_?.t $(TTOOL_BIN)/$(TTOOL_LOTOS_H)_?.f $(TTOOL_TARGET)/bin - cp $(TTOOL_BIN)/$(TTOOL_BINARY) $(TTOOL_BIN)/$(LAUNCHER_BINARY) $(TTOOL_BIN)/$(TIFTRANSLATOR_BINARY) $(TTOOL_BIN)/$(TMLTRANSLATOR_BINARY) $(TTOOL_BIN)/$(TTOOL_CONFIG_SRC) $(TTOOL_TARGET)/bin + cp $(TTOOL_BIN)/$(TTOOL_BINARY) $(TTOOL_BIN)/$(LAUNCHER_BINARY) $(TTOOL_BIN)/$(TIFTRANSLATOR_BINARY) $(TTOOL_BIN)/$(TMLTRANSLATOR_BINARY) $(TTOOL_BIN)/$(RUNDSE_BINARY) $(TTOOL_BIN)/$(TTOOL_CONFIG_SRC) $(TTOOL_TARGET)/bin + # Basic release cd $(TTOOL_TARGET_RELEASE);$(TAR) cfv $(TTOOL_STD_RELEASE)/release.tar *; $(GZIP) -9 $(TTOOL_STD_RELEASE)/release.tar; mv $(TTOOL_STD_RELEASE)/release.tar.gz $(TTOOL_STD_RELEASE)/release.tgz diff --git a/src/dseengine/DSEConfiguration.java b/src/dseengine/DSEConfiguration.java index 5e438ec0b7540afc58e817265079fff42ee833bd..6cec678d96dcc6acd67a79e28a2a48e50c5c211a 100755 --- a/src/dseengine/DSEConfiguration.java +++ b/src/dseengine/DSEConfiguration.java @@ -101,6 +101,8 @@ public class DSEConfiguration { private int simulationExplorationMinimumCommand = 100; private int simulationExplorationMinimumBranch = 100; + private int simulationMaxCycles = -1; + //private int nbOfSimulations; @@ -276,6 +278,16 @@ public class DSEConfiguration { return 0; } + public int setSimulationMaxCycle(String _arguments) { + try { + simulationMaxCycles = Integer.decode(_arguments).intValue(); + } catch (Exception e) { + errorMessage = INVALID_ARGUMENT_NATURAL_VALUE; + return -1; + } + return 0; + } + public int runSimulation(String _arguments, boolean _debug, boolean _optimize) { // Checking for valid arguments @@ -352,6 +364,11 @@ public class DSEConfiguration { String cmd; while(nbOfSimulations >0) { cmd = pathToSimulator + simulationExecutionCommand; + + if (simulationMaxCycles > -1) { + cmd += " -cmd \"1 5 " + simulationMaxCycles + "\""; + } + if (outputVCD) { cmd += " -ovcd " + pathToResults + "output" + simulationID + ".vcd"; } @@ -441,7 +458,7 @@ public class DSEConfiguration { // Executing the simulation - String cmd = pathToSimulator + simulationExecutionCommand + " -cmd '1 7 " +simulationExplorationMinimumCommand + " " + simulationExplorationMinimumBranch + "' -gpath " + pathToResults; + String cmd = pathToSimulator + simulationExecutionCommand + " -cmd \"1 7 " +simulationExplorationMinimumCommand + " " + simulationExplorationMinimumBranch + "\" -gpath " + pathToResults; makeCommand(cmd); simulationID ++; @@ -454,6 +471,75 @@ public class DSEConfiguration { BufferedReader proc_in, proc_err; //PrintStream out = null; + try { + TraceManager.addDev("Going to start command " + cmd); + + ProcessBuilder pb = new ProcessBuilder(constructCommandList(cmd)); + Map<String, String> env = pb.environment(); + java.lang.Process proc = pb.start(); + + proc_in = new BufferedReader(new InputStreamReader(proc.getInputStream())); + proc_err = new BufferedReader(new InputStreamReader(proc.getErrorStream())); + + //et = new ErrorThread(proc_err, mpi); + //et.start(); + + while ((str = proc_in.readLine()) != null){ + TraceManager.addDev("Out " + str); + //mpi.appendOut(str+"\n"); + } + + //et.stopProcess(); + + } catch (Exception e) { + TraceManager.addDev("Exception [" + e.getMessage() + "] occured when executing " + cmd); + } + TraceManager.addDev("Ending command " + cmd); + + } + + public List<String> constructCommandList(String _cmd) { + Vector<String> list = new Vector<String>(); + _cmd = _cmd.trim(); + char c; + String current = ""; + boolean inQuote0 = false; + boolean inQuote1 = false; + + TraceManager.addDev("Making list from command : " + _cmd); + + for(int i=0; i<_cmd.length(); i++) { + c = _cmd.charAt(i); + + if ((c == ' ') && (!inQuote0) && (!inQuote1)){ + TraceManager.addDev("Adding " + current); + list.add(current); + current = ""; + } else if (c == '\'') { + inQuote1 = !inQuote1; + } else if (c == '\"') { + inQuote0 = !inQuote0; + } else { + current += c; + } + + } + + if (current.length() > 0) { + list.add(current); + } + + TraceManager.addDev("List done\n"); + + return (List)list; + + } + + public void oldMakeCommand(String cmd) { + String str = null; + BufferedReader proc_in, proc_err; + //PrintStream out = null; + try { TraceManager.addDev("Going to start command " + cmd); diff --git a/src/dseengine/DSEScriptReader.java b/src/dseengine/DSEScriptReader.java index 923e1afe3e58503f2a6525abc47cd3362c1cdfd1..9d2d842c4f7e2defb6ad51cec7947950ce5b8554 100755 --- a/src/dseengine/DSEScriptReader.java +++ b/src/dseengine/DSEScriptReader.java @@ -77,7 +77,7 @@ public class DSEScriptReader { "simulationCompilationCommand", "simulationExecutionCommand", // 6, 7 "SimulationOutputHTML", "SimulationOutputTxt", // 8, 9 "SimulationExplorationMinimumCommand", "SimulationExplorationMinimumBranch", // 10, 11 - "RunExplo" + "RunExplo", "SimulationMaxCycle" //12, 13 }; private String fileName; @@ -251,6 +251,11 @@ public class DSEScriptReader { return ERROR_WHEN_RUNNING; } return OK; + case 13: + if (_config.setSimulationMaxCycle(_arguments) != 0) { + return SYNTAX_ERROR_IN_LINE; + } + return OK; } diff --git a/src/rundse.txt b/src/rundse.txt index 18e66503cd6d4de0cbbbfb608a66e099d2efef45..b9478065e6b61d6c40c2a97da9f4bc2fa8b5aca4 100755 --- a/src/rundse.txt +++ b/src/rundse.txt @@ -1 +1 @@ -Main-Class: RunDSE +Main-Class: runDSE diff --git a/src/ui/IconManager.java b/src/ui/IconManager.java index 7969b06e0c6997c79db9a7899da82e08390247b6..a111372d1673ee51d9ec5206425c5c34e008072d 100755 --- a/src/ui/IconManager.java +++ b/src/ui/IconManager.java @@ -110,7 +110,7 @@ public class IconManager { public static ImageIcon imgic900, imgic902, imgic904, imgic906, imgic908, imgic910, imgic912, imgic914, imgic916, imgic918; public static ImageIcon imgic920, imgic922, imgic924, imgic926, imgic928, imgic930; // Requirement diagrams - public static ImageIcon imgic1000, imgic1002, imgic1004,imgic1006,imgic1008, imgic1010, imgic1012, imgic1014; + public static ImageIcon imgic1000, imgic1002, imgic1004,imgic1006,imgic1008, imgic1010, imgic1012, imgic1014, imgic1016; public static ImageIcon imgic1050, imgic1052, imgic1054,imgic1056, imgic1058, imgic1060; // Attack Tree Diagrams @@ -430,6 +430,7 @@ public class IconManager { private static String icon1010 = "images/reqcopy.gif"; private static String icon1012 = "images/reqcomp.gif"; private static String icon1014 = "images/ebrddobs.gif"; + private static String icon1016 = "images/reqref.gif"; // EBRDD @@ -789,6 +790,7 @@ public class IconManager { imgic1010 = getIcon(icon1010); imgic1012 = getIcon(icon1012); imgic1014 = getIcon(icon1014); + imgic1016 = getIcon(icon1016); imgic1050 = getIcon(icon1050); imgic1052 = getIcon(icon1052); diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java index 3793fb358db28f285ce85e077d33641fa367b039..8932070823d88a43962b1fdb573bfe83832a6da8 100755 --- a/src/ui/MainGUI.java +++ b/src/ui/MainGUI.java @@ -6429,6 +6429,8 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener { actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.AVATARRD_PROPERTY); } else if (command.equals(actions[TGUIAction.ARD_DERIVE_CONNECTOR].getActionCommand())) { actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARRD_DERIVE_CONNECTOR); + } else if (command.equals(actions[TGUIAction.ARD_REFINE_CONNECTOR].getActionCommand())) { + actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARRD_REFINE_CONNECTOR); } else if (command.equals(actions[TGUIAction.ARD_VERIFY_CONNECTOR].getActionCommand())) { actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARRD_VERIFY_CONNECTOR); } else if (command.equals(actions[TGUIAction.ARD_COPY_CONNECTOR].getActionCommand())) { diff --git a/src/ui/TGComponentManager.java b/src/ui/TGComponentManager.java index 3f2c44ea065fa31306b385826891c8ae05d1fbf1..7e6ede00f19b1e3ff7eaa8cf6513b29139271d3a 100755 --- a/src/ui/TGComponentManager.java +++ b/src/ui/TGComponentManager.java @@ -315,7 +315,8 @@ public class TGComponentManager { // AVATAR RD -> starts at 5200 public static final int AVATARRD_REQUIREMENT = 5200; public static final int AVATARRD_PROPERTY = 5201; - public static final int AVATARRD_DERIVE_CONNECTOR = 5202; + public static final int AVATARRD_DERIVE_CONNECTOR = 5202; + public static final int AVATARRD_REFINE_CONNECTOR = 5206; public static final int AVATARRD_VERIFY_CONNECTOR = 5203; public static final int AVATARRD_COPY_CONNECTOR = 5204; public static final int AVATARRD_COMPOSITION_CONNECTOR = 5205; @@ -897,6 +898,8 @@ public class TGComponentManager { return AVATARRD_PROPERTY; } else if (tgc instanceof AvatarRDDeriveConnector) { return AVATARRD_DERIVE_CONNECTOR; + } else if (tgc instanceof AvatarRDRefineConnector) { + return AVATARRD_REFINE_CONNECTOR; } else if (tgc instanceof AvatarRDVerifyConnector) { return AVATARRD_VERIFY_CONNECTOR; } else if (tgc instanceof AvatarRDCopyConnector) { @@ -1305,6 +1308,9 @@ public class TGComponentManager { // AVATAR RD case AVATARRD_DERIVE_CONNECTOR: tgc = new AvatarRDDeriveConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint); + break; + case AVATARRD_REFINE_CONNECTOR: + tgc = new AvatarRDRefineConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint); break; case AVATARRD_VERIFY_CONNECTOR: tgc = new AvatarRDVerifyConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint); diff --git a/src/ui/TGUIAction.java b/src/ui/TGUIAction.java index 366913fa85283b9dbce058e09b70abd3c2af1900..030dd6920da9be976bf8c6bec61fc5b28833cfa5 100755 --- a/src/ui/TGUIAction.java +++ b/src/ui/TGUIAction.java @@ -326,6 +326,7 @@ public class TGUIAction extends AbstractAction { public static final int ARD_PROPERTY = 302; public static final int ARD_VERIFY_CONNECTOR = 303; public static final int ARD_DERIVE_CONNECTOR = 304; + public static final int ARD_REFINE_CONNECTOR = 343; public static final int ARD_COPY_CONNECTOR = 305; public static final int ARD_COMPOSITION_CONNECTOR = 306; @@ -463,7 +464,7 @@ public class TGUIAction extends AbstractAction { //Action for the help button created by Solange public static final int PRUEBA_1 = 205; - public static final int NB_ACTION = 343; + public static final int NB_ACTION = 344; private static final TAction [] actions = new TAction[NB_ACTION]; @@ -886,9 +887,10 @@ public class TGUIAction extends AbstractAction { actions[ARD_REQUIREMENT] = new TAction("add-ard-requirement", "Add a requirement", IconManager.imgic5006, IconManager.imgic5006, "Requirement", "Add a requirement to the currently opened avatar requirement diagram", 0); actions[ARD_PROPERTY] = new TAction("add-ard-property", "Add a property", IconManager.imgic5008, IconManager.imgic5008, "Property", "Add a reference to a property of the currently opened avatar requirement diagram", 0); actions[ARD_DERIVE_CONNECTOR] = new TAction("add-ard-derive", "Add a <<deriveReqt>> link", IconManager.imgic1008, IconManager.imgic1008, "DeriveReqt", "Add a <<deriveReqt>> link between two requirements of the currently opened avatar requirement diagram", 0); + actions[ARD_REFINE_CONNECTOR] = new TAction("add-ard-refine", "Add a <<refine>> link", IconManager.imgic1016, IconManager.imgic1016, "refine", "Add a <<refine>> link between two requirements of the currently opened avatar requirement diagram", 0); actions[ARD_VERIFY_CONNECTOR] = new TAction("add-ard-verify", "Add a <<verify>> link", IconManager.imgic1006, IconManager.imgic1006, "Verify", "Add a <<verify>> link between an observer and a requirement of the currently opened avatar requirement diagram", 0); actions[ARD_COPY_CONNECTOR] = new TAction("add-ard-copy", "Add a <<copy>> link", IconManager.imgic1010, IconManager.imgic1010, "Copy", "Add a <<copy>> link between two requirements of the currently opened avatar requirement diagram", 0); - actions[ARD_COMPOSITION_CONNECTOR] = new TAction("add-ard-composition", "Add a <<derive>> link", IconManager.imgic1012, IconManager.imgic1012, "Composition", "Add a <<copy>> link between two requirements of the currently opened avatar requirement diagram", 0); + actions[ARD_COMPOSITION_CONNECTOR] = new TAction("add-ard-composition", "Add a composition link", IconManager.imgic1012, IconManager.imgic1012, "Composition", "Add a composition link between two requirements of the currently opened avatar requirement diagram", 0); // AVATAR Parametric Diagrams actions[APD_EDIT] = new TAction("edit-apd-diagram", "Edit AVATAR Parametric Diagrams", IconManager.imgic100, IconManager.imgic101, "Edit AVATAR Parametric Diagram", "Make it possible to edit the currently opened AVATAR Parametric Diagram", 0); diff --git a/src/ui/avatarrd/AvatarRDConnectingPointDerive.java b/src/ui/avatarrd/AvatarRDConnectingPointDerive.java index 2dc5287fe052430ee29d71504965a019cfefe859..6bd62afcb40785372cac42e44a586a39d6b09b2e 100755 --- a/src/ui/avatarrd/AvatarRDConnectingPointDerive.java +++ b/src/ui/avatarrd/AvatarRDConnectingPointDerive.java @@ -73,6 +73,12 @@ public class AvatarRDConnectingPointDerive extends TGConnectingPointWidthHeight //System.out.println("is compatible with:true"); return true; } + + if (type == TGComponentManager.AVATARRD_REFINE_CONNECTOR) { + //System.out.println("is compatible with:true"); + return true; + } + //System.out.pr //System.out.println("is compatible with:false"); return false; } diff --git a/src/ui/avatarrd/AvatarRDRefineConnector.java b/src/ui/avatarrd/AvatarRDRefineConnector.java new file mode 100755 index 0000000000000000000000000000000000000000..01307813543cdcb3a15596156d5efa0c82393378 --- /dev/null +++ b/src/ui/avatarrd/AvatarRDRefineConnector.java @@ -0,0 +1,106 @@ +/**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. + * + * /** + * Class AvatarRDDeriveConnector + * Connector to be used in Avatar RD. Connects two requirements + * Creation: 20/04/2010 + * @version 1.0 20/04/2010 + * @author Ludovic APVRILLE + * @see + */ + +package ui.avatarrd; + +import java.awt.*; +//import java.awt.geom.*; +import java.util.*; + +import myutil.*; + +import ui.*; + +public class AvatarRDRefineConnector extends TGConnectorWithCommentConnectionPoints { + int w, h; + + public AvatarRDRefineConnector(int _x, int _y, int _minX, int _minY, int _maxX, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp, TGConnectingPoint _p1, TGConnectingPoint _p2, Vector _listPoint) { + super(_x, _y, _minX, _minY, _maxX, _maxY, _pos, _father, _tdp, _p1, _p2, _listPoint); + value = "<<refine>>"; + + myImageIcon = IconManager.imgic1008; + } + + + protected void drawLastSegment(Graphics g, int x1, int y1, int x2, int y2){ + + //g.drawLine(x1, y1, x2, y2); + GraphicLib.dashedArrowWithLine(g, 1, 1, 0, x1, y1, x2, y2, false); + + // Indicate semantics + + Font f = g.getFont(); + Font old = f; + if (f.getSize() != tdp.getFontSize()) { + f = f.deriveFont((float)tdp.getFontSize()); + g.setFont(f); + } + + w = g.getFontMetrics().stringWidth(value); + h = g.getFontMetrics().getHeight(); + g.drawString(value, (x1 + x2 - w) / 2, (y1 + y2)/2); + g.setFont(old); + } + + public TGComponent extraIsOnOnlyMe(int x1, int y1) { + if (GraphicLib.isInRectangle(x1, y1, (p1.getX() + p2.getX() - w) / 2, (p1.getY() + p2.getY())/2 - h, w, h)) { + return this; + } + return null; + } + + public int getType() { + return TGComponentManager.AVATARRD_REFINE_CONNECTOR; + } + +} + + + + + + + diff --git a/src/ui/avatarrd/AvatarRDToolBar.java b/src/ui/avatarrd/AvatarRDToolBar.java index 558bc9fb6cf1a73d70bcb2c4ad5cebeededdcc97..ffa78ac938f862b4516ef74e971aa073d359f7a0 100755 --- a/src/ui/avatarrd/AvatarRDToolBar.java +++ b/src/ui/avatarrd/AvatarRDToolBar.java @@ -73,6 +73,7 @@ public class AvatarRDToolBar extends TToolBar { mgui.actions[TGUIAction.ARD_PROPERTY].setEnabled(b); mgui.actions[TGUIAction.ARD_VERIFY_CONNECTOR].setEnabled(b); mgui.actions[TGUIAction.ARD_DERIVE_CONNECTOR].setEnabled(b); + mgui.actions[TGUIAction.ARD_REFINE_CONNECTOR].setEnabled(b); mgui.actions[TGUIAction.ARD_COPY_CONNECTOR].setEnabled(b); mgui.actions[TGUIAction.ARD_COMPOSITION_CONNECTOR].setEnabled(b); @@ -116,6 +117,11 @@ public class AvatarRDToolBar extends TToolBar { button.addMouseListener(mgui.mouseHandler); this.addSeparator(); + + button = this.add(mgui.actions[TGUIAction.ARD_REFINE_CONNECTOR]); + button.addMouseListener(mgui.mouseHandler); + + this.addSeparator(); button = this.add(mgui.actions[TGUIAction.ARD_VERIFY_CONNECTOR]); button.addMouseListener(mgui.mouseHandler); diff --git a/src/ui/avatarsmd/AvatarSMDState.java b/src/ui/avatarsmd/AvatarSMDState.java index 20d1a813e7358cb3533e73312e7e69ece29a6892..685c0a3f775b2d1b6b8e608a11bf47ffdfc23bac 100644 --- a/src/ui/avatarsmd/AvatarSMDState.java +++ b/src/ui/avatarsmd/AvatarSMDState.java @@ -77,8 +77,8 @@ public class AvatarSMDState extends TGCScalableWithInternalComponent implements minWidth = 40; minHeight = 30; - nbConnectingPoint = 16; - connectingPoint = new TGConnectingPoint[16]; + nbConnectingPoint = 32; + connectingPoint = new TGConnectingPoint[32]; connectingPoint[0] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.0); connectingPoint[1] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.5, 0.0); @@ -97,6 +97,31 @@ public class AvatarSMDState extends TGCScalableWithInternalComponent implements connectingPoint[13] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.75); connectingPoint[14] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.25, 1.0); connectingPoint[15] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.75, 1.0); + + connectingPoint[16] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.12, 0.0); + connectingPoint[17] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.37, 0.0); + + connectingPoint[18] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.62, 0.0); + connectingPoint[19] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.87, 0.0); + + connectingPoint[20] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.12); + connectingPoint[21] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.37); + + connectingPoint[22] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.12); + connectingPoint[23] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.37); + + connectingPoint[24] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.62); + connectingPoint[25] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.0, 0.87); + + connectingPoint[26] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.62); + connectingPoint[27] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 1.0, 0.87); + + connectingPoint[28] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.12, 1.0); + connectingPoint[29] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.37, 1.0); + + connectingPoint[30] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.62, 1.0); + connectingPoint[31] = new AvatarSMDConnectingPoint(this, 0, 0, true, true, 0.87, 1.0); + addTGConnectingPointsComment(); diff --git a/src/ui/images/reqref.gif b/src/ui/images/reqref.gif new file mode 100644 index 0000000000000000000000000000000000000000..1fc0cb7e039419d196b0d78605e8079ef5509204 Binary files /dev/null and b/src/ui/images/reqref.gif differ