diff --git a/AppThinker.mdzip b/AppThinker.mdzip index 38545cf..a5663e4 100644 Binary files a/AppThinker.mdzip and b/AppThinker.mdzip differ diff --git a/AppThinker.mdzip.bak b/AppThinker.mdzip.bak index e60c8cf..38545cf 100644 Binary files a/AppThinker.mdzip.bak and b/AppThinker.mdzip.bak differ diff --git a/AppThinker/src/AppThinker.java b/AppThinker/src/AppThinker.java index 11b071f..8808a0d 100644 --- a/AppThinker/src/AppThinker.java +++ b/AppThinker/src/AppThinker.java @@ -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; } diff --git a/AppThinker/src/AppThinkerMenuBar.java b/AppThinker/src/AppThinkerMenuBar.java index 8941b5f..6bf1150 100644 --- a/AppThinker/src/AppThinkerMenuBar.java +++ b/AppThinker/src/AppThinkerMenuBar.java @@ -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); } } diff --git a/AppThinker/src/AppThinkerStatusbar.java b/AppThinker/src/AppThinkerStatusbar.java index efd16ab..943ed95 100644 --- a/AppThinker/src/AppThinkerStatusbar.java +++ b/AppThinker/src/AppThinkerStatusbar.java @@ -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); } diff --git a/AppThinker/src/AppThinkerToolbar.java b/AppThinker/src/AppThinkerToolbar.java index 0e228f7..6178335 100644 --- a/AppThinker/src/AppThinkerToolbar.java +++ b/AppThinker/src/AppThinkerToolbar.java @@ -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; } } diff --git a/AppThinker/src/AppThinkerWindow.java b/AppThinker/src/AppThinkerWindow.java index 9d6e5f6..b20afc9 100644 --- a/AppThinker/src/AppThinkerWindow.java +++ b/AppThinker/src/AppThinkerWindow.java @@ -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(); } /** diff --git a/AppThinker/src/Argument.java b/AppThinker/src/Argument.java index aa4d1d8..3dc5188 100644 --- a/AppThinker/src/Argument.java +++ b/AppThinker/src/Argument.java @@ -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; } diff --git a/AppThinker/src/ArgumentsPropertiesWindow.java b/AppThinker/src/ArgumentsPropertiesWindow.java new file mode 100644 index 0000000..742679e --- /dev/null +++ b/AppThinker/src/ArgumentsPropertiesWindow.java @@ -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(); + } +} diff --git a/AppThinker/src/Attribute.java b/AppThinker/src/Attribute.java index fc5152c..9f2b065 100644 --- a/AppThinker/src/Attribute.java +++ b/AppThinker/src/Attribute.java @@ -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; } /** diff --git a/AppThinker/src/Class.java b/AppThinker/src/Class.java index eb34878..a956745 100644 --- a/AppThinker/src/Class.java +++ b/AppThinker/src/Class.java @@ -93,6 +93,7 @@ public class Class { */ public void setName(String name) { this._name = name; + this.computeMinSize(); } /** diff --git a/AppThinker/src/ClassPropertiesWindow.java b/AppThinker/src/ClassPropertiesWindow.java new file mode 100644 index 0000000..da231dc --- /dev/null +++ b/AppThinker/src/ClassPropertiesWindow.java @@ -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(); + } +} diff --git a/AppThinker/src/Method.java b/AppThinker/src/Method.java index 5860e4e..5f95d0e 100644 --- a/AppThinker/src/Method.java +++ b/AppThinker/src/Method.java @@ -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(); } diff --git a/AppThinker/src/Project.java b/AppThinker/src/Project.java index 33e56b5..a6d0d0d 100644 --- a/AppThinker/src/Project.java +++ b/AppThinker/src/Project.java @@ -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(); _links = new ArrayList(); diff --git a/AppThinker/src/UmlDiagram.java b/AppThinker/src/UmlDiagram.java index f2a50d4..6e22f59 100644 --- a/AppThinker/src/UmlDiagram.java +++ b/AppThinker/src/UmlDiagram.java @@ -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 _classes; private List _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 listArguments = new ArrayList(); 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");