/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.switchcmp.gui; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import de.rcenvironment.components.switchcmp.common.SwitchComponentConstants; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.gui.resources.api.FontManager; import de.rcenvironment.core.gui.resources.api.StandardFonts; import de.rcenvironment.core.gui.workflow.editor.properties.ValidatingWorkflowNodePropertySection; /** * * Condition section where user can set desired condition. * * @author David Scholz */ public class SwitchConditionSection extends ValidatingWorkflowNodePropertySection { private static final int KEY_CODE_A = 97; private StyledText conditionTextfield; private Button insertChannelButton; private Button insertOpButton; private Combo channelCombo; private Combo opCombo; @Override protected void createCompositeContent(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) { parent.setLayout(new GridLayout(1, false)); parent.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL)); Section parentSection = aTabbedPropertySheetPage.getWidgetFactory().createSection(parent, Section.TITLE_BAR); parentSection.setLayout(new GridLayout()); parentSection.setLayoutData(new GridData(GridData.FILL | GridData.FILL_HORIZONTAL)); parentSection.setText(Messages.conditionFieldString); super.createCompositeContent(parent, aTabbedPropertySheetPage); final Composite mainComposite = aTabbedPropertySheetPage.getWidgetFactory().createComposite(parent); mainComposite.setLayout(new GridLayout(2, true)); mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); conditionTextfield = new StyledText(mainComposite, SWT.WRAP | SWT.BORDER); conditionTextfield.setLayout(new GridLayout()); conditionTextfield.setFont(FontManager.getInstance().getFont(StandardFonts.CONSOLE_TEXT_FONT)); conditionTextfield.setData(CONTROL_PROPERTY_KEY, SwitchComponentConstants.CONDITION_KEY); conditionTextfield.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); conditionTextfield.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.stateMask == SWT.CTRL && e.keyCode == KEY_CODE_A) { conditionTextfield.selectAll(); } } }); final Composite comboSectionComposite = aTabbedPropertySheetPage.getWidgetFactory().createComposite(mainComposite); comboSectionComposite.setLayout(new GridLayout()); comboSectionComposite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); final Composite propertiesComposite = aTabbedPropertySheetPage.getWidgetFactory().createComposite(comboSectionComposite); propertiesComposite.setLayout(new GridLayout(3, false)); propertiesComposite.setLayoutData(new GridData(GridData.FILL | GridData.FILL_VERTICAL)); Label opLabel = new Label(propertiesComposite, SWT.NONE); opLabel.setText(Messages.operatorsLabelString); opLabel.setBackground(propertiesComposite.getDisplay().getSystemColor(SWT.COLOR_WHITE)); opCombo = new Combo(propertiesComposite, SWT.READ_ONLY); opCombo.setLayout(new GridLayout()); opCombo.setLayoutData(new GridData(GridData.FILL | GridData.FILL_HORIZONTAL)); setComboOperators(); opCombo.pack(); insertOpButton = aTabbedPropertySheetPage.getWidgetFactory().createButton(propertiesComposite, Messages.insertButtonString, SWT.PUSH); insertOpButton.addListener(SWT.Selection, getButtonListener()); Label channelLabel = new Label(propertiesComposite, SWT.NONE); channelLabel.setText(Messages.channelLabelString); channelLabel.setBackground(propertiesComposite.getDisplay().getSystemColor(SWT.COLOR_WHITE)); channelCombo = new Combo(propertiesComposite, SWT.READ_ONLY); channelCombo.setLayout(new GridLayout()); channelCombo.setLayoutData(new GridData(GridData.FILL | GridData.FILL_HORIZONTAL)); channelCombo.pack(); insertChannelButton = aTabbedPropertySheetPage.getWidgetFactory().createButton(propertiesComposite, Messages.insertButtonString, SWT.PUSH); insertChannelButton.addListener(SWT.Selection, getButtonListener()); } @Override public void aboutToBeShown() { super.aboutToBeShown(); channelCombo.removeAll(); for (EndpointDescription channelName : getConfiguration().getInputDescriptionsManager().getDynamicEndpointDescriptions()) { channelCombo.add(channelName.getName()); } for (EndpointDescription dataName : getConfiguration().getInputDescriptionsManager().getStaticEndpointDescriptions()) { for (DataType datatype : SwitchComponentConstants.CONDITION_INPUT_DATA_TYPES) { if (datatype.equals(dataName.getDataType())) { channelCombo.add(dataName.getName()); } } } channelCombo.select(0); // default combo selection } @Override public void refreshSection() { super.refreshSection(); refreshBeforeValidation(); } @Override protected void refreshBeforeValidation() { aboutToBeShown(); } private void setComboOperators() { opCombo.removeAll(); opCombo.setItems(SwitchComponentConstants.OPERATORS); opCombo.select(0); } private Listener getButtonListener() { return new Listener() { @Override public void handleEvent(Event arg0) { if (arg0.widget.equals(insertOpButton)) { final String s = opCombo.getText() + " "; apply(s); } else if (arg0.widget.equals(insertChannelButton)) { final String s = channelCombo.getText() + " "; apply(s); } } private void apply(String s) { conditionTextfield.insert(s); conditionTextfield.setFocus(); conditionTextfield.setCaretOffset(conditionTextfield.getCaretOffset() + s.length()); } }; } }