package org.eclipse.wazaabi.engine.swt.commons.editparts.stylerules.managers;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import org.eclipse.wazaabi.engine.core.editparts.AbstractComponentEditPart;
import org.eclipse.wazaabi.engine.core.editparts.ContainerEditPart;
import org.eclipse.wazaabi.engine.core.gef.EditPart;
import org.eclipse.wazaabi.engine.swt.commons.views.SWTControlView;
import org.eclipse.wazaabi.mm.core.widgets.AbstractComponent;
import org.eclipse.wazaabi.mm.swt.styles.AttachmentToSibling;
import org.eclipse.wazaabi.mm.swt.styles.FormAttachment;
import org.eclipse.wazaabi.mm.swt.styles.ToSiblingAlignment;
public class AttachmentToSiblingManager extends FormAttachmentManager {
@Override
protected org.eclipse.swt.layout.FormAttachment createSWTFormAttachment(
SWTControlView view, FormAttachment formAttachment) {
if (formAttachment instanceof AttachmentToSibling && view != null) {
AttachmentToSibling attachmentToSibling = (AttachmentToSibling) formAttachment;
Control siblingControl = resolveSiblingControl(view,
attachmentToSibling.getSiblingId());
if (siblingControl != null)
return new org.eclipse.swt.layout.FormAttachment(
siblingControl, attachmentToSibling.getOffset(),
getSWTAlignment(attachmentToSibling.getAlignment()));
}
return null;
}
protected Control resolveSiblingControl(SWTControlView view,
String siblingID) {
if (siblingID == null || "".equals(siblingID)) //$NON-NLS-1$
return null;
if (view.getHost().getParent() instanceof ContainerEditPart) {
for (EditPart child : ((ContainerEditPart) view.getHost()
.getParent()).getChildren()) {
if (child instanceof AbstractComponentEditPart
&& siblingID
.equals(((AbstractComponent) ((AbstractComponentEditPart) child)
.getModel()).getId())
&& ((AbstractComponentEditPart) child).getWidgetView() instanceof SWTControlView) {
return (Control) ((SWTControlView) ((AbstractComponentEditPart) child)
.getWidgetView()).getSWTWidget();
}
}
}
return null;
}
protected int getSWTAlignment(ToSiblingAlignment alignment) {
if (alignment != null)
switch (alignment.getValue()) {
case ToSiblingAlignment.BOTTOM_VALUE:
return SWT.BOTTOM;
case ToSiblingAlignment.CENTER_VALUE:
return SWT.CENTER;
case ToSiblingAlignment.LEFT_VALUE:
return SWT.LEFT;
case ToSiblingAlignment.RIGHT_VALUE:
return SWT.RIGHT;
case ToSiblingAlignment.TOP_VALUE:
return SWT.TOP;
}
return SWT.DEFAULT;
}
}