auto-sync

This commit is contained in:
rusEfi 2015-04-25 13:04:32 -04:00
parent 2b604e6e10
commit 11e9f44132
15 changed files with 105 additions and 36 deletions

View File

@ -5,6 +5,8 @@
*
* This config overrides some values of the default configuration which is set by setDefaultConfiguration() method
*
* set_engine_type 10
*
* ROVER_V8 = 10
*
* @date Jun 27, 2014

View File

@ -10,4 +10,8 @@ public class Fields {
public static final Field GLOBAL_FUEL_CORRECTION = new Field(@@globalFuelCorrection@@, FieldType.FLOAT);
public static final Field ENGINE_SNIFFER_SIZE = new Field(@@engineChartSize@@, FieldType.INT);
public static final Field isDigitalChartEnabled = new Field(@@isEngineChartEnabled@@, FieldType.BIT, 5);
public static final Field triggerType = new Field(516, FieldType.INT, "custom toothed wheel", "ford aspire", "dodge neon", "Miata NA", "Miata NB", "GM_7X", "Cooper", "Mazda SOHC 4", "60/2", "36/1", "Accord CD", "MITSU", "ACCORD 2", "ACCORD DIP", "Neon 2003", "MAZDA D 1+4", "1+1", "1+60/2", "Single Tooth");
public static final Field triggerInputPins1 = new Field(912, FieldType.INT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID");
public static final Field triggerInputPins2 = new Field(916, FieldType.INT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID");
public static final Field triggerInputPins3 = new Field(920, FieldType.INT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID");
}

View File

@ -1,5 +1,5 @@
// This file was generated by Version2Header
// Wed Apr 22 21:56:21 EDT 2015
// Sat Apr 25 11:16:30 EDT 2015
#ifndef VCS_VERSION
#define VCS_VERSION "7887"
#define VCS_VERSION "7900"
#endif

View File

@ -10,19 +10,30 @@ public class Field {
private static final String BIT_VALUE_PREFIX = "bit @";
private static final String INT_VALUE_PREFIX = "int @";
private static final String FLOAT_VALUE_PREFIX = "float @";
public static final int NO_BIT_OFFSET = -1;
private final int offset;
private final FieldType type;
private final int bitOffset;
private final String[] options;
public Field(int offset, FieldType type) {
this(offset, type, -1);
this(offset, type, NO_BIT_OFFSET);
}
public Field(int offset, FieldType type, String... options) {
this(offset, type, NO_BIT_OFFSET, options);
}
public Field(int offset, FieldType type, int bitOffset) {
this(offset, type, bitOffset, null);
}
public Field(int offset, FieldType type, int bitOffset, String[] options) {
this.offset = offset;
this.type = type;
this.bitOffset = bitOffset;
this.options = options;
}
public String setCommand() {
@ -41,6 +52,10 @@ public class Field {
return offset;
}
public String[] getOptions() {
return options;
}
public int getBitOffset() {
return bitOffset;
}

View File

@ -10,4 +10,8 @@ public class Fields {
public static final Field GLOBAL_FUEL_CORRECTION = new Field(552, FieldType.FLOAT);
public static final Field ENGINE_SNIFFER_SIZE = new Field(1504, FieldType.INT);
public static final Field isDigitalChartEnabled = new Field(1488, FieldType.BIT, 5);
public static final Field triggerType = new Field(516, FieldType.INT, "custom toothed wheel", "ford aspire", "dodge neon", "Miata NA", "Miata NB", "GM_7X", "Cooper", "Mazda SOHC 4", "60/2", "36/1", "Accord CD", "MITSU", "ACCORD 2", "ACCORD DIP", "Neon 2003", "MAZDA D 1+4", "1+1", "1+60/2", "Single Tooth");
public static final Field triggerInputPins1 = new Field(912, FieldType.INT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID");
public static final Field triggerInputPins2 = new Field(916, FieldType.INT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID");
public static final Field triggerInputPins3 = new Field(920, FieldType.INT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID");
}

View File

@ -7,7 +7,6 @@ import com.rusefi.io.LinkManager;
import com.rusefi.maintenance.VersionChecker;
import com.rusefi.ui.*;
import com.rusefi.ui.engine.EngineSnifferPanel;
import com.rusefi.ui.fsio.FlexibleControls;
import com.rusefi.ui.logview.LogViewer;
import com.rusefi.ui.storage.Node;
import com.rusefi.ui.util.DefaultExceptionHandler;
@ -32,7 +31,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig;
* @see com.rusefi.StartupFrame
*/
public class Launcher {
public static final int CONSOLE_VERSION = 20150423;
public static final int CONSOLE_VERSION = 20150425;
public static final boolean SHOW_STIMULATOR = false;
private static final String TAB_INDEX = "main_tab";
protected static final String PORT_KEY = "port";
@ -87,10 +86,9 @@ public class Launcher {
tabbedPane.addTab("Engine Sniffer", engineSnifferPanel.getPanel());
tabbedPane.addTab("Sensor Sniffer", new AnalogChartPanel().getPanel());
tabbedPane.addTab("Table Editor", tableEditor);
tabbedPane.addTab("LE controls", new FlexibleControls().getPanel());
// tabbedPane.addTab("LE controls", new FlexibleControls().getPanel());
// tabbedPane.addTab("ADC", new AdcPanel(new BooleanInputsModel()).createAdcPanel());
if (SHOW_STIMULATOR && !LinkManager.isStimulationMode && !LinkManager.isLogViewerMode(port)) {
@ -100,7 +98,9 @@ public class Launcher {
}
// tabbedPane.addTab("live map adjustment", new Live3DReport().getControl());
tabbedPane.add("Messages", new MessagesPane(getConfig().getRoot().getChild("messages")).getContent());
tabbedPane.add("Wizards", new Wizard().createPane());
// tabbedPane.add("Wizards", new Wizard().createPane());
tabbedPane.add("Settings", new SettingsTab().createPane());
if (!LinkManager.isLogViewerMode(port)) {

View File

@ -1,5 +1,7 @@
package com.rusefi;
import com.rusefi.ui.util.UiUtils;
import javax.swing.*;
import java.awt.*;
@ -34,11 +36,11 @@ public class StimulationInputs {
content.add(tpsRange.getContent());
content.add(new JLabel("EL resistance"));
content.add(wrap(elResistance2));
content.add(UiUtils.wrap(elResistance2));
JButton button = ecuStimulator.createButton();
if (Launcher.SHOW_STIMULATOR)
content.add(wrap(button));
content.add(UiUtils.wrap(button));
}
public double getEngineLoadMin() {
@ -69,12 +71,6 @@ public class StimulationInputs {
return (int) cltRange.getTo();
}
public static JComponent wrap(JComponent component) {
JPanel result = new JPanel();
result.add(component);
return result;
}
public JPanel getContent() {
return content;
}

View File

@ -1,6 +1,5 @@
package com.rusefi.ui;
import com.rusefi.StimulationInputs;
import com.rusefi.io.CommandQueue;
import com.rusefi.ui.util.UiUtils;
@ -12,6 +11,7 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.rusefi.ui.storage.PersistentConfiguration.getConfig;
@ -33,7 +33,7 @@ public class RecentCommands {
}
};
private boolean reentrant;
private final AtomicBoolean reentrant = new AtomicBoolean();
private final JScrollPane messagesScroll = new JScrollPane(content, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
@ -41,7 +41,7 @@ public class RecentCommands {
CommandQueue.getInstance().addListener(new CommandQueue.CommandQueueListener() {
@Override
public void onCommand(String command) {
if (!reentrant)
if (!reentrant.get())
add(command);
}
});
@ -97,7 +97,7 @@ public class RecentCommands {
sorted.addAll(entries.keySet());
for (Entry entry : sorted) {
content.add(createButton(entry));
content.add(createButton(reentrant, entry.command));
}
}
UiUtils.trueRepaint(content.getParent());
@ -107,21 +107,21 @@ public class RecentCommands {
getConfig().getRoot().setProperty(KEY, pack());
}
private JComponent createButton(final Entry entry) {
JButton button = new JButton(entry.command);
public static JComponent createButton(final AtomicBoolean reentrant, final String command) {
JButton button = new JButton(command);
button.setBorder(BorderFactory.createEmptyBorder(3, 5, 0, 5));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
reentrant = true;
int timeout = CommandQueue.getTimeout(entry.command);
CommandQueue.getInstance().write(entry.command, timeout);
reentrant = false;
reentrant.set(true);
int timeout = CommandQueue.getTimeout(command);
CommandQueue.getInstance().write(command, timeout);
reentrant.set(false);
}
});
return StimulationInputs.wrap(button);
return UiUtils.wrap(button);
}
public Component getContent() {

View File

@ -0,0 +1,26 @@
package com.rusefi.ui;
import com.rusefi.config.Fields;
import com.rusefi.ui.config.EnumConfigField;
import com.rusefi.ui.util.UiUtils;
import javax.swing.*;
import java.awt.*;
import java.util.concurrent.atomic.AtomicBoolean;
public class SettingsTab {
private final JPanel panel = new JPanel(new GridLayout(3, 3));
public SettingsTab() {
panel.add(UiUtils.wrap(new EnumConfigField(Fields.triggerType, "trigger type").getContent()));
panel.add(UiUtils.wrap(new EnumConfigField(Fields.triggerInputPins1, "trigger #1 input").getContent()));
panel.add(UiUtils.wrap(new EnumConfigField(Fields.triggerInputPins2, "trigger #2 input").getContent()));
panel.add(UiUtils.wrap(new EnumConfigField(Fields.triggerInputPins3, "trigger #3 input").getContent()));
panel.add(UiUtils.wrap(RecentCommands.createButton(new AtomicBoolean(), "writeconfig")));
}
public Component createPane() {
return panel;
}
}

View File

@ -87,8 +87,6 @@ public class Wizard {
.setNext(new SendCommand("subscribe " + OutputChannel.RunningOrderingTriggerError.getProtocolId()))
.setNext(new SendCommand("set_analog_chart_freq " + 1))
.setNext(new WaitForZeroRpm())
;
}

View File

@ -47,6 +47,8 @@ class BaseConfigField {
protected void createUi(String topLabel, Component control) {
JPanel center = new JPanel(new FlowLayout());
control.setEnabled(false);
/**
* I guess a nice status enum is coming soon
*/

View File

@ -23,9 +23,9 @@ public class BitConfigField extends BaseConfigField {
String expectedPrefix = "bit @" + field.getOffset() + "/" + field.getBitOffset() + " is ";
if (message.startsWith(expectedPrefix) && message.length() == expectedPrefix.length() + 1) {
message = message.substring(expectedPrefix.length());
System.out.println("Bit arrived " + message);
Boolean value = message.equals("1");
ec = true;
view.setEnabled(true);
view.setSelected(value);
onValueArrived();
ec = false;

View File

@ -23,6 +23,7 @@ public class ConfigField extends BaseConfigField {
if (Field.isIntValueMessage(message) || Field.isFloatValueMessage(message)) {
Pair<Integer, ?> p = Field.parseResponse(message);
if (p != null && p.first == field.getOffset()) {
view.setEnabled(true);
view.setText("" + p.second);
onValueArrived();
}

View File

@ -7,16 +7,28 @@ import com.rusefi.core.Pair;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
public class EnumConfigField extends BaseConfigField {
private final JComboBox<String> view = new JComboBox<>();
private boolean ec;
private final Map<String, Integer> ordinals = new HashMap<>();
public EnumConfigField(final Field field, String caption, String... options) {
public EnumConfigField(final Field field, String caption) {
this(field, caption, field.getOptions());
}
public EnumConfigField(final Field field, String caption, final String... options) {
super(field);
for (String option : options)
view.addItem(option);
int ordinal = 0;
for (String option : options) {
ordinals.put(option, ordinal++);
if (!"invalid".equalsIgnoreCase(option))
view.addItem(option);
}
createUi(caption, view);
@ -26,9 +38,10 @@ public class EnumConfigField extends BaseConfigField {
if (Field.isIntValueMessage(message)) {
Pair<Integer, ?> p = Field.parseResponse(message);
if (p != null && p.first == field.getOffset()) {
int value = (Integer) p.second;
int ordinal = (Integer) p.second;
ec = true;
view.setSelectedIndex(value);
view.setEnabled(true);
view.setSelectedItem(options[ordinal]);
onValueArrived();
ec = false;
}
@ -41,7 +54,9 @@ public class EnumConfigField extends BaseConfigField {
public void actionPerformed(ActionEvent e) {
if (ec)
return;
sendValue(field, Integer.toString(view.getSelectedIndex()));
String value = (String) view.getSelectedItem();
int ordinal = ordinals.get(value);
sendValue(field, Integer.toString(ordinal));
}
});
}

View File

@ -89,4 +89,10 @@ public class UiUtils {
public static void setTwoLineToolTip(JComponent component, String line1, String line2) {
component.setToolTipText("<html>" + line1 + "<br>" + line2 + "</html>");
}
public static JComponent wrap(JComponent component) {
JPanel result = new JPanel();
result.add(component);
return result;
}
}