001: /**
002: * L2FProd.com Common Components 7.3 License.
003: *
004: * Copyright 2005-2007 L2FProd.com
005: *
006: * Licensed under the Apache License, Version 2.0 (the "License");
007: * you may not use this file except in compliance with the License.
008: * You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS,
014: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */package com.l2fprod.common.demo;
018:
019: import com.l2fprod.common.propertysheet.DefaultProperty;
020: import com.l2fprod.common.propertysheet.Property;
021: import com.l2fprod.common.propertysheet.PropertySheet;
022: import com.l2fprod.common.propertysheet.PropertySheetPanel;
023: import com.l2fprod.common.swing.LookAndFeelTweaks;
024: import com.l2fprod.common.util.ResourceManager;
025:
026: import java.awt.Color;
027: import java.awt.event.ActionEvent;
028: import java.beans.PropertyChangeEvent;
029: import java.beans.PropertyChangeListener;
030:
031: import javax.swing.AbstractAction;
032: import javax.swing.JButton;
033: import javax.swing.JPanel;
034: import javax.swing.JTextArea;
035:
036: public class PropertySheetPage3 extends JPanel {
037: private static final Class THIS_CLASS = PropertySheetPage3.class;
038: static ResourceManager RESOURCE = ResourceManager.get(THIS_CLASS);
039:
040: public PropertySheetPage3() {
041: setLayout(LookAndFeelTweaks.createVerticalPercentLayout());
042:
043: JTextArea message = new JTextArea();
044: message.setText(PropertySheetMain.RESOURCE
045: .getString("Main.sheet1.message"));
046: LookAndFeelTweaks.makeMultilineLabel(message);
047: add(message);
048:
049: final Colorful data = new Colorful();
050: data.setColor(new Color(255, 153, 102));
051:
052: DefaultProperty level0 = new NoReadWriteProperty();
053: level0.setDisplayName("Level 0");
054: level0.setCategory("A category");
055: DefaultProperty level1 = new NoReadWriteProperty();
056: level1.setDisplayName("Level 1");
057: level1.setCategory("Another category");
058: level0.addSubProperty(level1);
059: DefaultProperty level2 = new NoReadWriteProperty();
060: level2.setDisplayName("Level 2");
061: level1.addSubProperty(level2);
062: DefaultProperty level21 = new NoReadWriteProperty();
063: level21.setDisplayName("Level 3");
064: level1.addSubProperty(level21);
065:
066: DefaultProperty level211 = new NoReadWriteProperty();
067: level211.setDisplayName("Level 3.1");
068: level21.addSubProperty(level211);
069:
070: DefaultProperty root = new NoReadWriteProperty();
071: root.setDisplayName("Root");
072:
073: final PropertySheetPanel sheet = new PropertySheetPanel();
074: sheet.setMode(PropertySheet.VIEW_AS_FLAT_LIST);
075: sheet.setProperties(new Property[] { new ColorProperty(),
076: level0, root });
077: sheet.readFromObject(data);
078: sheet.setDescriptionVisible(true);
079: sheet.setSortingCategories(true);
080: sheet.setSortingProperties(true);
081: add(sheet, "*");
082:
083: // everytime a property change, update the button with it
084: PropertyChangeListener listener = new PropertyChangeListener() {
085: public void propertyChange(PropertyChangeEvent evt) {
086: Property prop = (Property) evt.getSource();
087: prop.writeToObject(data);
088: System.out.println("Updated object to " + data);
089: }
090: };
091: sheet.addPropertySheetChangeListener(listener);
092:
093: JButton button = new JButton(new AbstractAction(
094: "Click to setWantsExtraIndent(true)") {
095: public void actionPerformed(ActionEvent e) {
096: sheet.getTable().setWantsExtraIndent(
097: !sheet.getTable().getWantsExtraIndent());
098: putValue(NAME, "Click to setWantsExtraIndent("
099: + !sheet.getTable().getWantsExtraIndent() + ")");
100: }
101: });
102: add(button);
103: }
104:
105: static class NoReadWriteProperty extends DefaultProperty {
106: public void readFromObject(Object object) {
107: }
108:
109: public void writeToObject(Object object) {
110: }
111: }
112:
113: public static class Colorful {
114: private Color color;
115:
116: public Color getColor() {
117: return color;
118: }
119:
120: public void setColor(Color color) {
121: this .color = color;
122: }
123:
124: public int getRed() {
125: return color.getRed();
126: }
127:
128: public void setRed(int red) {
129: color = new Color(red, getGreen(), getBlue());
130: }
131:
132: public int getGreen() {
133: return color.getGreen();
134: }
135:
136: public void setGreen(int green) {
137: color = new Color(getRed(), green, getBlue());
138: }
139:
140: public int getBlue() {
141: return color.getBlue();
142: }
143:
144: public void setBlue(int blue) {
145: color = new Color(getRed(), getGreen(), blue);
146: }
147:
148: public String toString() {
149: return color.toString();
150: }
151: }
152:
153: public static class ColorProperty extends DefaultProperty {
154: public ColorProperty() {
155: setName("color");
156: setCategory(RESOURCE.getString("color.cat"));
157: setDisplayName(RESOURCE.getString("color.name"));
158: setShortDescription(RESOURCE.getString("color.desc"));
159: setType(Color.class);
160:
161: addSubProperty(new ColorComponentProperty("red"));
162: addSubProperty(new ColorComponentProperty("green"));
163: addSubProperty(new ColorComponentProperty("blue"));
164: }
165: }
166:
167: public static class ColorComponentProperty extends DefaultProperty {
168: public ColorComponentProperty(String name) {
169: setName(name);
170: setDisplayName(RESOURCE.getString(name + ".name"));
171: setShortDescription(RESOURCE.getString(name + ".desc"));
172: setType(int.class);
173: }
174: }
175: }
|