package com.weecode.plugin.comics.ui.editors; import java.util.List; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.BeansObservables; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.map.IObservableMap; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; import org.eclipse.jface.databinding.viewers.ViewersObservables; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.EditorPart; import com.weecode.plugin.comics.model.TitleEditorModel; import com.weecode.plugin.comics.model.eo.Publisher; import com.weecode.plugin.comics.model.eo.Title; /** * * @author Jason Kusnier and Tim Hollosy * */ public class TitleEditor extends EditorPart { private ComboViewer comboViewer; private Combo combo; private Text formatText; private Text nameText; private Button editButton; private TableViewer tableViewer; private Table table; private DataBindingContext m_bindingContext; private Text publisherNameText; public static final String ID = "com.weecode.plugin.comics.ui.editors.TitleEditor"; //$NON-NLS-1$ private TitleEditorModel model; private Title title; private List allPublishers; private Display display; private WritableList titleList; @Override public void dispose() { m_bindingContext.dispose(); super.dispose(); } /** * Create contents of the editor part * @param parent */ @Override public void createPartControl(Composite parent) { display = parent.getDisplay(); Composite container = new Composite(parent, SWT.NONE); final GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; container.setLayout(gridLayout); final Label nameLabel = new Label(container, SWT.NONE); nameLabel.setText("Name:"); nameText = new Text(container, SWT.BORDER); final GridData gd_nameText = new GridData(SWT.FILL, SWT.CENTER, true, false); nameText.setLayoutData(gd_nameText); final Label formatLabel = new Label(container, SWT.NONE); formatLabel.setText("Format:"); formatText = new Text(container, SWT.BORDER); final GridData gd_formatText = new GridData(SWT.FILL, SWT.CENTER, true, false); formatText.setLayoutData(gd_formatText); final Label publisherLabel = new Label(container, SWT.NONE); publisherLabel.setText("Publisher"); comboViewer = new ComboViewer(container, SWT.READ_ONLY); comboViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(final SelectionChangedEvent event) { firePropertyChange(PROP_DIRTY); } }); combo = comboViewer.getCombo(); combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); m_bindingContext = initDataBindings(); } @Override public void setFocus() { // Set the focus } @Override public void doSave(IProgressMonitor monitor) { model.save(); firePropertyChange(PROP_DIRTY); } @Override public void doSaveAs() { // Do the Save As operation } @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { TitleEditorInput myInput = (TitleEditorInput)input; model = new TitleEditorModel(); //tell our persistence context which title we're intersted in. title = model.findTitle(myInput.getTitle()); allPublishers = myInput.getAllPublishers(); setSite(site); setInput(input); } @Override public boolean isDirty() { return model.isDirty(); } @Override public boolean isSaveAsAllowed() { return false; } protected DataBindingContext initDataBindings() { IObservableValue titleFormatObserveValue = BeansObservables.observeValue(title, "format"); IObservableValue titleNameObserveValue = BeansObservables.observeValue(title, "name"); IObservableValue comboViewerSelectionObserveSelection = ViewersObservables.observeSingleSelection(comboViewer); IObservableValue formatTextTextObserveWidget = SWTObservables.observeText(formatText, SWT.Modify); IObservableValue titlePublisherObserveValue = BeansObservables.observeValue(title, "publisher"); IObservableValue nameTextTextObserveWidget = SWTObservables.observeText(nameText, SWT.Modify); // ObservableListContentProvider comboViewerContentProviderList = new ObservableListContentProvider(); comboViewer.setContentProvider(comboViewerContentProviderList); // IObservableMap[] comboViewerLabelProviderMaps = BeansObservables.observeMaps(comboViewerContentProviderList.getKnownElements(), Publisher.class, new String[]{"name"}); comboViewer.setLabelProvider(new ObservableMapLabelProvider(comboViewerLabelProviderMaps)); // WritableList allPublishersWritableList = new WritableList(allPublishers, Publisher.class); comboViewer.setInput(allPublishersWritableList); // DataBindingContext bindingContext = new DataBindingContext(); // bindingContext.bindValue(nameTextTextObserveWidget, titleNameObserveValue, null, null); bindingContext.bindValue(formatTextTextObserveWidget, titleFormatObserveValue, null, null); bindingContext.bindValue(comboViewerSelectionObserveSelection, titlePublisherObserveValue, null, null); // return bindingContext; } }