package name.abuchen.portfolio.ui.views; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.wizard.WizardDialog; import name.abuchen.portfolio.model.AccountTransaction; import name.abuchen.portfolio.model.Portfolio; import name.abuchen.portfolio.model.PortfolioTransaction; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.ui.AbstractFinanceView; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.dialogs.transactions.AccountTransactionDialog; import name.abuchen.portfolio.ui.dialogs.transactions.OpenDialogAction; import name.abuchen.portfolio.ui.dialogs.transactions.SecurityTransactionDialog; import name.abuchen.portfolio.ui.dialogs.transactions.SecurityTransferDialog; import name.abuchen.portfolio.ui.util.BookmarkMenu; import name.abuchen.portfolio.ui.wizards.splits.StockSplitWizard; public class SecurityContextMenu { private AbstractFinanceView owner; public SecurityContextMenu(AbstractFinanceView owner) { this.owner = owner; } public void menuAboutToShow(IMenuManager manager, final Security security) { this.menuAboutToShow(manager, security, null); } public void menuAboutToShow(IMenuManager manager, final Security security, final Portfolio portfolio) { if (owner.getClient().getSecurities().isEmpty()) return; // if the security has no currency code, e.g. is an index, then show now // menus to create transactions if (security != null && security.getCurrencyCode() == null) { manager.add(new BookmarkMenu(owner.getPart(), security)); return; } new OpenDialogAction(owner, Messages.SecurityMenuBuy + "...") //$NON-NLS-1$ .type(SecurityTransactionDialog.class) // .parameters(PortfolioTransaction.Type.BUY) // .with(portfolio) // .with(security) // .addTo(manager); new OpenDialogAction(owner, Messages.SecurityMenuSell + "...") //$NON-NLS-1$ .type(SecurityTransactionDialog.class) // .parameters(PortfolioTransaction.Type.SELL) // .with(portfolio) // .with(security) // .addTo(manager); new OpenDialogAction(owner, Messages.SecurityMenuDividends + "...") //$NON-NLS-1$ .type(AccountTransactionDialog.class) // .parameters(AccountTransaction.Type.DIVIDENDS) // .with(portfolio != null ? portfolio.getReferenceAccount() : null) // .with(security) // .addTo(manager); new OpenDialogAction(owner, AccountTransaction.Type.TAX_REFUND + "...") //$NON-NLS-1$ .type(AccountTransactionDialog.class) // .parameters(AccountTransaction.Type.TAX_REFUND) // .with(portfolio != null ? portfolio.getReferenceAccount() : null) // .with(security) // .addTo(manager); manager.add(new Action(Messages.SecurityMenuStockSplit) { @Override public void run() { StockSplitWizard wizard = new StockSplitWizard(owner.getClient(), security); WizardDialog dialog = new WizardDialog(owner.getActiveShell(), wizard); if (dialog.open() == Dialog.OK) { owner.markDirty(); owner.notifyModelUpdated(); } } }); if (owner.getClient().getActivePortfolios().size() > 1) { manager.add(new Separator()); new OpenDialogAction(owner, Messages.SecurityMenuTransfer) // .type(SecurityTransferDialog.class) // .with(portfolio) // .with(security) // .addTo(manager); } manager.add(new Separator()); new OpenDialogAction(owner, PortfolioTransaction.Type.DELIVERY_INBOUND.toString() + "...") //$NON-NLS-1$ .type(SecurityTransactionDialog.class) // .parameters(PortfolioTransaction.Type.DELIVERY_INBOUND) // .with(portfolio) // .with(security) // .addTo(manager); new OpenDialogAction(owner, PortfolioTransaction.Type.DELIVERY_OUTBOUND.toString() + "...") //$NON-NLS-1$ .type(SecurityTransactionDialog.class) // .parameters(PortfolioTransaction.Type.DELIVERY_OUTBOUND) // .with(portfolio) // .with(security) // .addTo(manager); if (security != null) { manager.add(new Separator()); manager.add(new BookmarkMenu(owner.getPart(), security)); } } }