package de.urszeidler.shr5.ecp.editor.widgets; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.conversion.IConverter; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.swt.ISWTObservableValue; import org.eclipse.jface.databinding.swt.IWidgetValueProperty; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; 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.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import de.urszeidler.eclipse.shr5.Beschreibbar; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.shr5.ecp.binding.PathToImageConverter; import de.urszeidler.shr5.ecp.dialogs.ImageChooseDialog; import de.urszeidler.shr5.ecp.editor.pages.Messages; public class BeschreibbarWidget extends Composite { private final FormToolkit toolkit; private Text textName; private Label imageLabel; private StyledText textBeschreibung; private DataBindingContext m_bindingContext; private EditingDomain editingDomain; private Beschreibbar beschreibbar; private Section sctnNewSection; private Composite composite; private Link link; private Link link_clear; /** * Create the composite. * * @param parent * @param style */ public BeschreibbarWidget(Composite parent1, int style) { super(parent1, style); toolkit = new FormToolkit(Display.getCurrent()); addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); } }); toolkit.adapt(this); toolkit.paintBordersFor(this); createWidgets(parent1, style); this.pack(); } /** * Create the composite. * * @param parent * @param style * @param editingDomain */ public BeschreibbarWidget(Composite parent, int style, Beschreibbar object, FormToolkit toolkit, EditingDomain editingDomain) { super(parent, style); this.toolkit = toolkit; this.beschreibbar = object; this.editingDomain = editingDomain; toolkit.adapt(this); toolkit.paintBordersFor(this); createWidgets(parent, style); this.pack(); } private void createWidgets(Composite parent1, int style) { setLayout(new FillLayout(SWT.HORIZONTAL)); sctnNewSection = toolkit.createSection(this, Section.EXPANDED | Section.TWISTIE | Section.TITLE_BAR); toolkit.paintBordersFor(sctnNewSection); sctnNewSection.setText(Messages.BeschreibbarWidget_sctnNewSection_text); sctnNewSection.setExpanded(true); Composite parent = new Composite(sctnNewSection, style); sctnNewSection.setClient(parent); toolkit.adapt(parent); toolkit.paintBordersFor(parent); parent.setLayout(new GridLayout(3, false)); parent.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblName = new Label(parent, SWT.NONE); toolkit.adapt(lblName, true, true); lblName.setText(Messages.BeschreibbarWidget_name); textName = new Text(parent, SWT.BORDER);// toolkit.createText(parent, "");// textName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); textName.setMessage(Messages.BeschreibbarWidget_name); toolkit.adapt(textName, true, true); imageLabel = new Label(parent, SWT.BORDER); imageLabel.setImage(null); GridData gd_imageLabel = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 2); gd_imageLabel.heightHint = 128; gd_imageLabel.minimumWidth = 128; gd_imageLabel.minimumHeight = 128; gd_imageLabel.widthHint = 128; imageLabel.setLayoutData(gd_imageLabel); toolkit.adapt(imageLabel, true, true); Label lblBeschreibbar = new Label(parent, SWT.NONE); lblBeschreibbar.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); toolkit.adapt(lblBeschreibbar, true, true); lblBeschreibbar.setText(Messages.BeschreibbarWidget_description); textBeschreibung = new StyledText(parent, SWT.BORDER | SWT.WRAP | SWT.MULTI);// toolkit.createText(parent, "", SWT.MULTI|SWT.BORDER); textBeschreibung.setToolTipText(Messages.BeschreibbarWidget_textBeschreibung_toolTipText); // textBeschreibung.setMessage(Messages.BeschreibbarWidget_description); GridData gd_textBeschreibung = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 2); gd_textBeschreibung.widthHint = 50; gd_textBeschreibung.heightHint = 74; textBeschreibung.setLayoutData(gd_textBeschreibung); toolkit.adapt(textBeschreibung, true, true); new Label(parent, SWT.NONE); composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1)); toolkit.adapt(composite); toolkit.paintBordersFor(composite); GridLayout gl_composite = new GridLayout(2, true); gl_composite.marginHeight = 0; composite.setLayout(gl_composite); link = new Link(composite, SWT.NONE); link.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1)); link.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ImageChooseDialog imageChooseDialog = new ImageChooseDialog(getShell(),beschreibbar.getImage()); if (imageChooseDialog.open() == Window.OK) { if (imageChooseDialog.getValue() != null) { Command create = SetCommand.create(editingDomain, beschreibbar, Shr5Package.Literals.BESCHREIBBAR__IMAGE, imageChooseDialog.getValue() ); editingDomain.getCommandStack().execute(create); } } } }); toolkit.adapt(link, true, true); link.setText(Messages.BeschreibbarWidget_link_text); link_clear = new Link(composite, SWT.NONE); link_clear.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1)); link_clear.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Command create = SetCommand.create(editingDomain, beschreibbar, Shr5Package.Literals.BESCHREIBBAR__IMAGE, null); editingDomain.getCommandStack().execute(create); } }); toolkit.adapt(link_clear, true, true); link_clear.setText(Messages.BeschreibbarWidget_link_clear_text); m_bindingContext = initDataBindings(); } protected DataBindingContext initDataBindings() { if (beschreibbar == null) return null; DataBindingContext bindingContext = new DataBindingContext(); // IWidgetValueProperty image = WidgetProperties.image(); ISWTObservableValue observedImage = image.observe(imageLabel); IObservableValue observeValue = EMFEditObservables.observeValue(editingDomain, beschreibbar, Shr5Package.Literals.BESCHREIBBAR__IMAGE); IConverter converter = null; converter = new PathToImageConverter(String.class, Image.class); UpdateValueStrategy toModel = new UpdateValueStrategy(); UpdateValueStrategy toWidget = new UpdateValueStrategy().setConverter(converter); bindingContext.bindValue(observedImage, observeValue, toModel, toWidget); // IObservableValue observeTextTextNameObserveWidget = WidgetProperties.text(SWT.Modify).observe(textName); IObservableValue beschreibbarNameObserveValue = EMFEditObservables.observeValue(editingDomain, beschreibbar, Shr5Package.Literals.BESCHREIBBAR__NAME); bindingContext.bindValue(observeTextTextNameObserveWidget, beschreibbarNameObserveValue, null, null); // IObservableValue observeTextTextBeschreibungObserveWidget = WidgetProperties.text(SWT.Modify).observe(textBeschreibung); IObservableValue beschreibbarBeschreibungObserveValue = EMFEditObservables.observeValue(editingDomain, beschreibbar, Shr5Package.Literals.BESCHREIBBAR__BESCHREIBUNG); bindingContext.bindValue(observeTextTextBeschreibungObserveWidget, beschreibbarBeschreibungObserveValue, null, null); // return bindingContext; } }