package de.urszeidler.shr5.runtime.ui.widgets; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.map.IObservableMap; import org.eclipse.emf.databinding.EMFObservables; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; 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.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; 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.ui.forms.widgets.FormToolkit; import org.eclipse.wb.swt.ResourceManager; import de.urszeidler.eclipse.shr5.Cyberdeck; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder; import de.urszeidler.emf.commons.ui.util.FormbuilderEntry.EntryFactory; import de.urszeidler.shr5.ecp.editor.widgets.WidgetTools; import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools; public class CyberdeckWidget extends Composite { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private DataBindingContext m_bindingContext; private Cyberdeck object; private Label lblZugriffbasis; private EditingDomain editingDomain; private TableViewer treeViewer; private EmfFormBuilder emfFormBuilder; private EmfFormBuilder emfFormBuilder1; /** * Create the composite. * * @param parent * @param style * @param editingDomain */ public CyberdeckWidget(Composite parent, int style, Cyberdeck object, EditingDomain editingDomain) { super(parent, style); this.object = object; this.editingDomain = editingDomain; addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); emfFormBuilder.dispose(); emfFormBuilder1.dispose(); } }); toolkit.adapt(this); toolkit.paintBordersFor(this); EntryFactory labelFactory = WidgetTools.createLabelExtreyFactory(editingDomain); emfFormBuilder = new EmfFormBuilder(toolkit, AdapterFactoryUtil.getInstance().getItemDelegator(), AdapterFactoryUtil.getInstance() .getLabelProvider(), editingDomain); emfFormBuilder.setBorderStyle(SWT.NONE); emfFormBuilder1 = new EmfFormBuilder(toolkit, AdapterFactoryUtil.getInstance().getItemDelegator(), AdapterFactoryUtil.getInstance() .getLabelProvider(), editingDomain); // emfFormBuilder1.setManager(mananger); emfFormBuilder1.setBorderStyle(SWT.NONE); if (object.getPan() == null) object.setPan(Shr5Factory.eINSTANCE.createPersonalAreaNetwork()); // composite_runtime.layout(true,true); setLayout(new GridLayout(3, false)); Composite composite_1 = new Composite(this, SWT.NONE); composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1)); toolkit.adapt(composite_1); toolkit.paintBordersFor(composite_1); composite_1.setLayout(new GridLayout(3, false)); treeViewer = new TableViewer(composite_1, SWT.BORDER); final Table table = treeViewer.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1)); toolkit.paintBordersFor(table); Composite composite = toolkit.createComposite(composite_1, SWT.NONE); composite.setToolTipText("up"); composite.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, false, false, 1, 1)); composite.setLayout(new GridLayout(1, false)); toolkit.paintBordersFor(composite); Button btnUp = toolkit.createButton(composite, "", SWT.NONE); btnUp.setToolTipText("up"); btnUp.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/up.png")); btnUp.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { int selectionIndex = table.getSelectionIndex(); if (selectionIndex > 0) CyberdeckWidget.this.object.getConfiguration().move(selectionIndex - 1, selectionIndex); treeViewer.refresh(true); } }); Button btnDown = toolkit.createButton(composite, "", SWT.NONE); btnDown.setToolTipText("down"); btnDown.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/down.png")); btnDown.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { int selectionIndex = table.getSelectionIndex(); if (selectionIndex < 3) CyberdeckWidget.this.object.getConfiguration().move(selectionIndex + 1, selectionIndex); treeViewer.refresh(true); } }); m_bindingContext = initDataBindings(); emfFormBuilder.addTextEntry(Shr5Package.Literals.MATRIX_ATTRIBUTES__DATENVERARBEITUNG, this, labelFactory); emfFormBuilder.addTextEntry(Shr5Package.Literals.MATRIX_ATTRIBUTES__FIREWALL, this, labelFactory); emfFormBuilder.addTextEntry(Shr5Package.Literals.ACTIVE_MATIX_DEVICE__ANGRIFF, this, labelFactory); emfFormBuilder.addTextEntry(Shr5Package.Literals.ACTIVE_MATIX_DEVICE__SCHLEICHER, this, labelFactory); emfFormBuilder.addTextEntry(Shr5Package.Literals.MATRIX_ATTRIBUTES__CURRENT_MODUS, this); // new Label(this, SWT.NONE); // new Label(this, SWT.NONE); // new Label(this, SWT.NONE); // emfFormBuilder.addTextEntry(Shr5Package.Literals.CYBERDECK__CONFIGURATION, this); emfFormBuilder.addTextEntry(Shr5Package.Literals.CYBERDECK__RUNNING_PROGRAMS, this, WidgetTools.createControllGridData(80)); emfFormBuilder1.addTextEntry(Shr5Package.Literals.PERSONAL_AREA_NETWORK__SLAVES, this, WidgetTools.createControllGridData(80)); emfFormBuilder1.addTextEntry(Shr5Package.Literals.PERSONAL_AREA_NETWORK__SLAVE_MAX, this, labelFactory); emfFormBuilder.buildinComposite(m_bindingContext, this, object); emfFormBuilder1.buildinComposite(m_bindingContext, this, object.getPan()); lblZugriffbasis = new Label(this, SWT.NONE); toolkit.adapt(lblZugriffbasis, true, true); lblZugriffbasis.setText("Matrix Zustand"); new StateMonitorWidget(this, SWT.NONE, object.getMatrixZustandMax(), false); new Label(this, SWT.NONE); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // // // EMFEditBeansListObservableFactory treeObservableFactory = new EMFEditBeansListObservableFactory(EAttribute.class, editingDomain, // Literals.EMODEL_ELEMENT__EANNOTATIONS); // EMFTreeBeanAdvisor treeAdvisor = new EMFTreeBeanAdvisor(null, Literals.EMODEL_ELEMENT__EANNOTATIONS, null); // ObservableListTreeContentProvider treeContentProvider = new ObservableListTreeContentProvider(treeObservableFactory, treeAdvisor); ObservableListContentProvider listContentProvider = new ObservableListContentProvider(); IObservableMap[] observeMaps = EMFObservables.observeMaps(listContentProvider.getKnownElements(), new EStructuralFeature[]{ Shr5Package.Literals.CYBERDECK__CONFIGURATION }); treeViewer.setLabelProvider(new ObservableMapLabelProvider(observeMaps) { @Override public String getColumnText(Object element, int columnIndex) { return getText(element); } @Override public String getText(Object element) { if (element instanceof EAttribute) { EAttribute ea = (EAttribute)element; Object value = object.eGet(ea); int indexOf = object.getConfiguration().indexOf(ea); String attributeLabel = getAttributeLabel(indexOf); String featureName = ShadowrunEditingTools.toFeatureName(object, ea); return attributeLabel + ": " + value + " " + featureName; } return super.getText(element); } }); treeViewer.setContentProvider(listContentProvider); // IObservableList objectConfigurationObserveList = EMFEditObservables.observeList(Realm.getDefault(), editingDomain, object, Shr5Package.Literals.CYBERDECK__CONFIGURATION); treeViewer.setInput(objectConfigurationObserveList); // return bindingContext; } protected String getAttributeLabel(int indexOf) { switch (indexOf) { case 0: return ShadowrunEditingTools.toFeatureName(object, Shr5Package.Literals.MATRIX_ATTRIBUTES__FIREWALL); case 1: return ShadowrunEditingTools.toFeatureName(object, Shr5Package.Literals.MATRIX_ATTRIBUTES__DATENVERARBEITUNG); case 2: return ShadowrunEditingTools.toFeatureName(object, Shr5Package.Literals.ACTIVE_MATIX_DEVICE__SCHLEICHER); case 3: return ShadowrunEditingTools.toFeatureName(object, Shr5Package.Literals.ACTIVE_MATIX_DEVICE__ANGRIFF); default: return ""; } } }