org.eclipsetrader.ui.internal.views.Level2QuickTradeDecorator.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipsetrader.ui.internal.views.Level2QuickTradeDecorator.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.ui.internal.views;

import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.IParameter;
import org.eclipse.core.commands.Parameterization;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipsetrader.core.feed.IBookEntry;
import org.eclipsetrader.core.trading.IOrderSide;
import org.eclipsetrader.ui.internal.UIActivator;

public class Level2QuickTradeDecorator implements MouseTrackListener, MouseMoveListener, SelectionListener {

    Table table;
    ICommandService commandService;
    IHandlerService handlerService;

    Cursor buyCursor;
    Cursor sellCursor;

    boolean entered;

    public Level2QuickTradeDecorator(Table table, ICommandService commandService, IHandlerService handlerService) {
        this.table = table;
        this.commandService = commandService;
        this.handlerService = handlerService;

        initializeCursors();

        table.addMouseTrackListener(this);
        table.addMouseMoveListener(this);
        table.addSelectionListener(this);

        table.addDisposeListener(new DisposeListener() {

            @Override
            public void widgetDisposed(DisposeEvent e) {
                buyCursor.dispose();
                sellCursor.dispose();
            }
        });
    }

    void initializeCursors() {
        ImageDescriptor sourceDescriptor = UIActivator.getImageDescriptor("icons/pointers/buysell-source.bmp");
        ImageDescriptor buyMaskDescriptor = UIActivator.getImageDescriptor("icons/pointers/buy-mask.bmp");
        ImageDescriptor sellMaskDescriptor = UIActivator.getImageDescriptor("icons/pointers/sell-mask.bmp");

        buyCursor = new Cursor(Display.getCurrent(), sourceDescriptor.getImageData(),
                buyMaskDescriptor.getImageData(), 15, 7);
        sellCursor = new Cursor(Display.getCurrent(), sourceDescriptor.getImageData(),
                sellMaskDescriptor.getImageData(), 15, 7);
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.MouseTrackListener#mouseEnter(org.eclipse.swt.events.MouseEvent)
     */
    @Override
    public void mouseEnter(MouseEvent e) {
        entered = true;
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.MouseMoveListener#mouseMove(org.eclipse.swt.events.MouseEvent)
     */
    @Override
    public void mouseMove(MouseEvent e) {
        int x = 0;

        if (!entered) {
            return;
        }
        if (table.getItem(new Point(e.x, e.y)) == null) {
            table.setCursor(null);
            return;
        }

        TableColumn[] column = table.getColumns();

        int i = 0;
        for (; i < column.length / 2; i++) {
            if (e.x >= x && e.x <= x + column[i].getWidth()) {
                if (table.getCursor() != buyCursor) {
                    table.setCursor(buyCursor);
                }
                return;
            }
            x += column[i].getWidth();
        }
        for (; i < column.length; i++) {
            if (e.x >= x && e.x <= x + column[i].getWidth()) {
                if (table.getCursor() != sellCursor) {
                    table.setCursor(sellCursor);
                }
                return;
            }
            x += column[i].getWidth();
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.MouseTrackListener#mouseExit(org.eclipse.swt.events.MouseEvent)
     */
    @Override
    public void mouseExit(MouseEvent e) {
        if (entered) {
            table.setCursor(null);
        }
        entered = false;
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.MouseTrackListener#mouseHover(org.eclipse.swt.events.MouseEvent)
     */
    @Override
    public void mouseHover(MouseEvent e) {
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
     */
    @Override
    public void widgetDefaultSelected(SelectionEvent e) {
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
     */
    @Override
    public void widgetSelected(SelectionEvent e) {
        IBookEntry entry = null;
        IOrderSide orderSide = null;

        if (table.getCursor() == buyCursor) {
            entry = (IBookEntry) e.item.getData("bid");
            orderSide = IOrderSide.Buy;
        } else if (table.getCursor() == sellCursor) {
            entry = (IBookEntry) e.item.getData("ask");
            orderSide = IOrderSide.Sell;
        }
        if (entry == null) {
            return;
        }

        Command tradeCommand = commandService.getCommand("org.eclipsetrader.ui.file.trade");
        if (tradeCommand != null) {
            try {
                IParameter limitPrice = tradeCommand.getParameter("limitPrice");
                IParameter side = tradeCommand.getParameter("side");
                ParameterizedCommand parmCommand = new ParameterizedCommand(tradeCommand,
                        new Parameterization[] {
                                new Parameterization(limitPrice, Double.toString(entry.getPrice())),
                                new Parameterization(side, orderSide.getId()) });

                handlerService.executeCommand(parmCommand, null);
            } catch (Exception e1) {
                UIActivator.log("Error executing org.eclipsetrader.ui.file.trade command", e1);
            }
        }
    }
}