📄 level2view.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.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import java.util.Observable;import java.util.Observer;import net.sourceforge.eclipsetrader.core.CorePlugin;import net.sourceforge.eclipsetrader.core.Level2FeedMonitor;import net.sourceforge.eclipsetrader.core.db.Level2;import net.sourceforge.eclipsetrader.core.db.Security;import net.sourceforge.eclipsetrader.core.transfers.SecurityTransfer;import net.sourceforge.eclipsetrader.core.ui.SecuritySelection;import net.sourceforge.eclipsetrader.trading.TradingPlugin;import net.sourceforge.eclipsetrader.trading.actions.ToggleFollowSelectionAction;import net.sourceforge.eclipsetrader.trading.actions.ToggleLevelColorsAction;import net.sourceforge.eclipsetrader.trading.actions.TogglePriceGroupingAction;import net.sourceforge.eclipsetrader.trading.internal.CellTicker;import net.sourceforge.eclipsetrader.trading.internal.Trendbar;import org.apache.commons.logging.LogFactory;import org.eclipse.core.runtime.IPath;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.preference.PreferenceStore;import org.eclipse.jface.util.IPropertyChangeListener;import org.eclipse.jface.util.PropertyChangeEvent;import org.eclipse.jface.viewers.ISelection;import org.eclipse.swt.SWT;import org.eclipse.swt.dnd.DND;import org.eclipse.swt.dnd.DropTarget;import org.eclipse.swt.dnd.DropTargetEvent;import org.eclipse.swt.dnd.DropTargetListener;import org.eclipse.swt.dnd.Transfer;import org.eclipse.swt.dnd.TransferData;import org.eclipse.swt.events.ControlAdapter;import org.eclipse.swt.events.ControlEvent;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.FocusAdapter;import org.eclipse.swt.events.FocusEvent;import org.eclipse.swt.events.PaintEvent;import org.eclipse.swt.events.PaintListener;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.GC;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Label;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableColumn;import org.eclipse.swt.widgets.TableItem;import org.eclipse.ui.IMemento;import org.eclipse.ui.ISelectionListener;import org.eclipse.ui.IViewSite;import org.eclipse.ui.IWorkbenchPart;import org.eclipse.ui.PartInitException;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.part.ViewPart;import org.eclipse.ui.themes.ITheme;import org.eclipse.ui.themes.IThemeManager;public class Level2View extends ViewPart implements Observer, ISelectionListener{ public static final String VIEW_ID = "net.sourceforge.eclipsetrader.trading.level2"; /** * @deprecated use the instance area preference store instead */ public static final String PREFERENCES_ID = "LEVEL2_PREFS_"; public static final String PREFS_SECURITY = "security"; public static final String PREFS_SECONDARY_ID = "secondaryId"; public static final String PREFS_GROUP_PRICES = "groupPrices"; public static final String PREFS_COLOR_LEVELS = "colorLevels"; public static final String PREFS_FOLLOW_SELECTION = "followSelection"; public static final String TRENDBAR_INDICATOR = "TRENDBAR_INDICATOR"; public static final String LEVEL_1_BACKGROUND = "LEVEL_1_BACKGROUND"; public static final String LEVEL_2_BACKGROUND = "LEVEL_2_BACKGROUND"; public static final String LEVEL_3_BACKGROUND = "LEVEL_3_BACKGROUND"; public static final String LEVEL_4_BACKGROUND = "LEVEL_4_BACKGROUND"; public static final String LEVEL_5_BACKGROUND = "LEVEL_5_BACKGROUND"; public static final String LEVEL_1_FOREGROUND = "LEVEL_1_FOREGROUND"; public static final String LEVEL_2_FOREGROUND = "LEVEL_2_FOREGROUND"; public static final String LEVEL_3_FOREGROUND = "LEVEL_3_FOREGROUND"; public static final String LEVEL_4_FOREGROUND = "LEVEL_4_FOREGROUND"; public static final String LEVEL_5_FOREGROUND = "LEVEL_5_FOREGROUND"; static boolean DEFAULT_GROUP_PRICES = false; static boolean DEFAULT_COLOR_LEVELS = true; static boolean DEFAULT_FOLLOW_SELECTION = false; static int UPDATE_DELAY = 200; Security security; Composite info; Label time; Label volume; Label last; Label high; Label change; Label low; Trendbar trendbar; Table table; boolean groupPrices = DEFAULT_GROUP_PRICES; boolean colorLevels = DEFAULT_COLOR_LEVELS; boolean followSelection = DEFAULT_FOLLOW_SELECTION; private NumberFormat numberFormatter = NumberFormat.getInstance(); private NumberFormat priceFormatter = NumberFormat.getInstance(); private NumberFormat priceFormatter2 = NumberFormat.getInstance(); private NumberFormat percentFormatter = NumberFormat.getInstance(); private SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss"); //$NON-NLS-1$ private Color background; private Color emptyBackground; private Color negativeForeground = new Color(null, 224, 0, 0); private Color positiveForeground = new Color(null, 0, 224, 0); private Color[] bandBackground = new Color[5]; private Color[] bandForeground = new Color[5]; private ITheme theme; PreferenceStore preferences; Action toggleLevelColorsAction; Action togglePriceGroupingAction; Action toggleFollowSelectionAction; private IPropertyChangeListener themeChangeListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(LEVEL_1_BACKGROUND)) { bandBackground[0] = theme.getColorRegistry().get(LEVEL_1_BACKGROUND); trendbar.setBandColor(0, bandBackground[0]); } else if (event.getProperty().equals(LEVEL_1_FOREGROUND)) bandForeground[0] = theme.getColorRegistry().get(LEVEL_1_FOREGROUND); else if (event.getProperty().equals(LEVEL_2_BACKGROUND)) { bandBackground[1] = theme.getColorRegistry().get(LEVEL_2_BACKGROUND); trendbar.setBandColor(1, bandBackground[1]); } else if (event.getProperty().equals(LEVEL_2_FOREGROUND)) bandForeground[1] = theme.getColorRegistry().get(LEVEL_2_FOREGROUND); else if (event.getProperty().equals(LEVEL_3_BACKGROUND)) { bandBackground[2] = theme.getColorRegistry().get(LEVEL_3_BACKGROUND); trendbar.setBandColor(2, bandBackground[2]); } else if (event.getProperty().equals(LEVEL_3_FOREGROUND)) bandForeground[2] = theme.getColorRegistry().get(LEVEL_3_FOREGROUND); else if (event.getProperty().equals(LEVEL_4_BACKGROUND)) { bandBackground[3] = theme.getColorRegistry().get(LEVEL_4_BACKGROUND); trendbar.setBandColor(3, bandBackground[3]); } else if (event.getProperty().equals(LEVEL_4_FOREGROUND)) bandForeground[3] = theme.getColorRegistry().get(LEVEL_4_FOREGROUND); else if (event.getProperty().equals(LEVEL_5_BACKGROUND)) { bandBackground[4] = theme.getColorRegistry().get(LEVEL_5_BACKGROUND); trendbar.setBandColor(4, bandBackground[4]); } else if (event.getProperty().equals(LEVEL_5_FOREGROUND)) bandForeground[4] = theme.getColorRegistry().get(LEVEL_5_FOREGROUND); else if (event.getProperty().equals(TRENDBAR_INDICATOR)) trendbar.setIndicatorColor(theme.getColorRegistry().get(TRENDBAR_INDICATOR)); updateTable(); } }; DropTargetListener dropTargetListener = new DropTargetListener() { public void dragEnter(DropTargetEvent event) { event.detail = DND.DROP_COPY; event.currentDataType = null; TransferData[] data = event.dataTypes; if (event.currentDataType == null) { for (int i = 0; i < data.length; i++) { if (SecurityTransfer.getInstance().isSupportedType(data[i])) { event.currentDataType = data[i]; break; } } } } public void dragOver(DropTargetEvent event) { event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL; } public void dragOperationChanged(DropTargetEvent event) { } public void dragLeave(DropTargetEvent event) { } public void dropAccept(DropTargetEvent event) { } public void drop(DropTargetEvent event) { if (SecurityTransfer.getInstance().isSupportedType(event.currentDataType)) { Security[] securities = (Security[]) event.data; setSecurity(securities[0]); } } }; boolean tableUpdaterScheduled = false; Runnable tableUpdater = new Runnable() { public void run() { tableUpdaterScheduled = false; if (!table.isDisposed()) updateTable(); } }; boolean infoUpdaterScheduled = false; Runnable infoUpdater = new Runnable() { public void run() { infoUpdaterScheduled = false; if (!info.isDisposed()) updateInfo(); } }; public Level2View() { numberFormatter.setGroupingUsed(true); numberFormatter.setMinimumIntegerDigits(1); numberFormatter.setMinimumFractionDigits(0); numberFormatter.setMaximumFractionDigits(0); priceFormatter.setGroupingUsed(true); priceFormatter.setMinimumIntegerDigits(1); priceFormatter.setMinimumFractionDigits(2); priceFormatter.setMaximumFractionDigits(4); priceFormatter2.setGroupingUsed(true); priceFormatter2.setMinimumIntegerDigits(1); priceFormatter2.setMinimumFractionDigits(4); priceFormatter2.setMaximumFractionDigits(4); percentFormatter.setGroupingUsed(false); percentFormatter.setMinimumIntegerDigits(1); percentFormatter.setMinimumFractionDigits(2); percentFormatter.setMaximumFractionDigits(2); } public static IPath getPreferenceStoreLocation(Security security) { return TradingPlugin.getDefault().getStateLocation().append("level2." + String.valueOf(security.getId()) + ".prefs"); } /* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento) */ public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); toggleLevelColorsAction = new ToggleLevelColorsAction(this); togglePriceGroupingAction = new TogglePriceGroupingAction(this); toggleFollowSelectionAction = new ToggleFollowSelectionAction(this); Integer id = null; if (memento != null) id = memento.getInteger(PREFS_SECURITY); if (id == null) try { id = new Integer(getViewSite().getSecondaryId()); } catch(Exception e) { } if (id != null) security = (Security)CorePlugin.getRepository().load(Security.class, id); } /* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento) */ public void saveState(IMemento memento) { if (security != null) memento.putInteger(PREFS_SECURITY, security.getId().intValue());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -