annotate java/src/uk/ac/qmul/eecs/ccmi/gui/DiagramPanel.java @ 0:9418ab7b7f3f

Initial import
author Fiore Martin <fiore@eecs.qmul.ac.uk>
date Fri, 16 Dec 2011 17:35:51 +0000
parents
children 9e67171477bc
rev   line source
fiore@0 1 /*
fiore@0 2 CCmI Editor - A Collaborative Cross-Modal Diagram Editing Tool
fiore@0 3
fiore@0 4 Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com)
fiore@0 5 Copyright (C) 2011 Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/)
fiore@0 6
fiore@0 7 This program is free software: you can redistribute it and/or modify
fiore@0 8 it under the terms of the GNU General Public License as published by
fiore@0 9 the Free Software Foundation, either version 3 of the License, or
fiore@0 10 (at your option) any later version.
fiore@0 11
fiore@0 12 This program is distributed in the hope that it will be useful,
fiore@0 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
fiore@0 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fiore@0 15 GNU General Public License for more details.
fiore@0 16
fiore@0 17 You should have received a copy of the GNU General Public License
fiore@0 18 along with this program. If not, see <http://www.gnu.org/licenses/>.
fiore@0 19 */
fiore@0 20
fiore@0 21 package uk.ac.qmul.eecs.ccmi.gui;
fiore@0 22
fiore@0 23 import java.awt.BorderLayout;
fiore@0 24
fiore@0 25 import javax.swing.JPanel;
fiore@0 26 import javax.swing.JScrollPane;
fiore@0 27 import javax.swing.JSplitPane;
fiore@0 28 import javax.swing.event.ChangeEvent;
fiore@0 29 import javax.swing.event.ChangeListener;
fiore@0 30
fiore@0 31 /**
fiore@0 32 * It's the panel which displays a diagram. It contains a {@link GraphPanel}, a {@link DiagramTree}
fiore@0 33 * and a {@link GraphToolbar}
fiore@0 34 *
fiore@0 35 */
fiore@0 36 @SuppressWarnings("serial")
fiore@0 37 public class DiagramPanel extends JPanel{
fiore@0 38
fiore@0 39 public DiagramPanel(Diagram diagram, EditorTabbedPane tabbedPane){
fiore@0 40 this.diagram = diagram;
fiore@0 41 this.tabbedPane = tabbedPane;
fiore@0 42 setName(diagram.getLabel());
fiore@0 43 setLayout(new BorderLayout());
fiore@0 44
fiore@0 45 modelChangeListener = new ChangeListener(){
fiore@0 46 @Override
fiore@0 47 public void stateChanged(ChangeEvent e) {
fiore@0 48 setModified(true);
fiore@0 49 }
fiore@0 50 };
fiore@0 51
fiore@0 52 toolbar = new GraphToolbar(diagram);
fiore@0 53 graphPanel = new GraphPanel(diagram, toolbar);
fiore@0 54 /* the focus must be hold by the tree and the tab panel only */
fiore@0 55 toolbar.setFocusable(false);
fiore@0 56 graphPanel.setFocusable(false);
fiore@0 57
fiore@0 58 tree = new DiagramTree(diagram);
fiore@0 59
fiore@0 60 /* the panel containing the graph and the toolbar */
fiore@0 61 JPanel graphAndToolbarPanel = new JPanel(new BorderLayout());
fiore@0 62 graphAndToolbarPanel.add(toolbar, BorderLayout.NORTH);
fiore@0 63 graphAndToolbarPanel.add(new JScrollPane(graphPanel),BorderLayout.CENTER);
fiore@0 64
fiore@0 65 JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
fiore@0 66 new JScrollPane(tree),
fiore@0 67 graphAndToolbarPanel);
fiore@0 68 splitPane.setDividerLocation((int)tree.getPreferredSize().width*2);
fiore@0 69 add(splitPane, BorderLayout.CENTER);
fiore@0 70
fiore@0 71 diagram.getCollectionModel().addChangeListener(modelChangeListener);
fiore@0 72 }
fiore@0 73
fiore@0 74 public String getFilePath(){
fiore@0 75 return filePath;
fiore@0 76 }
fiore@0 77
fiore@0 78 public void setFilePath(String newValue){
fiore@0 79 filePath = newValue;
fiore@0 80 }
fiore@0 81
fiore@0 82 public Diagram getDiagram(){
fiore@0 83 return diagram;
fiore@0 84 }
fiore@0 85
fiore@0 86 public void setDiagram(Diagram diagram){
fiore@0 87 /* remove the listener from the old model */
fiore@0 88 this.diagram.getCollectionModel().removeChangeListener(modelChangeListener);
fiore@0 89 diagram.getCollectionModel().addChangeListener(modelChangeListener);
fiore@0 90
fiore@0 91 this.diagram = diagram;
fiore@0 92 tree.setDiagram(diagram);
fiore@0 93 graphPanel.setModelUpdater(diagram.getModelUpdater());
fiore@0 94 setName(diagram.getLabel());
fiore@0 95 /* set the * according to the new diagram's model modification status */
fiore@0 96 setModified(isModified());
fiore@0 97 }
fiore@0 98
fiore@0 99 public GraphPanel getGraphPanel(){
fiore@0 100 return graphPanel;
fiore@0 101 }
fiore@0 102
fiore@0 103 public DiagramTree getTree(){
fiore@0 104 return tree;
fiore@0 105 }
fiore@0 106
fiore@0 107 /** This method is for changing the 'modified' status of the diagram. *
fiore@0 108 * When called passing false as argument listeners are notified that the *
fiore@0 109 * diagram has been saved. */
fiore@0 110 public void setModified(boolean modified){
fiore@0 111 if(!modified)
fiore@0 112 diagram.getCollectionModel().setUnmodified();
fiore@0 113 /* add an asterisk to notify that the diagram has changed */
fiore@0 114 if(modified)
fiore@0 115 setName(getName()+"*");
fiore@0 116 else
fiore@0 117 setName(diagram.getLabel());
fiore@0 118 tabbedPane.refreshComponentTabTitle(this);
fiore@0 119 }
fiore@0 120
fiore@0 121 public boolean isModified(){
fiore@0 122 return diagram.getCollectionModel().isModified();
fiore@0 123 }
fiore@0 124
fiore@0 125 private Diagram diagram;
fiore@0 126 private GraphPanel graphPanel;
fiore@0 127 private DiagramTree tree;
fiore@0 128 private GraphToolbar toolbar;
fiore@0 129 private String filePath;
fiore@0 130 private ChangeListener modelChangeListener;
fiore@0 131 private EditorTabbedPane tabbedPane;
fiore@0 132 }