package de.urszeidler.shr5.ecp.editor.pages; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; 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.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.dialogs.PatternFilter; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.wb.swt.ResourceManager; import com.google.common.collect.FluentIterable; import de.urszeidler.commons.functors.Predicate; import de.urszeidler.eclipse.shr5.AbstraktGegenstand; import de.urszeidler.eclipse.shr5.Credstick; import de.urszeidler.eclipse.shr5.CredstickTransaction; import de.urszeidler.eclipse.shr5.Fahrzeug; import de.urszeidler.eclipse.shr5.GeldWert; import de.urszeidler.eclipse.shr5.Quelle; import de.urszeidler.eclipse.shr5.ShoppingTransaction; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.ShrList; import de.urszeidler.eclipse.shr5.SourceBook; import de.urszeidler.eclipse.shr5.TransferAmount; import de.urszeidler.eclipse.shr5.Vertrag; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5.util.ShadowrunTools; import de.urszeidler.eclipse.shr5.util.Shr5Switch; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.editor.ShrReferenceManager; import de.urszeidler.shr5.ecp.editor.actions.ActionM2TDialog; import de.urszeidler.shr5.ecp.editor.widgets.FilterDropdownSelectionListener; import de.urszeidler.shr5.ecp.editor.widgets.SimpleTreeTableWidget; import de.urszeidler.shr5.ecp.preferences.PreferenceConstants; import de.urszeidler.shr5.ecp.util.DefaultLabelProvider; import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools; import de.urszeidler.shr5.runtime.ui.views.SimpleListContenProvider; public class TransactionsPage extends AbstractShr5Page<ShoppingTransaction> { private CredstickTransaction object; private EditingDomain editingDomain; private DataBindingContext m_bindingContext; private Text txtSearch; private Table table_1; private TableViewer tableViewer_1; private PatternFilter nameFilter; private ViewerFilter shrListFilter; private ViewerFilter typeFilter; private ViewerFilter sourceFilter; private SimpleTreeTableWidget treeTableWidgetEigenschaften; private SourceDropdownSelectionListener sourceFilterDropdown; private TypeDropdownSelectionListener typeFilterDropdown; private class SourceDropdownSelectionListener extends FilterDropdownSelectionListener<SourceBook> { public SourceDropdownSelectionListener(ToolItem dropdown) { super(dropdown); } @SuppressWarnings("unchecked") @Override protected Collection<SourceBook> getFilterItems() { Collection<?> collection = ItemPropertyDescriptor.getReachableObjectsOfType(object, Shr5Package.Literals.SOURCE_BOOK); return (Collection<SourceBook>)collection; } @Override protected void addFilterToWidget() { if (tableViewer_1 != null) { tableViewer_1.addFilter(sourceFilter); tableViewer_1.refresh(); } } @Override protected void removeFilterFromWidget() { if (tableViewer_1 != null) { tableViewer_1.removeFilter(sourceFilter); tableViewer_1.refresh(); } } @Override protected void refreshViewer() { if (tableViewer_1 != null) tableViewer_1.refresh(); } } // // private class SourceDropdownSelectionListener extends DropdownSelectionListener<SourceBook> { // private static final String ENTRY = "entry"; // private boolean filterActive = true; // private ILabelProvider labelprovider = new DefaultLabelProvider(); // private Set<SourceBook> sourceFilterValueList = new HashSet<SourceBook>(); // // public SourceDropdownSelectionListener(ToolItem dropdown) { // super(dropdown); // Collection<EObject> sourceBooks = getSourceBooks(); // for (EObject sourceBook : sourceBooks) { // add(labelprovider.getText(sourceBook), (SourceBook)sourceBook); // sourceFilterValueList.add((SourceBook)sourceBook); // } // // MenuItem menuItem = new MenuItem(menu, SWT.SEPARATOR); // menuItem = new MenuItem(menu, SWT.NONE); // menuItem.setText("filter none"); // menuItem.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // MenuItem[] items = menu.getItems(); // for (int i = 0; i < items.length; i++) { // MenuItem menuItem1 = items[i]; // Object data = menuItem1.getData(ENTRY); // if (data != null) { // sourceFilterValueList.remove((SourceBook)data); // menuItem1.notifyListeners(SWT.Selection, new Event()); // } // } // } // }); // menuItem = new MenuItem(menu, SWT.NONE); // menuItem.setText("filter all"); // menuItem.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // MenuItem[] items = menu.getItems(); // for (int i = 0; i < items.length; i++) { // MenuItem menuItem1 = items[i]; // Object data = menuItem1.getData(ENTRY); // if (data != null) { // sourceFilterValueList.add((SourceBook)data); // menuItem1.notifyListeners(SWT.Selection, new Event()); // } // } // } // }); // } // // private Collection<EObject> getSourceBooks() { // Collection<EObject> collection = ItemPropertyDescriptor.getReachableObjectsOfType(object, Shr5Package.Literals.SOURCE_BOOK); // return collection; // } // // @Override // protected void buttonPushed() { // if (filterActive) { // if (tableViewer_1 != null) { // tableViewer_1.removeFilter(sourceFilter); // tableViewer_1.refresh(); // } // dropdown.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/filter_off.gif")); // filterActive = false; // } else { // if (tableViewer_1 != null) { // tableViewer_1.addFilter(sourceFilter); // tableViewer_1.refresh(); // } // dropdown.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/filter_on.gif")); // filterActive = true; // } // } // // @Override // public void add(String item, final SourceBook action) { // final MenuItem menuItem = new MenuItem(menu, SWT.NONE); // menuItem.setText(item); // menuItem.setData(ENTRY, action); // sourceFilterValueList.add(action); // menuItem.setImage(labelprovider.getImage(action)); // // menuItem.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // if (sourceFilterValueList.contains(action)) { // menuItem.setImage(ResourceManager.decorateImage(labelprovider.getImage(action), // ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/overlay-critical.gif"))); // sourceFilterValueList.remove(action); // } else { // menuItem.setImage(labelprovider.getImage(action)); // sourceFilterValueList.add(action); // } // if (tableViewer_1 != null) // tableViewer_1.refresh(); // } // }); // } // // public Set<SourceBook> getSourceFilterValueList() { // return sourceFilterValueList; // } // // } // private class TypeDropdownSelectionListener extends FilterDropdownSelectionListener<EClass> { public TypeDropdownSelectionListener(ToolItem dropdown) { super(dropdown); } @Override protected Collection<EClass> getFilterItems() { EList<EClassifier> eClassifiers = Shr5Package.Literals.GELD_WERT.getEPackage().getEClassifiers(); return FluentIterable.from(eClassifiers).filter(EClass.class).filter(new com.google.common.base.Predicate<EClass>() { @Override public boolean apply(EClass ec) { return (!ec.isAbstract() && !ec.isInterface()) && (ec.getEAllSuperTypes().contains(Shr5Package.Literals.ABSTRAKT_GEGENSTAND) || ec.getEAllSuperTypes().contains(Shr5Package.Literals.FAHRZEUG) || ec.getEAllSuperTypes().contains(Shr5Package.Literals.VERTRAG)); } }).toList(); } @Override protected void addFilterToWidget() { if (tableViewer_1 != null) { tableViewer_1.addFilter(typeFilter); tableViewer_1.refresh(); } } @Override protected void removeFilterFromWidget() { if (tableViewer_1 != null) { tableViewer_1.removeFilter(typeFilter); tableViewer_1.refresh(); } } @Override protected void refreshViewer() { if (tableViewer_1 != null) tableViewer_1.refresh(); } } // // private class TypeDropdownSelectionListener extends DropdownSelectionListener<EClass> { // private boolean filterActive = true; // // public TypeDropdownSelectionListener(ToolItem dropdown) { // super(dropdown); // EList<EClassifier> eClassifiers = Shr5Package.Literals.GELD_WERT.getEPackage().getEClassifiers(); // for (EClassifier eClassifier : eClassifiers) { // if (eClassifier instanceof EClass) { // EClass ec = (EClass)eClassifier; // if (!ec.isAbstract() && !ec.isInterface()) // // if (ec.getEAllSuperTypes().contains(Shr5Package.Literals.GELD_WERT)) // if (ec.getEAllSuperTypes().contains(Shr5Package.Literals.ABSTRAKT_GEGENSTAND) // || ec.getEAllSuperTypes().contains(Shr5Package.Literals.FAHRZEUG) // || ec.getEAllSuperTypes().contains(Shr5Package.Literals.VERTRAG)) // // if (!ec.getEAllSuperTypes().contains(Shr5Package.Literals.KOERPER_PERSONA__KOERPER_MODS)) // add(ec); // } // } // // MenuItem menuItem = new MenuItem(menu, SWT.SEPARATOR); // menuItem = new MenuItem(menu, SWT.NONE); // menuItem.setText("filter none"); // menuItem.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // MenuItem[] items = menu.getItems(); // for (int i = 0; i < items.length; i++) { // MenuItem menuItem1 = items[i]; // Object data = menuItem1.getData("entry"); // if (data != null) { // typeFilterValueList.remove((EClass)data); // menuItem1.notifyListeners(SWT.Selection, new Event()); // } // } // } // }); // menuItem = new MenuItem(menu, SWT.NONE); // menuItem.setText("filter all"); // menuItem.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // MenuItem[] items = menu.getItems(); // for (int i = 0; i < items.length; i++) { // MenuItem menuItem1 = items[i]; // Object data = menuItem1.getData("entry"); // if (data != null) { // typeFilterValueList.add((EClass)data); // menuItem1.notifyListeners(SWT.Selection, new Event()); // } // } // } // }); // // } // // @Override // protected void buttonPushed() { // if (filterActive) { // if (tableViewer_1 != null) { // tableViewer_1.removeFilter(typeFilter); // tableViewer_1.refresh(); // } // filterActive = false; // dropdown.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/filter_off.gif")); // } else { // if (tableViewer_1 != null) { // tableViewer_1.addFilter(typeFilter); // tableViewer_1.refresh(); // } // filterActive = true; // dropdown.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/filter_on.gif")); // } // } // // private void add(EClass eObject) { // add(labelprovider.getText(eObject), eObject); // typeFilterValueList.add(eObject); // } // // @Override // public void add(String item, final EClass action) { // final MenuItem menuItem = new MenuItem(menu, SWT.NONE); // menuItem.setText(item); // menuItem.setData("entry", action); // menuItem.setImage(labelprovider.getImage(action)); // // menuItem.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // if (typeFilterValueList.contains(action)) { // menuItem.setImage(ResourceManager.decorateImage(labelprovider.getImage(action), // ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/overlay-critical.gif"))); // typeFilterValueList.remove(action); // } else { // menuItem.setImage(labelprovider.getImage(action)); // typeFilterValueList.add(action); // } // // if (tableViewer_1 != null) // tableViewer_1.refresh(); // } // }); // } // // } // private class ItemLabelProvider extends DefaultLabelProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) return getImage(element); if (columnIndex == 1) if (element instanceof Quelle) { Quelle q = (Quelle)element; if (q.getSrcBook() != null) return getImage(q.getSrcBook()); } return null; } @Override public String getColumnText(Object element, int columnIndex) { switch (columnIndex) { case 0: return getText(element); case 1: if (element instanceof Quelle) { Quelle q = (Quelle)element; if (q.getSrcBook() != null) return getText(q.getSrcBook()); } return "unset"; case 2: GeldWert geldWert = (GeldWert)element; if (geldWert.getWert() == null) return "0"; return String.format("%,.0f %s", geldWert.getWert(), store.getString(PreferenceConstants.CURRENCY_SYMBOL)); default: break; } return null; } } /** * Create the form page. * * @param id * @param title */ public TransactionsPage(String id, String title) { super(id, title); } /** * Create the form page. * * @param editor * @param id * @param title * @wbp.parser.constructor * @wbp.eval.method.parameter id "Some id" * @wbp.eval.method.parameter title "Some title" */ public TransactionsPage(FormEditor editor, String id, String title) { super(editor, id, title); this.object = Shr5Factory.eINSTANCE.createShoppingTransaction(); } public TransactionsPage(FormEditor editor, String id, String title, CredstickTransaction object) { super(editor, id, title); this.object = object; } public TransactionsPage(FormEditor editor, String id, String title, CredstickTransaction object, EditingDomain editingDomain, ReferenceManager manager1) { super(editor, id, title, manager1); this.object = object; this.editingDomain = editingDomain; EObject c1 = this.object.eContainer(); if (c1 instanceof Credstick) { Credstick c = (Credstick)c1; EObject c2 = c.eContainer(); if (c2 instanceof ManagedCharacter) { ManagedCharacter mc = (ManagedCharacter)c2; if (this.object.getDate() == null) this.object.setDate(ShadowrunManagmentTools.findCorrenspondingDate(mc)); if (this.object instanceof TransferAmount) { TransferAmount ta = (TransferAmount)this.object; if (ta.getSource() == null) ta.setSource(c); } } } } /** * Create contents of the form. * * @param managedForm */ @Override protected void createFormContent(IManagedForm managedForm) { FormToolkit toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText(AdapterFactoryUtil.getInstance().getLabelProvider().getText(object)); Composite body = form.getBody(); toolkit.decorateFormHeading(form.getForm()); toolkit.paintBordersFor(body); if (object instanceof ShoppingTransaction) { form.getToolBarManager().add(new ActionM2TDialog(form.getShell(), object)); } managedForm.getForm().getBody().setLayout(new GridLayout(1, false)); Composite composite = new Composite(managedForm.getForm().getBody(), SWT.NONE); composite.setLayout(new GridLayout(3, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().adapt(composite); managedForm.getToolkit().paintBordersFor(composite); if (object instanceof ShoppingTransaction && ((ShoppingTransaction)object).getAmount() == null) createShoppingSection(managedForm); // ------------------------------------ m_bindingContext = initDataBindings(); createFormBuilder(managedForm); emfFormBuilder.addTextEntry(Shr5Package.Literals.CREDSTICK_TRANSACTION__DATE, composite, new DateEntryFactory(toolkit)); emfFormBuilder.addTextEntry(Shr5Package.Literals.CREDSTICK_TRANSACTION__DESCRIPTION, composite); if (object instanceof ShoppingTransaction) { if (((ShoppingTransaction)object).getAmount() == null) { emfFormBuilder.addTextEntry(Shr5Package.Literals.SHOPPING_TRANSACTION__CACULATED_COSTS, composite, new LabelMoneyEntry()); emfFormBuilder.addTextEntry(Shr5Package.Literals.SHOPPING_TRANSACTION__FEE, composite); } else { emfFormBuilder.addTextEntry(Shr5Package.Literals.CREDSTICK_TRANSACTION__AMOUNT, composite, new LabelMoneyEntry()); emfFormBuilder.addTextEntry(Shr5Package.Literals.SHOPPING_TRANSACTION__FEE, composite, new LabelMoneyEntry()); } treeTableWidgetEigenschaften = new SimpleTreeTableWidget(composite, "", SWT.NONE, object, Shr5Package.Literals.SHOPPING_TRANSACTION__ITEMS, toolkit, mananger, editingDomain, this); GridData layoutData = new GridData(SWT.FILL, SWT.TOP, false, true, 3, 1); layoutData.heightHint = 150; treeTableWidgetEigenschaften.setLayoutData(layoutData); managedForm.getToolkit().adapt(treeTableWidgetEigenschaften); managedForm.getToolkit().paintBordersFor(treeTableWidgetEigenschaften); } else if (object instanceof TransferAmount) { if (object.getAmount() == null) { emfFormBuilder.addTextEntry(Shr5Package.Literals.TRANSFER_AMOUNT__AMOUNT_TO_TRANSFER, composite); } else { emfFormBuilder.addTextEntry(Shr5Package.Literals.CREDSTICK_TRANSACTION__AMOUNT, composite, new LabelMoneyEntry()); } emfFormBuilder.addTextEntry(Shr5Package.Literals.TRANSFER_AMOUNT__SOURCE, composite); emfFormBuilder.addTextEntry(Shr5Package.Literals.TRANSFER_AMOUNT__DEST, composite); } else { emfFormBuilder.addTextEntry(Shr5Package.Literals.CREDSTICK_TRANSACTION__AMOUNT, composite); } emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); if (object.getAmount() == null) if (object instanceof TransferAmount) { final TransferAmount ta = (TransferAmount)object; Button button = new Button(composite, SWT.PUSH); button.setText("do transfer"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (ta.getDest() != null) { TransferAmount ta1 = Shr5Factory.eINSTANCE.createTransferAmount(); ta1.setAmount(ta.getAmountToTransfer()); ta1.setSource(ta.getSource()); ta1.setDest(ta.getDest()); ta1.setDate(ta.getDate()); ta1.setDescription(ta.getDescription()); ta.getDest().getTransactionlog().add(ta1); ta.setAmount(ta.getAmountToTransfer().negate()); getEditor().close(true); } } }); } managedForm.reflow(true); } /** * @param managedForm */ private void createShoppingSection(IManagedForm managedForm) { Section sctnBuyItems = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR); sctnBuyItems.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); managedForm.getToolkit().paintBordersFor(sctnBuyItems); sctnBuyItems.setText("Buy items"); sctnBuyItems.setExpanded(true); Composite composite_1 = managedForm.getToolkit().createComposite(sctnBuyItems, SWT.NONE); managedForm.getToolkit().paintBordersFor(composite_1); sctnBuyItems.setClient(composite_1); composite_1.setLayout(new GridLayout(1, false)); Composite composite_3 = managedForm.getToolkit().createComposite(composite_1, SWT.NONE); composite_3.setLayout(new GridLayout(1, false)); composite_3.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); composite_3.setBounds(0, 0, 64, 64); managedForm.getToolkit().paintBordersFor(composite_3); Composite composite_2 = new Composite(composite_3, SWT.NONE); GridData gd_composite_2 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_composite_2.widthHint = 353; composite_2.setLayoutData(gd_composite_2); managedForm.getToolkit().adapt(composite_2); managedForm.getToolkit().paintBordersFor(composite_2); ViewerComparator nameSorter = new ViewerComparator() { public int compare(Viewer viewer, Object e1, Object e2) { String t1 = labelprovider.getText(e1); String t2 = labelprovider.getText(e2); return t1.compareTo(t2); }; }; composite_2.setLayout(new GridLayout(4, false)); shrListFilter = new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof EObject) { EObject eo = (EObject)element; EObject eContainer = eo.eContainer(); if (!(eContainer instanceof ShrList)) { return false; } } return true; } }; typeFilter = new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof EObject) { EObject eo = (EObject)element; return typeFilterDropdown.getFilterValues().contains(eo.eClass()); } return true; } }; sourceFilter = new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof Quelle) { Quelle q = (Quelle)element; return sourceFilterDropdown.getFilterValues().contains(q.getSrcBook()); } return true; } }; nameFilter = new PatternFilter() { @Override protected boolean isParentMatch(Viewer viewer, Object element) { return viewer instanceof AbstractTreeViewer && super.isParentMatch(viewer, element); } }; txtSearch = new Text(composite_2, SWT.BORDER); txtSearch.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { nameFilter.setPattern(txtSearch.getText()); if (tableViewer_1 != null) tableViewer_1.refresh(); } }); txtSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().adapt(txtSearch, true, true); ToolBar toolBar = new ToolBar(composite_2, SWT.FLAT | SWT.RIGHT); toolBar.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().adapt(toolBar); managedForm.getToolkit().paintBordersFor(toolBar); ToolItem tltmType = new ToolItem(toolBar, SWT.DROP_DOWN); tltmType.setText("type"); tltmType.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/filter_on.gif")); typeFilterDropdown = new TypeDropdownSelectionListener(tltmType); tltmType.addSelectionListener(typeFilterDropdown); ToolItem tltmSource = new ToolItem(toolBar, SWT.DROP_DOWN); tltmSource.setText("source"); tltmSource.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/filter_on.gif")); sourceFilterDropdown = new SourceDropdownSelectionListener(tltmSource); ToolItem tltmAdd = new ToolItem(toolBar, SWT.NONE); tltmAdd.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addSelectedObjectsToList(); } }); tltmAdd.setText("add"); tltmAdd.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/addButton.png")); tltmAdd.setText(Messages.TreeTableWidget_add_element); ToolItem tltmRemove = new ToolItem(toolBar, SWT.NONE); tltmRemove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { treeTableWidgetEigenschaften.removeSelectedElement(); } }); tltmRemove.setText("remove"); tltmRemove.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/removeButton.png")); tltmRemove.setText(Messages.TreeTableWidget_remove_element); tltmRemove.setToolTipText(Messages.TreeTableWidget_remove_element_tooltip); ToolItem tltmBuy = new ToolItem(toolBar, SWT.NONE); tltmBuy.setText("buy"); tltmBuy.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/newyen.png")); tltmBuy.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { EObject eContainer = object.eContainer(); if (eContainer instanceof Credstick) { Credstick c = (Credstick)eContainer; EObject c1 = c.eContainer(); if (c1 instanceof ManagedCharacter) { final ManagedCharacter character = (ManagedCharacter)c1; ShoppingTransaction st = (ShoppingTransaction)object; object.setAmount(st.getCaculatedCosts().negate()); EList<GeldWert> items = st.getItems(); Shr5Switch<Object> characterAdder = new Shr5Switch<Object>() { public Object caseAbstraktGegenstand(AbstraktGegenstand object) { character.getInventar().add(object); return null; }; public Object caseVertrag(Vertrag object) { character.getContracts().add(object); return null; }; public Object caseFahrzeug(Fahrzeug object) { character.getVehicels().add(object); return null; }; }; ArrayList<GeldWert> arrayList = new ArrayList<GeldWert>(); for (GeldWert geldWert : items) { EObject eObject = ShrReferenceManager.copyWithParentId(geldWert); characterAdder.doSwitch(eObject); arrayList.add((GeldWert)eObject); } st.getItems().clear(); st.getItems().addAll(arrayList); getEditor().close(true); } } } }); tltmSource.addSelectionListener(sourceFilterDropdown); tableViewer_1 = new TableViewer(composite_3, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); getSite().setSelectionProvider(tableViewer_1); tableViewer_1.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { addSelectedObjectsToList(); } }); table_1 = tableViewer_1.getTable(); table_1.setLinesVisible(true); table_1.setHeaderVisible(true); GridData gd_table_1 = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1); gd_table_1.heightHint = 300; table_1.setLayoutData(gd_table_1); managedForm.getToolkit().paintBordersFor(table_1); TableColumn tblclmnName = new TableColumn(table_1, SWT.LEFT); tblclmnName.setWidth(320); tblclmnName.setText("name"); TableColumn tblclmnSource = new TableColumn(table_1, SWT.NONE); tblclmnSource.setWidth(230); tblclmnSource.setText("source"); TableColumn tblclmnPrice = new TableColumn(table_1, SWT.RIGHT); tblclmnPrice.setResizable(false); tblclmnPrice.setWidth(100); tblclmnPrice.setText("price"); tableViewer_1.setContentProvider(new SimpleListContenProvider(new AdapterFactoryContentProvider(AdapterFactoryUtil.getInstance() .getAdapterFactory()))); tableViewer_1.setLabelProvider(new ItemLabelProvider()); tableViewer_1.setComparator(nameSorter); tableViewer_1.setInput(getAllObjects()); tableViewer_1.addFilter(nameFilter); tableViewer_1.addFilter(shrListFilter); tableViewer_1.addFilter(typeFilter); tableViewer_1.addFilter(sourceFilter); } @SuppressWarnings("unchecked") private void addSelectedObjectsToList() { StructuredSelection selection = (StructuredSelection)tableViewer_1.getSelection(); for (EObject eo : ShadowrunTools.toIterable(selection.iterator())) { ((ShoppingTransaction)object).getItems().add((GeldWert)eo); } } /** * @return */ private List<EObject> getAllObjects() { return ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (input instanceof GeldWert) { return true; } return false; } }); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // return bindingContext; } @Override protected EditingDomain getEditingDomain() { return editingDomain; } }