package de.urszeidler.shr5.ecp.editor.pages.character; import java.text.DateFormat; import java.util.Date; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; 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.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; 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 de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage.Literals; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.editor.pages.AbstractShr5Page; import de.urszeidler.shr5.ecp.editor.pages.Messages; import de.urszeidler.shr5.ecp.editor.widgets.CharacterAdvacementWidget; public class CharacterAdvancementPage extends AbstractShr5Page<ManagedCharacter> { // private Changes currentChange; private ManagedCharacter object; private EditingDomain editingDomain; protected DataBindingContext m_bindingContext; private Table table; private TableViewer tableViewer; private Label lblKarmagaintvalue; private Label lblKarmaspendvalue; /** * Create the form page. * * @param id * @param title */ public CharacterAdvancementPage(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 CharacterAdvancementPage(FormEditor editor, String id, String title) { super(editor, id, title); object = Shr5managementFactory.eINSTANCE.createPlayerCharacter(); object.setPersona(Shr5Factory.eINSTANCE.createMudanPersona()); } /** * The main contructor. * * @param editor * @param id * @param title * @param object * @param editingDomain * @param manager */ public CharacterAdvancementPage(FormEditor editor, String id, String title, ManagedCharacter object, EditingDomain editingDomain, ReferenceManager manager) { super(editor, id, title); this.object = object; this.editingDomain = editingDomain; this.mananger = manager; } /** * Create contents of the form. * * @param managedForm */ @Override protected void createFormContent(IManagedForm managedForm) { final FormToolkit toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText(Messages.CharacterAdvancementPage_titel); Composite body = form.getBody(); toolkit.decorateFormHeading(form.getForm()); toolkit.paintBordersFor(body); managedForm.getForm().getBody().setLayout(new GridLayout(1, false)); Composite composite_advacements = new Composite(managedForm.getForm().getBody(), SWT.NONE); composite_advacements.setLayout(new FillLayout(SWT.HORIZONTAL)); GridData gd_composite_advacements = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1); gd_composite_advacements.heightHint = 106; composite_advacements.setLayoutData(gd_composite_advacements); managedForm.getToolkit().adapt(composite_advacements); managedForm.getToolkit().paintBordersFor(composite_advacements); CharacterAdvacementWidget characterAdvacementWidget = new CharacterAdvacementWidget(composite_advacements, SWT.NONE, editingDomain, object, toolkit); managedForm.getToolkit().adapt(characterAdvacementWidget); managedForm.getToolkit().paintBordersFor(characterAdvacementWidget); Composite composite_1 = new Composite(managedForm.getForm().getBody(), SWT.NONE); composite_1.setLayout(new FillLayout(SWT.HORIZONTAL)); GridData gd_composite_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); gd_composite_1.heightHint = 108; composite_1.setLayoutData(gd_composite_1); managedForm.getToolkit().adapt(composite_1); managedForm.getToolkit().paintBordersFor(composite_1); tableViewer = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION); table = tableViewer.getTable(); table.setHeaderVisible(true); managedForm.getToolkit().paintBordersFor(table); TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnName = tableViewerColumn.getColumn(); tblclmnName.setWidth(300); tblclmnName.setText(Messages.CharacterAdvancementPage_column_name); TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmNDate = tableViewerColumn_1.getColumn(); tblclmNDate.setResizable(false); tblclmNDate.setAlignment(SWT.CENTER); tblclmNDate.setWidth(90); tblclmNDate.setText(Messages.CharacterAdvancementPage_column_date); TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnDateApplied = tableViewerColumn_2.getColumn(); tblclmnDateApplied.setResizable(false); tblclmnDateApplied.setAlignment(SWT.CENTER); tblclmnDateApplied.setWidth(95); tblclmnDateApplied.setText(Messages.CharacterAdvancementPage_column_date_applied); TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnKarma = tableViewerColumn_3.getColumn(); tblclmnKarma.setResizable(false); tblclmnKarma.setAlignment(SWT.RIGHT); tblclmnKarma.setWidth(90); tblclmnKarma.setText(Messages.CharacterAdvancementPage_column_karma_cost); // Composite composite = new Composite(managedForm.getForm().getBody(), SWT.NONE); // composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); // composite.setLayout(new FillLayout(SWT.HORIZONTAL)); // managedForm.getToolkit().adapt(composite); // managedForm.getToolkit().paintBordersFor(composite); // // TreeTableWidget treeTableWidget = new TreeTableWidget(composite, "The list of changes", SWT.NONE, object, // Shr5managementPackage.Literals.MANAGED_CHARACTER__CHANGES, toolkit, mananger, editingDomain); // managedForm.getToolkit().adapt(treeTableWidget); // managedForm.getToolkit().paintBordersFor(treeTableWidget); Group grpSummary = new Group(managedForm.getForm().getBody(), SWT.NONE); grpSummary.setLayout(new GridLayout(1, false)); grpSummary.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); grpSummary.setText(Messages.CharacterAdvancementPage_bttn_summary); managedForm.getToolkit().adapt(grpSummary); managedForm.getToolkit().paintBordersFor(grpSummary); Composite composite_2 = new Composite(grpSummary, SWT.NONE); composite_2.setLayout(new GridLayout(4, false)); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); composite_2.setBounds(0, 0, 570, 64); managedForm.getToolkit().adapt(composite_2); managedForm.getToolkit().paintBordersFor(composite_2); managedForm.getToolkit().createLabel(composite_2, Messages.CharacterAdvancementPage_bttn_karma_gaint, SWT.NONE); lblKarmagaintvalue = managedForm.getToolkit().createLabel(composite_2, "karma_gaint_value", SWT.NONE); //$NON-NLS-1$ lblKarmagaintvalue.setAlignment(SWT.RIGHT); managedForm.getToolkit().createLabel(composite_2, Messages.CharacterAdvancementPage_bttn_karma_spend, SWT.NONE); lblKarmaspendvalue = managedForm.getToolkit().createLabel(composite_2, "karma_spend_value", SWT.NONE); //$NON-NLS-1$ lblKarmaspendvalue.setAlignment(SWT.RIGHT); Composite composite = new Composite(grpSummary, SWT.NONE); composite.setLayout(new GridLayout(1, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().adapt(composite); managedForm.getToolkit().paintBordersFor(composite); m_bindingContext = initDataBindings(); // -------- createFormBuilder(managedForm); } @Override protected EditingDomain getEditingDomain() { return editingDomain; } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // // ObservableListContentProvider listContentProvider = new ObservableListContentProvider(); IObservableMap[] observeMaps = EMFEditObservables.observeMaps(editingDomain, listContentProvider.getKnownElements(), new EStructuralFeature[]{ Literals.PERSONA_CHANGE__CHANGEABLE, Literals.CHANGES__DATE, Literals.CHANGES__DATE_APPLIED, Literals.CHANGES__KARMA_COST }); tableViewer.setLabelProvider(new ObservableMapLabelProvider(observeMaps) { public String getColumnText(Object element, int columnIndex) { if (columnIndex == 0) { return AdapterFactoryUtil.getInstance().getItemDelegator().getText(element); } if (columnIndex < attributeMaps.length) { Object result = attributeMaps[columnIndex].get(element); if (result instanceof Date) { return result == null ? "" : DateFormat.getDateInstance(DateFormat.SHORT).format(result); //$NON-NLS-1$ } } return super.getColumnText(element, columnIndex); } }); tableViewer.setContentProvider(listContentProvider); // IObservableList objectChangesObserveList = EMFEditObservables.observeList(Realm.getDefault(), editingDomain, object, Literals.MANAGED_CHARACTER__CHANGES); tableViewer.setInput(objectChangesObserveList); // IObservableValue observeTextLblKarmagaintvalueObserveWidget = WidgetProperties.text().observe(lblKarmagaintvalue); IObservableValue objectKarmaGaintObserveValue = EMFEditObservables.observeValue(editingDomain, object, Shr5managementPackage.Literals.MANAGED_CHARACTER__KARMA_GAINT); bindingContext.bindValue(observeTextLblKarmagaintvalueObserveWidget, objectKarmaGaintObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy()); // IObservableValue valueObserveWidget = WidgetProperties.text().observe(lblKarmaspendvalue); IObservableValue objectObserveValue = EMFEditObservables.observeValue(editingDomain, object, Shr5managementPackage.Literals.MANAGED_CHARACTER__KARMA_GAINT); bindingContext.bindValue(valueObserveWidget, objectObserveValue, new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy() { @Override public Object convert(Object value) { int karmaSpend = ShadowrunManagmentTools.getKarmaSpend(object) * -1; return super.convert(karmaSpend); } }); // return bindingContext; } }