From 97bd76eb9beb1695968431596736cad6970999ab Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Mon, 3 Mar 2025 15:40:48 +0100
Subject: [PATCH] Adding drawing facility for SysMLv2

---
 src/main/java/ui/MainGUI.java                 |  9 +++-
 .../java/ui/SysMLv2ProviderInterface.java     |  6 +++
 src/main/java/ui/util/IconManager.java        |  3 +-
 src/main/java/ui/window/JFrameSysMLv2.java    | 47 ++++++++++++++++++-
 4 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index 1938921a8e..54b50d7bb8 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -3296,6 +3296,13 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
         return gtm.openSysMLV2(file.getAbsolutePath());
 
     }
+
+    public void drawSysMLv2Specification(String sysmlv2spec) {
+
+    }
+
+
+
     public boolean saveTIF() {
         int returnVal = jfctif.showSaveDialog(frame);
         if (returnVal == JFileChooser.APPROVE_OPTION) {
@@ -3659,7 +3666,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
         if (data != null) {
             TraceManager.addDev("New Frame SysML");
             JFrameSysMLv2 fbt = new JFrameSysMLv2("SysML v2 - " + getTabs().get(getCurrentSelectedIndex()).getNameOfTab(), data, this, gtm.getAvatarSpecification());
-            fbt.setSize(800, 800);
+            fbt.setSize(1000, 800);
             //fbt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             GraphicLib.centerFrame(fbt, frame);
             fbt.setVisible(true);
diff --git a/src/main/java/ui/SysMLv2ProviderInterface.java b/src/main/java/ui/SysMLv2ProviderInterface.java
index 3833ba29e5..1e227938e2 100644
--- a/src/main/java/ui/SysMLv2ProviderInterface.java
+++ b/src/main/java/ui/SysMLv2ProviderInterface.java
@@ -43,6 +43,7 @@
 package ui;
 
 
+import avatartranslator.AvatarSignal;
 import avatartranslator.AvatarSpecification;
 import ui.tmlad.TMLActivityDiagramPanel;
 
@@ -55,5 +56,10 @@ import ui.tmlad.TMLActivityDiagramPanel;
  */
 public interface SysMLv2ProviderInterface  {
     public String getSysMLV2();
+    public void drawSysMLv2Specification(String sysmlv2spec);
+
     public AvatarSpecification getAvatarSpecification();
+    public void drawAvatarSpecification(AvatarSpecification avspec, boolean useOriginalValues);
+
+
 }
\ No newline at end of file
diff --git a/src/main/java/ui/util/IconManager.java b/src/main/java/ui/util/IconManager.java
index f35f5964c7..2af98d5384 100755
--- a/src/main/java/ui/util/IconManager.java
+++ b/src/main/java/ui/util/IconManager.java
@@ -66,7 +66,7 @@ public class IconManager {
     //Added by Solange
     public static Image img0, img1;
 
-    public static ImageIcon imgic13, imgic14, imgic15, imgic16, imgic16_1, imgic17, imgic18, imgic19;
+    public static ImageIcon imgic12, imgic13, imgic14, imgic15, imgic16, imgic16_1, imgic17, imgic18, imgic19;
     public static ImageIcon imgic20, imgic21, imgic22, imgic23, imgic24, imgic25, imgic26, imgic27, imgic28, imgic29;
     public static ImageIcon imgic20_proj, imgic21_proj, imgic22_proj, imgic23_proj, imgic22_net, imgic23_net;
 
@@ -824,6 +824,7 @@ public class IconManager {
 
         imgic2 = getIcon(icon2);
 
+        imgic12 = getIcon(icon12);
         imgic13 = getIcon(icon13);
         imgic14 = getIcon(icon14);
         imgic15 = getIcon(icon15);
diff --git a/src/main/java/ui/window/JFrameSysMLv2.java b/src/main/java/ui/window/JFrameSysMLv2.java
index 1c53d7e971..096463b3dc 100644
--- a/src/main/java/ui/window/JFrameSysMLv2.java
+++ b/src/main/java/ui/window/JFrameSysMLv2.java
@@ -72,11 +72,12 @@ public class JFrameSysMLv2 extends JFrame implements ActionListener {
 	private JTextPane jta;
 	private JScrollPane jsp;
 	private ArrayList<String> avspecs;
+	private ArrayList<AvatarSpecification> originalSpecs;
 	private JTextPane jtaAvspec;
 	private JScrollPane jspAvspec;
 
 	private JCheckBox differences;
-	private JButton prev, next;
+	private JButton prev, next, drawFromSysML, drawFromAvatarspec;
 	private JLabel infoSpec;
 
 	// Currently shown SysML V2
@@ -101,6 +102,8 @@ public class JFrameSysMLv2 extends JFrame implements ActionListener {
 
 		avspecs = new ArrayList<>();
 		avspecs.add(_avspec.toString());
+		originalSpecs = new ArrayList<>();
+		originalSpecs.add(_avspec);
 		
 		setDefaultCloseOperation( DISPOSE_ON_CLOSE );
 		Container framePanel = getContentPane();
@@ -160,6 +163,17 @@ public class JFrameSysMLv2 extends JFrame implements ActionListener {
 		buttonUpdate.addActionListener(this);
 		jp.add(buttonUpdate);
 
+		drawFromSysML = new JButton("Draw SysML", IconManager.imgic12);
+		drawFromSysML.addActionListener(this);
+		jp.add(drawFromSysML);
+
+		drawFromAvatarspec = new JButton("Draw Avatar spec.", IconManager.imgic12);
+		drawFromAvatarspec.addActionListener(this);
+		jp.add(drawFromAvatarspec);
+
+
+
+
 		JButton button1 = new JButton("Close", IconManager.imgic27);
 		button1.addActionListener(this);
 		jp.add(button1);
@@ -199,19 +213,48 @@ public class JFrameSysMLv2 extends JFrame implements ActionListener {
 
 		if (evt.getSource() == differences) {
 			diffChange();
+			return;
 		}
 
 		if (evt.getSource() == next) {
 			indexCurrentSpec --;
 			diffChange();
 			updateMode();
+			return;
 		}
 
 		if (evt.getSource() == prev) {
 			indexCurrentSpec ++;
 			diffChange();
 			updateMode();
+			return;
+		}
+
+		if (evt.getSource() == drawFromAvatarspec) {
+			drawFromAvatarspec();
+			return;
+		}
+
+		if (evt.getSource() == drawFromSysML) {
+			drawFromSysML();
+			return;
 		}
+
+
+
+	}
+
+
+	public void drawFromAvatarspec() {
+		if (sysMLv2provider != null) {
+			AvatarSpecification as = originalSpecs.get(indexCurrentSpec);
+			sysMLv2provider.drawAvatarSpecification(as, true);
+		}
+
+	}
+
+	public void drawFromSysML() {
+
 	}
 
 	public void update() {
@@ -224,12 +267,14 @@ public class JFrameSysMLv2 extends JFrame implements ActionListener {
 					theTexts.add(0, newText);
 					newText = newAvspec.toString();
 					avspecs.add(0, newText);
+					originalSpecs.add(newAvspec);
 					indexCurrentSpec = 0;
 					specNumber ++;
 
 					if (theTexts.size() > MAX_NB_SPEC) {
 						theTexts.remove(MAX_NB_SPEC);
 						avspecs.remove(MAX_NB_SPEC);
+						originalSpecs.remove(MAX_NB_SPEC);
 					}
 				}
 			}
-- 
GitLab