-ComponentType (java.lang.String name,
+ComponentType (java.lang.String name,
java.lang.String description,
CreationMethod creationMethod,
java.lang.String category,
@@ -213,7 +217,7 @@ Uses of BomPolicy bomPolicy,
boolean autoEdit,
boolean rotatable,
- java.lang.String autoCreateName)
+ IAutoCreator autoCreator)
@@ -383,6 +387,47 @@ Uses of
+
+
+
+
+
+
+
+
+
+
+
diff --git a/diylc/diylc-core/doc/org/diylc/core/package-use.html b/diylc/diylc-core/doc/org/diylc/core/package-use.html
index 6c38d045..a36445f9 100644
--- a/diylc/diylc-core/doc/org/diylc/core/package-use.html
+++ b/diylc/diylc-core/doc/org/diylc/core/package-use.html
@@ -2,12 +2,12 @@
-
+
Uses of Package org.diylc.core
-
+
@@ -280,6 +280,12 @@ Classes in org.diylc.core
Classes in org.diylc.core used by org.diylc.core.annotations
+IDIYComponent
+
+
+ Interface for component instance.
+
+
IPropertyValidator
diff --git a/diylc/diylc-core/doc/org/diylc/presenter/Presenter.html b/diylc/diylc-core/doc/org/diylc/presenter/Presenter.html
index 27a6e87d..bd2012f6 100644
--- a/diylc/diylc-core/doc/org/diylc/presenter/Presenter.html
+++ b/diylc/diylc-core/doc/org/diylc/presenter/Presenter.html
@@ -2,12 +2,12 @@
-
+
Presenter
-
+
@@ -181,7 +181,7 @@ The main presenter class, contains core app logic and drawing routines.
Fields inherited from interface org.diylc.common.IPlugInPort
-ABNORMAL_EXIT_KEY , ANTI_ALIASING_KEY , AUTO_EDIT_KEY , AUTO_PADS_KEY , BUTTON1 , BUTTON2 , BUTTON3 , CONTINUOUS_CREATION_KEY , DND_TOGGLE_SNAP , DND_TOGGLE_STICKY , EXPORT_GRID_KEY , HI_QUALITY_RENDER_KEY , METRIC_KEY , NOBUTTON , OUTLINE_KEY , RECENT_COMPONENTS_KEY , SNAP_TO_GRID_KEY , STICKY_POINTS_KEY , THEME_KEY , WHEEL_ZOOM_KEY
+ABNORMAL_EXIT_KEY , ANTI_ALIASING_KEY , AUTO_EDIT_KEY , BUTTON1 , BUTTON2 , BUTTON3 , CONTINUOUS_CREATION_KEY , DND_TOGGLE_SNAP , DND_TOGGLE_STICKY , EXPORT_GRID_KEY , HI_QUALITY_RENDER_KEY , METRIC_KEY , NOBUTTON , OUTLINE_KEY , RECENT_COMPONENTS_KEY , SNAP_TO_GRID_KEY , STICKY_POINTS_KEY , THEME_KEY , WHEEL_ZOOM_KEY
@@ -378,6 +378,14 @@ The main presenter class, contains core app logic and drawing routines.
+
java.lang.Double[]
getAvailableZoomLevels ()
@@ -1076,6 +1084,20 @@ public java.util.Map<java.lang.String,java.util.List<
+getAutoCreators
+
+public java.util.List<IAutoCreator > getAutoCreators ()
+
+
+
+
+
+
+
+
+
+
draw
diff --git a/diylc/diylc-core/doc/overview-frame.html b/diylc/diylc-core/doc/overview-frame.html
index 5b5e39b4..194a17fc 100644
--- a/diylc/diylc-core/doc/overview-frame.html
+++ b/diylc/diylc-core/doc/overview-frame.html
@@ -2,12 +2,12 @@
-
+
Overview List
-
+
diff --git a/diylc/diylc-core/doc/overview-summary.html b/diylc/diylc-core/doc/overview-summary.html
index d46ef74a..b63cdf2f 100644
--- a/diylc/diylc-core/doc/overview-summary.html
+++ b/diylc/diylc-core/doc/overview-summary.html
@@ -2,12 +2,12 @@
-
+
Overview
-
+
diff --git a/diylc/diylc-core/doc/overview-tree.html b/diylc/diylc-core/doc/overview-tree.html
index 69d4695f..59cfa99b 100644
--- a/diylc/diylc-core/doc/overview-tree.html
+++ b/diylc/diylc-core/doc/overview-tree.html
@@ -2,12 +2,12 @@
-
+
Class Hierarchy
-
+
@@ -127,7 +127,7 @@ Class Hierarchy
Interface Hierarchy
-org.diylc.plugins.cloud.presenter.CloudListener org.diylc.announcements.IAnnouncementService org.diylc.common.IComponentFiler org.diylc.core.IDrawingObserver org.diylc.common.IKeyProcessor
+org.diylc.plugins.cloud.presenter.CloudListener org.diylc.announcements.IAnnouncementService org.diylc.core.annotations.IAutoCreator org.diylc.common.IComponentFiler org.diylc.core.IDrawingObserver org.diylc.common.IKeyProcessor
org.diylc.appframework.simplemq.IMessageListener<E>
@@ -148,7 +148,7 @@ Interface Hierarchy
Annotation Type Hierarchy
-org.diylc.core.annotations.AutoCreated (implements java.lang.annotation.Annotation)
+ org.diylc.core.annotations.AutoCreator (implements java.lang.annotation.Annotation)
org.diylc.core.annotations.ComponentDescriptor (implements java.lang.annotation.Annotation)
org.diylc.core.annotations.EditableProperty (implements java.lang.annotation.Annotation)
@@ -159,7 +159,7 @@ Enum Hierarchy
java.lang.Object
java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
-org.diylc.common.Display org.diylc.common.DrawOption org.diylc.common.EventType org.diylc.common.GridType org.diylc.common.HorizontalAlignment org.diylc.common.LabelPosition org.diylc.common.Orientation org.diylc.common.OrientationHV org.diylc.common.PCBLayer org.diylc.common.ResistorColorCode org.diylc.common.VerticalAlignment org.diylc.core.ComponentState org.diylc.core.CreationMethod org.diylc.core.ExpansionMode org.diylc.core.VisibilityPolicy org.diylc.core.annotations.BomPolicy org.diylc.core.measures.CapacitanceUnit (implements org.diylc.core.measures.Unit )
+ org.diylc.common.Display org.diylc.common.DrawOption org.diylc.common.EventType org.diylc.common.GridType org.diylc.common.HorizontalAlignment org.diylc.common.LabelPosition org.diylc.common.Orientation org.diylc.common.OrientationHV org.diylc.common.PCBLayer org.diylc.common.ResistorColorCode org.diylc.common.VerticalAlignment org.diylc.core.ComponentState org.diylc.core.CreationMethod org.diylc.core.ExpansionMode org.diylc.core.VisibilityPolicy org.diylc.core.annotations.BomPolicy org.diylc.core.annotations.KeywordPolicy org.diylc.core.measures.CapacitanceUnit (implements org.diylc.core.measures.Unit )
org.diylc.core.measures.CurrentUnit (implements org.diylc.core.measures.Unit )
org.diylc.core.measures.InductanceUnit (implements org.diylc.core.measures.Unit )
org.diylc.core.measures.PowerUnit (implements org.diylc.core.measures.Unit )
diff --git a/diylc/diylc-core/doc/serialized-form.html b/diylc/diylc-core/doc/serialized-form.html
index 34c5fcc9..cdcf757a 100644
--- a/diylc/diylc-core/doc/serialized-form.html
+++ b/diylc/diylc-core/doc/serialized-form.html
@@ -2,12 +2,12 @@
-
+
Serialized Form
-
+
diff --git a/diylc/diylc-core/src/org/diylc/common/ComponentType.java b/diylc/diylc-core/src/org/diylc/common/ComponentType.java
index 5a3240fb..9837bbe8 100644
--- a/diylc/diylc-core/src/org/diylc/common/ComponentType.java
+++ b/diylc/diylc-core/src/org/diylc/common/ComponentType.java
@@ -4,8 +4,8 @@ import javax.swing.Icon;
import org.diylc.core.CreationMethod;
import org.diylc.core.IDIYComponent;
-import org.diylc.core.annotations.AutoCreateTag;
import org.diylc.core.annotations.BomPolicy;
+import org.diylc.core.annotations.IAutoCreator;
/**
* Entity class used to describe a component type.
@@ -30,12 +30,12 @@ public class ComponentType {
private BomPolicy bomPolicy;
private boolean autoEdit;
private boolean rotatable;
- private AutoCreateTag autoCreateTag;
+ private IAutoCreator autoCreator;
public ComponentType(String name, String description, CreationMethod creationMethod, String category,
String namePrefix, String author, Icon icon, Class extends IDIYComponent>> instanceClass, double zOrder,
boolean flexibleZOrder, boolean stretchable, BomPolicy bomPolicy, boolean autoEdit, boolean rotatable,
- AutoCreateTag autoCreateTag) {
+ IAutoCreator autoCreator) {
super();
this.name = name;
this.description = description;
@@ -51,7 +51,7 @@ public class ComponentType {
this.bomPolicy = bomPolicy;
this.autoEdit = autoEdit;
this.rotatable = rotatable;
- this.autoCreateTag = autoCreateTag;
+ this.autoCreator = autoCreator;
}
public String getName() {
@@ -110,8 +110,8 @@ public class ComponentType {
return rotatable;
}
- public AutoCreateTag getAutoCreateTag() {
- return autoCreateTag;
+ public IAutoCreator getAutoCreateor() {
+ return autoCreator;
}
@Override
diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java
index f7ea4815..c9994252 100644
--- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java
+++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java
@@ -36,8 +36,7 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP
public static final String EXPORT_GRID_KEY = "exportGrid";
public static final String STICKY_POINTS_KEY = "stickyPoints";
public static final String METRIC_KEY = "metric";
- public static final String SNAP_TO_GRID_KEY = "snapToGrid";
- public static final String AUTO_PADS_KEY = "autoCreatePads";
+ public static final String SNAP_TO_GRID_KEY = "snapToGrid";
public static final String CONTINUOUS_CREATION_KEY = "continuousCreation";
public static final String AUTO_EDIT_KEY = "autoEdit";
public static final String ABNORMAL_EXIT_KEY = "abnormalExit";
diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreateTag.java b/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreateTag.java
deleted file mode 100644
index 2f388281..00000000
--- a/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreateTag.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.diylc.core.annotations;
-
-public enum AutoCreateTag {
- NONE, SOLDER_PAD
-}
diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreator.java b/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreator.java
new file mode 100644
index 00000000..27da163b
--- /dev/null
+++ b/diylc/diylc-core/src/org/diylc/core/annotations/AutoCreator.java
@@ -0,0 +1,9 @@
+package org.diylc.core.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AutoCreator {
+ public Class extends IAutoCreator> creatorClass();
+}
diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java b/diylc/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java
index 4b4c1c8e..6a0d6d7e 100644
--- a/diylc/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java
+++ b/diylc/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java
@@ -80,8 +80,6 @@ public @interface ComponentDescriptor {
*/
boolean rotatable() default true;
- AutoCreateTag autoCreateTag() default AutoCreateTag.NONE;
-
KeywordPolicy keywordPolicy() default KeywordPolicy.NEVER_SHOW;
}
diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/IAutoCreator.java b/diylc/diylc-core/src/org/diylc/core/annotations/IAutoCreator.java
new file mode 100644
index 00000000..2785a053
--- /dev/null
+++ b/diylc/diylc-core/src/org/diylc/core/annotations/IAutoCreator.java
@@ -0,0 +1,10 @@
+package org.diylc.core.annotations;
+
+import java.util.List;
+
+import org.diylc.core.IDIYComponent;
+
+public interface IAutoCreator {
+
+ public List> createIfNeeded(IDIYComponent> lastAdded);
+}
diff --git a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java
index 5a210aaf..03e1c6ec 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java
+++ b/diylc/diylc-core/src/org/diylc/presenter/ComponentProcessor.java
@@ -20,10 +20,11 @@ import org.diylc.common.PropertyWrapper;
import org.diylc.core.CreationMethod;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IPropertyValidator;
-import org.diylc.core.annotations.AutoCreateTag;
+import org.diylc.core.annotations.AutoCreator;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
+import org.diylc.core.annotations.IAutoCreator;
/**
* Utility class with component processing methods.
@@ -71,7 +72,7 @@ public class ComponentProcessor {
BomPolicy bomPolicy;
boolean autoEdit;
boolean rotatable;
- AutoCreateTag autoCreateTag = null;
+ IAutoCreator autoCreator = null;
if (clazz.isAnnotationPresent(ComponentDescriptor.class)) {
ComponentDescriptor annotation = clazz.getAnnotation(ComponentDescriptor.class);
name = annotation.name();
@@ -86,7 +87,6 @@ public class ComponentProcessor {
bomPolicy = annotation.bomPolicy();
autoEdit = annotation.autoEdit();
rotatable = annotation.rotatable();
- autoCreateTag = annotation.autoCreateTag();
} else {
name = clazz.getSimpleName();
description = "";
@@ -100,7 +100,14 @@ public class ComponentProcessor {
bomPolicy = BomPolicy.SHOW_ALL_NAMES;
autoEdit = true;
rotatable = true;
- autoCreateTag = AutoCreateTag.NONE;
+ }
+ if (clazz.isAnnotationPresent(AutoCreator.class)) {
+ AutoCreator annotation = clazz.getAnnotation(AutoCreator.class);
+ try {
+ autoCreator = annotation.creatorClass().newInstance();
+ } catch (Exception e) {
+ LOG.error("Could not instantiate auto-creator for " + name, e);
+ }
}
icon = null;
// Draw component icon.
@@ -120,7 +127,7 @@ public class ComponentProcessor {
}
ComponentType componentType =
new ComponentType(name, description, creationMethod, category, namePrefix, author, icon, clazz, zOrder,
- flexibleZOrder, stretchable, bomPolicy, autoEdit, rotatable, autoCreateTag);
+ flexibleZOrder, stretchable, bomPolicy, autoEdit, rotatable, autoCreator);
componentTypeMap.put(clazz.getName(), componentType);
return componentType;
}
diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java
index 8b598724..d7579c34 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java
+++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java
@@ -50,7 +50,7 @@ import org.diylc.core.IView;
import org.diylc.core.Project;
import org.diylc.core.Template;
import org.diylc.core.Theme;
-import org.diylc.core.annotations.AutoCreateTag;
+import org.diylc.core.annotations.IAutoCreator;
import org.diylc.core.measures.SizeUnit;
import org.diylc.utils.Constants;
@@ -91,7 +91,7 @@ public class Presenter implements IPlugInPort {
/**
* {@link ComponentType}s that can be autocreated, like Solder Pads
*/
- private Map autoCreateTypes;
+ private List autoCreators;
// Maps component class names to ComponentType objects.
private List plugIns;
@@ -352,19 +352,20 @@ public class Presenter implements IPlugInPort {
return componentTypes;
}
- private Map getAutoCreateTypes() {
- if (autoCreateTypes == null) {
- autoCreateTypes = new HashMap();
+ public List getAutoCreators() {
+ if (autoCreators == null) {
+ autoCreators = new ArrayList();
for (Map.Entry> entry : getComponentTypes().entrySet()) {
for (ComponentType t : entry.getValue()) {
- if (t.getAutoCreateTag() != null)
- autoCreateTypes.put(t.getAutoCreateTag(), t);
+ if (t.getAutoCreateor() != null)
+ autoCreators.add(t.getAutoCreateor());
}
}
}
- return autoCreateTypes;
+ return autoCreators;
}
+
@Override
public void draw(Graphics2D g2d, Set drawOptions, IComponentFiler filter) {
if (currentProject == null) {
@@ -1623,7 +1624,7 @@ public class Presenter implements IPlugInPort {
* @param component
*/
@SuppressWarnings("unchecked")
- private void addComponent(IDIYComponent> component, boolean canCreatePads) {
+ private void addComponent(IDIYComponent> component, boolean alowAutoCreate) {
int index = currentProject.getComponents().size();
while (index > 0
&& ComponentProcessor.getInstance()
@@ -1640,21 +1641,12 @@ public class Presenter implements IPlugInPort {
currentProject.getComponents().add(component);
}
- ComponentType padType = getAutoCreateTypes().get(AutoCreateTag.SOLDER_PAD);
- if (canCreatePads && ConfigurationManager.getInstance().readBoolean(IPlugInPort.AUTO_PADS_KEY, false)
- && padType != null && !(component.getClass().equals(padType.getInstanceClass()))) {
- for (int i = 0; i < component.getControlPointCount(); i++) {
- if (component.isControlPointSticky(i)) {
- try {
- IDIYComponent> pad =
- instantiationManager.instantiateComponent(padType, null, component.getControlPoint(i), currentProject)
- .get(0);
- pad.setControlPoint(component.getControlPoint(i), 0);
- addComponent(pad, false);
- } catch (Exception e) {
- LOG.warn("Could not auto-create solder pad", e);
- }
- }
+ // Check if we should auto-create something.
+ for (IAutoCreator creator : this.getAutoCreators()) {
+ List> newComponents = creator.createIfNeeded(component);
+ if (newComponents != null) {
+ for(IDIYComponent> c : newComponents)
+ addComponent(c, false);
}
}
}
diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java
index 8f6ca49f..bc54a6bb 100644
--- a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java
+++ b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java
@@ -11,7 +11,7 @@ import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project;
import org.diylc.core.VisibilityPolicy;
-import org.diylc.core.annotations.AutoCreateTag;
+import org.diylc.core.annotations.AutoCreator;
import org.diylc.core.annotations.BomPolicy;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
@@ -20,12 +20,13 @@ import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit;
import org.diylc.utils.Constants;
+@AutoCreator(creatorClass = SolderPadAutoCreator.class)
@ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic",
description = "Copper solder pad, round or square", instanceNamePrefix = "Pad", stretchable = false,
- zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, autoCreateTag = AutoCreateTag.SOLDER_PAD)
+ zOrder = IDIYComponent.TRACE + 0.1, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false)
public class SolderPad extends AbstractComponent {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static Size SIZE = new Size(0.09d, SizeUnit.in);
public static Size HOLE_SIZE = new Size(0.8d, SizeUnit.mm);
diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPadAutoCreator.java b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPadAutoCreator.java
new file mode 100644
index 00000000..7645293f
--- /dev/null
+++ b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPadAutoCreator.java
@@ -0,0 +1,40 @@
+package org.diylc.components.connectivity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.diylc.appframework.miscutils.ConfigurationManager;
+import org.diylc.core.IDIYComponent;
+import org.diylc.core.annotations.IAutoCreator;
+
+public class SolderPadAutoCreator implements IAutoCreator {
+
+ private static final Logger LOG = Logger.getLogger(SolderPadAutoCreator.class);
+
+ public static final String AUTO_PADS_KEY = "autoCreatePads";
+
+ @Override
+ public List> createIfNeeded(IDIYComponent> lastAdded) {
+ if (ConfigurationManager.getInstance().readBoolean(AUTO_PADS_KEY, false)
+ && !(lastAdded.getClass().equals(SolderPad.class))) {
+ List> res = new ArrayList>();
+ for (int i = 0; i < lastAdded.getControlPointCount(); i++) {
+ if (lastAdded.isControlPointSticky(i)) {
+ try {
+ SolderPad pad = new SolderPad();
+ // instantiationManager.instantiateComponent(padType, null,
+ // component.getControlPoint(i), currentProject)
+ // .get(0);
+ pad.setControlPoint(lastAdded.getControlPoint(i), 0);
+ res.add(pad);
+ } catch (Exception e) {
+ LOG.warn("Could not auto-create solder pad", e);
+ }
+ }
+ }
+ return res;
+ }
+ return null;
+ }
+}
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java
index 65c88358..93769cff 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java
@@ -9,6 +9,8 @@ import org.apache.log4j.Logger;
import org.diylc.common.EventType;
import org.diylc.common.IPlugIn;
import org.diylc.common.IPlugInPort;
+import org.diylc.components.connectivity.SolderPad;
+import org.diylc.components.connectivity.SolderPadAutoCreator;
import org.diylc.core.Theme;
import org.diylc.images.IconLoader;
import org.diylc.swing.ActionFactory;
@@ -43,7 +45,7 @@ public class ConfigPlugin implements IPlugIn {
.createConfigAction(plugInPort, "Anti-Aliasing", IPlugInPort.ANTI_ALIASING_KEY, true), CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance()
- .createConfigAction(plugInPort, "Auto-Create Pads", IPlugInPort.AUTO_PADS_KEY, false), CONFIG_MENU);
+ .createConfigAction(plugInPort, "Auto-Create Pads", SolderPadAutoCreator.AUTO_PADS_KEY, false), CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Auto-Edit Mode", IPlugInPort.AUTO_EDIT_KEY, true),
CONFIG_MENU);