/*FreeMind - A Program for creating and viewing Mindmaps
*Copyright (C) 2000-2006 Joerg Mueller, Daniel Polansky, Christian Foltin and others.
*
*See COPYING for Details
*
*This program is free software; you can redistribute it and/or
*modify it under the terms of the GNU General Public License
*as published by the Free Software Foundation; either version 2
*of the License, or (at your option) any later version.
*
*This program is distributed in the hope that it will be useful,
*but WITHOUT ANY WARRANTY; without even the implied warranty of
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*GNU General Public License for more details.
*
*You should have received a copy of the GNU General Public License
*along with this program; if not, write to the Free Software
*Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Created on 25.02.2006
*/
package freemind.modes.mindmapmode.dialogs;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.HeadlessException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.JPanel;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
import freemind.common.BooleanProperty;
import freemind.common.ColorProperty;
import freemind.common.ComboProperty;
import freemind.common.FontProperty;
import freemind.common.IconProperty;
import freemind.common.NextLineProperty;
import freemind.common.PropertyBean;
import freemind.common.PropertyControl;
import freemind.common.ScriptEditorProperty;
import freemind.common.SeparatorProperty;
import freemind.common.StringProperty;
import freemind.common.TextTranslator;
import freemind.common.ThreeCheckBoxProperty;
import freemind.controller.actions.generated.instance.Pattern;
import freemind.controller.actions.generated.instance.PatternChild;
import freemind.controller.actions.generated.instance.PatternEdgeColor;
import freemind.controller.actions.generated.instance.PatternEdgeStyle;
import freemind.controller.actions.generated.instance.PatternEdgeWidth;
import freemind.controller.actions.generated.instance.PatternIcon;
import freemind.controller.actions.generated.instance.PatternNodeBackgroundColor;
import freemind.controller.actions.generated.instance.PatternNodeColor;
import freemind.controller.actions.generated.instance.PatternNodeFontBold;
import freemind.controller.actions.generated.instance.PatternNodeFontItalic;
import freemind.controller.actions.generated.instance.PatternNodeFontName;
import freemind.controller.actions.generated.instance.PatternNodeFontSize;
import freemind.controller.actions.generated.instance.PatternNodeStyle;
import freemind.controller.actions.generated.instance.PatternNodeText;
import freemind.controller.actions.generated.instance.PatternPropertyBase;
import freemind.controller.actions.generated.instance.PatternScript;
import freemind.main.FreeMind;
import freemind.modes.EdgeAdapter;
import freemind.modes.MindIcon;
import freemind.modes.MindMapNode;
import freemind.modes.mindmapmode.MindMapController;
import freemind.modes.mindmapmode.actions.ApplyPatternAction;
import freemind.modes.mindmapmode.actions.IconAction;
/**
* @author foltin
*
*/
public class StylePatternFrame extends JPanel implements TextTranslator,
PropertyChangeListener {
public static final class StylePatternFrameType {
private StylePatternFrameType() {
}
public static StylePatternFrameType WITHOUT_NAME_AND_CHILDS = new StylePatternFrameType();
public static StylePatternFrameType WITH_NAME_AND_CHILDS = new StylePatternFrameType();
}
private static final String[] EDGE_STYLES = new String[] {
EdgeAdapter.EDGESTYLE_LINEAR, EdgeAdapter.EDGESTYLE_BEZIER,
EdgeAdapter.EDGESTYLE_SHARP_LINEAR,
EdgeAdapter.EDGESTYLE_SHARP_BEZIER };
private static final String[] EDGE_WIDTHS = new String[] {
"EdgeWidth_parent", "EdgeWidth_thin", "EdgeWidth_1", "EdgeWidth_2",
"EdgeWidth_4", "EdgeWidth_8" };
private static final String NODE_BACKGROUND_COLOR = "nodebackgroundcolor";
private static final String SET_RESOURCE = "set_property_text";
private static final String SET_NODE_BACKGROUND_COLOR = SET_RESOURCE;
private static final String NODE_COLOR = "nodecolor";
private static final String SET_NODE_COLOR = SET_RESOURCE;
private static final String SET_NODE_STYLE = SET_RESOURCE;
private static final String NODE_STYLE = "nodestyle";
private static final String NODE_FONT_NAME = "nodefontname";
private static final String SET_NODE_FONT_NAME = SET_RESOURCE;
private static final String NODE_FONT_SIZE = "nodefontsize";
private static final String SET_NODE_FONT_SIZE = SET_RESOURCE;
private static final String NODE_FONT_BOLD = "nodefontbold";
private static final String SET_NODE_FONT_BOLD = SET_RESOURCE;
private static final String NODE_FONT_ITALIC = "nodefontitalic";
private static final String SET_NODE_FONT_ITALIC = SET_RESOURCE;
private static final String SET_NODE_TEXT = SET_RESOURCE;
private static final String NODE_TEXT = "nodetext";
private static final String SET_EDGE_WIDTH = SET_RESOURCE;
private static final String EDGE_WIDTH = "edgewidth";
private static final String SET_EDGE_STYLE = SET_RESOURCE;
private static final String EDGE_STYLE = "edgestyle";
private static final String SET_EDGE_COLOR = SET_RESOURCE;
private static final String EDGE_COLOR = "edgecolor";
private static final String CLEAR_ALL_SETTERS = "clear_all_setters";
private static final String SET_ICON = SET_RESOURCE;
private static final String ICON = "icon";
private static final String NODE_NAME = "patternname";
private static final String SET_CHILD_PATTERN = SET_RESOURCE;
private static final String CHILD_PATTERN = "childpattern";
private static final String SET_SCRIPT = "setscript";
private static final String SCRIPT = "script";
private final TextTranslator mTranslator;
private Vector mControls;
private ThreeCheckBoxProperty mSetNodeColor;
private ColorProperty mNodeColor;
private ThreeCheckBoxProperty mSetNodeBackgroundColor;
private ColorProperty mNodeBackgroundColor;
private ThreeCheckBoxProperty mSetNodeStyle;
private ComboProperty mNodeStyle;
private ThreeCheckBoxProperty mSetNodeFontName;
private FontProperty mNodeFontName;
private ThreeCheckBoxProperty mSetNodeFontBold;
private BooleanProperty mNodeFontBold;
private ThreeCheckBoxProperty mSetNodeFontItalic;
private BooleanProperty mNodeFontItalic;
private ThreeCheckBoxProperty mSetNodeFontSize;
private ComboProperty mNodeFontSize;
private ThreeCheckBoxProperty mSetNodeText;
private StringProperty mNodeText;
private ThreeCheckBoxProperty mSetEdgeWidth;
private ComboProperty mEdgeWidth;
private ThreeCheckBoxProperty mSetEdgeStyle;
private ComboProperty mEdgeStyle;
private ThreeCheckBoxProperty mSetEdgeColor;
private ColorProperty mEdgeColor;
private ThreeCheckBoxProperty mSetIcon;
private IconProperty mIcon;
private ThreeCheckBoxProperty mSetChildPattern;
private ComboProperty mChildPattern;
private ThreeCheckBoxProperty mSetScriptPattern;
private ScriptEditorProperty mScriptPattern;
private StringProperty mName;
private Vector mIconInformationVector;
/**
* Denotes pairs property -> ThreeCheckBoxProperty such that the boolean
* property can be set, when the format property is changed.
*/
private HashMap mPropertyChangePropagation = new HashMap();
private ThreeCheckBoxProperty mClearSetters;
private final MindMapController mMindMapController;
private final StylePatternFrameType mType;
/**
* @throws HeadlessException
*/
public StylePatternFrame(TextTranslator pTranslator,
MindMapController pMindMapController, StylePatternFrameType pType)
throws HeadlessException {
super();
mTranslator = pTranslator;
mMindMapController = pMindMapController;
mType = pType;
}
/**
* Creates all controls and adds them to the frame.
*/
public void init() {
CardLayout cardLayout = new CardLayout();
JPanel rightStack = new JPanel(cardLayout);
String form = "right:max(40dlu;p), 4dlu, 20dlu, 7dlu,right:max(40dlu;p), 4dlu, 80dlu, 7dlu";
FormLayout rightLayout = new FormLayout(form, "");
DefaultFormBuilder rightBuilder = new DefaultFormBuilder(rightLayout);
rightBuilder.setDefaultDialogBorder();
mControls = getControls();
for (Iterator i = mControls.iterator(); i.hasNext();) {
PropertyControl control = (PropertyControl) i.next();
control.layout(rightBuilder, this);
}
// add the last one, too
rightStack.add(rightBuilder.getPanel(), "testTab");
add(rightStack, BorderLayout.CENTER);
}
public void addListeners() {
// add listeners:
for (Iterator iter = mControls.iterator(); iter.hasNext();) {
PropertyControl control = (PropertyControl) iter.next();
if (control instanceof PropertyBean) {
PropertyBean bean = (PropertyBean) control;
bean.addPropertyChangeListener(this);
}
}
mClearSetters.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent pEvt) {
for (Iterator iter = mPropertyChangePropagation.keySet()
.iterator(); iter.hasNext();) {
ThreeCheckBoxProperty booleanProp = (ThreeCheckBoxProperty) iter
.next();
booleanProp.setValue(mClearSetters.getValue());
}
}
});
}
private String[] sizes = new String[] { "2", "4", "6", "8", "10", "12",
"14", "16", "18", "20", "22", "24", "30", "36", "48", "72" };
private List mPatternList;
private Vector getControls() {
Vector controls = new Vector();
controls.add(new SeparatorProperty("General"));
mClearSetters = new ThreeCheckBoxProperty(CLEAR_ALL_SETTERS
+ ".tooltip", CLEAR_ALL_SETTERS);
mClearSetters.setValue(ThreeCheckBoxProperty.TRUE_VALUE);
controls.add(mClearSetters);
if (StylePatternFrameType.WITH_NAME_AND_CHILDS.equals(mType)) {
mName = new StringProperty(NODE_NAME + ".tooltip", NODE_NAME);
controls.add(mName);
// child pattern
mSetChildPattern = new ThreeCheckBoxProperty(SET_CHILD_PATTERN
+ ".tooltip", SET_CHILD_PATTERN);
controls.add(mSetChildPattern);
Vector childNames = new Vector();
mChildPattern = new ComboProperty(CHILD_PATTERN + ".tooltip",
CHILD_PATTERN, childNames, childNames);
controls.add(mChildPattern);
}
controls.add(new NextLineProperty());
controls.add(new SeparatorProperty("NodeColors"));
mSetNodeColor = new ThreeCheckBoxProperty(SET_NODE_COLOR + ".tooltip",
SET_NODE_COLOR);
controls.add(mSetNodeColor);
FreeMind fmMain = (FreeMind) mMindMapController.getFrame();
mNodeColor = new ColorProperty(NODE_COLOR + ".tooltip", NODE_COLOR,
fmMain.getDefaultProperty(FreeMind.RESOURCES_NODE_TEXT_COLOR),
this);
controls.add(mNodeColor);
mSetNodeBackgroundColor = new ThreeCheckBoxProperty(
SET_NODE_BACKGROUND_COLOR + ".tooltip",
SET_NODE_BACKGROUND_COLOR);
controls.add(mSetNodeBackgroundColor);
mNodeBackgroundColor = new ColorProperty(NODE_BACKGROUND_COLOR
+ ".tooltip", NODE_BACKGROUND_COLOR,
fmMain.getDefaultProperty(FreeMind.RESOURCES_BACKGROUND_COLOR),
this);
controls.add(mNodeBackgroundColor);
controls.add(new SeparatorProperty("NodeStyles"));
mSetNodeStyle = new ThreeCheckBoxProperty(SET_NODE_STYLE + ".tooltip",
SET_NODE_STYLE);
controls.add(mSetNodeStyle);
mNodeStyle = new ComboProperty(NODE_STYLE + ".tooltip", NODE_STYLE,
MindMapNode.NODE_STYLES, this);
controls.add(mNodeStyle);
mIconInformationVector = new Vector();
MindMapController controller = mMindMapController;
Vector iconActions = controller.iconActions;
for (Enumeration e = iconActions.elements(); e.hasMoreElements();) {
IconAction action = ((IconAction) e.nextElement());
MindIcon info = action.getMindIcon();
mIconInformationVector.add(info);
}
mSetIcon = new ThreeCheckBoxProperty(SET_ICON + ".tooltip", SET_ICON);
controls.add(mSetIcon);
mIcon = new IconProperty(ICON + ".tooltip", ICON,
mMindMapController.getFrame(), mIconInformationVector);
controls.add(mIcon);
controls.add(new NextLineProperty());
controls.add(new SeparatorProperty("NodeFont"));
mSetNodeFontName = new ThreeCheckBoxProperty(SET_NODE_FONT_NAME
+ ".tooltip", SET_NODE_FONT_NAME);
controls.add(mSetNodeFontName);
mNodeFontName = new FontProperty(NODE_FONT_NAME + ".tooltip",
NODE_FONT_NAME, this);
controls.add(mNodeFontName);
mSetNodeFontSize = new ThreeCheckBoxProperty(SET_NODE_FONT_SIZE
+ ".tooltip", SET_NODE_FONT_SIZE);
controls.add(mSetNodeFontSize);
Vector sizesVector = new Vector();
for (int i = 0; i < sizes.length; i++) {
sizesVector.add(sizes[i]);
}
mNodeFontSize = new IntegerComboProperty(NODE_FONT_SIZE + ".tooltip",
NODE_FONT_SIZE, sizes, sizesVector);
controls.add(mNodeFontSize);
mSetNodeFontBold = new ThreeCheckBoxProperty(SET_NODE_FONT_BOLD
+ ".tooltip", SET_NODE_FONT_BOLD);
controls.add(mSetNodeFontBold);
mNodeFontBold = new BooleanProperty(NODE_FONT_BOLD + ".tooltip",
NODE_FONT_BOLD);
controls.add(mNodeFontBold);
mSetNodeFontItalic = new ThreeCheckBoxProperty(SET_NODE_FONT_ITALIC
+ ".tooltip", SET_NODE_FONT_ITALIC);
controls.add(mSetNodeFontItalic);
mNodeFontItalic = new BooleanProperty(NODE_FONT_ITALIC + ".tooltip",
NODE_FONT_ITALIC);
controls.add(mNodeFontItalic);
/* **** */
mSetNodeText = new ThreeCheckBoxProperty(SET_NODE_TEXT + ".tooltip",
SET_NODE_TEXT);
controls.add(mSetNodeText);
mNodeText = new StringProperty(NODE_TEXT + ".tooltip", NODE_TEXT);
controls.add(mNodeText);
/* **** */
controls.add(new SeparatorProperty("EdgeControls"));
mSetEdgeWidth = new ThreeCheckBoxProperty(SET_EDGE_WIDTH + ".tooltip",
SET_EDGE_WIDTH);
controls.add(mSetEdgeWidth);
mEdgeWidth = new ComboProperty(EDGE_WIDTH + ".tooltip", EDGE_WIDTH,
EDGE_WIDTHS, this);
controls.add(mEdgeWidth);
/* **** */
mSetEdgeStyle = new ThreeCheckBoxProperty(SET_EDGE_STYLE + ".tooltip",
SET_EDGE_STYLE);
controls.add(mSetEdgeStyle);
mEdgeStyle = new ComboProperty(EDGE_STYLE + ".tooltip", EDGE_STYLE,
EDGE_STYLES, this);
controls.add(mEdgeStyle);
/* **** */
mSetEdgeColor = new ThreeCheckBoxProperty(SET_EDGE_COLOR + ".tooltip",
SET_EDGE_COLOR);
controls.add(mSetEdgeColor);
mEdgeColor = new ColorProperty(EDGE_COLOR + ".tooltip", EDGE_COLOR,
fmMain.getDefaultProperty(FreeMind.RESOURCES_EDGE_COLOR), this);
controls.add(mEdgeColor);
/* **** */
controls.add(new SeparatorProperty("ScriptingControl"));
mSetScriptPattern = new ThreeCheckBoxProperty(SET_SCRIPT + ".tooltip",
SET_SCRIPT);
controls.add(mSetScriptPattern);
mScriptPattern = new ScriptEditorProperty(SCRIPT + ".tooltip", SCRIPT,
mMindMapController);
controls.add(mScriptPattern);
// fill map;
mPropertyChangePropagation.put(mSetNodeColor, mNodeColor);
mPropertyChangePropagation.put(mSetNodeBackgroundColor,
mNodeBackgroundColor);
mPropertyChangePropagation.put(mSetNodeStyle, mNodeStyle);
mPropertyChangePropagation.put(mSetNodeFontName, mNodeFontName);
mPropertyChangePropagation.put(mSetNodeFontSize, mNodeFontSize);
mPropertyChangePropagation.put(mSetNodeFontBold, mNodeFontBold);
mPropertyChangePropagation.put(mSetNodeFontItalic, mNodeFontItalic);
mPropertyChangePropagation.put(mSetNodeText, mNodeText);
mPropertyChangePropagation.put(mSetEdgeColor, mEdgeColor);
mPropertyChangePropagation.put(mSetEdgeStyle, mEdgeStyle);
mPropertyChangePropagation.put(mSetEdgeWidth, mEdgeWidth);
mPropertyChangePropagation.put(mSetIcon, mIcon);
mPropertyChangePropagation.put(mSetScriptPattern, mScriptPattern);
if (StylePatternFrameType.WITH_NAME_AND_CHILDS.equals(mType)) {
// child pattern
mPropertyChangePropagation.put(mSetChildPattern, mChildPattern);
}
return controls;
}
private Vector getPatternNames() {
Vector childNames = new Vector();
for (Iterator iter = mPatternList.iterator(); iter.hasNext();) {
Pattern pattern = (Pattern) iter.next();
childNames.add(pattern.getName());
}
return childNames;
}
public String getText(String pKey) {
return mTranslator.getText("PatternDialog." + pKey);
}
public void setPattern(Pattern pattern) {
FreeMind fmMain = (FreeMind) mMindMapController.getFrame();
setPatternControls(pattern.getPatternNodeColor(), mSetNodeColor,
mNodeColor,
fmMain.getDefaultProperty(FreeMind.RESOURCES_NODE_TEXT_COLOR));
setPatternControls(pattern.getPatternNodeBackgroundColor(),
mSetNodeBackgroundColor, mNodeBackgroundColor,
fmMain.getDefaultProperty(FreeMind.RESOURCES_BACKGROUND_COLOR));
setPatternControls(pattern.getPatternNodeStyle(), mSetNodeStyle,
mNodeStyle, MindMapNode.STYLE_AS_PARENT);
setPatternControls(pattern.getPatternNodeText(), mSetNodeText,
mNodeText, "");
setPatternControls(pattern.getPatternEdgeColor(), mSetEdgeColor,
mEdgeColor,
fmMain.getDefaultProperty(FreeMind.RESOURCES_EDGE_COLOR));
setPatternControls(pattern.getPatternEdgeStyle(), mSetEdgeStyle,
mEdgeStyle, EDGE_STYLES[0]);
setPatternControls(pattern.getPatternEdgeWidth(), mSetEdgeWidth,
mEdgeWidth, EDGE_WIDTHS[0], new EdgeWidthTransformer());
setPatternControls(pattern.getPatternNodeFontName(), mSetNodeFontName,
mNodeFontName, mMindMapController.getController()
.getDefaultFontFamilyName());
setPatternControls(pattern.getPatternNodeFontSize(), mSetNodeFontSize,
mNodeFontSize, sizes[0]);
setPatternControls(pattern.getPatternNodeFontBold(), mSetNodeFontBold,
mNodeFontBold, BooleanProperty.TRUE_VALUE);
setPatternControls(pattern.getPatternNodeFontItalic(),
mSetNodeFontItalic, mNodeFontItalic, BooleanProperty.TRUE_VALUE);
MindIcon firstInfo = (MindIcon) mIconInformationVector.get(0);
setPatternControls(pattern.getPatternIcon(), mSetIcon, mIcon,
firstInfo.getName());
setPatternControls(pattern.getPatternScript(), mSetScriptPattern,
mScriptPattern, "");
if (StylePatternFrameType.WITH_NAME_AND_CHILDS.equals(mType)) {
mName.setValue(pattern.getName());
setPatternControls(
pattern.getPatternChild(),
mSetChildPattern,
mChildPattern,
(mPatternList.size() > 0) ? ((Pattern) mPatternList.get(0))
.getName() : null);
}
for (Iterator iter = mPropertyChangePropagation.keySet().iterator(); iter
.hasNext();) {
ThreeCheckBoxProperty prop = (ThreeCheckBoxProperty) iter.next();
propertyChange(new PropertyChangeEvent(prop, prop.getLabel(), null,
prop.getValue()));
}
}
private interface ValueTransformator {
String transform(String value);
}
private final class IdentityTransformer implements ValueTransformator {
public String transform(String value) {
return value;
}
}
private final class EdgeWidthTransformer implements ValueTransformator {
public String transform(String value) {
return transformEdgeWidth(value);
}
}
private final class EdgeWidthBackTransformer implements ValueTransformator {
public String transform(String value) {
return transformStringToWidth(value);
}
}
private void setPatternControls(PatternPropertyBase patternProperty,
PropertyBean threeCheckBoxProperty, PropertyBean property,
String defaultValue) {
setPatternControls(patternProperty, threeCheckBoxProperty, property,
defaultValue, new IdentityTransformer());
}
/**
*/
private void setPatternControls(PatternPropertyBase patternProperty,
PropertyBean threeCheckBoxProperty, PropertyBean property,
String defaultValue, ValueTransformator transformer) {
if (patternProperty == null) {
// value is not set:
property.setValue(defaultValue);
threeCheckBoxProperty
.setValue(ThreeCheckBoxProperty.DON_T_TOUCH_VALUE);
return;
}
if (patternProperty.getValue() == null) {
// remove prop:
property.setValue(defaultValue);
threeCheckBoxProperty.setValue(ThreeCheckBoxProperty.FALSE_VALUE);
return;
}
property.setValue(transformer.transform(patternProperty.getValue()));
threeCheckBoxProperty.setValue(ThreeCheckBoxProperty.TRUE_VALUE);
}
private String transformEdgeWidth(String pEdgeWidth) {
if (pEdgeWidth == null)
return null;
int edgeWidth = ApplyPatternAction.edgeWidthStringToInt(pEdgeWidth);
HashMap transformator = getEdgeWidthTransformation();
for (Iterator iter = transformator.keySet().iterator(); iter.hasNext();) {
String widthString = (String) iter.next();
Integer width = (Integer) transformator.get(widthString);
if (edgeWidth == width.intValue()) {
return widthString;
}
}
// not found:
return null;
}
private String transformStringToWidth(String value) {
HashMap transformator = getEdgeWidthTransformation();
int intWidth = ((Integer) transformator.get(value)).intValue();
return ApplyPatternAction.edgeWidthIntToString(intWidth);
}
private HashMap getEdgeWidthTransformation() {
HashMap transformator = new HashMap();
transformator
.put(EDGE_WIDTHS[0], new Integer(EdgeAdapter.WIDTH_PARENT));
transformator.put(EDGE_WIDTHS[1], new Integer(EdgeAdapter.WIDTH_THIN));
transformator.put(EDGE_WIDTHS[2], new Integer(1));
transformator.put(EDGE_WIDTHS[3], new Integer(2));
transformator.put(EDGE_WIDTHS[4], new Integer(4));
transformator.put(EDGE_WIDTHS[5], new Integer(8));
return transformator;
}
public Pattern getResultPattern() {
Pattern pattern = new Pattern();
return getResultPattern(pattern);
}
public Pattern getResultPattern(Pattern pattern) {
pattern.setPatternNodeColor((PatternNodeColor) getPatternResult(
new PatternNodeColor(), mSetNodeColor, mNodeColor));
pattern.setPatternNodeBackgroundColor((PatternNodeBackgroundColor) getPatternResult(
new PatternNodeBackgroundColor(), mSetNodeBackgroundColor,
mNodeBackgroundColor));
pattern.setPatternNodeStyle((PatternNodeStyle) getPatternResult(
new PatternNodeStyle(), mSetNodeStyle, mNodeStyle));
pattern.setPatternNodeText((PatternNodeText) getPatternResult(
new PatternNodeText(), mSetNodeText, mNodeText));
/* edges */
pattern.setPatternEdgeColor((PatternEdgeColor) getPatternResult(
new PatternEdgeColor(), mSetEdgeColor, mEdgeColor));
pattern.setPatternEdgeStyle((PatternEdgeStyle) getPatternResult(
new PatternEdgeStyle(), mSetEdgeStyle, mEdgeStyle));
pattern.setPatternEdgeWidth((PatternEdgeWidth) getPatternResult(
new PatternEdgeWidth(), mSetEdgeWidth, mEdgeWidth,
new EdgeWidthBackTransformer()));
/* font */
pattern.setPatternNodeFontName((PatternNodeFontName) getPatternResult(
new PatternNodeFontName(), mSetNodeFontName, mNodeFontName));
pattern.setPatternNodeFontSize((PatternNodeFontSize) getPatternResult(
new PatternNodeFontSize(), mSetNodeFontSize, mNodeFontSize));
pattern.setPatternNodeFontBold((PatternNodeFontBold) getPatternResult(
new PatternNodeFontBold(), mSetNodeFontBold, mNodeFontBold));
pattern.setPatternNodeFontItalic((PatternNodeFontItalic) getPatternResult(
new PatternNodeFontItalic(), mSetNodeFontItalic,
mNodeFontItalic));
pattern.setPatternIcon((PatternIcon) getPatternResult(
new PatternIcon(), mSetIcon, mIcon));
pattern.setPatternScript((PatternScript) getPatternResult(
new PatternScript(), mSetScriptPattern, mScriptPattern));
if (StylePatternFrameType.WITH_NAME_AND_CHILDS.equals(mType)) {
pattern.setName(mName.getValue());
pattern.setPatternChild((PatternChild) getPatternResult(
new PatternChild(), mSetChildPattern, mChildPattern));
}
return pattern;
}
private PatternPropertyBase getPatternResult(
PatternPropertyBase baseProperty,
ThreeCheckBoxProperty threeCheckBoxProperty, PropertyBean property) {
ValueTransformator transformer = new IdentityTransformer();
return getPatternResult(baseProperty, threeCheckBoxProperty, property,
transformer);
}
/**
*/
private PatternPropertyBase getPatternResult(
PatternPropertyBase baseProperty,
ThreeCheckBoxProperty threeCheckBoxProperty, PropertyBean property,
ValueTransformator transformer) {
String checkboxResult = threeCheckBoxProperty.getValue();
if (checkboxResult == null) {
return null;
}
if (checkboxResult.equals(ThreeCheckBoxProperty.DON_T_TOUCH_VALUE)) {
return null;
}
if (checkboxResult.equals(ThreeCheckBoxProperty.FALSE_VALUE)) {
// remove property:
return baseProperty;
}
baseProperty.setValue(transformer.transform(property.getValue()));
return baseProperty;
}
/**
* Used to enable/disable the attribute controls, if the check boxes are
* changed.
*/
public void propertyChange(PropertyChangeEvent pEvt) {
// System.out.println("Propagation of "+ pEvt.getPropertyName()
// + " with value " + pEvt.getNewValue() + " and source " +
// pEvt.getSource());
if (mPropertyChangePropagation.containsKey(pEvt.getSource())) {
ThreeCheckBoxProperty booleanProp = (ThreeCheckBoxProperty) pEvt
.getSource();
// enable only when set:
PropertyControl bean = (PropertyControl) mPropertyChangePropagation
.get(booleanProp);
bean.setEnabled(ThreeCheckBoxProperty.TRUE_VALUE.equals(booleanProp
.getValue()));
return;
}
}
/**
* For the child pattern box, the list is set here.
*
*/
public void setPatternList(List patternList) {
this.mPatternList = patternList;
Vector childNames = getPatternNames();
mChildPattern.updateComboBoxEntries(childNames, childNames);
}
}