001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: /*
043: * Created on Jun 10, 2003
044: *
045: */
046: package org.netbeans.modules.uml.ui.swing.treetable;
047:
048: import java.awt.Color;
049: import java.awt.Component;
050: import java.awt.Graphics;
051: import java.awt.Insets;
052:
053: import javax.swing.AbstractButton;
054: import javax.swing.BorderFactory;
055: import javax.swing.JTable;
056: import javax.swing.JToolBar;
057: import javax.swing.UIDefaults;
058: import javax.swing.UIManager;
059: import javax.swing.border.AbstractBorder;
060: import javax.swing.border.Border;
061: import javax.swing.border.LineBorder;
062: import javax.swing.plaf.BorderUIResource;
063: import javax.swing.plaf.basic.BasicBorders;
064: import javax.swing.table.DefaultTableCellRenderer;
065:
066: import org.netbeans.modules.uml.core.support.umlutils.IPropertyDefinition;
067: import org.netbeans.modules.uml.core.support.umlutils.IPropertyElement;
068:
069: /**
070: * @author sumitabhk
071: *
072: */
073: public class PropertyValueCellRenderer extends DefaultTableCellRenderer {
074:
075: /**
076: *
077: */
078: public PropertyValueCellRenderer() {
079: super ();
080: }
081:
082: public Component getTableCellRendererComponent(JTable table,
083: Object value, boolean isSelected, boolean hasFocus,
084: int row, int column) {
085: super .getTableCellRendererComponent(table, value, isSelected,
086: hasFocus, row, column);
087: if (isSelected) {
088: setBackground(table.getSelectionBackground());
089: } else
090: setBackground(table.getBackground());
091:
092: //if the corresponding property definition is read-only I want to show that.
093: boolean isReadOnly = false;
094: boolean isFormatString = false;
095: boolean isRootNode = false;
096: if (table instanceof JPropertyTreeTable) {
097: JPropertyTreeTable myTable = (JPropertyTreeTable) table;
098: JDefaultMutableTreeNode node = myTable.getPropertyEditor()
099: .getNodeAtGridRow(row);
100: if (node != null) {
101: isRootNode = node.isRoot();
102: Object obj = node.getUserObject();
103: if (obj != null && obj instanceof IPropertyElement) {
104: IPropertyElement pEle = (IPropertyElement) obj;
105: IPropertyDefinition pDef = pEle
106: .getPropertyDefinition();
107: if (pDef != null) {
108: String cType = pDef.getControlType();
109: if (cType != null && cType.equals("read-only")) {
110: isReadOnly = true;
111: }
112:
113: String validVals = pDef.getValidValues();
114: if (validVals != null
115: && validVals.equals("FormatString")) {
116: isFormatString = true;
117: }
118: }
119: }
120: }
121: }
122:
123: if (isReadOnly || isFormatString) {
124: setBackground(new Color(232, 228, 232));
125: }
126:
127: if (isRootNode) {
128: setBackground(new Color(192, 192, 192));
129: }
130:
131: setBorder(new MyBorder());
132: return this ;
133: }
134:
135: public Border getRadioButtonBorder() {
136: UIDefaults table = UIManager.getLookAndFeelDefaults();
137: Border radioButtonBorder = BorderUIResource
138: .getBlackLineBorderUIResource();
139: // new BorderUIResource.LineBorderUIResource(Color.BLACK, 1);
140: return radioButtonBorder;
141: }
142:
143: public class MyBorder extends LineBorder {
144:
145: public MyBorder() {
146: super (Color.GRAY);
147: }
148:
149: public void paintBorder(Component c, Graphics g, int x, int y,
150: int width, int height) {
151: Color oldColor = g.getColor();
152: int i;
153:
154: /// PENDING(klobad) How/should do we support Roundtangles?
155: g.setColor(lineColor);
156:
157: g.setColor(new Color(232, 228, 232));
158: g.drawLine(x, y, x, y + height);
159: g.drawLine(x, y, x + width, y);
160: g.drawLine(x + width, y, x + width, y + height);
161:
162: g.setColor(oldColor);
163: }
164: }
165:
166: }
|