diff --git a/diylc/diylc-core/src/org/diylc/core/annotations/PercentEditor.java b/diylc/diylc-core/src/org/diylc/core/annotations/PercentEditor.java new file mode 100644 index 00000000..c89dd919 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/annotations/PercentEditor.java @@ -0,0 +1,10 @@ +package org.diylc.core.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface PercentEditor { + + public byte _100PercentValue(); +} diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index eb443f00..1dd5bfe0 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/misc/Image.java b/diylc/diylc-library/src/org/diylc/components/misc/Image.java index 2d77edb4..8110084c 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/Image.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/Image.java @@ -19,6 +19,7 @@ import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.BomPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.PercentEditor; import com.thoughtworks.xstream.annotations.XStreamConverter; @@ -43,7 +44,7 @@ public class Image extends AbstractTransparentComponent { private Point point = new Point(0, 0); @XStreamConverter(IconImageConverter.class) private ImageIcon image = ICON; - private byte scale = 50; + private byte scale = DEFAULT_SCALE; @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, @@ -108,6 +109,7 @@ public class Image extends AbstractTransparentComponent { this.image = image; } + @PercentEditor(_100PercentValue = 50) @EditableProperty(defaultable = false) public byte getScale() { return scale; diff --git a/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java b/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java index 704cfdce..c8e66640 100644 --- a/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/smd/PassiveSMDComponent.java @@ -24,6 +24,8 @@ import org.diylc.core.Project; import org.diylc.core.Theme; import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.PositiveMeasureValidator; +import org.diylc.core.measures.Capacitance; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; @@ -165,26 +167,26 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen case DEFAULT: width = smdWidth; height = smdLength; - x -= smdWidth / 2; - y -= pinSize / 2; + x = controlPoints[0].x - smdWidth / 2; + y = controlPoints[0].y - pinSize / 2; break; case _90: width = smdLength; height = smdWidth; - x -= width - pinSize / 2; - y -= smdWidth / 2; + x = controlPoints[1].x - pinSize / 2; + y = controlPoints[1].y - smdWidth / 2; break; case _180: width = smdWidth; height = smdLength; - x -= smdWidth / 2; - y -= height - pinSize / 2; + x = controlPoints[1].x - smdWidth / 2; + y = controlPoints[1].y - pinSize / 2; break; case _270: width = smdLength; height = smdWidth; - x -= pinSize / 2; - y -= smdWidth / 2; + x = controlPoints[0].x - pinSize / 2; + y = controlPoints[0].y - smdWidth / 2; break; default: throw new RuntimeException("Unexpected orientation: " + orientation); @@ -302,13 +304,11 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen int textWidth = (int) (rect.getWidth()); do { - System.out.println("trying font size: " + g2d.getFont().getSize2D()); g2d.setFont(g2d.getFont().deriveFont(g2d.getFont().getSize2D() - 1)); fontMetrics = g2d.getFontMetrics(g2d.getFont()); rect = fontMetrics.getStringBounds(label, g2d); textHeight = (int) (rect.getHeight()); textWidth = (int) (rect.getWidth()); - System.out.println("width: " + rect.getWidth()); } while (textWidth > length && g2d.getFont().getSize2D() > 2); double centerX = textTarget.getX() + textTarget.getWidth() / 2; @@ -358,7 +358,7 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen g2d.setColor(PIN_COLOR); g2d.fill(contactArea); } - + @EditableProperty(name = "Body") public Color getBodyColor() { return bodyColor; @@ -391,7 +391,7 @@ public abstract class PassiveSMDComponent extends AbstractTransparentComponen public static enum SMDSize { - _0805(new Size(1.25d, SizeUnit.mm), new Size(2.0d, SizeUnit.mm)), _1206(new Size(1.6d, SizeUnit.mm), new Size(3.2d, + _0805(new Size(0.05d, SizeUnit.in), new Size(0.08d, SizeUnit.in)), _1206(new Size(1.6d, SizeUnit.mm), new Size(3.2d, SizeUnit.mm)), _1210(new Size(2.5d, SizeUnit.mm), new Size(3.2d, SizeUnit.mm)), _1806(new Size(1.6d, SizeUnit.mm), new Size(4.5d, SizeUnit.mm)), _1812(new Size(3.2d, SizeUnit.mm), new Size(4.5d, SizeUnit.mm)); diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index eb443f00..1dd5bfe0 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index a61136bf..f176d0d2 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/ByteEditor.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/ByteEditor.java index 1a47f028..fe31ab3c 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/ByteEditor.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/ByteEditor.java @@ -1,36 +1,91 @@ package org.diylc.swing.gui.editor; import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.diylc.common.PropertyWrapper; +import org.diylc.core.annotations.PercentEditor; +import org.diylc.swingframework.DoubleTextField; import org.diylc.utils.Constants; -public class ByteEditor extends JSlider { +public class ByteEditor extends JPanel { private static final long serialVersionUID = 1L; private Color oldBg = getBackground(); + private static final byte default100Percent = 127; + + private byte _100PercentValue; + public ByteEditor(final PropertyWrapper property) { super(); - setMinimum(0); - setMaximum(127); - setValue((Byte) property.getValue()); - addChangeListener(new ChangeListener() { + + setLayout(new FlowLayout()); + + try { + PercentEditor percentEditor = property.getGetter().getAnnotation(PercentEditor.class); + if (percentEditor == null) + _100PercentValue = default100Percent; + else + _100PercentValue = percentEditor._100PercentValue(); + } catch (Exception e) { + _100PercentValue = default100Percent; + } + + final JSlider slider = new JSlider(); + final DoubleTextField valueField = new DoubleTextField(); + + final double percentFactor = (double) default100Percent / _100PercentValue; + + slider.setMinimum(0); + slider.setMaximum(default100Percent * 100); + + slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { property.setChanged(true); setBackground(oldBg); - property.setValue(new Integer(getValue()).byteValue()); + slider.setBackground(oldBg); + property.setValue(new Integer(slider.getValue() / 100).byteValue()); + valueField.setText(Integer.toString((int) Math.round(percentFactor * (double) slider.getValue() + / default100Percent))); } }); + slider.setValue((Byte) property.getValue() * 100); + + valueField + .setText(Integer.toString((int) Math.round(percentFactor * (double) slider.getValue() / default100Percent))); + valueField.setColumns(3); + valueField.addKeyListener(new KeyAdapter() { + + @Override + public void keyReleased(KeyEvent e) { + try { + int newPosition = (int) (Double.parseDouble(valueField.getText()) * default100Percent / percentFactor); + System.out.println("keyReleased, pos: " + newPosition); + slider.setValue(newPosition); + } catch (Exception ex) { + } + } + }); + if (!property.isUnique()) { setBackground(Constants.MULTI_VALUE_COLOR); + slider.setBackground(Constants.MULTI_VALUE_COLOR); } + + add(slider); + add(valueField); + add(new JLabel("%")); } } diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java index 4fa184cd..302e9624 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/editor/PropertyEditorDialog.java @@ -85,6 +85,7 @@ public class PropertyEditorDialog extends ButtonDialog { gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.insets = new Insets(4, 2, 2, 2); + gbc.anchor = GridBagConstraints.WEST; editorPanel.add(new JLabel(property.getName() + ": "), gbc); gbc.gridx = 1; diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 0fbfc07a..2931a0ee 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1420,7 +1420,11 @@ IMPROVEMENT - Better line representation when zoomed in + Added percent text box next to the slider for editors like Alpha or Scale + + + IMPROVEMENT + Better object line representation when zoomed in IMPROVEMENT