import java.util.ArrayList;
import java.util.List;
+import java.util.function.Consumer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
LogicUIRenderer renderer = new LogicUIRenderer(model);
addZoomedRenderer(gc ->
{
- Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
+ Color background = Preferences.current().getColor("net.mograsim.logic.model.color.background");
if (background != null)
setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the canvas
renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
});
- model.addRedrawListener(this::redrawThreadsafe);
+ model.setRedrawHandler(this::redrawThreadsafe);
addListener(SWT.MouseDown, this::mouseDown);
Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY);
componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
List<GUIComponent> componentsByItemIndex = new ArrayList<>();
- model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
- model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
+ Consumer<? super GUIComponent> compsChanged = c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
+ model.addComponentAddedListener(compsChanged);
+ model.addComponentRemovedListener(compsChanged);
+ debugShell.addListener(SWT.Dispose, e ->
+ {
+ model.removeComponentAddedListener(compsChanged);
+ model.removeComponentRemovedListener(compsChanged);
+ });
recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
new Label(debugShell, SWT.NONE).setText("Target state ID: ");
Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
private void addComponentSelectorItems(List<GUIComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
{
- for (GUIComponent c : model.getComponentsByName().values())
+ model.getComponentsByName().values().stream().sorted((c1, c2) -> c1.name.compareTo(c2.name)).forEach(c ->
+ {
if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface))
{
String item = base + c.name;
if (c instanceof SubmodelComponent)
addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel);
}
+ });
}
-
}
\ No newline at end of file