diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/app-framework.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/app-framework.jar new file mode 100644 index 00000000..efcbe984 Binary files /dev/null and b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/app-framework.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ComponentType.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ComponentType.java index 19c546b4..effcd692 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ComponentType.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ComponentType.java @@ -27,11 +27,12 @@ public class ComponentType { private boolean flexibleZOrder; private boolean stretchable; private BomPolicy bomPolicy; + private boolean autoEdit; public ComponentType(String name, String description, CreationMethod creationMethod, String category, String namePrefix, String author, Icon icon, Class> instanceClass, double zOrder, boolean flexibleZOrder, - boolean stretchable, BomPolicy bomPolicy) { + boolean stretchable, BomPolicy bomPolicy, boolean autoEdit) { super(); this.name = name; this.description = description; @@ -45,6 +46,7 @@ public class ComponentType { this.flexibleZOrder = flexibleZOrder; this.stretchable = stretchable; this.bomPolicy = bomPolicy; + this.autoEdit = autoEdit; } public String getName() { @@ -94,6 +96,10 @@ public class ComponentType { public BomPolicy getBomPolicy() { return bomPolicy; } + + public boolean isAutoEdit() { + return autoEdit; + } @Override public String toString() { diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java index b85357a0..a4fa6880 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/annotations/ComponentDescriptor.java @@ -71,4 +71,10 @@ public @interface ComponentDescriptor { */ BomPolicy bomPolicy() default BomPolicy.SHOW_ALL_NAMES; + /** + * @return when true, component editor dialog should be shown in Auto-Edit + * mode. + */ + boolean autoEdit() default true; + } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ComponentProcessor.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ComponentProcessor.java index 1050b478..7278b861 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ComponentProcessor.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ComponentProcessor.java @@ -70,6 +70,7 @@ public class ComponentProcessor { boolean flexibleZOrder; boolean stretchable; BomPolicy bomPolicy; + boolean autoEdit; if (clazz.isAnnotationPresent(ComponentDescriptor.class)) { ComponentDescriptor annotation = clazz .getAnnotation(ComponentDescriptor.class); @@ -83,6 +84,7 @@ public class ComponentProcessor { flexibleZOrder = annotation.flexibleZOrder(); stretchable = annotation.stretchable(); bomPolicy = annotation.bomPolicy(); + autoEdit = annotation.autoEdit(); } else { name = clazz.getSimpleName(); description = ""; @@ -94,6 +96,7 @@ public class ComponentProcessor { flexibleZOrder = false; stretchable = true; bomPolicy = BomPolicy.SHOW_ALL_NAMES; + autoEdit = true; } icon = null; // Draw component icon. @@ -114,7 +117,7 @@ public class ComponentProcessor { } ComponentType componentType = new ComponentType(name, description, creationMethod, category, namePrefix, author, icon, clazz, - zOrder, flexibleZOrder, stretchable, bomPolicy); + zOrder, flexibleZOrder, stretchable, bomPolicy, autoEdit); componentTypeMap.put(clazz.getName(), componentType); return componentType; } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java index 61e7f4fb..706c991a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java @@ -57,7 +57,7 @@ public class Presenter implements IPlugInPort { private static final Logger LOG = Logger.getLogger(Presenter.class); public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, - 11, 0); + 12, 0); public static final String DEFAULTS_KEY_PREFIX = "default."; public static final List> EMPTY_SELECTION = Collections @@ -436,8 +436,9 @@ public class Presenter implements IPlugInPort { .getName(), e); } - if (ConfigurationManager.getInstance().readBoolean( - IPlugInPort.AUTO_EDIT_KEY, false)) { + if (componentTypeSlot.isAutoEdit() + && ConfigurationManager.getInstance().readBoolean( + IPlugInPort.AUTO_EDIT_KEY, false)) { editSelection(); } if (ConfigurationManager.getInstance().readBoolean( @@ -484,8 +485,10 @@ public class Presenter implements IPlugInPort { updateSelection(newSelection); messageDispatcher.dispatchMessage(EventType.REPAINT); - if (ConfigurationManager.getInstance().readBoolean( - IPlugInPort.AUTO_EDIT_KEY, false)) { + if (componentTypeSlot.isAutoEdit() + && ConfigurationManager.getInstance() + .readBoolean(IPlugInPort.AUTO_EDIT_KEY, + false)) { editSelection(); } if (ConfigurationManager.getInstance().readBoolean( @@ -1541,8 +1544,8 @@ public class Presenter implements IPlugInPort { .getInstance() .extractComponentTypeFrom( (Class>) currentProject - .getComponents().get(index - 1).getClass()) - .getZOrder()) { + .getComponents().get(index - 1) + .getClass()).getZOrder()) { index--; } if (index < currentProject.getComponents().size()) { diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/utils/BomMaker.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/utils/BomMaker.java index a5a29289..3a65a20f 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/utils/BomMaker.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/utils/BomMaker.java @@ -4,8 +4,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.diylc.common.ComponentType; import org.diylc.core.IDIYComponent; @@ -27,8 +30,33 @@ public class BomMaker { } public List createBom(List> components) { - Map entryMap = new HashMap(); - for (IDIYComponent component : components) { + Map entryMap = new LinkedHashMap(); + List> sortedComponents = new ArrayList>( + components); + Collections.sort(sortedComponents, new Comparator>() { + + @Override + public int compare(IDIYComponent o1, IDIYComponent o2) { + String name1 = o1.getName(); + String name2 = o2.getName(); + Pattern p = Pattern.compile("(\\D*)(\\d*)"); + Matcher m1 = p.matcher(name1); + Matcher m2 = p.matcher(name2); + if (m1.matches() && m2.matches()) { + String prefix1 = m1.group(1); + int value1 = Integer.parseInt(m1.group(2)); + String prefix2 = m2.group(1); + int value2 = Integer.parseInt(m2.group(2)); + int compare = prefix1.compareToIgnoreCase(prefix2); + if (compare != 0) { + return compare; + } + return new Integer(value1).compareTo(value2); + } + return 0; + } + }); + for (IDIYComponent component : sortedComponents) { ComponentType type = ComponentProcessor.getInstance() .extractComponentTypeFrom( (Class>) component @@ -45,7 +73,7 @@ public class BomMaker { entry.setQuantity(entry.getQuantity() + 1); if (type.getBomPolicy() == BomPolicy.SHOW_ALL_NAMES) { entry.setName(entry.getName() + ", " + name); - } + } } else { entryMap.put(key, new BomEntry(type.getName(), type .getBomPolicy() == BomPolicy.SHOW_ALL_NAMES ? name @@ -54,17 +82,6 @@ public class BomMaker { } } List bom = new ArrayList(entryMap.values()); - Collections.sort(bom, new Comparator() { - - @Override - public int compare(BomEntry o1, BomEntry o2) { - int compare = o1.getName().compareToIgnoreCase(o2.getName()); - if (compare != 0) { - return compare; - } - return o1.getValue().compareToIgnoreCase(o2.getValue()); - } - }); return bom; } }