svn commit: r17019 - trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui
Bob Tarling <[email protected]>
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: bobtarling Date: 2009-04-01 17:49:01-0700 New Revision: 17019 Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLLinkedList.java Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java Log: A merged copy of UMLList into UMLLinkedList Added: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLLinkedList.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLLinkedList.java?view=markup&pathrev=17019 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLLinkedList.java 2009-04-01 17:49:01-0700 @@ -0,0 +1,199 @@ +// $Id: UMLLinkedList.java 12546 2007-05-05 16:54:40Z linus $ +// Copyright (c) 1996-2007 The Regents of the University of California. All +// Rights Reserved. Permission to use, copy, modify, and distribute this +// software and its documentation without fee, and without a written +// agreement is hereby granted, provided that the above copyright notice +// and this paragraph appear in all copies. This software program and +// documentation are copyrighted by The Regents of the University of +// California. The software program and documentation are supplied "AS +// IS", without any accompanying services from The Regents. The Regents +// does not warrant that the operation of the program will be +// uninterrupted or error-free. The end-user understands that the program +// was developed for research purposes and is advised not to rely +// exclusively on the program for any reason. IN NO EVENT SHALL THE +// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF +// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE +// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF +// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, +// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +// $header$ +package org.argouml.core.propertypanels.ui; + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +import javax.swing.JList; +import javax.swing.JPopupMenu; +import javax.swing.ListCellRenderer; +import javax.swing.ListModel; +import javax.swing.ListSelectionModel; + +import org.apache.log4j.Logger; +import org.argouml.model.Model; +import org.argouml.ui.LookAndFeelMgr; +import org.argouml.ui.targetmanager.TargetListener; +import org.argouml.ui.targetmanager.TargettableModelView; +import org.argouml.uml.ui.UMLLinkMouseListener; +import org.argouml.uml.ui.UMLLinkedListCellRenderer; + +/** + * An JList that implements 'jump' behaviour. As soon as the user + * doubleclicks on an element in the list, that element is selected in + * argouml. <p> + * + * Also, it allows showing an icon with the text items in the list.<p> + * + * And, in case the listed item has no name, a default name is generated. + * + * @since Oct 2, 2002 + * @author [email protected] + */ +class UMLLinkedList extends JList + implements TargettableModelView, MouseListener { + + private static final Logger LOG = + Logger.getLogger(UMLLinkedList.class); + + /** + * Constructor for UMLLinkedList. + * + * @param dataModel the data model + * @param showIcon true if an icon should be shown + * @param showPath true if containment path should be shown + */ + public UMLLinkedList( + final ListModel dataModel, + final boolean showIcon, + final boolean showPath) { + this(dataModel, new UMLLinkedListCellRenderer(showIcon, showPath)); + setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + // TODO: Can we find a better way to do this than hard coding colour? + setForeground(Color.blue); + setSelectionForeground(Color.blue.darker()); + UMLLinkMouseListener mouseListener = new UMLLinkMouseListener(this); + addMouseListener(mouseListener); + } + + /** + * The constructor. + * + * @param dataModel the data model + */ + public UMLLinkedList(ListModel dataModel) { + this(dataModel, true); + } + + /** + * Constructor for UMLLinkedList. + * + * @param dataModel the data model + * @param showIcon true if an icon should be shown + */ + public UMLLinkedList( + final ListModel dataModel, + final boolean showIcon) { + this(dataModel, showIcon, true); + } + + /** + * Constructor for UMLList2. Used by subclasses that want to add their own + * renderer to the list. + * @param dataModel the data model + * @param renderer the renderer + */ + UMLLinkedList(ListModel dataModel, ListCellRenderer renderer) { + super(dataModel); + setDoubleBuffered(true); + if (renderer != null) { + setCellRenderer(renderer); + } + setFont(LookAndFeelMgr.getInstance().getStandardFont()); + addMouseListener(this); + } + + /** + * Getter for the target. First approach to get rid of the container. + * @return Object + */ + public Object getTarget() { + return ((UMLModelElementListModel) getModel()).getTarget(); + } + + /* + * @see TargettableModelView#getTargettableModel() + */ + public TargetListener getTargettableModel() { + return (TargetListener) getModel(); + } + + /* + * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) + */ + public void mouseClicked(MouseEvent e) { + showPopup(e); + } + + /* + * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) + */ + public void mouseEntered(MouseEvent e) { + if (hasPopup()) { + setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); + } + } + + /* + * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) + */ + public void mouseExited(MouseEvent e) { + if (hasPopup()) { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + + /* + * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) + */ + public void mousePressed(MouseEvent e) { + showPopup(e); + } + + /* + * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) + */ + public void mouseReleased(MouseEvent e) { + showPopup(e); + } + + private final void showPopup(MouseEvent event) { + if (event.isPopupTrigger() + && !Model.getModelManagementHelper().isReadOnly(getTarget())) { + Point point = event.getPoint(); + int index = locationToIndex(point); + JPopupMenu popup = new JPopupMenu(); + ListModel lm = getModel(); + if (lm instanceof UMLModelElementListModel) { + if (((UMLModelElementListModel) lm).buildPopup(popup, index)) { + LOG.debug("Showing popup"); + popup.show(this, point.x, point.y); + } + } + } + } + + protected boolean hasPopup() { + if (getModel() instanceof UMLModelElementListModel) { + return ((UMLModelElementListModel) getModel()).hasPopup(); + } + return false; + } +} Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java?view=diff&pathrev=17019&r1=17018&r2=17019 ============================================================================== --- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java (original) +++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLMutableLinkedList.java 2009-04-01 17:49:01-0700 @@ -37,7 +37,6 @@ import org.argouml.uml.ui.AbstractActionAddModelElement2; import org.argouml.uml.ui.AbstractActionNewModelElement; import org.argouml.uml.ui.AbstractActionRemoveElement; -import org.argouml.uml.ui.UMLLinkedList; /** * This class is the GUI front for a mutable linked list. The user can add, ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=1512247 To unsubscribe from this discussion, e-mail: [[email protected]].