package com.dgex.offspring.trader.mybuyorders; import javax.annotation.PostConstruct; import javax.inject.Inject; import nxt.Asset; import nxt.NxtException.ValidationException; import nxt.Transaction; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.ui.di.UIEventTopic; import org.eclipse.e4.ui.workbench.UIEvents; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.osgi.service.event.Event; import com.dgex.offspring.nxtCore.service.IAccount; import com.dgex.offspring.nxtCore.service.INxtService; import com.dgex.offspring.nxtCore.service.TransactionException; import com.dgex.offspring.swt.table.PaginationContainer; import com.dgex.offspring.trader.api.IAssetExchange; import com.dgex.offspring.ui.PromptFeeDeadline; import com.dgex.offspring.user.service.IUser; import com.dgex.offspring.user.service.IUserService; public class MyBuyOrdersPart { private Composite mainContainer; private MyBuyOrdersViewer viewer; private PaginationContainer paginationContainer; @PostConstruct public void postConstruct(final Composite parent, final IUserService userService, final INxtService nxt, IAssetExchange exchange) { parent.setLayout(new FillLayout()); mainContainer = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().spacing(0, 0).margins(0, 0).numColumns(1) .applyTo(mainContainer); paginationContainer = new PaginationContainer(mainContainer, SWT.NONE); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true) .applyTo(paginationContainer); viewer = new MyBuyOrdersViewer(paginationContainer.getViewerParent(), nxt, exchange, userService); paginationContainer.setTableViewer(viewer, 200); Menu contextMenu = new Menu(viewer.getTable()); viewer.getTable().setMenu(contextMenu); MenuItem itemCancelBuy = new MenuItem(contextMenu, SWT.PUSH); itemCancelBuy.setText("Cancel Buy Order"); itemCancelBuy.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) viewer .getSelection(); Object order = selection.getFirstElement(); if (order instanceof OrderWrapper) { Shell shell = parent.getShell(); IAccount sender = userService.getActiveUser().getAccount(); PromptFeeDeadline dialog = new PromptFeeDeadline(shell); dialog.setMinimumFee(1); dialog.setFee(1); if (dialog.open() != Window.OK) { showErrorMessage(shell, "Invalid fee and deadline"); return; } int fee = dialog.getFee(); short deadline = dialog.getDeadline(); try { Transaction t = nxt.createCancelBidOrderTransaction(sender, ((OrderWrapper) order).getId(), deadline, fee, null); showMessage( shell, "Successfully canceled buy order.\n\nTransaction: " + t.getStringId()); parent.getDisplay().timerExec(100, new Runnable() { @Override public void run() { viewer.setInput(1); } }); } catch (ValidationException e1) { showErrorMessage(shell, e1.getMessage()); } catch (TransactionException e1) { showErrorMessage(shell, e1.getMessage()); } } } }); } public void showErrorMessage(Shell shell, String message) { MessageDialog.openError(shell, "Cancel Buy Order Error", message); } public void showMessage(Shell shell, String message) { MessageDialog.openInformation(shell, "Cancel Buy Order", message); } @Inject @Optional private void onActiveUserChanged( @UIEventTopic(IUserService.TOPIC_ACTIVEUSER_CHANGED) IUser user) { if (viewer != null && !viewer.getControl().isDisposed()) { viewer.refresh(); } } @Inject @Optional public void partActivation( @UIEventTopic(UIEvents.UILifeCycle.ACTIVATE) Event event) { if (viewer != null && !viewer.getControl().isDisposed()) { viewer.refresh(); } } @Inject @Optional private void onAssetSelected( @UIEventTopic(IAssetExchange.TOPIC_ASSET_SELECTED) Asset asset) { if (viewer != null && !viewer.getControl().isDisposed()) { viewer.refresh(); } } }