Merge branch 'development' of
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / EditableSubmodelComponent.java
1 package net.mograsim.logic.model.editor;
2
3 import org.eclipse.swt.graphics.Color;
4
5 import net.haspamelodica.swt.helper.gcs.GeneralGC;
6 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
8 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
9 import net.mograsim.logic.model.model.ViewModelModifiable;
10 import net.mograsim.logic.model.model.wires.MovablePin;
11 import net.mograsim.logic.model.model.wires.Pin;
12 import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
13 import net.mograsim.preferences.Preferences;
14
15 public class EditableSubmodelComponent extends DeserializedSubmodelComponent
16 {
17         private static final double labelFontHeight = 5;
18         private static final double pinNameFontHeight = 3;
19         private String label;
20
21         public EditableSubmodelComponent(ViewModelModifiable model, String label)
22         {
23                 super(model, label); //TODO: set name properly
24                 this.label = label;
25                 setSubmodelScale(0.2);
26                 addSubmodelInterface(new MovablePin(this, "A Pin", 1, 0, 10));
27
28         }
29
30         public ViewModelModifiable getSubmodelModifiable()
31         {
32                 return submodelModifiable;
33         }
34
35         @Override
36         protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
37         {
38                 Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground");
39                 if (foreground != null)
40                         gc.setForeground(foreground);
41                 gc.drawRectangle(getBounds());
42         }
43
44         @Override
45         protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
46         {
47                 Font oldFont = gc.getFont();
48                 gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle()));
49                 Point textExtent = gc.textExtent(label);
50                 Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text");
51                 if (textColor != null)
52                         gc.setForeground(textColor);
53                 gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2,
54                                 true);
55                 gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle()));
56                 for (String name : pinsUnmodifiable.keySet())
57                 {
58                         Pin p = pinsUnmodifiable.get(name);
59                         Point pos = p.getPos();
60                         gc.drawText(name, pos.x, pos.y, true);
61                 }
62                 gc.setFont(oldFont);
63         }
64
65         public void setSubmodelScale(double scale)
66         {
67                 super.setSubmodelScale(scale);
68         }
69
70         public double getSubmodelScale()
71         {
72                 return super.getSubmodelScale();
73         }
74
75         public void setSize(double width, double height)
76         {
77                 super.setSize(width, height);
78         }
79
80         public String getLabel()
81         {
82                 return label;
83         }
84
85         public void setLabel(String label)
86         {
87                 this.label = label;
88         }
89 }