Résolution #8 Modifications classes et méthodes
This commit is contained in:
BIN
AppThinker.mdzip
BIN
AppThinker.mdzip
Binary file not shown.
Binary file not shown.
@@ -33,11 +33,11 @@ public class AppThinker {
|
||||
public static void newProject(){
|
||||
_project = new Project();
|
||||
_window.setTitle("AppThinker | " + _project.getName());
|
||||
_window.getMenubar().enableEditing();
|
||||
_window.getToolbar().enableEditing();
|
||||
_window.getStatusbar().setStatusMessage("Le projet a été créé.");
|
||||
_window.getMenubar().setProjectEnable(true);
|
||||
_project.getUmlDiagram().getToolbar().setEnabled(true);
|
||||
_window.getStatusbar().setStatusMessage("The project was created.");
|
||||
_window.getStatusbar().setFileMessage(_project.getName());
|
||||
_window.setDiagram(_project.getUmlDiagram());
|
||||
_window.setProject(_project);
|
||||
AppThinker.getProject().getUmlDiagram().displayDiagram();
|
||||
}
|
||||
|
||||
@@ -67,11 +67,11 @@ public class AppThinker {
|
||||
*/
|
||||
public static void closeProject(){
|
||||
_window.setTitle("AppThinker");
|
||||
_window.getMenubar().disableEditing();
|
||||
_window.getToolbar().disableEditing();
|
||||
_window.getStatusbar().setStatusMessage("Le projet a été fermé.");
|
||||
_window.getStatusbar().setFileMessage("Aucun projet ouvert");
|
||||
_window.remove(_project.getUmlDiagram());
|
||||
_window.getMenubar().setProjectEnable(false);
|
||||
_project.getUmlDiagram().getToolbar().setEnabled(false);
|
||||
_window.getStatusbar().setStatusMessage("The project has been closed.");
|
||||
_window.getStatusbar().setFileMessage("No open project.");
|
||||
_window.clearProject();
|
||||
_project = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,10 +40,9 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
*/
|
||||
public AppThinkerMenuBar(){
|
||||
//Création de la barre menu
|
||||
_fileMenu = new JMenu("Fichier");
|
||||
_fileMenu.setMnemonic( 'F' );
|
||||
_fileMenu = new JMenu("File");
|
||||
|
||||
_newProject = new JMenuItem("Nouveau projet");
|
||||
_newProject = new JMenuItem("New project");
|
||||
_newProject.setIcon(new ImageIcon(getClass().getResource("img/x16/newProject.png")));
|
||||
_newProject.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -52,7 +51,7 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
}
|
||||
});
|
||||
_fileMenu.add(_newProject);
|
||||
_openProject = new JMenuItem("Ouvrir un projet existant");
|
||||
_openProject = new JMenuItem("Open project");
|
||||
_openProject.setIcon(new ImageIcon(getClass().getResource("img/x16/openProject.png")));
|
||||
_openProject.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -61,7 +60,7 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
}
|
||||
});
|
||||
_fileMenu.add(_openProject);
|
||||
_saveProject = new JMenuItem("Sauvegarder le projet");
|
||||
_saveProject = new JMenuItem("Save project");
|
||||
_saveProject.setIcon(new ImageIcon(getClass().getResource("img/x16/saveProject.png")));
|
||||
_saveProject.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -70,7 +69,7 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
}
|
||||
});
|
||||
_fileMenu.add(_saveProject);
|
||||
_saveAsProject = new JMenuItem("Sauvegarder le projet sous...");
|
||||
_saveAsProject = new JMenuItem("Save project as...");
|
||||
_saveAsProject.setIcon(new ImageIcon(getClass().getResource("img/x16/saveAsProject.png")));
|
||||
_saveAsProject.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -79,7 +78,7 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
}
|
||||
});
|
||||
_fileMenu.add(_saveAsProject);
|
||||
_closeProject = new JMenuItem("Fermer le projet");
|
||||
_closeProject = new JMenuItem("Close project");
|
||||
_closeProject.setIcon(new ImageIcon(getClass().getResource("img/x16/closeProject.png")));
|
||||
_closeProject.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -88,7 +87,7 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
}
|
||||
});
|
||||
_fileMenu.add(_closeProject);
|
||||
_quitMenu = new JMenuItem("Quitter");
|
||||
_quitMenu = new JMenuItem("Quit");
|
||||
_quitMenu.setIcon(new ImageIcon(getClass().getResource("img/x16/quit.png")));
|
||||
_quitMenu.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -100,130 +99,98 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
|
||||
this.add(_fileMenu);
|
||||
|
||||
_projectMenu = new JMenu("Projet");
|
||||
_projectMenu.setMnemonic( 'P' );
|
||||
_projectMenu = new JMenu("Project");
|
||||
|
||||
_newClass = new JMenuItem("Nouvelle classe");
|
||||
_newClass = new JMenuItem("New class");
|
||||
_newClass.setIcon(new ImageIcon(getClass().getResource("img/x16/newClass.png")));
|
||||
_newClass.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
_window.getToolbar().setCurrentTool(AppThinkerToolbar.CLASS_TOOL);
|
||||
AppThinker.getProject().getUmlDiagram().getToolbar().setCurrentTool(AppThinkerToolbar.CLASS_TOOL);
|
||||
}
|
||||
});
|
||||
_projectMenu.add(_newClass);
|
||||
_newAssociation = new JMenuItem("Nouvelle association");
|
||||
_newAssociation = new JMenuItem("New association");
|
||||
_newAssociation.setIcon(new ImageIcon(getClass().getResource("img/x16/newAssociation.png")));
|
||||
_newAssociation.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
_window.getToolbar().setCurrentTool(AppThinkerToolbar.ASSOCIATION_TOOL);
|
||||
AppThinker.getProject().getUmlDiagram().getToolbar().setCurrentTool(AppThinkerToolbar.ASSOCIATION_TOOL);
|
||||
}
|
||||
});
|
||||
_projectMenu.add(_newAssociation);
|
||||
_newLink = new JMenuItem("Nouveau lien");
|
||||
_newLink = new JMenuItem("New link");
|
||||
_newLink.setIcon(new ImageIcon(getClass().getResource("img/x16/newLink.png")));
|
||||
_newLink.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
_window.getToolbar().setCurrentTool(AppThinkerToolbar.LINK_TOOL);
|
||||
AppThinker.getProject().getUmlDiagram().getToolbar().setCurrentTool(AppThinkerToolbar.LINK_TOOL);
|
||||
}
|
||||
});
|
||||
_projectMenu.add(_newLink);
|
||||
_selectElement = new JMenuItem("Sélectionner");
|
||||
_selectElement = new JMenuItem("Select");
|
||||
_selectElement.setIcon(new ImageIcon(getClass().getResource("img/x16/select.png")));
|
||||
_selectElement.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
_window.getToolbar().setCurrentTool(AppThinkerToolbar.SELECT_TOOL);
|
||||
AppThinker.getProject().getUmlDiagram().getToolbar().setCurrentTool(AppThinkerToolbar.SELECT_TOOL);
|
||||
}
|
||||
});
|
||||
_projectMenu.add(_selectElement);
|
||||
_editElement = new JMenuItem("Éditer");
|
||||
_editElement = new JMenuItem("Edit");
|
||||
_editElement.setIcon(new ImageIcon(getClass().getResource("img/x16/edit.png")));
|
||||
_editElement.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
_window.getToolbar().setCurrentTool(AppThinkerToolbar.EDIT_TOOL);
|
||||
AppThinker.getProject().getUmlDiagram().getToolbar().setCurrentTool(AppThinkerToolbar.EDIT_TOOL);
|
||||
}
|
||||
});
|
||||
_projectMenu.add(_editElement);
|
||||
_deleteElement = new JMenuItem("Supprimer");
|
||||
_deleteElement = new JMenuItem("Delete");
|
||||
_deleteElement.setIcon(new ImageIcon(getClass().getResource("img/x16/delete.png")));
|
||||
_deleteElement.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
_window.getToolbar().setCurrentTool(AppThinkerToolbar.DELETE_TOOL);
|
||||
AppThinker.getProject().getUmlDiagram().getToolbar().setCurrentTool(AppThinkerToolbar.DELETE_TOOL);
|
||||
}
|
||||
});
|
||||
_projectMenu.add(_deleteElement);
|
||||
_projectOptions = new JMenuItem("Options du projet");
|
||||
_projectOptions = new JMenuItem("Project options");
|
||||
_projectOptions.setIcon(new ImageIcon(getClass().getResource("img/x16/settings.png")));
|
||||
_projectMenu.add(_projectOptions);
|
||||
|
||||
this.add(_projectMenu);
|
||||
|
||||
_appMenu = new JMenu("AppThinker");
|
||||
_appMenu.setMnemonic( 'A' );
|
||||
|
||||
_appSettings = new JMenuItem("Paramètres");
|
||||
_appSettings = new JMenuItem("Settings");
|
||||
_appSettings.setIcon(new ImageIcon(getClass().getResource("img/x16/settings.png")));
|
||||
_appMenu.add(_appSettings);
|
||||
_appInfo = new JMenuItem("Informations");
|
||||
_appInfo = new JMenuItem("About AppThinker");
|
||||
_appInfo.setIcon(new ImageIcon(getClass().getResource("img/x16/info.png")));
|
||||
_appMenu.add(_appInfo);
|
||||
_appChangelog = new JMenuItem("Nouveautés");
|
||||
_appChangelog = new JMenuItem("News");
|
||||
_appChangelog.setIcon(new ImageIcon(getClass().getResource("img/x16/news.png")));
|
||||
_appMenu.add(_appChangelog);
|
||||
|
||||
this.add(_appMenu);
|
||||
|
||||
this.disableEditing();
|
||||
this.setProjectEnable(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Active les boutons d'édition lorsqu'un projet est ouvert.
|
||||
* Active/Désactive les boutons relatifs au projet.
|
||||
*/
|
||||
public void enableEditing(){
|
||||
_newProject.setEnabled(true);
|
||||
_openProject.setEnabled(true);
|
||||
_saveProject.setEnabled(true);
|
||||
_saveAsProject.setEnabled(true);
|
||||
_closeProject.setEnabled(true);
|
||||
_quitMenu.setEnabled(true);
|
||||
|
||||
_newClass.setEnabled(true);
|
||||
_newAssociation.setEnabled(true);
|
||||
_newLink.setEnabled(true);
|
||||
_editElement.setEnabled(true);
|
||||
_deleteElement.setEnabled(true);
|
||||
_projectOptions.setEnabled(true);
|
||||
|
||||
_appSettings.setEnabled(true);
|
||||
_appInfo.setEnabled(true);
|
||||
_appChangelog.setEnabled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Désactive les boutons d'édition lorsqu'aucun projet n'est ouvert.
|
||||
*/
|
||||
public void disableEditing(){
|
||||
_newProject.setEnabled(true);
|
||||
_openProject.setEnabled(true);
|
||||
_saveProject.setEnabled(false);
|
||||
_saveAsProject.setEnabled(false);
|
||||
_closeProject.setEnabled(false);
|
||||
_quitMenu.setEnabled(true);
|
||||
|
||||
_newClass.setEnabled(false);
|
||||
_newAssociation.setEnabled(false);
|
||||
_newLink.setEnabled(false);
|
||||
_editElement.setEnabled(false);
|
||||
_deleteElement.setEnabled(false);
|
||||
_projectOptions.setEnabled(false);
|
||||
|
||||
_appSettings.setEnabled(true);
|
||||
_appInfo.setEnabled(true);
|
||||
_appChangelog.setEnabled(true);
|
||||
public void setProjectEnable(boolean enabled){
|
||||
_saveProject.setEnabled(enabled);
|
||||
_saveAsProject.setEnabled(enabled);
|
||||
_closeProject.setEnabled(enabled);
|
||||
_newClass.setEnabled(enabled);
|
||||
_newAssociation.setEnabled(enabled);
|
||||
_newLink.setEnabled(enabled);
|
||||
_selectElement.setEnabled(enabled);
|
||||
_editElement.setEnabled(enabled);
|
||||
_deleteElement.setEnabled(enabled);
|
||||
_projectOptions.setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public class AppThinkerStatusbar extends JPanel {
|
||||
this.setBorder(new BevelBorder(BevelBorder.LOWERED));
|
||||
this.setLayout(new GridLayout(1,3));
|
||||
|
||||
_statusLabel = new JLabel("Créez ou importez un projet pour commencer.");
|
||||
_statusLabel = new JLabel("Create or import a project to start.");
|
||||
this.add(_statusLabel);
|
||||
|
||||
JPanel actionBar = new JPanel();
|
||||
@@ -39,7 +39,7 @@ public class AppThinkerStatusbar extends JPanel {
|
||||
|
||||
this.add(actionBar);
|
||||
|
||||
_fileLabel = new JLabel("Aucun projet ouvert");
|
||||
_fileLabel = new JLabel("No open project.");
|
||||
_fileLabel.setHorizontalAlignment(JLabel.RIGHT);
|
||||
this.add(_fileLabel);
|
||||
}
|
||||
|
||||
@@ -20,12 +20,6 @@ public class AppThinkerToolbar extends JPanel {
|
||||
|
||||
private int _currentTool = 0;
|
||||
|
||||
private JPanel _projectPanel;
|
||||
private JButton _newProject;
|
||||
private JButton _openProject;
|
||||
private JButton _saveProject;
|
||||
private JButton _saveAsProject;
|
||||
|
||||
private JPanel _editionPanel;
|
||||
private JButton _select;
|
||||
private JButton _edit;
|
||||
@@ -40,57 +34,24 @@ public class AppThinkerToolbar extends JPanel {
|
||||
private JButton _newAssociation;
|
||||
private JButton _newLink;
|
||||
|
||||
private AppThinkerWindow _window;
|
||||
private UmlDiagram _umlDiagram;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe AppThinkerToolbar
|
||||
*/
|
||||
public AppThinkerToolbar(){
|
||||
public AppThinkerToolbar(UmlDiagram diagram){
|
||||
_umlDiagram = diagram;
|
||||
//Création de la Toolbar
|
||||
this.setLayout(new GridLayout(2,3, 10, 0));
|
||||
this.setLayout(new GridLayout(2,2, 10, 0));
|
||||
this.setBackground(new Color(69, 69, 72));
|
||||
|
||||
_projectPanel = new JPanel();
|
||||
_projectPanel.setLayout(new GridLayout(1,4));
|
||||
//Bouton ajout d'un nouveau projet
|
||||
_newProject = new JButton();
|
||||
_newProject.setSize(32, 32);
|
||||
_newProject.setBorderPainted(false);
|
||||
_newProject.setIcon(new ImageIcon(getClass().getResource("img/x32/newProject.png")));
|
||||
_newProject.setToolTipText("Créer un nouveau projet.");
|
||||
_newProject.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
AppThinker.newProject();
|
||||
}
|
||||
});
|
||||
_projectPanel.add(_newProject);
|
||||
_openProject = new JButton();
|
||||
_openProject.setSize(32, 32);
|
||||
_openProject.setBorderPainted(false);
|
||||
_openProject.setIcon(new ImageIcon(getClass().getResource("img/x32/importProject.png")));
|
||||
_openProject.setToolTipText("Importer un projet existant.");
|
||||
_projectPanel.add(_openProject);
|
||||
_saveProject = new JButton();
|
||||
_saveProject.setSize(32, 32);
|
||||
_saveProject.setBorderPainted(false);
|
||||
_saveProject.setIcon(new ImageIcon(getClass().getResource("img/x32/saveProject.png")));
|
||||
_saveProject.setToolTipText("Sauvegarder le projet.");
|
||||
_projectPanel.add(_saveProject);
|
||||
_saveAsProject = new JButton();
|
||||
_saveAsProject.setSize(32, 32);
|
||||
_saveAsProject.setBorderPainted(false);
|
||||
_saveAsProject.setIcon(new ImageIcon(getClass().getResource("img/x32/saveAsProject.png")));
|
||||
_saveAsProject.setToolTipText("Sauvegarder le projet à un autre endroit.");
|
||||
_projectPanel.add(_saveAsProject);
|
||||
|
||||
_editionPanel = new JPanel();
|
||||
_editionPanel.setLayout(new GridLayout(1,7));
|
||||
_select = new JButton();
|
||||
_select.setSize(32, 32);
|
||||
_select.setBorderPainted(false);
|
||||
_select.setIcon(new ImageIcon(getClass().getResource("img/x32/select.png")));
|
||||
_select.setToolTipText("Sélectionner un élément.");
|
||||
_select.setToolTipText("Select item.");
|
||||
_select.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -102,7 +63,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_edit.setSize(32, 32);
|
||||
_edit.setBorderPainted(false);
|
||||
_edit.setIcon(new ImageIcon(getClass().getResource("img/x32/edit.png")));
|
||||
_edit.setToolTipText("Éditer les propriétés d'un élément.");
|
||||
_edit.setToolTipText("Edit item properties.");
|
||||
_edit.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -114,7 +75,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_delete.setSize(32, 32);
|
||||
_delete.setBorderPainted(false);
|
||||
_delete.setIcon(new ImageIcon(getClass().getResource("img/x32/delete.png")));
|
||||
_delete.setToolTipText("Supprimer un élément.");
|
||||
_delete.setToolTipText("Delete item.");
|
||||
_delete.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -126,7 +87,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_copy.setSize(32, 32);
|
||||
_copy.setBorderPainted(false);
|
||||
_copy.setIcon(new ImageIcon(getClass().getResource("img/x32/copy.png")));
|
||||
_copy.setToolTipText("Copier un élément.");
|
||||
_copy.setToolTipText("Copy item.");
|
||||
_copy.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -138,7 +99,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_paste.setSize(32, 32);
|
||||
_paste.setBorderPainted(false);
|
||||
_paste.setIcon(new ImageIcon(getClass().getResource("img/x32/paste.png")));
|
||||
_paste.setToolTipText("Coller un élément.");
|
||||
_paste.setToolTipText("Paste item.");
|
||||
_paste.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -150,13 +111,13 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_undo.setSize(32, 32);
|
||||
_undo.setBorderPainted(false);
|
||||
_undo.setIcon(new ImageIcon(getClass().getResource("img/x32/undo.png")));
|
||||
_undo.setToolTipText("Annuler le dernier changement.");
|
||||
_undo.setToolTipText("Undo last change.");
|
||||
_editionPanel.add(_undo);
|
||||
_redo = new JButton();
|
||||
_redo.setSize(32, 32);
|
||||
_redo.setBorderPainted(false);
|
||||
_redo.setIcon(new ImageIcon(getClass().getResource("img/x32/redo.png")));
|
||||
_redo.setToolTipText("Rétablir le dernier changement annulé.");
|
||||
_redo.setToolTipText("Redo last change.");
|
||||
_editionPanel.add(_redo);
|
||||
|
||||
_modelisationPanel = new JPanel();
|
||||
@@ -165,7 +126,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_newClass.setSize(32, 32);
|
||||
_newClass.setBorderPainted(false);
|
||||
_newClass.setIcon(new ImageIcon(getClass().getResource("img/x32/newClass.png")));
|
||||
_newClass.setToolTipText("Ajouter une classe.");
|
||||
_newClass.setToolTipText("Add a new class.");
|
||||
_newClass.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -177,7 +138,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_newAssociation.setSize(32, 32);
|
||||
_newAssociation.setBorderPainted(false);
|
||||
_newAssociation.setIcon(new ImageIcon(getClass().getResource("img/x32/newAssociation.png")));
|
||||
_newAssociation.setToolTipText("Ajouter une association.");
|
||||
_newAssociation.setToolTipText("Add a new association.");
|
||||
_newAssociation.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -189,7 +150,7 @@ public class AppThinkerToolbar extends JPanel {
|
||||
_newLink.setSize(32, 32);
|
||||
_newLink.setBorderPainted(false);
|
||||
_newLink.setIcon(new ImageIcon(getClass().getResource("img/x32/newLink.png")));
|
||||
_newLink.setToolTipText("Ajouter un lien.");
|
||||
_newLink.setToolTipText("Add a new link.");
|
||||
_newLink.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@@ -198,67 +159,37 @@ public class AppThinkerToolbar extends JPanel {
|
||||
});
|
||||
_modelisationPanel.add(_newLink);
|
||||
|
||||
this.add(_projectPanel, BorderLayout.CENTER);
|
||||
this.add(_editionPanel, BorderLayout.CENTER);
|
||||
this.add(_modelisationPanel, BorderLayout.CENTER);
|
||||
JLabel projectLabel = new JLabel("Projet");
|
||||
projectLabel.setHorizontalAlignment(JLabel.CENTER);
|
||||
projectLabel.setForeground(Color.WHITE);
|
||||
this.add(projectLabel);
|
||||
JLabel editLabel = new JLabel("Édition");
|
||||
|
||||
JLabel editLabel = new JLabel("Edition");
|
||||
editLabel.setHorizontalAlignment(JLabel.CENTER);
|
||||
editLabel.setForeground(Color.WHITE);
|
||||
this.add(editLabel);
|
||||
JLabel modelisationLabel = new JLabel("Modélisation");
|
||||
JLabel modelisationLabel = new JLabel("Modelisation");
|
||||
modelisationLabel.setHorizontalAlignment(JLabel.CENTER);
|
||||
modelisationLabel.setForeground(Color.WHITE);
|
||||
this.add(modelisationLabel);
|
||||
|
||||
this.disableEditing();
|
||||
this.setEnabled(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Active les boutons d'édition lorsqu'un projet est ouvert
|
||||
* Verrouille/Déverrouille la barre d'outil.
|
||||
* @param enabled Paramètre de verrouillage.
|
||||
*/
|
||||
public void enableEditing(){
|
||||
_newProject.setEnabled(true);
|
||||
_openProject.setEnabled(true);
|
||||
_saveProject.setEnabled(true);
|
||||
_saveAsProject.setEnabled(true);
|
||||
public void setEnabled(boolean enabled){
|
||||
_select.setEnabled(enabled);
|
||||
_edit.setEnabled(enabled);
|
||||
_delete.setEnabled(enabled);
|
||||
_copy.setEnabled(enabled);
|
||||
_paste.setEnabled(enabled);
|
||||
_undo.setEnabled(enabled);
|
||||
_redo.setEnabled(enabled);
|
||||
|
||||
_select.setEnabled(true);
|
||||
_edit.setEnabled(true);
|
||||
_delete.setEnabled(true);
|
||||
_copy.setEnabled(true);
|
||||
_paste.setEnabled(true);
|
||||
_undo.setEnabled(true);
|
||||
_redo.setEnabled(true);
|
||||
|
||||
_newClass.setEnabled(true);
|
||||
_newAssociation.setEnabled(true);
|
||||
_newLink.setEnabled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Désactive les boutons d'édition lorsqu'aucun projet n'est ouvert
|
||||
*/
|
||||
public void disableEditing(){
|
||||
_newProject.setEnabled(true);
|
||||
_openProject.setEnabled(true);
|
||||
_saveProject.setEnabled(false);
|
||||
_saveAsProject.setEnabled(false);
|
||||
|
||||
_select.setEnabled(false);
|
||||
_edit.setEnabled(false);
|
||||
_delete.setEnabled(false);
|
||||
_copy.setEnabled(false);
|
||||
_paste.setEnabled(false);
|
||||
_undo.setEnabled(false);
|
||||
_redo.setEnabled(false);
|
||||
|
||||
_newClass.setEnabled(false);
|
||||
_newAssociation.setEnabled(false);
|
||||
_newLink.setEnabled(false);
|
||||
_newClass.setEnabled(enabled);
|
||||
_newAssociation.setEnabled(enabled);
|
||||
_newLink.setEnabled(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -275,37 +206,39 @@ public class AppThinkerToolbar extends JPanel {
|
||||
*/
|
||||
public void setCurrentTool(int currentTool){
|
||||
this._currentTool = currentTool;
|
||||
if(this._currentTool == AppThinkerToolbar.SELECT_TOOL) AppThinker.getProject().getUmlDiagram().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
||||
else AppThinker.getProject().getUmlDiagram().setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
|
||||
if(this._currentTool == AppThinkerToolbar.SELECT_TOOL) _umlDiagram.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
||||
else _umlDiagram.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
|
||||
switch(currentTool){
|
||||
case 1:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil édition - Cliquez sur un élément pour l'éditer.");
|
||||
if(_umlDiagram.getSelected() instanceof Class){
|
||||
_umlDiagram.editClass((Class) _umlDiagram.getSelected());
|
||||
}
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Edit tool - Click an item to edit its properties.");
|
||||
break;
|
||||
case 2:
|
||||
Object a = AppThinker.getProject().getUmlDiagram().getSelected();
|
||||
if(a instanceof Class){
|
||||
AppThinker.getProject().getClasses().remove(a);
|
||||
AppThinker.getProject().getUmlDiagram().displayDiagram();
|
||||
if(_umlDiagram.getSelected() instanceof Class){
|
||||
_umlDiagram.removeClass((Class) _umlDiagram.getSelected());
|
||||
_umlDiagram.displayDiagram();
|
||||
}
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil suppression - Cliquez sur un élément pour le supprimer.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Delete tool - Click an item to delete it.");
|
||||
break;
|
||||
case 3:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil copie - Cliquez sur un élément pour le copier.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Copy tool - Click an item to copy it.");
|
||||
break;
|
||||
case 4:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil coller - Cliquez à un endroit pour coller l'élément.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Paste tool - Click everywhere to paste the last copied item.");
|
||||
break;
|
||||
case 5:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil classe - Cliquez à un endroit pour ajouter une classe.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Class tool - Click everywhere to add a new class.");
|
||||
break;
|
||||
case 6:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil association - Cliquez à un endroit pour ajouter une association.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Association tool - Click everywhere to add a new association.");
|
||||
break;
|
||||
case 7:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil lien - Cliquez sur une classe, maintenez, puis relachez sur une autre.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Link tool - Click on a class, hold, and release on another class.");
|
||||
break;
|
||||
default:
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Outil sélection - Cliquez sur un élément pour le sélectionner.");
|
||||
AppThinker.getWindow().getStatusbar().setStatusMessage("Select tool - Click an item to select it or move it.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ public class AppThinkerWindow extends JFrame {
|
||||
private AppThinkerMenuBar _menubar;
|
||||
private AppThinkerToolbar _toolbar;
|
||||
private AppThinkerStatusbar _statusbar;
|
||||
private JScrollPane _diagramPane;
|
||||
|
||||
/**
|
||||
* Constructeur de la classe AppThinkerWindow
|
||||
@@ -32,11 +33,6 @@ public class AppThinkerWindow extends JFrame {
|
||||
_menubar = new AppThinkerMenuBar();
|
||||
this.setJMenuBar(_menubar);
|
||||
|
||||
//Ajout de la toolbar à la fenêtre
|
||||
_toolbar = new AppThinkerToolbar();
|
||||
this.add(_toolbar, BorderLayout.NORTH);
|
||||
|
||||
|
||||
/*JTabbedPane tabbedPane = new JTabbedPane();
|
||||
|
||||
JPanel panel1 = new JPanel();
|
||||
@@ -69,22 +65,29 @@ public class AppThinkerWindow extends JFrame {
|
||||
return this._menubar;
|
||||
}
|
||||
|
||||
public void setDiagram(UmlDiagram umlDiagram){
|
||||
/**
|
||||
* Affiche le diagramme du projet.
|
||||
* @param project Le projet qui inclu le diagramme à afficher.
|
||||
*/
|
||||
public void setProject(Project project){
|
||||
//Ajout de la toolbar à la fenêtre
|
||||
_toolbar = project.getUmlDiagram().getToolbar();
|
||||
this.add(_toolbar, BorderLayout.NORTH);
|
||||
|
||||
JScrollPane scrollPane = new JScrollPane(umlDiagram);
|
||||
scrollPane.setVisible(true);
|
||||
scrollPane.setBackground(new Color(218, 233, 244));
|
||||
//Ajout du diagramme à la fenêtre
|
||||
_diagramPane = new JScrollPane(project.getUmlDiagram());
|
||||
_diagramPane.setBackground(new Color(218, 233, 244));
|
||||
|
||||
this.add(scrollPane, BorderLayout.CENTER);
|
||||
umlDiagram.displayDiagram();
|
||||
this.add(_diagramPane, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère la toolbar contenue dans la fenêtre.
|
||||
* @return La toolbar contenue dans la fenêtre.
|
||||
* Retire le diagramme de la fenêtre.
|
||||
*/
|
||||
public AppThinkerToolbar getToolbar(){
|
||||
return this._toolbar;
|
||||
public void clearProject(){
|
||||
this.remove(_diagramPane);
|
||||
this.remove(_toolbar);
|
||||
this.repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* Gère un argument d'une méthode.
|
||||
* @author V.BOULANGER
|
||||
*/
|
||||
public class Argument {
|
||||
|
||||
@@ -17,7 +18,7 @@ public class Argument {
|
||||
public Argument(){
|
||||
_argumentId++;
|
||||
this._id = _argumentId;
|
||||
this._type = null;
|
||||
this._type = "int";
|
||||
this._name = "argument" + this._id;
|
||||
}
|
||||
|
||||
|
||||
169
AppThinker/src/ArgumentsPropertiesWindow.java
Normal file
169
AppThinker/src/ArgumentsPropertiesWindow.java
Normal file
@@ -0,0 +1,169 @@
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableColumn;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Classe permettant la création de fenêtres pour la modification des arguments d'une méthode d'une classe.
|
||||
* @author V.BOULANGER
|
||||
*/
|
||||
public class ArgumentsPropertiesWindow extends JFrame {
|
||||
|
||||
private UmlDiagram _umlDiagram;
|
||||
private Method _method;
|
||||
private JTable _argumentsTable;
|
||||
private JScrollPane _scrollArguments;
|
||||
private String[] _argumentsColumns = {"Name", "Type"};
|
||||
private DefaultTableModel _argumentModel;
|
||||
private ClassPropertiesWindow _classProp;
|
||||
|
||||
public ArgumentsPropertiesWindow(ClassPropertiesWindow classProp, UmlDiagram diagram, Method m){
|
||||
_method = m;
|
||||
_umlDiagram = diagram;
|
||||
_classProp = classProp;
|
||||
|
||||
//Paramétrage de la fenêtre
|
||||
this.setTitle("Edit arguments - " + m.getName());
|
||||
this.setSize(new Dimension(800, 300));
|
||||
Image img = null;
|
||||
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
|
||||
this.setIconImage(img);
|
||||
this.setResizable(true);
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setLayout(new BorderLayout());
|
||||
|
||||
|
||||
//Espace général de la fenêtre
|
||||
JPanel generalPanel = new JPanel();
|
||||
generalPanel.setLayout(new BoxLayout(generalPanel, BoxLayout.Y_AXIS));
|
||||
generalPanel.setAlignmentX(LEFT_ALIGNMENT);
|
||||
|
||||
JLabel attrLbl = new JLabel("Edit arguments");
|
||||
generalPanel.add(attrLbl);
|
||||
|
||||
//Espace de modification des arguments
|
||||
JPanel argumentsPan = new JPanel();
|
||||
argumentsPan.setLayout(new BoxLayout(argumentsPan, BoxLayout.X_AXIS));
|
||||
|
||||
_argumentModel = new DefaultTableModel(_argumentsColumns, 0);
|
||||
_argumentsTable = new JTable(_argumentModel);
|
||||
|
||||
_scrollArguments = new JScrollPane(_argumentsTable);
|
||||
_scrollArguments.setPreferredSize(new Dimension(350, 100));
|
||||
argumentsPan.add(_scrollArguments);
|
||||
|
||||
JPanel argumentsTableModifier = new JPanel();
|
||||
argumentsTableModifier.setLayout(new BoxLayout(argumentsTableModifier, BoxLayout.Y_AXIS));
|
||||
JButton addArgument = new JButton("+");
|
||||
addArgument.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
addArgument();
|
||||
}
|
||||
});
|
||||
JButton removeArgument = new JButton("-");
|
||||
removeArgument.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
removeArgument();
|
||||
}
|
||||
});
|
||||
argumentsTableModifier.add(addArgument);
|
||||
argumentsTableModifier.add(removeArgument);
|
||||
|
||||
argumentsPan.add(argumentsTableModifier);
|
||||
|
||||
generalPanel.add(argumentsPan);
|
||||
|
||||
//Bouton de sauvegarde
|
||||
JButton saveBtn = new JButton("Save changes and quit");
|
||||
saveBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
saveAndClose();
|
||||
}
|
||||
});
|
||||
generalPanel.add(saveBtn);
|
||||
|
||||
this.add(generalPanel, BorderLayout.CENTER);
|
||||
|
||||
this.setVisible(true);
|
||||
|
||||
//Import des arguments dans le tableau
|
||||
this.listArguments();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un argument à la méthode sélectionnée et rafraîchit la liste des arguments.
|
||||
*/
|
||||
public void addArgument(){
|
||||
_method.addArgument(new Argument());
|
||||
_classProp.getEditingClass().computeMinSize();
|
||||
_umlDiagram.repaint();
|
||||
this.listArguments();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retire un argument à la méthode et rafraîchit la liste des arguments.
|
||||
*/
|
||||
public void removeArgument(){
|
||||
int i = _argumentsTable.getSelectedRow();
|
||||
if(i != -1){
|
||||
_method.removeArgument(i);
|
||||
_classProp.getEditingClass().computeMinSize();
|
||||
_umlDiagram.repaint();
|
||||
this.listArguments();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche la liste des arguments de la méthode dans le tableau
|
||||
*/
|
||||
public void listArguments(){
|
||||
//Import des attributs dans la table
|
||||
_argumentModel.setDataVector((Object[][]) null, _argumentsColumns);
|
||||
for(Argument arg : _method.getArguments()){
|
||||
_argumentModel.addRow(new Object[]{arg.getName(), arg.getType()});
|
||||
}
|
||||
|
||||
//On ajoute les contrôles pour chaque colonne
|
||||
JComboBox typeComboBox = new JComboBox();
|
||||
typeComboBox.setEditable(true);
|
||||
typeComboBox.addItem("boolean");
|
||||
typeComboBox.addItem("char");
|
||||
typeComboBox.addItem("byte");
|
||||
typeComboBox.addItem("short");
|
||||
typeComboBox.addItem("int");
|
||||
typeComboBox.addItem("long");
|
||||
typeComboBox.addItem("float");
|
||||
typeComboBox.addItem("double");
|
||||
typeComboBox.addItem("String");
|
||||
TableColumn typeColumn = _argumentsTable.getColumn(_argumentsColumns[1]);
|
||||
typeColumn.setCellEditor(new DefaultCellEditor(typeComboBox));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sauvegarde les modifications pour la méthode en cours et ferme la fenêtre.
|
||||
*/
|
||||
public void saveAndClose(){
|
||||
//Termine l'édition en sélectionnant une autre cellule
|
||||
_argumentsTable.editCellAt(0,0);
|
||||
//Enregistrement des attributs
|
||||
for(int i = 0; i <= _argumentModel.getRowCount()-1; i++){
|
||||
Vector vect = (Vector)_argumentModel.getDataVector().elementAt(i);
|
||||
System.out.println(vect);
|
||||
_method.getArguments().get(i).setType(vect.get(1).toString());
|
||||
_method.getArguments().get(i).setName(vect.get(0).toString());
|
||||
}
|
||||
//Rafraichissement de l'affichage
|
||||
_classProp.getEditingClass().computeMinSize();
|
||||
_umlDiagram.repaint();
|
||||
this.dispose();
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@ public class Attribute {
|
||||
this._id = _attributeId;
|
||||
this._access = Attribute.PRIVATE;
|
||||
this._type = "int";
|
||||
this._name = "attribut" + this._id;
|
||||
this._name = "attribute" + this._id;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -93,6 +93,7 @@ public class Class {
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this._name = name;
|
||||
this.computeMinSize();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
371
AppThinker/src/ClassPropertiesWindow.java
Normal file
371
AppThinker/src/ClassPropertiesWindow.java
Normal file
@@ -0,0 +1,371 @@
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import javax.swing.table.TableColumn;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Classe permettant la création de fenêtres pour la modification des propriétés des classes.
|
||||
* @author V.BOULANGER
|
||||
*/
|
||||
public class ClassPropertiesWindow extends JFrame {
|
||||
|
||||
private UmlDiagram _umlDiagram;
|
||||
private Class _class;
|
||||
private JTextField _nameField;
|
||||
private JTable _attributesTable;
|
||||
private JScrollPane _scrollAttributes;
|
||||
private String[] _attributesColumns = {"Name", "Access modifier", "Type"};
|
||||
private DefaultTableModel _attributeModel;
|
||||
private JTable _methodsTable;
|
||||
private JScrollPane _scrollMethods;
|
||||
private String[] _methodsColumns = {"Name", "Access modifier", "Type", "Arguments"};
|
||||
private DefaultTableModel _methodModel;
|
||||
|
||||
|
||||
/**
|
||||
* Constructeur - Crée une instance de la fenêtre de propriétés de classe à partir d'un diagramme et de la classe à modifier.
|
||||
* @param umlDiagram Le diagramme qui contient la classe.
|
||||
* @param a La classe à modifier.
|
||||
*/
|
||||
public ClassPropertiesWindow(UmlDiagram umlDiagram, Class a){
|
||||
_umlDiagram = umlDiagram;
|
||||
_class = a;
|
||||
|
||||
//Paramétrage de la fenêtre
|
||||
this.setTitle("Edit properties - " + a.getName());
|
||||
this.setSize(new Dimension(800, 300));
|
||||
Image img = null;
|
||||
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
|
||||
this.setIconImage(img);
|
||||
this.setResizable(false);
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setLayout(new BorderLayout());
|
||||
|
||||
//Espace général de la fenêtre
|
||||
JPanel generalPanel = new JPanel();
|
||||
generalPanel.setLayout(new BoxLayout(generalPanel, BoxLayout.Y_AXIS));
|
||||
generalPanel.setAlignmentX(LEFT_ALIGNMENT);
|
||||
|
||||
//Espace de modification du nom
|
||||
JPanel namePan = new JPanel();
|
||||
namePan.setLayout(new BoxLayout(namePan, BoxLayout.X_AXIS));
|
||||
JLabel nameLbl = new JLabel("Name : ");
|
||||
_nameField = new JTextField();
|
||||
_nameField.setPreferredSize(new Dimension(300, 20));
|
||||
_nameField.setText(a.getName());
|
||||
namePan.add(nameLbl);
|
||||
namePan.add(_nameField);
|
||||
generalPanel.add(namePan);
|
||||
|
||||
JLabel attrLbl = new JLabel("Edit attributes");
|
||||
generalPanel.add(attrLbl);
|
||||
|
||||
//Espace de modification des attributs
|
||||
JPanel attributesPan = new JPanel();
|
||||
attributesPan.setLayout(new BoxLayout(attributesPan, BoxLayout.X_AXIS));
|
||||
|
||||
_attributeModel = new DefaultTableModel(_attributesColumns, 0);
|
||||
_attributesTable = new JTable(_attributeModel);
|
||||
|
||||
_scrollAttributes = new JScrollPane(_attributesTable);
|
||||
_scrollAttributes.setPreferredSize(new Dimension(350, 100));
|
||||
attributesPan.add(_scrollAttributes);
|
||||
|
||||
JPanel attributesTableModifier = new JPanel();
|
||||
attributesTableModifier.setLayout(new BoxLayout(attributesTableModifier, BoxLayout.Y_AXIS));
|
||||
JButton addAttribute = new JButton("+");
|
||||
addAttribute.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
addAttribute();
|
||||
}
|
||||
});
|
||||
JButton removeAttribute = new JButton("-");
|
||||
removeAttribute.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
removeAttribute();
|
||||
}
|
||||
});
|
||||
attributesTableModifier.add(addAttribute);
|
||||
attributesTableModifier.add(removeAttribute);
|
||||
|
||||
attributesPan.add(attributesTableModifier);
|
||||
|
||||
generalPanel.add(attributesPan);
|
||||
|
||||
JLabel methLbl = new JLabel("Edit methods");
|
||||
generalPanel.add(methLbl);
|
||||
|
||||
//Espace de modification des méthodes
|
||||
JPanel methodsPan = new JPanel();
|
||||
methodsPan.setLayout(new BoxLayout(methodsPan, BoxLayout.X_AXIS));
|
||||
|
||||
_methodModel = new DefaultTableModel(_methodsColumns, 0);
|
||||
_methodsTable = new JTable(_methodModel);
|
||||
|
||||
_methodsTable.addMouseListener(new MouseAdapter() {
|
||||
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
Point p = e.getPoint();
|
||||
int col = _methodsTable.columnAtPoint(p);
|
||||
int row = _methodsTable.rowAtPoint(p);
|
||||
System.out.println("clic");
|
||||
if (col == 3) {
|
||||
openArgumentsWindow(_class.getMethods().get(row));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
_scrollMethods = new JScrollPane(_methodsTable);
|
||||
_scrollMethods.setPreferredSize(new Dimension(350, 100));
|
||||
methodsPan.add(_scrollMethods);
|
||||
|
||||
JPanel methodsTableModifier = new JPanel();
|
||||
methodsTableModifier.setLayout(new BoxLayout(methodsTableModifier, BoxLayout.Y_AXIS));
|
||||
JButton addMethod = new JButton("+");
|
||||
addMethod.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
addMethod();
|
||||
}
|
||||
});
|
||||
JButton removeMethod = new JButton("-");
|
||||
removeMethod.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
removeMethod();
|
||||
}
|
||||
});
|
||||
methodsTableModifier.add(addMethod);
|
||||
methodsTableModifier.add(removeMethod);
|
||||
|
||||
methodsPan.add(methodsTableModifier);
|
||||
|
||||
generalPanel.add(methodsPan);
|
||||
|
||||
//Bouton de sauvegarde
|
||||
JButton saveBtn = new JButton("Save changes and quit");
|
||||
saveBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
saveAndClose();
|
||||
}
|
||||
});
|
||||
generalPanel.add(saveBtn);
|
||||
|
||||
this.add(generalPanel, BorderLayout.CENTER);
|
||||
|
||||
this.setVisible(true);
|
||||
|
||||
//Import des attributs et méthodes dans les tableaux
|
||||
this.listAttributes();
|
||||
this.listMethods();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ouvre une fenêtre d'édition des arguments pour la méthode sélectionnée
|
||||
*/
|
||||
public void openArgumentsWindow(Method m){
|
||||
ArgumentsPropertiesWindow argsWin = new ArgumentsPropertiesWindow(this, _umlDiagram, m);
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère la classe en cours d'édition.
|
||||
* @return La classe en cours d'édition.
|
||||
*/
|
||||
public Class getEditingClass(){
|
||||
return _class;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un attribut à la classe et rafraîchit la liste des attributs.
|
||||
*/
|
||||
public void addAttribute(){
|
||||
_class.addAttribute(new Attribute());
|
||||
this.listAttributes();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retire un attribut à la classe et rafraîchit la liste des attributs.
|
||||
*/
|
||||
public void removeAttribute(){
|
||||
int i = _attributesTable.getSelectedRow();
|
||||
if(i != -1){
|
||||
_class.removeAttribute(i);
|
||||
this.listAttributes();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche la liste des attributs de la classe dans le tableau
|
||||
*/
|
||||
public void listAttributes(){
|
||||
//Import des attributs dans la table
|
||||
_attributeModel.setDataVector((Object[][]) null, _attributesColumns);
|
||||
for(Attribute attr : _class.getAttributes()){
|
||||
String access = attr.getAccess();
|
||||
switch(access){
|
||||
case "-":
|
||||
access = "PRIVATE";
|
||||
break;
|
||||
case "+":
|
||||
access = "PUBLIC";
|
||||
break;
|
||||
case "#":
|
||||
access = "PROTECTED";
|
||||
break;
|
||||
}
|
||||
_attributeModel.addRow(new Object[]{attr.getName(), access, attr.getType()});
|
||||
}
|
||||
//On ajoute les contrôles pour chaque colonne
|
||||
JComboBox accessComboBox = new JComboBox();
|
||||
accessComboBox.setEditable(true);
|
||||
accessComboBox.addItem("PRIVATE");
|
||||
accessComboBox.addItem("PUBLIC");
|
||||
accessComboBox.addItem("PROTECTED");
|
||||
TableColumn accessColumn = _attributesTable.getColumn(_attributesColumns[1]);
|
||||
accessColumn.setCellEditor(new DefaultCellEditor(accessComboBox));
|
||||
|
||||
JComboBox typeComboBox = new JComboBox();
|
||||
typeComboBox.setEditable(true);
|
||||
typeComboBox.addItem("boolean");
|
||||
typeComboBox.addItem("char");
|
||||
typeComboBox.addItem("byte");
|
||||
typeComboBox.addItem("short");
|
||||
typeComboBox.addItem("int");
|
||||
typeComboBox.addItem("long");
|
||||
typeComboBox.addItem("float");
|
||||
typeComboBox.addItem("double");
|
||||
typeComboBox.addItem("String");
|
||||
TableColumn typeColumn = _attributesTable.getColumn(_attributesColumns[2]);
|
||||
typeColumn.setCellEditor(new DefaultCellEditor(typeComboBox));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute une méthode à la classe et rafraîchit la liste des méthodes.
|
||||
*/
|
||||
public void addMethod(){
|
||||
_class.addMethod(new Method());
|
||||
this.listMethods();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retire une méthode à la classe et rafraîchit la liste des méthodes.
|
||||
*/
|
||||
public void removeMethod(){
|
||||
int i = _methodsTable.getSelectedRow();
|
||||
if(i != -1){
|
||||
_class.removeMethod(i);
|
||||
this.listMethods();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche la liste des méthodes de la classe dans le tableau
|
||||
*/
|
||||
public void listMethods(){
|
||||
//Import des attributs dans la table
|
||||
_methodModel.setDataVector((Object[][]) null, _methodsColumns);
|
||||
for(Method meth : _class.getMethods()){
|
||||
String access = meth.getAccess();
|
||||
switch(access){
|
||||
case "-":
|
||||
access = "PRIVATE";
|
||||
break;
|
||||
case "+":
|
||||
access = "PUBLIC";
|
||||
break;
|
||||
case "#":
|
||||
access = "PROTECTED";
|
||||
break;
|
||||
}
|
||||
_methodModel.addRow(new Object[]{meth.getName(), access, meth.getType(), "..."});
|
||||
}
|
||||
//On ajoute les contrôles pour chaque colonne
|
||||
JComboBox accessComboBox = new JComboBox();
|
||||
accessComboBox.setEditable(true);
|
||||
accessComboBox.addItem("PRIVATE");
|
||||
accessComboBox.addItem("PUBLIC");
|
||||
accessComboBox.addItem("PROTECTED");
|
||||
TableColumn accessColumn = _methodsTable.getColumn(_methodsColumns[1]);
|
||||
accessColumn.setCellEditor(new DefaultCellEditor(accessComboBox));
|
||||
|
||||
JComboBox typeComboBox = new JComboBox();
|
||||
typeComboBox.setEditable(true);
|
||||
typeComboBox.addItem("boolean");
|
||||
typeComboBox.addItem("char");
|
||||
typeComboBox.addItem("byte");
|
||||
typeComboBox.addItem("short");
|
||||
typeComboBox.addItem("int");
|
||||
typeComboBox.addItem("long");
|
||||
typeComboBox.addItem("float");
|
||||
typeComboBox.addItem("double");
|
||||
typeComboBox.addItem("String");
|
||||
TableColumn typeColumn = _methodsTable.getColumn(_methodsColumns[2]);
|
||||
typeColumn.setCellEditor(new DefaultCellEditor(typeComboBox));
|
||||
|
||||
JTextField argsField = new JTextField();
|
||||
argsField.setEnabled(false);
|
||||
TableColumn argColumn = _methodsTable.getColumn(_methodsColumns[3]);
|
||||
argColumn.setCellEditor(new DefaultCellEditor(argsField));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sauvegarde les modifications pour la classe en cours et ferme la fenêtre.
|
||||
*/
|
||||
public void saveAndClose(){
|
||||
//Termine l'édition en sélectionnant une autre cellule
|
||||
_attributesTable.editCellAt(0,0);
|
||||
//Changement du nom de la classe
|
||||
_class.setName(_nameField.getText());
|
||||
//Enregistrement des attributs
|
||||
for(int i = 0; i <= _attributeModel.getRowCount()-1; i++){
|
||||
Vector vect = (Vector)_attributeModel.getDataVector().elementAt(i);
|
||||
String access = vect.get(1).toString();
|
||||
switch(access){
|
||||
case "PRIVATE" :
|
||||
_class.getAttributes().get(i).setAccess(Attribute.PRIVATE);
|
||||
break;
|
||||
case "PUBLIC" :
|
||||
_class.getAttributes().get(i).setAccess(Attribute.PUBLIC);
|
||||
break;
|
||||
case "PROTECTED" :
|
||||
_class.getAttributes().get(i).setAccess(Attribute.PROTECTED);
|
||||
break;
|
||||
}
|
||||
_class.getAttributes().get(i).setType(vect.get(2).toString());
|
||||
_class.getAttributes().get(i).setName(vect.get(0).toString());
|
||||
}
|
||||
//Enregistrement des méthodes
|
||||
_methodsTable.editCellAt(0,0);
|
||||
for(int i = 0; i <= _methodModel.getRowCount()-1; i++){
|
||||
Vector vect = (Vector)_methodModel.getDataVector().elementAt(i);
|
||||
String access = vect.get(1).toString();
|
||||
switch(access){
|
||||
case "PRIVATE" :
|
||||
_class.getMethods().get(i).setAccess(Method.PRIVATE);
|
||||
break;
|
||||
case "PUBLIC" :
|
||||
_class.getMethods().get(i).setAccess(Method.PUBLIC);
|
||||
break;
|
||||
case "PROTECTED" :
|
||||
_class.getMethods().get(i).setAccess(Method.PROTECTED);
|
||||
break;
|
||||
}
|
||||
_class.getMethods().get(i).setType(vect.get(2).toString());
|
||||
_class.getMethods().get(i).setName(vect.get(0).toString());
|
||||
}
|
||||
|
||||
//Rafraichissement de l'affichage
|
||||
this._class.computeMinSize();
|
||||
_umlDiagram.repaint();
|
||||
this.dispose();
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* Gère une méthode.
|
||||
* @author V.BOULANGER
|
||||
*/
|
||||
public class Method {
|
||||
|
||||
@@ -25,7 +26,7 @@ public class Method {
|
||||
this._id = _methodId;
|
||||
this._access = Method.PUBLIC;
|
||||
this._type = "void";
|
||||
this._name = "methode" + this._id;
|
||||
this._name = "method" + this._id;
|
||||
this._arguments = new ArrayList<Argument>();
|
||||
}
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@ public class Project {
|
||||
public Project(){
|
||||
_projectId++;
|
||||
_id = _projectId;
|
||||
_name = "Mon super projet";
|
||||
_author = "Inconnu";
|
||||
_name = "My awesome project";
|
||||
_author = "Unknown";
|
||||
_version = "0.0.1";
|
||||
_designation = "Projet UML AppThinker.";
|
||||
_designation = "AppThinker UML Project.";
|
||||
_path = null;
|
||||
_classes = new ArrayList<Class>();
|
||||
_links = new ArrayList<Link>();
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user