use of org.csstudio.opibuilder.widgets.model.LinkingContainerModel in project yamcs-studio by yamcs.
the class LinkingContainerEditpart method registerPropertyChangeHandlers.
@Override
protected void registerPropertyChangeHandlers() {
IWidgetPropertyChangeHandler handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
if (newValue != null && newValue instanceof IPath) {
LinkingContainerModel widgetModel = getWidgetModel();
IPath absolutePath = (IPath) newValue;
if (!absolutePath.isAbsolute())
absolutePath = ResourceUtil.buildAbsolutePath(getWidgetModel(), absolutePath);
if (oldValue != null && oldValue instanceof IPath) {
widgetModel.setDisplayModel(null);
} else {
DisplayModel displayModel = new DisplayModel(resolveMacros(absolutePath));
if (widgetModel.getMacroMap().equals(displayModel.getMacroMap())) {
widgetModel.setDisplayModel(displayModel);
} else {
widgetModel.setDisplayModel(null);
}
}
configureDisplayModel();
}
return true;
}
};
setPropertyChangeHandler(LinkingContainerModel.PROP_OPI_FILE, handler);
// load from group
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
// loadWidgets(getWidgetModel(),true);
configureDisplayModel();
return false;
}
};
setPropertyChangeHandler(LinkingContainerModel.PROP_GROUP_NAME, handler);
handler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
if ((int) newValue == LinkingContainerModel.ResizeBehaviour.SIZE_OPI_TO_CONTAINER.ordinal()) {
((LinkingContainerFigure) figure).setZoomToFitAll(true);
} else {
((LinkingContainerFigure) figure).setZoomToFitAll(false);
}
((LinkingContainerFigure) figure).updateZoom();
if ((int) newValue == LinkingContainerModel.ResizeBehaviour.SIZE_CONTAINER_TO_OPI.ordinal()) {
performAutosize();
}
return false;
}
};
setPropertyChangeHandler(LinkingContainerModel.PROP_RESIZE_BEHAVIOUR, handler);
// loadWidgets(getWidgetModel(),true);
configureDisplayModel();
}
use of org.csstudio.opibuilder.widgets.model.LinkingContainerModel in project yamcs-studio by yamcs.
the class LinkingContainerEditpart method configureDisplayModel.
/**
* @param path the path of the OPI file
*/
private synchronized void configureDisplayModel() {
// This need to be executed after GUI created.
if (getWidgetModel().getDisplayModel() == null) {
IPath path = resolveMacros(getWidgetModel().getOPIFilePath());
log.info(path.toString());
final DisplayModel tempDisplayModel = new DisplayModel(path);
getWidgetModel().setDisplayModel(tempDisplayModel);
try {
if (!path.isEmpty())
XMLUtil.fillDisplayModelFromInputStream(ResourceUtil.pathToInputStream(path), tempDisplayModel, getViewer().getControl().getDisplay());
} catch (Exception e) {
OPIBuilderPlugin.getLogger().log(Level.WARNING, "Could not reload the linking container.", e);
}
}
LinkingContainerModel widgetModel = getWidgetModel();
DisplayModel displayModel = widgetModel.getDisplayModel();
widgetModel.setDisplayModelViewer((GraphicalViewer) getViewer());
widgetModel.setDisplayModelDisplayID(widgetModel.getRootDisplayModel(false).getDisplayID());
UIBundlingThread.getInstance().addRunnable(new Runnable() {
@Override
public void run() {
LinkingContainerModel widgetModel = getWidgetModel();
widgetModel.setDisplayModelExecutionMode(getExecutionMode());
widgetModel.setDisplayModelOpiRuntime(widgetModel.getRootDisplayModel(false).getOpiRuntime());
}
});
updateConnectionListForLinkedOpi(displayModel);
if (originalPoints != null && !originalPoints.isEmpty()) {
// update connections after the figure is repainted.
getViewer().getControl().getDisplay().asyncExec(() -> updateConnectionList());
}
UIBundlingThread.getInstance().addRunnable(() -> {
layout();
if (// getExecutionMode() == ExecutionMode.RUN_MODE &&
!getWidgetModel().isAutoFit() && !getWidgetModel().isAutoSize()) {
Rectangle childrenRange = GeometryUtil.getChildrenRange(LinkingContainerEditpart.this);
getWidgetModel().setChildrenGeoSize(new Dimension(childrenRange.width + childrenRange.x + figure.getInsets().left + figure.getInsets().right - 1, childrenRange.height + childrenRange.y + figure.getInsets().top + figure.getInsets().bottom - 1));
getWidgetModel().scaleChildren();
}
((LinkingContainerFigure) getFigure()).setShowScrollBars(getWidgetModel().isShowScrollBars());
((LinkingContainerFigure) getFigure()).setZoomToFitAll(getWidgetModel().isAutoFit());
((LinkingContainerFigure) getFigure()).updateZoom();
});
// Add scripts on display model
if (getExecutionMode() == ExecutionMode.RUN_MODE) {
widgetModel.getScriptsInput().getScriptList().addAll(widgetModel.getDisplayModel().getScriptsInput().getScriptList());
}
// tempDisplayModel.removeAllChildren();
LinkedHashMap<String, String> map = new LinkedHashMap<>();
AbstractContainerModel loadTarget = displayModel;
if (!widgetModel.getGroupName().trim().equals("")) {
// $NON-NLS-1$
AbstractWidgetModel group = displayModel.getChildByName(widgetModel.getGroupName());
if (group != null && group instanceof AbstractContainerModel) {
loadTarget = (AbstractContainerModel) group;
}
}
// Load "LCID" macro whose value is unique to this instance of Linking Container.
if (widgetModel.getExecutionMode() == ExecutionMode.RUN_MODE) {
map.put("LCID", "LCID_" + getLinkingContainerID());
}
// Load system macro
if (displayModel.getMacrosInput().isInclude_parent_macros()) {
map.putAll(displayModel.getParentMacroMap());
}
// Load macro from its macrosInput
map.putAll(displayModel.getMacrosInput().getMacrosMap());
// It also include the macros on this linking container
// which includes the macros from action and global macros if included
// It will replace the old one too.
map.putAll(widgetModel.getMacroMap());
widgetModel.setMacroMap(map);
widgetModel.removeAllChildren();
widgetModel.addChildren(loadTarget.getChildren(), true);
widgetModel.setDisplayModel(displayModel);
DisplayModel parentDisplay = widgetModel.getRootDisplayModel();
parentDisplay.syncConnections();
DisplayModel parentDisplay2 = widgetModel.getRootDisplayModel(false);
if (parentDisplay != parentDisplay2)
parentDisplay2.syncConnections();
if (getWidgetModel().isAutoSize()) {
performAutosize();
}
}
Aggregations