Ptidej-v5.2-master/POM Tests/data/ArgoUML_0.28/src/org/argouml/uml/ui/TabDocumentation.java
// $Id: TabDocumentation.java 15109 2008-06-29 20:20:14Z bobtarling $
// Copyright (c) 1996-2008 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.

package org.argouml.uml.ui;

import java.awt.Color;

import javax.swing.ImageIcon;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;

import org.argouml.application.api.Argo;
import org.argouml.configuration.Configuration;
import org.argouml.i18n.Translator;
import org.argouml.model.Model;
import org.argouml.swingext.UpArrowIcon;
import org.tigris.gef.presentation.Fig;
import org.tigris.swidgets.Horizontal;
import org.tigris.swidgets.Vertical;

/**
 * This the tab in the details pane for documentation.<p>
 *
 * All data in this tab is stored as Tagged Values,
 * and saved and reloaded correctly.<p>
 *
 * Selecting the menu Edit>Settings... and setting the user name
 * does not affect the author field
 * in the documentation tab. <p>
 *
 * Enabling output from the documentation fields when generating code as
 * embedded in javadocs and for html/diagram creation is considered important
 * by users.<p>
 *
 * When importing sources, already saved javadoc statements are not
 * automatically added to the documenation Jtext window. When Adding notes to
 * classes the notes are not included in the documentation text window.<p>
 *
 * The "Since" field is not validated for real date. Change to DateField?<p>
 *
 * Note that all fields in the TabDocumentation are added automatically
 * to the tagged value tab view.<p>
 *
 * Refactored by: raphael-langerhorst@gmx.at; 5th April 03<p>
 * Changes: <ul>
 * <li>uses LabelledLayout instead of GridBagLayout
 * <li>uses the new event pump introduced late 2002 by Jaap</ul><p>
 *
 * UMLModelElementTaggedValueDocument is used to access the tagged values of an
 * MModelElement.
 */
public class TabDocumentation extends PropPanel {

    private static String orientation = Configuration.getString(Configuration
            .makeKey("layout", "tabdocumentation"));

    /**
     * Construct new documentation tab
     */
    public TabDocumentation() {
        super(Translator.localize("tab.documentation"), (ImageIcon) null);
        setOrientation((
                orientation.equals("West") || orientation.equals("East"))
                ? Vertical.getInstance() : Horizontal.getInstance());
        setIcon(new UpArrowIcon());

        addField(Translator.localize("label.author"), new UMLTextField2(
                new UMLModelElementTaggedValueDocument(Argo.AUTHOR_TAG)));

        addField(Translator.localize("label.version"), new UMLTextField2(
                new UMLModelElementTaggedValueDocument(Argo.VERSION_TAG)));

        addField(Translator.localize("label.since"), new UMLTextField2(
                new UMLModelElementTaggedValueDocument(Argo.SINCE_TAG)));

        addField(Translator.localize("label.deprecated"),
                new UMLDeprecatedCheckBox());

        UMLTextArea2 see = new UMLTextArea2(
                new UMLModelElementTaggedValueDocument(Argo.SEE_TAG));
        see.setRows(2);
        see.setLineWrap(true);
        see.setWrapStyleWord(true);
        JScrollPane spSee = new JScrollPane();
        spSee.getViewport().add(see);
        addField(Translator.localize("label.see"), spSee);

        //make new column with LabelledLayout
        add(LabelledLayout.getSeparator());

        UMLTextArea2 doc = new UMLTextArea2(
                new UMLModelElementTaggedValueDocument(Argo.DOCUMENTATION_TAG));
        doc.setRows(2);
        doc.setLineWrap(true);
        doc.setWrapStyleWord(true);
        JScrollPane spDocs = new JScrollPane();
        spDocs.getViewport().add(doc);
        addField(Translator.localize("label.documentation"), spDocs);

        // Comment.name text field - editing disabled
        UMLTextArea2 comment = new UMLTextArea2(
                new UMLModelElementCommentDocument(false));
        disableTextArea(comment);
        JScrollPane spComment = new JScrollPane();
        spComment.getViewport().add(comment);
        addField(Translator.localize("label.comment.name"), spComment);

        // Comment.body text field - editing disabled
        UMLTextArea2 commentBody = new UMLTextArea2(
                new UMLModelElementCommentDocument(true));
        disableTextArea(commentBody);
        JScrollPane spCommentBody = new JScrollPane();
        spCommentBody.getViewport().add(commentBody);
        addField(Translator.localize("label.comment.body"), spCommentBody);

        /* Since there are no buttons on this panel, we have to set
         * the size of the buttonpanel, otherwise the 
         * title would not be aligned right. */
        setButtonPanelSize(18);
    }
    
    private void disableTextArea(final JTextArea textArea) {
        textArea.setRows(2);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        textArea.setEnabled(false);
        textArea.setDisabledTextColor(textArea.getForeground());
        // Only change the background colour if it is supplied by the LAF.
        // Otherwise leave look and feel to handle this itself.
        final Color inactiveColor =
            UIManager.getColor("TextField.inactiveBackground");
        if (inactiveColor != null) {
            // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4919687
            textArea.setBackground(new Color(inactiveColor.getRGB()));
        }
    }

    /**
     * Checks if the tab should be enabled. Returns true if the target
     * returned by getTarget is a modelelement or if that target shows up as Fig
     * on the active diagram and has a modelelement as owner.
     *
     * @return true if this tab should be enabled, otherwise false.
     */
    public boolean shouldBeEnabled() {
        Object target = getTarget();
        return shouldBeEnabled(target);
    }

    /*
     * @see org.argouml.uml.ui.PropPanel#shouldBeEnabled(java.lang.Object)
     */
    @Override
    public boolean shouldBeEnabled(Object target) {
        target = (target instanceof Fig) ? ((Fig) target).getOwner() : target;
        return Model.getFacade().isAModelElement(target);
    }

}

