use of name.abuchen.portfolio.model.Account in project portfolio by buchen.
the class AccountListView method createTopTable.
// //////////////////////////////////////////////////////////////
// top table: accounts
// //////////////////////////////////////////////////////////////
@Override
protected void createTopTable(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
TableColumnLayout layout = new TableColumnLayout();
container.setLayout(layout);
accounts = new TableViewer(container, SWT.FULL_SELECTION);
ColumnEditingSupport.prepare(accounts);
accountColumns = new // $NON-NLS-1$
ShowHideColumnHelper(// $NON-NLS-1$
AccountListView.class.getSimpleName() + "@top2", getPreferenceStore(), accounts, layout);
// $NON-NLS-1$
Column column = new NameColumn("0", Messages.ColumnAccount, SWT.None, 150);
column.setLabelProvider(new // NOSONAR
NameColumnLabelProvider() {
@Override
public Color getForeground(Object e) {
boolean isRetired = ((Account) e).isRetired();
return isRetired ? Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY) : null;
}
});
column.getEditingSupport().addListener(this);
accountColumns.addColumn(column);
column = new Column(Messages.ColumnBalance, SWT.RIGHT, 80);
column.setDescription(Messages.ColumnBalance_Description);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object e) {
return Values.Amount.format(((Account) e).getCurrentAmount(LocalDateTime.now().with(LocalTime.MAX)));
}
});
ColumnViewerSorter.create(o -> ((Account) o).getCurrentAmount(LocalDateTime.now().with(LocalTime.MAX))).attachTo(column);
accountColumns.addColumn(column);
column = new CurrencyColumn();
column.setEditingSupport(new CurrencyEditingSupport() {
@Override
public boolean canEdit(Object element) {
return ((Account) element).getTransactions().isEmpty();
}
});
accountColumns.addColumn(column);
column = new NoteColumn();
column.getEditingSupport().addListener(this);
accountColumns.addColumn(column);
accountColumns.createColumns();
accounts.getTable().setHeaderVisible(true);
accounts.getTable().setLinesVisible(true);
accounts.setContentProvider(ArrayContentProvider.getInstance());
resetInput();
accounts.refresh();
accounts.addSelectionChangedListener(event -> {
Account account = (Account) ((IStructuredSelection) event.getSelection()).getFirstElement();
updateOnAccountSelected(account);
transactions.setData(Account.class.toString(), account);
transactions.setInput(account != null ? account.getTransactions() : new ArrayList<AccountTransaction>(0));
transactions.refresh();
});
hookContextMenu(accounts.getTable(), this::fillAccountsContextMenu);
}
use of name.abuchen.portfolio.model.Account in project portfolio by buchen.
the class AccountListView method onModified.
@Override
public void onModified(Object element, Object newValue, Object oldValue) {
if (element instanceof AccountTransaction) {
AccountTransaction t = (AccountTransaction) element;
if (t.getCrossEntry() != null)
t.getCrossEntry().updateFrom(t);
accounts.refresh(true);
updateOnAccountSelected((Account) transactions.getData(Account.class.toString()));
}
markDirty();
}
use of name.abuchen.portfolio.model.Account in project portfolio by buchen.
the class AccountListView method fillAccountsContextMenu.
private // NOSONAR
void fillAccountsContextMenu(// NOSONAR
IMenuManager manager) {
final Account account = (Account) ((IStructuredSelection) accounts.getSelection()).getFirstElement();
if (account == null)
return;
accountMenu.menuAboutToShow(manager, account, null);
manager.add(new Separator());
manager.add(new Action(account.isRetired() ? Messages.AccountMenuActivate : Messages.AccountMenuDeactivate) {
@Override
public void run() {
account.setRetired(!account.isRetired());
markDirty();
resetInput();
}
});
manager.add(new Action(Messages.AccountMenuDelete) {
@Override
public void run() {
getClient().removeAccount(account);
markDirty();
resetInput();
}
});
}
use of name.abuchen.portfolio.model.Account in project portfolio by buchen.
the class ClientFilterMenu method buildItem.
private Item buildItem(Object[] selected) {
List<Portfolio> portfolios = Arrays.stream(selected).filter(o -> o instanceof Portfolio).map(o -> (Portfolio) o).collect(Collectors.toList());
List<Account> accounts = Arrays.stream(selected).filter(o -> o instanceof Account).map(o -> (Account) o).collect(Collectors.toList());
String label = // $NON-NLS-1$
String.join(// $NON-NLS-1$
", ", Arrays.stream(selected).map(String::valueOf).collect(Collectors.toList()));
String uuids = // $NON-NLS-1$
String.join(// $NON-NLS-1$
",", Arrays.stream(selected).map(o -> o instanceof Account ? ((Account) o).getUUID() : ((Portfolio) o).getUUID()).collect(Collectors.toList()));
return new Item(label, uuids, new PortfolioClientFilter(portfolios, accounts));
}
use of name.abuchen.portfolio.model.Account in project portfolio by buchen.
the class InvestmentPlanDialog method createFormElements.
@Override
protected void createFormElements(Composite editArea) {
//
// input elements
//
// name
Label lblName = new Label(editArea, SWT.RIGHT);
lblName.setText(Messages.ColumnName);
Text valueName = new Text(editArea, SWT.BORDER);
IValidator validator = value -> {
String v = (String) value;
return v != null && v.trim().length() > 0 ? ValidationStatus.ok() : ValidationStatus.error(MessageFormat.format(Messages.MsgDialogInputRequired, Messages.ColumnName));
};
context.bindValue(WidgetProperties.text(SWT.Modify).observe(valueName), BeanProperties.value(Properties.name.name()).observe(model), new UpdateValueStrategy().setAfterConvertValidator(validator), null);
// security
ComboInput securities = new ComboInput(editArea, Messages.ColumnSecurity);
securities.value.setInput(including(client.getActiveSecurities(), model().getSecurity()));
securities.bindValue(Properties.security.name(), Messages.MsgMissingSecurity);
securities.bindCurrency(Properties.securityCurrencyCode.name());
// portfolio
ComboInput portfolio = new ComboInput(editArea, Messages.ColumnPortfolio);
portfolio.value.setInput(including(client.getActivePortfolios(), model().getPortfolio()));
portfolio.bindValue(Properties.portfolio.name(), Messages.MsgMissingPortfolio);
// account
ComboInput account = new ComboInput(editArea, Messages.ColumnAccount);
List<Account> accounts = including(client.getActiveAccounts(), model().getAccount());
accounts.add(0, InvestmentPlanModel.DELIVERY);
account.value.setInput(accounts);
account.bindValue(Properties.account.name(), Messages.MsgMissingAccount);
account.bindCurrency(Properties.accountCurrencyCode.name());
// auto-generate
Label labelAutoGenerate = new Label(editArea, SWT.NONE);
labelAutoGenerate.setText(Messages.MsgCreateTransactionsAutomaticallyUponOpening);
Button buttonAutoGenerate = new Button(editArea, SWT.CHECK);
//
context.bindValue(//
WidgetProperties.selection().observe(buttonAutoGenerate), BeanProperties.value(Properties.autoGenerate.name()).observe(model));
// date
Label lblDate = new Label(editArea, SWT.RIGHT);
lblDate.setText(Messages.ColumnDate);
DatePicker valueDate = new DatePicker(editArea);
context.bindValue(new SimpleDateTimeDateSelectionProperty().observe(valueDate.getControl()), BeanProperties.value(Properties.start.name()).observe(model));
// interval
List<Integer> available = new ArrayList<>();
for (int ii = 1; ii <= 12; ii++) available.add(ii);
ComboInput interval = new ComboInput(editArea, Messages.ColumnInterval);
interval.value.setInput(available);
interval.value.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
int interval = (Integer) element;
return MessageFormat.format(Messages.InvestmentPlanIntervalLabel, interval);
}
});
interval.bindValue(Properties.interval.name(), MessageFormat.format(Messages.MsgDialogInputRequired, Messages.ColumnInterval));
// amount
Input amount = new Input(editArea, Messages.ColumnAmount);
amount.bindValue(Properties.amount.name(), Messages.ColumnAmount, Values.Amount, true);
amount.bindCurrency(Properties.transactionCurrencyCode.name());
// fees
Input fees = new Input(editArea, Messages.ColumnFees);
fees.bindValue(Properties.fees.name(), Messages.ColumnAmount, Values.Amount, false);
fees.bindCurrency(Properties.transactionCurrencyCode.name());
//
// form layout
//
int amountWidth = amountWidth(amount.value);
int currencyWidth = currencyWidth(amount.currency);
startingWith(valueName, lblName).width(3 * amountWidth).thenBelow(securities.value.getControl()).label(securities.label).suffix(securities.currency, //
currencyWidth).thenBelow(portfolio.value.getControl()).label(//
portfolio.label).thenBelow(account.value.getControl()).label(account.label).suffix(account.currency, //
currencyWidth).thenBelow(labelAutoGenerate, //
10).thenBelow(valueDate.getControl(), 10).label(//
lblDate).thenBelow(amount.value, 10).width(amountWidth).label(amount.label).suffix(amount.currency, //
currencyWidth).thenBelow(fees.value).width(amountWidth).label(fees.label).suffix(fees.currency, //
currencyWidth);
startingWith(labelAutoGenerate).thenLeft(buttonAutoGenerate);
startingWith(valueDate.getControl()).thenRight(interval.label).thenRight(interval.value.getControl());
int widest = widest(lblName, securities.label, portfolio.label, account.label, lblDate, interval.label, amount.label, fees.label);
startingWith(lblName).width(widest);
WarningMessages warnings = new WarningMessages(this);
warnings.add(() -> model().getStart().isAfter(LocalDate.now()) ? Messages.MsgDateIsInTheFuture : null);
model.addPropertyChangeListener(Properties.start.name(), e -> warnings.check());
}
Aggregations