Search in sources :

Example 11 with IValidator

use of org.eclipse.core.databinding.validation.IValidator in project portfolio by buchen.

the class BindingHelper method bindMandatoryLongInput.

public final Control bindMandatoryLongInput(Composite editArea, final String label, String property) {
    Text txtValue = createTextInput(editArea, label);
    // 
    context.bindValue(// 
    WidgetProperties.text(SWT.Modify).observe(txtValue), // 
    BeanProperties.value(property).observe(model), new UpdateValueStrategy().setAfterConvertValidator(new IValidator() {

        @Override
        public IStatus validate(Object value) {
            Long v = (Long) value;
            return v != null && v.longValue() > 0 ? ValidationStatus.ok() : ValidationStatus.error(MessageFormat.format(Messages.MsgDialogInputRequired, label));
        }
    }), null);
    return txtValue;
}
Also used : UpdateValueStrategy(org.eclipse.core.databinding.UpdateValueStrategy) IValidator(org.eclipse.core.databinding.validation.IValidator) Text(org.eclipse.swt.widgets.Text)

Example 12 with IValidator

use of org.eclipse.core.databinding.validation.IValidator 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());
}
Also used : FormDataFactory.startingWith(name.abuchen.portfolio.ui.util.FormDataFactory.startingWith) Values(name.abuchen.portfolio.money.Values) Client(name.abuchen.portfolio.model.Client) IServiceConstants(org.eclipse.e4.ui.services.IServiceConstants) UpdateValueStrategy(org.eclipse.core.databinding.UpdateValueStrategy) DatePicker(name.abuchen.portfolio.ui.util.DatePicker) IValidator(org.eclipse.core.databinding.validation.IValidator) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) ValidationStatus(org.eclipse.core.databinding.validation.ValidationStatus) WidgetProperties(org.eclipse.jface.databinding.swt.WidgetProperties) Composite(org.eclipse.swt.widgets.Composite) Messages(name.abuchen.portfolio.ui.Messages) SimpleDateTimeDateSelectionProperty(name.abuchen.portfolio.ui.util.SimpleDateTimeDateSelectionProperty) Named(javax.inject.Named) SWTHelper.currencyWidth(name.abuchen.portfolio.ui.util.SWTHelper.currencyWidth) Properties(name.abuchen.portfolio.ui.dialogs.transactions.InvestmentPlanModel.Properties) Text(org.eclipse.swt.widgets.Text) Shell(org.eclipse.swt.widgets.Shell) SWTHelper.widest(name.abuchen.portfolio.ui.util.SWTHelper.widest) Button(org.eclipse.swt.widgets.Button) Account(name.abuchen.portfolio.model.Account) SWTHelper.amountWidth(name.abuchen.portfolio.ui.util.SWTHelper.amountWidth) InvestmentPlan(name.abuchen.portfolio.model.InvestmentPlan) List(java.util.List) BeanProperties(org.eclipse.core.databinding.beans.BeanProperties) LocalDate(java.time.LocalDate) SWT(org.eclipse.swt.SWT) Label(org.eclipse.swt.widgets.Label) LabelProvider(org.eclipse.jface.viewers.LabelProvider) UpdateValueStrategy(org.eclipse.core.databinding.UpdateValueStrategy) Account(name.abuchen.portfolio.model.Account) SimpleDateTimeDateSelectionProperty(name.abuchen.portfolio.ui.util.SimpleDateTimeDateSelectionProperty) Label(org.eclipse.swt.widgets.Label) ArrayList(java.util.ArrayList) Text(org.eclipse.swt.widgets.Text) IValidator(org.eclipse.core.databinding.validation.IValidator) Button(org.eclipse.swt.widgets.Button) DatePicker(name.abuchen.portfolio.ui.util.DatePicker) LabelProvider(org.eclipse.jface.viewers.LabelProvider)

Aggregations

IValidator (org.eclipse.core.databinding.validation.IValidator)12 Text (org.eclipse.swt.widgets.Text)9 Label (org.eclipse.swt.widgets.Label)7 UpdateValueStrategy (org.eclipse.core.databinding.UpdateValueStrategy)6 IStatus (org.eclipse.core.runtime.IStatus)5 Button (org.eclipse.swt.widgets.Button)5 RequiredControlDecorationUpdater (org.jboss.tools.openshift.internal.common.ui.databinding.RequiredControlDecorationUpdater)5 Binding (org.eclipse.core.databinding.Binding)4 Composite (org.eclipse.swt.widgets.Composite)4 IObservableValue (org.eclipse.core.databinding.observable.value.IObservableValue)3 IProject (com.openshift.restclient.model.IProject)1 File (java.io.File)1 MessageFormat (java.text.MessageFormat)1 LocalDate (java.time.LocalDate)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Inject (javax.inject.Inject)1 Named (javax.inject.Named)1 Account (name.abuchen.portfolio.model.Account)1 Client (name.abuchen.portfolio.model.Client)1