/*******************************************************************************
* Copyright (c) 2006-2013 The RCP Company and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* The RCP Company - initial API and implementation
*******************************************************************************/
package com.rcpcompany.uibindings.internal.compositeform;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Layout;
import com.rcpcompany.uibindings.compositeform.ICompositeForm;
import com.rcpcompany.uibindings.compositeform.ICompositeFormPackage;
import com.rcpcompany.uibindings.compositeform.ICompositeFormPart;
import com.rcpcompany.uibindings.compositeform.ICompositeFormPartDescriptor;
import com.rcpcompany.uibindings.compositeform.ICompositeFormPartOperations;
import com.rcpcompany.uibindings.utils.IFormCreator;
import com.rcpcompany.utils.logging.LogUtils;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Part</b></em>'. <!--
* end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#getForm <em>
* Form</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#getDescriptor
* <em>Descriptor</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#getTitle <em>
* Title</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#getImage <em>
* Image</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#isEnabled <em>
* Enabled</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#isOpen <em>Open
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#getOperations
* <em>Operations</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.compositeform.CompositeFormPartImpl#getFormCreator
* <em>Form Creator</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class CompositeFormPartImpl extends EObjectImpl implements ICompositeFormPart {
/**
* The cached value of the '{@link #getDescriptor() <em>Descriptor</em>}' reference. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getDescriptor()
* @generated
* @ordered
*/
protected ICompositeFormPartDescriptor descriptor;
/**
* The default value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getTitle()
* @generated
* @ordered
*/
protected static final String TITLE_EDEFAULT = null;
/**
* The cached value of the '{@link #getTitle() <em>Title</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getTitle()
* @generated
* @ordered
*/
protected String title = TITLE_EDEFAULT;
/**
* The default value of the '{@link #getImage() <em>Image</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getImage()
* @generated
* @ordered
*/
protected static final Image IMAGE_EDEFAULT = null;
/**
* The cached value of the '{@link #getImage() <em>Image</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getImage()
* @generated
* @ordered
*/
protected Image image = IMAGE_EDEFAULT;
/**
* The default value of the '{@link #isEnabled() <em>Enabled</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #isEnabled()
* @generated
* @ordered
*/
protected static final boolean ENABLED_EDEFAULT = true;
/**
* The cached value of the '{@link #isEnabled() <em>Enabled</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #isEnabled()
* @generated
* @ordered
*/
protected boolean enabled = ENABLED_EDEFAULT;
/**
* The default value of the '{@link #isOpen() <em>Open</em>}' attribute. <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @see #isOpen()
* @generated
* @ordered
*/
protected static final boolean OPEN_EDEFAULT = true;
/**
* The cached value of the '{@link #isOpen() <em>Open</em>}' attribute. <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @see #isOpen()
* @generated
* @ordered
*/
protected boolean open = OPEN_EDEFAULT;
/**
* The default value of the '{@link #getOperations() <em>Operations</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getOperations()
* @generated
* @ordered
*/
protected static final ICompositeFormPartOperations OPERATIONS_EDEFAULT = null;
/**
* The cached value of the '{@link #getOperations() <em>Operations</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getOperations()
* @generated
* @ordered
*/
protected ICompositeFormPartOperations operations = OPERATIONS_EDEFAULT;
/**
* The default value of the '{@link #getFormCreator() <em>Form Creator</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFormCreator()
* @generated
* @ordered
*/
protected static final IFormCreator FORM_CREATOR_EDEFAULT = null;
/**
* The cached value of the '{@link #getFormCreator() <em>Form Creator</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFormCreator()
* @generated
* @ordered
*/
protected IFormCreator formCreator = FORM_CREATOR_EDEFAULT;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
protected CompositeFormPartImpl() {
super();
eAdapters().add(new AdapterImpl() {
@Override
public void notifyChanged(Notification msg) {
handleChanges(msg);
}
});
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected EClass eStaticClass() {
return ICompositeFormPackage.Literals.COMPOSITE_FORM_PART;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public ICompositeForm getForm() {
if (eContainerFeatureID() != ICompositeFormPackage.COMPOSITE_FORM_PART__FORM) return null;
return (ICompositeForm) eContainer();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public NotificationChain basicSetForm(ICompositeForm newForm, NotificationChain msgs) {
msgs = eBasicSetContainer((InternalEObject) newForm, ICompositeFormPackage.COMPOSITE_FORM_PART__FORM, msgs);
return msgs;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setForm(ICompositeForm newForm) {
if (newForm != eInternalContainer()
|| (eContainerFeatureID() != ICompositeFormPackage.COMPOSITE_FORM_PART__FORM && newForm != null)) {
if (EcoreUtil.isAncestor(this, newForm))
throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
NotificationChain msgs = null;
if (eInternalContainer() != null) {
msgs = eBasicRemoveFromContainer(msgs);
}
if (newForm != null) {
msgs = ((InternalEObject) newForm).eInverseAdd(this, ICompositeFormPackage.COMPOSITE_FORM__PARTS,
ICompositeForm.class, msgs);
}
msgs = basicSetForm(newForm, msgs);
if (msgs != null) {
msgs.dispatch();
}
} else if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, ICompositeFormPackage.COMPOSITE_FORM_PART__FORM,
newForm, newForm));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public ICompositeFormPartDescriptor getDescriptor() {
return descriptor;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setDescriptor(ICompositeFormPartDescriptor newDescriptor) {
final ICompositeFormPartDescriptor oldDescriptor = descriptor;
descriptor = newDescriptor;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
ICompositeFormPackage.COMPOSITE_FORM_PART__DESCRIPTOR, oldDescriptor, descriptor));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public String getTitle() {
return title;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setTitle(String newTitle) {
final String oldTitle = title;
title = newTitle;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, ICompositeFormPackage.COMPOSITE_FORM_PART__TITLE,
oldTitle, title));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Image getImage() {
return image;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setImage(Image newImage) {
final Image oldImage = image;
image = newImage;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, ICompositeFormPackage.COMPOSITE_FORM_PART__IMAGE,
oldImage, image));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isEnabled() {
return enabled;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setEnabled(boolean newEnabled) {
final boolean oldEnabled = enabled;
enabled = newEnabled;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, ICompositeFormPackage.COMPOSITE_FORM_PART__ENABLED,
oldEnabled, enabled));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isOpen() {
return open;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setOpen(boolean newOpen) {
final boolean oldOpen = open;
open = newOpen;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, ICompositeFormPackage.COMPOSITE_FORM_PART__OPEN,
oldOpen, open));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public ICompositeFormPartOperations getOperations() {
return operations;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setOperations(ICompositeFormPartOperations newOperations) {
final ICompositeFormPartOperations oldOperations = operations;
operations = newOperations;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
ICompositeFormPackage.COMPOSITE_FORM_PART__OPERATIONS, oldOperations, operations));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public IFormCreator getFormCreator() {
return formCreator;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setFormCreator(IFormCreator newFormCreator) {
final IFormCreator oldFormCreator = formCreator;
formCreator = newFormCreator;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
ICompositeFormPackage.COMPOSITE_FORM_PART__FORM_CREATOR, oldFormCreator, formCreator));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
if (eInternalContainer() != null) {
msgs = eBasicRemoveFromContainer(msgs);
}
return basicSetForm((ICompositeForm) otherEnd, msgs);
}
return super.eInverseAdd(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
return basicSetForm(null, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
switch (eContainerFeatureID()) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
return eInternalContainer().eInverseRemove(this, ICompositeFormPackage.COMPOSITE_FORM__PARTS,
ICompositeForm.class, msgs);
}
return super.eBasicRemoveFromContainerFeature(msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
return getForm();
case ICompositeFormPackage.COMPOSITE_FORM_PART__DESCRIPTOR:
return getDescriptor();
case ICompositeFormPackage.COMPOSITE_FORM_PART__TITLE:
return getTitle();
case ICompositeFormPackage.COMPOSITE_FORM_PART__IMAGE:
return getImage();
case ICompositeFormPackage.COMPOSITE_FORM_PART__ENABLED:
return isEnabled();
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPEN:
return isOpen();
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPERATIONS:
return getOperations();
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM_CREATOR:
return getFormCreator();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
setForm((ICompositeForm) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__DESCRIPTOR:
setDescriptor((ICompositeFormPartDescriptor) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__TITLE:
setTitle((String) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__IMAGE:
setImage((Image) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__ENABLED:
setEnabled((Boolean) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPEN:
setOpen((Boolean) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPERATIONS:
setOperations((ICompositeFormPartOperations) newValue);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM_CREATOR:
setFormCreator((IFormCreator) newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
setForm((ICompositeForm) null);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__DESCRIPTOR:
setDescriptor((ICompositeFormPartDescriptor) null);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__TITLE:
setTitle(TITLE_EDEFAULT);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__IMAGE:
setImage(IMAGE_EDEFAULT);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__ENABLED:
setEnabled(ENABLED_EDEFAULT);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPEN:
setOpen(OPEN_EDEFAULT);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPERATIONS:
setOperations(OPERATIONS_EDEFAULT);
return;
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM_CREATOR:
setFormCreator(FORM_CREATOR_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM:
return getForm() != null;
case ICompositeFormPackage.COMPOSITE_FORM_PART__DESCRIPTOR:
return descriptor != null;
case ICompositeFormPackage.COMPOSITE_FORM_PART__TITLE:
return TITLE_EDEFAULT == null ? title != null : !TITLE_EDEFAULT.equals(title);
case ICompositeFormPackage.COMPOSITE_FORM_PART__IMAGE:
return IMAGE_EDEFAULT == null ? image != null : !IMAGE_EDEFAULT.equals(image);
case ICompositeFormPackage.COMPOSITE_FORM_PART__ENABLED:
return enabled != ENABLED_EDEFAULT;
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPEN:
return open != OPEN_EDEFAULT;
case ICompositeFormPackage.COMPOSITE_FORM_PART__OPERATIONS:
return OPERATIONS_EDEFAULT == null ? operations != null : !OPERATIONS_EDEFAULT.equals(operations);
case ICompositeFormPackage.COMPOSITE_FORM_PART__FORM_CREATOR:
return FORM_CREATOR_EDEFAULT == null ? formCreator != null : !FORM_CREATOR_EDEFAULT.equals(formCreator);
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
final StringBuffer result = new StringBuffer(super.toString());
result.append(" (title: ");
result.append(title);
result.append(", image: ");
result.append(image);
result.append(", enabled: ");
result.append(enabled);
result.append(", open: ");
result.append(open);
result.append(", operations: ");
result.append(operations);
result.append(", formCreator: ");
result.append(formCreator);
result.append(')');
return result.toString();
}
protected void handleChanges(Notification msg) {
if (msg.isTouch()) return;
/*
* Ignore the initialization...
*/
if (getForm() == null) return;
if (msg.getFeature() == ICompositeFormPackage.Literals.COMPOSITE_FORM_PART__ENABLED
|| msg.getFeature() == ICompositeFormPackage.Literals.COMPOSITE_FORM_PART__OPEN) {
updateUI();
}
}
@Override
public void updateUI() {
removeAllChildren();
if (!isEnabled()) {
createEmptyComposite();
return;
}
try {
getOperations().createUI(this);
getFormCreator().finish();
// getFormCreator().getContext().finish(FinishOption.IF_ALREADY_FINISHED);
} catch (final Exception ex) {
LogUtils.error(getDescriptor().getFactory().getConfigurationElement(), ex);
}
}
/**
*
*/
private void removeAllChildren() {
final Composite top = getFormCreator().getTop();
try {
top.setRedraw(false);
final Control[] children = top.getChildren();
for (int i = children.length - 1; i >= 0; i--) {
children[i].dispose();
}
} finally {
top.setRedraw(true);
}
}
private void createEmptyComposite() {
final Composite top = getFormCreator().getTop();
// final Label c = new Label(myTop, SWT.NONE);
// c.setText("");
final Composite c = new Composite(top, SWT.NONE);
c.setSize(new Point(1, 1));
// c.setBackground(c.getDisplay().getSystemColor(SWT.COLOR_BLUE));
c.setLayout(new Layout() {
@Override
protected void layout(Composite composite, boolean flushCache) {
}
@Override
protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
return new Point(1, 1);
}
});
}
} // CompositeFormPartImpl