diff --git a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsPanel.java b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsPanel.java index 8037c524f4..87efb60e67 100644 --- a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsPanel.java +++ b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsPanel.java @@ -31,6 +31,9 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.custom.StyleRange; import uk.ac.stfc.isis.ibex.ui.widgets.buttons.IBEXButton; @@ -42,11 +45,14 @@ public class BlockDetailsPanel extends Composite { private final Text name; - private final Text pvAddress; + private final StyledText pvAddress; private final Button visible; private final Button local; private final Button btnPickPV; + private final Color prefixColor = new Color(getDisplay(), 166,28,0); + private final Color prefixHighlight = new Color(getDisplay(), 244, 204, 204); + /** * Standard constructor. * @@ -85,10 +91,13 @@ public BlockDetailsPanel(Composite parent, int style, final BlockDetailsViewMode lblPvAddress.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblPvAddress.setText("PV address:"); - pvAddress = new Text(grpBlock, SWT.BORDER); + pvAddress = new StyledText(grpBlock, SWT.BORDER); GridData gdPvAddress = new GridData(SWT.CENTER, SWT.CENTER, true, false, 2, 1); gdPvAddress.minimumWidth = 380; pvAddress.setLayoutData(gdPvAddress); + pvAddress.addExtendedModifyListener(e->updateStyle(viewModel.getPrefix())); + + btnPickPV = new IBEXButton(grpBlock, SWT.NONE, _ -> viewModel.openPvDialog()) .layoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)) @@ -98,6 +107,21 @@ public BlockDetailsPanel(Composite parent, int style, final BlockDetailsViewMode setModel(viewModel); } + + + private void updateStyle(String prefix) { + StyleRange prefixStyle = new StyleRange(); + prefixStyle.start = 0; + prefixStyle.length = prefix.length(); + prefixStyle.foreground = prefixColor; + prefixStyle.fontStyle = SWT.ITALIC; + prefixStyle.background = prefixHighlight; + if (pvAddress.getText().startsWith(prefix)){ + pvAddress.setStyleRange(prefixStyle); + } + } + + private void setModel(BlockDetailsViewModel viewModel) { DataBindingContext bindingContext = new DataBindingContext(); @@ -122,4 +146,5 @@ private void setModel(BlockDetailsViewModel viewModel) { BeanProperties.value("visible").observe(viewModel)); } + } diff --git a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsViewModel.java b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsViewModel.java index 870293bc94..0c009a290c 100644 --- a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsViewModel.java +++ b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/blocks/BlockDetailsViewModel.java @@ -29,6 +29,7 @@ import uk.ac.stfc.isis.ibex.configserver.editing.BlockNameValidator; import uk.ac.stfc.isis.ibex.configserver.editing.EditableBlock; import uk.ac.stfc.isis.ibex.configserver.editing.EditableConfiguration; +import uk.ac.stfc.isis.ibex.instrument.Instrument; import uk.ac.stfc.isis.ibex.ui.configserver.dialogs.PvSelectorDialog; import uk.ac.stfc.isis.ibex.validators.ErrorMessageProvider; import uk.ac.stfc.isis.ibex.validators.PvValidator; @@ -48,6 +49,8 @@ public class BlockDetailsViewModel extends ErrorMessageProvider { private final EditableConfiguration config; private final List facilityPvList; + + /** * Constructor. @@ -150,8 +153,26 @@ public boolean isLocal() { * @param local true for local */ public void setLocal(boolean local) { + String prefix = Instrument.getInstance().getPvPrefix(); + String pvAddress1 = pvAddress; + if (local) { + if (!pvAddress.startsWith(prefix)) { + pvAddress = prefix + pvAddress; + } + }else { + if (pvAddress.startsWith(prefix)) { + pvAddress = pvAddress.substring(prefix.length()); + } + } firePropertyChange("local", this.local, this.local = local); + firePropertyChange("pvAddress", pvAddress1, pvAddress); + } + + public String getPrefix() { + return Instrument.getInstance().getPvPrefix(); } + + /** * Open the PV dialog window. @@ -169,7 +190,6 @@ public void openPvDialog() { public void updateBlock() { editingBlock.setName(name); editingBlock.setPV(pvAddress); - editingBlock.setIsLocal(local); editingBlock.setIsVisible(visible); }