📄 ordersview.java
字号:
/* * Copyright (c) 2004-2007 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 net.sourceforge.eclipsetrader.trading.views;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.Iterator;import java.util.List;import java.util.Observable;import java.util.Observer;import net.sourceforge.eclipsetrader.core.CorePlugin;import net.sourceforge.eclipsetrader.core.ICollectionObserver;import net.sourceforge.eclipsetrader.core.db.Order;import net.sourceforge.eclipsetrader.core.db.OrderStatus;import net.sourceforge.eclipsetrader.core.ui.LabelProvidersRegistry;import net.sourceforge.eclipsetrader.trading.TradingPlugin;import net.sourceforge.eclipsetrader.trading.dialogs.OrdersViewColumnsDialog;import net.sourceforge.eclipsetrader.trading.internal.OrdersCleanupJob;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.eclipse.core.runtime.jobs.Job;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuListener;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.IToolBarManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.dialogs.MessageDialog;import org.eclipse.jface.util.IPropertyChangeListener;import org.eclipse.jface.util.PropertyChangeEvent;import org.eclipse.jface.viewers.ILabelProvider;import org.eclipse.jface.viewers.ITableLabelProvider;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.CTabFolder;import org.eclipse.swt.custom.CTabItem;import org.eclipse.swt.events.ControlAdapter;import org.eclipse.swt.events.ControlEvent;import org.eclipse.swt.events.ControlListener;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Image;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.Table;import org.eclipse.swt.widgets.TableColumn;import org.eclipse.swt.widgets.TableItem;import org.eclipse.ui.IViewSite;import org.eclipse.ui.IWorkbenchActionConstants;import org.eclipse.ui.PartInitException;import org.eclipse.ui.part.ViewPart;public class OrdersView extends ViewPart implements IPropertyChangeListener{ public static final String VIEW_ID = "net.sourceforge.eclipsetrader.trading.orders"; public static final String PREFS_ORDERS_COLUMNS = "ORDERSVIEW_COLUMNS"; public static final String PREFS_COLUMNS_SIZE = "ORDERSVIEW_COLUMNS_SIZE"; static final int PROVIDER = 0; static final int ORDER_ID = 1; static final int DATE_TIME = 2; static final int SYMBOL = 3; static final int SECURITY = 4; static final int SIDE = 5; static final int TYPE = 6; static final int QUANTITY = 7; static final int PRICE = 8; static final int STOP_PRICE = 9; static final int FILLED_QUANTITY = 10; static final int AVERAGE_PRICE = 11; static final int STATUS = 12; CTabFolder tabFolder; OrdersTable all; OrdersTable pending; OrdersTable filled; OrdersTable canceled; OrdersTable rejected; private Color canceledColor = new Color(null, 128, 128, 128); private Color rejectedColor = new Color(null, 208, 0, 0); private Color filledColor = new Color(null, 0, 208, 0); private Color partialColor = new Color(null, 128, 0, 0); private boolean ignoreResize = true; Action cancelRequest; Action editColumnsAction; Action deleteOrder; LabelProvidersRegistry registry = new LabelProvidersRegistry(VIEW_ID); private Log logger = LogFactory.getLog(getClass()); private ControlListener columnControlListener = new ControlAdapter() { public void controlResized(ControlEvent e) { if (!ignoreResize) { Table table = all.table; TableColumn tableColumn = (TableColumn)e.getSource(); int index = tableColumn.getParent().indexOf(tableColumn); if (index != STATUS) { ignoreResize = true; if (tableColumn.getParent() != all.table) all.table.getColumn(index).setWidth(tableColumn.getWidth()); if (tableColumn.getParent() != pending.table) pending.table.getColumn(index).setWidth(tableColumn.getWidth()); if (tableColumn.getParent() != filled.table) filled.table.getColumn(index).setWidth(tableColumn.getWidth()); if (tableColumn.getParent() != canceled.table) canceled.table.getColumn(index).setWidth(tableColumn.getWidth()); if (tableColumn.getParent() != rejected.table) rejected.table.getColumn(index).setWidth(tableColumn.getWidth()); ignoreResize = false; } StringBuffer sizes = new StringBuffer(); for (int i = 0; i < table.getColumnCount(); i++) sizes.append(String.valueOf(table.getColumn(i).getWidth()) + ";"); TradingPlugin.getDefault().getPreferenceStore().setValue(PREFS_COLUMNS_SIZE, sizes.toString()); } } }; public OrdersView() { } /* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite) */ public void init(IViewSite site) throws PartInitException { cancelRequest = new Action() { public void run() { Order[] selection = getSelectedOrders(); for (int i = 0; i < selection.length; i++) { if (!OrderStatus.CANCELED.equals(selection[i].getStatus())) selection[i].cancelRequest(); } } }; cancelRequest.setText("Cancel"); cancelRequest.setToolTipText("Cancel"); cancelRequest.setImageDescriptor(TradingPlugin.getImageDescriptor("icons/elcl16/delete_edit.gif")); cancelRequest.setDisabledImageDescriptor(TradingPlugin.getImageDescriptor("icons/dlcl16/delete_edit.gif")); cancelRequest.setEnabled(false); deleteOrder = new Action() { public void run() { if (MessageDialog.openConfirm(getViewSite().getShell(), "Orders", "Do you really want to delete this order ?")) { Order[] selection = getSelectedOrders(); for (int i = 0; i < selection.length; i++) { if (!OrderStatus.CANCELED.equals(selection[i].getStatus())) selection[i].cancelRequest(); CorePlugin.getRepository().delete(selection[i]); } } } }; deleteOrder.setText("Delete"); deleteOrder.setToolTipText("Delete"); deleteOrder.setEnabled(false); editColumnsAction = new Action() { public void run() { OrdersViewColumnsDialog dlg = new OrdersViewColumnsDialog(getViewSite().getShell()); dlg.open(); } }; editColumnsAction.setText("Edit Columns..."); editColumnsAction.setEnabled(true); IMenuManager menuManager = site.getActionBars().getMenuManager(); menuManager.add(new Separator("top")); //$NON-NLS-1$ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); menuManager.add(new Separator("bottom")); //$NON-NLS-1$ IToolBarManager toolBarManager = site.getActionBars().getToolBarManager(); toolBarManager.add(new Separator("begin")); //$NON-NLS-1$ toolBarManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); toolBarManager.add(new Separator("end")); //$NON-NLS-1$ menuManager.appendToGroup("top", editColumnsAction); menuManager.appendToGroup("bottom", deleteOrder); toolBarManager.appendToGroup("end", cancelRequest); super.init(site); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { Composite content = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = gridLayout.marginHeight = 0; content.setLayout(gridLayout); tabFolder = new CTabFolder(content, SWT.BOTTOM); tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE); tabItem.setText("All"); all = new OrdersTable(tabFolder, new ArrayList()); tabItem.setControl(all.getControl()); tabItem = new CTabItem(tabFolder, SWT.NONE); tabItem.setText("Pending"); OrderStatus[] pendingFilter = { OrderStatus.NEW, OrderStatus.PARTIAL, OrderStatus.PENDING_CANCEL, OrderStatus.PENDING_NEW }; pending = new OrdersTable(tabFolder, Arrays.asList(pendingFilter)); tabItem.setControl(pending.getControl()); tabItem = new CTabItem(tabFolder, SWT.NONE); tabItem.setText("Filled"); OrderStatus[] filledFilter = { OrderStatus.FILLED }; filled = new OrdersTable(tabFolder, Arrays.asList(filledFilter)); tabItem.setControl(filled.getControl()); tabItem = new CTabItem(tabFolder, SWT.NONE); tabItem.setText("Canceled"); OrderStatus[] canceledFilter = { OrderStatus.CANCELED }; canceled = new OrdersTable(tabFolder, Arrays.asList(canceledFilter)); tabItem.setControl(canceled.getControl()); tabItem = new CTabItem(tabFolder, SWT.NONE); tabItem.setText("Rejected"); OrderStatus[] rejectedFilter = { OrderStatus.REJECTED }; rejected = new OrdersTable(tabFolder, Arrays.asList(rejectedFilter)); tabItem.setControl(rejected.getControl()); tabFolder.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateActionsEnablement(); } }); ignoreResize = false; tabFolder.setSelection(0); TradingPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); Job job = new OrdersCleanupJob(); job.setUser(false); job.schedule(100); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#setFocus() */ public void setFocus() { } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#dispose() */ public void dispose() { TradingPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this); super.dispose(); } void updateActionsEnablement() { boolean cancelEnable = false; Order[] selection = getSelectedOrders(); for (int i = 0; i < selection.length; i++) { if (!OrderStatus.CANCELED.equals(selection[i].getStatus()) && !OrderStatus.FILLED.equals(selection[i].getStatus())) cancelEnable = true; } cancelRequest.setEnabled(cancelEnable); deleteOrder.setEnabled(selection.length != 0); } Order[] getSelectedOrders() { List orders = new ArrayList();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -