Résolution #8 Modifications classes et méthodes

This commit is contained in:
2020-12-07 22:18:54 +01:00
parent 3283cd2f02
commit 3c053fb45f
15 changed files with 702 additions and 227 deletions

View File

@@ -3,14 +3,17 @@ import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
/**
* Cette classe permet d'afficher l'ensemble des éléments du projet sous la forme d'un diagramme UML.
* @author V.BOULANGER
*/
public class UmlDiagram extends JPanel implements MouseListener, MouseMotionListener {
private Project _project;
private AppThinkerToolbar _toolbar;
private List<Class> _classes;
private List<Link> _links;
private Object _selected;
@@ -28,6 +31,7 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setPreferredSize(new Dimension(3000,3000));
this._toolbar = new AppThinkerToolbar(this);
}
/**
@@ -79,11 +83,12 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
for(Method m : a.getMethods()){
posCounter += font2.getSize();
String chain = m.getAccess() + " " + m.getName() + "(";
ArrayList<String> listArguments = new ArrayList<String>();
for(Argument ar : m.getArguments()){
chain += ar.getName() + " : " + ar.getType() + ", ";
listArguments.add(ar.getName() + " : " + ar.getType());
}
chain = chain.substring(0, chain.length()-2);
chain += ") : " + m.getType();
//chain = chain.substring(0, chain.length()-2);
chain += String.join(", ", listArguments) + ") : " + m.getType();
g.drawString(chain, posX, posCounter);
}
//Si la classe est sélectionnée
@@ -114,6 +119,14 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
AppThinker.getWindow().repaint();
}
/**
* Récupère la toolbar du diagramme.
* @return La toolbar du diagramme.
*/
public AppThinkerToolbar getToolbar(){
return this._toolbar;
}
/**
* Mets à jour graphiquement le diagramme UML.
*/
@@ -164,6 +177,18 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
this.repaint();
}
/**
* Modifie les propriétés de la classe.
* @param a La classe a modifier.
*/
public void editClass(Class a){
ClassPropertiesWindow prop = new ClassPropertiesWindow(this, a);
}
public void removeClass(Class a){
AppThinker.getProject().getClasses().remove(a);
}
//Actions de la souris sur le diagramme UML
/**
* Action du clic de la souris sur le diagramme.
@@ -171,8 +196,11 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
*/
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2){
System.out.println("Modification des propriétés");
//Si il s'agit d'un double-clic et que l'outil sélection est sélectionné, on ouvre la fenêtre d'édition de la classe
if(e.getClickCount() == 2 && _toolbar.getCurrentTool() == AppThinkerToolbar.SELECT_TOOL){
if(_selected instanceof Class){
this.editClass((Class) _selected);
}
}
}
@@ -182,18 +210,21 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
*/
@Override
public void mousePressed(MouseEvent e) {
int tool = AppThinker.getWindow().getToolbar().getCurrentTool();
int tool = _toolbar.getCurrentTool();
switch(tool){
//On essaie de sélectionner un élément
case AppThinkerToolbar.EDIT_TOOL:
System.out.println("On édite un élément.");
this.select(e.getX(), e.getY());
if(_selected instanceof Class){
this.editClass((Class) _selected);
}
break;
case AppThinkerToolbar.DELETE_TOOL:
System.out.println("On supprime un élément.");
this.select(e.getX(), e.getY());
if(_selected instanceof Class){
Class a = (Class)_selected;
AppThinker.getProject().getClasses().remove(a);
removeClass((Class)_selected);
}
this.displayDiagram();
break;
@@ -205,9 +236,7 @@ public class UmlDiagram extends JPanel implements MouseListener, MouseMotionList
break;
//On essaie d'ajouter une classe
case AppThinkerToolbar.CLASS_TOOL:
Class newClass = new Class(e.getX(), e.getY(), Class.RECTANGLE);
newClass.addAttribute(new Attribute("_TestAttribut1", Attribute.PROTECTED, "int"));
AppThinker.getProject().addClass(newClass);
AppThinker.getProject().addClass(new Class(e.getX(), e.getY(), Class.RECTANGLE));
break;
case AppThinkerToolbar.ASSOCIATION_TOOL:
System.out.println("On ajoute une association");