use of org.csstudio.opibuilder.model.AbstractWidgetModel in project yamcs-studio by yamcs.
the class OPIEditor method getAdapter.
@Override
public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
if (type == IPropertySheetPage.class)
return getPropertySheetPage();
else if (type == ZoomManager.class)
return ((ScalableFreeformRootEditPart) getGraphicalViewer().getRootEditPart()).getZoomManager();
else // return getOverviewOutlinePage();
if (type == IContentOutlinePage.class) {
outlinePage = new OutlinePage(new TreeViewer());
return outlinePage;
} else if (type.equals(IContextProvider.class)) {
if (helpContextProvider == null)
helpContextProvider = new OPIHelpContextProvider(getGraphicalViewer());
return helpContextProvider;
} else if (type.equals(IGotoMarker.class)) {
return new IGotoMarker() {
@Override
public void gotoMarker(IMarker marker) {
try {
String wuid = (String) marker.getAttribute(AbstractWidgetModel.PROP_WIDGET_UID);
if (wuid == null) {
// if wuid is not stored in the marker try to find it based on character
Integer charStart = (Integer) marker.getAttribute(IMarker.CHAR_START);
if (charStart == null) {
return;
}
// Get the closest widget to charStart position
wuid = XMLUtil.findClosestWidgetUid(getInputStream(), charStart);
if (wuid == null) {
return;
}
}
AbstractWidgetModel widget = getDisplayModel().getWidgetFromWUID(wuid);
if (widget == null) {
return;
}
// Get the widget editPart
Object obj = getGraphicalViewer().getEditPartRegistry().get(widget);
if (obj != null && obj instanceof AbstractBaseEditPart) {
EditPart widgetEditPart = (AbstractBaseEditPart) obj;
// Reveal the widget
getGraphicalViewer().reveal(widgetEditPart);
// Find the closest selectable part
while (widgetEditPart != null && !widgetEditPart.isSelectable()) {
widgetEditPart = widgetEditPart.getParent();
}
if (widgetEditPart != null) {
// Select the widget in OPI
SelectionManager selectionManager = getGraphicalViewer().getSelectionManager();
selectionManager.deselectAll();
selectionManager.appendSelection(widgetEditPart);
}
}
} catch (IOException e) {
MessageDialog.openError(getSite().getShell(), "IO Error", e.getMessage());
OPIBuilderPlugin.getLogger().log(Level.WARNING, "File open error", // $NON-NLS-1$
e);
} catch (CoreException e) {
MessageDialog.openError(getSite().getShell(), "Core Error", e.getMessage());
OPIBuilderPlugin.getLogger().log(Level.WARNING, "File open error", // $NON-NLS-1$
e);
}
}
};
}
return super.getAdapter(type);
}
use of org.csstudio.opibuilder.model.AbstractWidgetModel in project yamcs-studio by yamcs.
the class CopyPropertiesAction method run.
@Override
public void run() {
PropertiesSelectDialog dialog = new PropertiesSelectDialog(null, getSelectedWidgetModels().get(0));
if (dialog.open() == Window.OK) {
List<String> propList = dialog.getOutput();
if (!propList.isEmpty()) {
AbstractWidgetModel widget = getSelectedWidgetModels().get(0);
Element widgetElement = XMLUtil.widgetToXMLElement(widget);
Element propertisElement = new Element(PROPID_ELEMENT);
for (String propID : propList) {
propertisElement.addContent(new Element(propID));
}
Element rootElement = new Element(ROOT_ELEMENT);
rootElement.addContent(widgetElement);
rootElement.addContent(propertisElement);
XMLOutputter xmlOutputter = new XMLOutputter(Format.getRawFormat());
String xmlString = xmlOutputter.outputString(rootElement);
((OPIEditor) getWorkbenchPart()).getClipboard().setContents(new Object[] { xmlString }, new Transfer[] { PropertiesCopyDataTransfer.getInstance() });
}
}
}
use of org.csstudio.opibuilder.model.AbstractWidgetModel in project yamcs-studio by yamcs.
the class RemoveGroupAction method run.
@Override
public void run(IAction action) {
CompoundCommand compoundCommand = new CompoundCommand("Remove Group");
GroupingContainerModel containerModel = getSelectedContainer();
// Orphan order should be reversed so that undo operation has the correct order.
AbstractWidgetModel[] widgetsArray = containerModel.getChildren().toArray(new AbstractWidgetModel[containerModel.getChildren().size()]);
for (int i = widgetsArray.length - 1; i >= 0; i--) {
compoundCommand.add(new OrphanChildCommand(containerModel, widgetsArray[i]));
}
Point leftCorner = containerModel.getLocation();
for (AbstractWidgetModel widget : containerModel.getChildren()) {
compoundCommand.add(new AddWidgetCommand(containerModel.getParent(), widget, new Rectangle(widget.getLocation(), widget.getSize()).translate(leftCorner)));
}
compoundCommand.add(new WidgetDeleteCommand(containerModel.getParent(), containerModel));
execute(compoundCommand);
}
use of org.csstudio.opibuilder.model.AbstractWidgetModel in project yamcs-studio by yamcs.
the class ArrayEditPart method hookChild.
/**
*Hook child with array index
* @param editPart
*/
protected void hookChild(final EditPart editPart, final int indexOfArrayChild, boolean directChild) {
if (editPart instanceof AbstractContainerEditpart) {
for (Object grandChild : ((AbstractContainerEditpart) editPart).getChildren()) hookChild((EditPart) grandChild, indexOfArrayChild, false);
}
AbstractWidgetModel childModel = ((AbstractBaseEditPart) editPart).getWidgetModel();
if (directChild) {
if (getExecutionMode() == ExecutionMode.EDIT_MODE) {
for (String propId : INVISIBLE_CHILD_PROPIDS) try {
childModel.setPropertyVisibleAndSavable(propId, false, true);
} catch (NonExistPropertyException e) {
}
}
try {
childModel.setScaleOptions(false, false, false);
// $NON-NLS-1$
childModel.setPropertyValue(IPVWidgetModel.PROP_PVNAME, "");
childModel.setPropertyValue(IPVWidgetModel.PROP_BORDER_ALARMSENSITIVE, false);
} catch (NonExistPropertyException e) {
}
}
if (getExecutionMode() == ExecutionMode.RUN_MODE && editPart instanceof IPVWidgetEditpart) {
((IPVWidgetEditpart) editPart).addSetPVValueListener(new ISetPVValueListener() {
// Capture set PV value event on children and write to the PV on
// the array widget
@Override
public void beforeSetPVValue(String pvPropId, Object value) {
int index = getArrayFigure().getIndex() + indexOfArrayChild;
try {
ArrayDataType dataType = getWidgetModel().getDataType();
switch(dataType) {
case OBJECT_ARRAY:
((Object[]) valueArray)[index] = value;
break;
case DOUBLE_ARRAY:
double doubleValue;
if (value instanceof Number)
doubleValue = ((Number) value).doubleValue();
else {
doubleValue = Double.valueOf(value.toString());
}
((double[]) valueArray)[index] = doubleValue;
break;
case BYTE_ARRAY:
byte byteValue;
if (value instanceof Number)
byteValue = ((Number) value).byteValue();
else {
byteValue = Byte.valueOf(value.toString());
}
((byte[]) valueArray)[index] = byteValue;
break;
case INT_ARRAY:
int intValue;
if (value instanceof Number)
intValue = ((Number) value).intValue();
else {
intValue = Byte.valueOf(value.toString());
}
((int[]) valueArray)[index] = intValue;
break;
case SHORT_ARRAY:
short shortValue;
if (value instanceof Number)
shortValue = ((Number) value).shortValue();
else {
shortValue = Short.valueOf(value.toString());
}
((short[]) valueArray)[index] = shortValue;
break;
case FLOAT_ARRAY:
float floatValue;
if (value instanceof Number)
floatValue = ((Number) value).floatValue();
else {
floatValue = Float.valueOf(value.toString());
}
((float[]) valueArray)[index] = floatValue;
break;
case LONG_ARRAY:
long longValue;
if (value instanceof Number)
longValue = ((Number) value).longValue();
else {
longValue = Long.valueOf(value.toString());
}
((long[]) valueArray)[index] = longValue;
break;
case STRING_ARRAY:
((String[]) valueArray)[index] = value.toString();
break;
default:
break;
}
if (getPV() != null)
// but EPICS PV doesn't support write long[]. should be removed after switched to pv manager
if (valueArray instanceof long[]) {
int[] temp = new int[((long[]) valueArray).length];
for (int i = 0; i < ((long[]) valueArray).length; i++) temp[i] = (int) ((long[]) valueArray)[i];
setPVValue(ArrayModel.PROP_PVNAME, temp);
} else
setPVValue(ArrayModel.PROP_PVNAME, valueArray);
} catch (NumberFormatException e) {
String msg = NLS.bind("Writing failed: The input data {0} is not compatible with array data type.", value.toString());
// recover the original data in children widgets.
setValue(getValue());
ErrorHandlerUtil.handleError(msg, e);
}
}
});
}
}
use of org.csstudio.opibuilder.model.AbstractWidgetModel in project yamcs-studio by yamcs.
the class ArrayLayoutEditPolicy method createAddCommand.
@Override
protected Command createAddCommand(ChangeBoundsRequest request, EditPart child, Object constraint) {
if (!(child instanceof AbstractBaseEditPart) || !(constraint instanceof Rectangle))
return super.createAddCommand(request, child, constraint);
AbstractContainerModel container = (AbstractContainerModel) getHost().getModel();
if (!container.getChildren().isEmpty())
return null;
AbstractWidgetModel widget = (AbstractWidgetModel) child.getModel();
CompoundCommand result = new CompoundCommand("Add widget to array");
addUpdateContainerCommands(container, widget.getSize(), result);
result.add(new AddWidgetCommand(container, widget, (Rectangle) constraint));
return result;
}
Aggregations