blob: dfbc1b850971e37e0980eef234ff5d6f91ca5e7f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency
* 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:
* Pierre Allard - initial API and implementation
* Regent L'Archeveque,
* Olivier L. Larouche
*
* SPDX-License-Identifier: EPL-1.0
*******************************************************************************/
package org.eclipse.apogy.common.emf.ui.composites;
import org.eclipse.apogy.common.emf.IFilter;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecp.ui.view.swt.ECPSWTViewRenderer;
import org.eclipse.emf.ecp.view.spi.model.VView;
import org.eclipse.emf.ecp.view.spi.provider.ViewProviderHelper;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FilterDetailsComposite<T> extends Composite {
private static final Logger Logger = LoggerFactory.getLogger(FilterDetailsComposite.class);
private IFilter<T> filter;
private final Composite compositeDetails;
public FilterDetailsComposite(Composite parent, int style) {
super(parent, style);
setLayout(new FillLayout(SWT.HORIZONTAL));
ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setLayout(new GridLayout());
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.addListener(SWT.Resize, event -> {
int width = scrolledComposite.getClientArea().width;
scrolledComposite.setMinSize(parent.computeSize(width, SWT.DEFAULT));
});
this.compositeDetails = new Composite(scrolledComposite, SWT.BORDER);
this.compositeDetails.setLayout(new GridLayout());
GridData gd_compositeDetails = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd_compositeDetails.minimumHeight = 100;
gd_compositeDetails.heightHint = 100;
gd_compositeDetails.minimumWidth = 250;
gd_compositeDetails.widthHint = 250;
this.compositeDetails.setLayoutData(gd_compositeDetails);
this.compositeDetails.layout();
scrolledComposite.setContent(this.compositeDetails);
}
public IFilter<T> getFilter() {
return this.filter;
}
public void setFilter(IFilter<T> filter) {
this.filter = filter;
if (filter != null) {
try {
createEMFForms(this.compositeDetails, filter);
} catch (Throwable t) {
Logger.error(t.getMessage(), t);
}
}
}
private void createEMFForms(Composite parent, EObject eObject) {
for (Control control : parent.getChildren()) {
control.dispose();
}
try {
VView viewModel = ViewProviderHelper.getView(eObject, null);
ECPSWTViewRenderer.INSTANCE.render(parent, eObject, viewModel);
} catch (Exception e) {
Logger.error("setCompositeContents(): Error while opening EMF Forms");
}
parent.layout();
}
}