blob: faf414831247a350e382c7eefda5664ef6aedb92 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2013, 2020 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.internal.rtm.ggplot.ui.editors;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.viewers.IFilter;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.statet.ecommons.emf.core.databinding.IEMFEditContext;
import org.eclipse.statet.ecommons.emf.ui.databinding.DetailContext;
import org.eclipse.statet.ecommons.emf.ui.forms.EFPropertySection;
import org.eclipse.statet.rtm.ggplot.GGPlotPackage.Literals;
import org.eclipse.statet.rtm.ggplot.TextStyle;
public abstract class TextStylePropertySection extends EFPropertySection {
public static class MainTitle extends TextStylePropertySection {
public MainTitle() {
}
@Override
protected EStructuralFeature getFeature() {
return Literals.GG_PLOT__MAIN_TITLE_STYLE;
}
@Override
protected String getLabel() {
return "the Main Title";
}
}
public static class AxXLabel extends TextStylePropertySection {
public AxXLabel() {
}
@Override
protected EStructuralFeature getFeature() {
return Literals.GG_PLOT__AX_XLABEL_STYLE;
}
@Override
protected String getLabel() {
return "the Label of the x-Axis";
}
}
public static class AxYLabel extends TextStylePropertySection {
public AxYLabel() {
}
@Override
protected EStructuralFeature getFeature() {
return Literals.GG_PLOT__AX_YLABEL_STYLE;
}
@Override
protected String getLabel() {
return "the Label of the y-Axis";
}
}
public static class AxXText extends TextStylePropertySection {
public AxXText() {
}
@Override
protected EStructuralFeature getFeature() {
return Literals.GG_PLOT__AX_XTEXT_STYLE;
}
@Override
protected String getLabel() {
return "the Text of the x-Axis";
}
}
public static class AxYText extends TextStylePropertySection {
public AxYText() {
}
@Override
protected EStructuralFeature getFeature() {
return Literals.GG_PLOT__AX_YTEXT_STYLE;
}
@Override
protected String getLabel() {
return "the Text of the y-Axis";
}
}
public static class LayerText extends TextStylePropertySection {
public LayerText() {
}
@Override
protected IFilter getFilter() {
return LayerTextStyleFilter.INSTANCE;
}
@Override
protected String getLabel() {
return "the Layer";
}
}
private TextStyleSection formSection;
private IObservableValue value;
protected TextStylePropertySection() {
}
protected EStructuralFeature getFeature() {
return null;
}
protected IFilter getFilter() {
return null;
}
protected abstract String getLabel();
@Override
protected void createContent(final Composite parent) {
this.formSection= new TextStyleSection(this, parent, getLabel());
// this.formSection.getSection().setLayoutData(new ColumnLayoutData(300));
this.formSection.getSection().setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL));
}
@Override
protected void initBindings() {
final IEMFEditContext context= createContext();
this.formSection.addBindings(context);
}
protected IEMFEditContext createContext() {
final IEMFEditContext rootContext= getRootContext();
final IObservableValue observable;
if (getFeature() != null) {
observable= EMFProperties.value(getFeature()).observeDetail(rootContext.getBaseObservable());
}
else {
observable= new WritableValue<>(getEditor().getDataBinding().getRealm(), null, TextStyle.class);
observable.setValue(getEObject(getSelection()));
this.value= observable;
}
return new DetailContext<>(rootContext, observable);
}
@Override
public void setInput(final IWorkbenchPart part, final ISelection selection) {
super.setInput(part, selection);
if (this.value != null) {
this.value.setValue(getEObject(getSelection()));
}
}
protected TextStyle getEObject(final ISelection selection) {
if (selection instanceof IStructuredSelection) {
for (final Object element : ((IStructuredSelection) selection).toList()) {
if (element instanceof TextStyle) {
if (getFilter() == null || getFilter().select(element)) {
return (TextStyle) element;
}
}
}
}
return null;
}
}