org.eclipsetrader.internal.brokers.paper.AccountPropertyPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipsetrader.internal.brokers.paper.AccountPropertyPage.java

Source

/*
 * Copyright (c) 2004-2011 Marco Maccaferri and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Marco Maccaferri - initial API and implementation
 */

package org.eclipsetrader.internal.brokers.paper;

import java.util.Currency;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipsetrader.internal.brokers.paper.schemes.LimitedProportional1Scheme;
import org.eclipsetrader.internal.brokers.paper.schemes.LimitedProportional2Scheme;
import org.eclipsetrader.internal.brokers.paper.schemes.NoExpensesScheme;
import org.eclipsetrader.internal.brokers.paper.schemes.SimpleFixedScheme;
import org.eclipsetrader.internal.brokers.paper.schemes.TwoLevelsPerShareScheme;

public class AccountPropertyPage extends PropertyPage implements IWorkbenchPropertyPage {

    Text name;
    ComboViewer currency;
    ComboViewer expenses;
    Spinner balance;

    private IExpenseScheme[] availableSchemes = new IExpenseScheme[] { new NoExpensesScheme(),
            new SimpleFixedScheme(), new LimitedProportional1Scheme(), new LimitedProportional2Scheme(),
            new TwoLevelsPerShareScheme(), };

    private ModifyListener modifyListener = new ModifyListener() {

        @Override
        public void modifyText(ModifyEvent e) {
            setValid(isValid());
        }
    };

    private ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() {

        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            setValid(isValid());
        }
    };

    public AccountPropertyPage() {
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected Control createContents(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(2, false);
        layout.marginHeight = layout.marginWidth = 0;
        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        applyDialogFont(composite);

        Label label = new Label(composite, SWT.NONE);
        label.setText(Messages.AccountPropertyPage_Name);
        name = new Text(composite, SWT.BORDER);
        name.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.AccountPropertyPage_Currency);
        currency = new ComboViewer(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
        currency.setLabelProvider(new LabelProvider());
        currency.setContentProvider(new ArrayContentProvider());
        currency.setSorter(new ViewerSorter());
        Locale[] l = Locale.getAvailableLocales();
        Set<Currency> c = new HashSet<Currency>();
        for (int i = 0; i < l.length; i++) {
            try {
                c.add(Currency.getInstance(l[i]));
            } catch (Exception e) {
                // Ignore, some locales may throw an exception
            }
        }
        currency.setInput(c.toArray());

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.AccountPropertyPage_Balance);
        balance = new Spinner(composite, SWT.BORDER);
        balance.setValues(0, 0, 999999999, 2, 10000, 100000);

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.AccountPropertyPage_ExpensesScheme);
        expenses = new ComboViewer(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
        expenses.setLabelProvider(new LabelProvider());
        expenses.setContentProvider(new ArrayContentProvider());
        expenses.setInput(availableSchemes);

        name.addModifyListener(modifyListener);
        currency.addSelectionChangedListener(selectionChangedListener);
        balance.addModifyListener(modifyListener);
        expenses.addSelectionChangedListener(selectionChangedListener);

        performDefaults();

        return composite;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
     */
    @Override
    protected void performDefaults() {
        Account account = (Account) getElement().getAdapter(Account.class);

        name.setText(account.getDescription());
        if (account.getCurrency() != null) {
            currency.setSelection(new StructuredSelection(account.getCurrency()));
        }
        balance.setSelection((int) (account.getBalance().getAmount() * Math.pow(10, balance.getDigits())));
        if (account.getExpenseScheme() != null) {
            expenses.setSelection(new StructuredSelection(account.getExpenseScheme()));
        }

        super.performDefaults();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#isValid()
     */
    @Override
    public boolean isValid() {
        if (name.getText().equals("")) { //$NON-NLS-1$
            return false;
        }
        return super.isValid();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#performOk()
     */
    @Override
    public boolean performOk() {
        Account account = (Account) getElement().getAdapter(Account.class);

        account.setDescription(name.getText());
        account.setCurrency((Currency) ((IStructuredSelection) currency.getSelection()).getFirstElement());
        account.setBalance(balance.getSelection() / Math.pow(10, balance.getDigits()));
        account.setExpenseScheme(
                (IExpenseScheme) ((IStructuredSelection) expenses.getSelection()).getFirstElement());

        return super.performOk();
    }
}