⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chartview.java

📁 EclipseTrader is a stock exchange analysis system, featuring shares pricing watch, intraday and hi
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* * 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.charts.views;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Collections;import java.util.Comparator;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Observable;import java.util.Observer;import net.sourceforge.eclipsetrader.charts.ChartsPlugin;import net.sourceforge.eclipsetrader.charts.DatePlot;import net.sourceforge.eclipsetrader.charts.IIndicatorPlugin;import net.sourceforge.eclipsetrader.charts.ObjectPlugin;import net.sourceforge.eclipsetrader.charts.Plot;import net.sourceforge.eclipsetrader.charts.Settings;import net.sourceforge.eclipsetrader.charts.actions.AutoScaleAction;import net.sourceforge.eclipsetrader.charts.actions.Set10MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set15MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set1DayIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set1MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set2MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set30MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set5MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.Set60MinuteIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.SetCustomPeriodAction;import net.sourceforge.eclipsetrader.charts.actions.SetLast2YearsPeriodAction;import net.sourceforge.eclipsetrader.charts.actions.SetLast6MonthsPeriodAction;import net.sourceforge.eclipsetrader.charts.actions.SetLastYearPeriodAction;import net.sourceforge.eclipsetrader.charts.actions.SetMonthlyIntervalAction;import net.sourceforge.eclipsetrader.charts.actions.SetViewAllAction;import net.sourceforge.eclipsetrader.charts.actions.SetWeeklyIntervalAction;import net.sourceforge.eclipsetrader.charts.dialogs.ChartSettingsDialog;import net.sourceforge.eclipsetrader.charts.events.ChartSelectionProvider;import net.sourceforge.eclipsetrader.charts.events.IndicatorSelection;import net.sourceforge.eclipsetrader.charts.events.ObjectSelection;import net.sourceforge.eclipsetrader.charts.events.PlotEvent;import net.sourceforge.eclipsetrader.charts.events.PlotListener;import net.sourceforge.eclipsetrader.charts.events.PlotMouseEvent;import net.sourceforge.eclipsetrader.charts.events.PlotMouseListener;import net.sourceforge.eclipsetrader.charts.events.PlotSelectionEvent;import net.sourceforge.eclipsetrader.charts.events.PlotSelectionListener;import net.sourceforge.eclipsetrader.charts.events.TabSelection;import net.sourceforge.eclipsetrader.charts.internal.CopyAction;import net.sourceforge.eclipsetrader.charts.internal.CutAction;import net.sourceforge.eclipsetrader.charts.internal.DeleteAction;import net.sourceforge.eclipsetrader.charts.internal.Messages;import net.sourceforge.eclipsetrader.charts.internal.PasteAction;import net.sourceforge.eclipsetrader.charts.internal.PasteSpecialAction;import net.sourceforge.eclipsetrader.core.CorePlugin;import net.sourceforge.eclipsetrader.core.FeedMonitor;import net.sourceforge.eclipsetrader.core.ICollectionObserver;import net.sourceforge.eclipsetrader.core.IHistoryFeed;import net.sourceforge.eclipsetrader.core.db.BarData;import net.sourceforge.eclipsetrader.core.db.Chart;import net.sourceforge.eclipsetrader.core.db.ChartIndicator;import net.sourceforge.eclipsetrader.core.db.ChartObject;import net.sourceforge.eclipsetrader.core.db.ChartRow;import net.sourceforge.eclipsetrader.core.db.ChartTab;import net.sourceforge.eclipsetrader.core.db.History;import net.sourceforge.eclipsetrader.core.db.Security;import net.sourceforge.eclipsetrader.core.db.visitors.ChartVisitorAdapter;import net.sourceforge.eclipsetrader.core.transfers.SecurityTransfer;import net.sourceforge.eclipsetrader.core.ui.NullSelection;import net.sourceforge.eclipsetrader.core.ui.SecuritySelection;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.eclipse.core.runtime.IConfigurationElement;import org.eclipse.core.runtime.IExtensionPoint;import org.eclipse.core.runtime.IExtensionRegistry;import org.eclipse.core.runtime.IPath;import org.eclipse.core.runtime.IProgressMonitor;import org.eclipse.core.runtime.IStatus;import org.eclipse.core.runtime.Platform;import org.eclipse.core.runtime.Status;import org.eclipse.core.runtime.jobs.Job;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.GroupMarker;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.preference.IPreferenceStore;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.custom.CTabFolder;import org.eclipse.swt.custom.CTabFolder2Listener;import org.eclipse.swt.custom.CTabFolderEvent;import org.eclipse.swt.custom.CTabItem;import org.eclipse.swt.custom.SashForm;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.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.events.TraverseEvent;import org.eclipse.swt.events.TraverseListener;import org.eclipse.swt.graphics.Cursor;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.Control;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.ScrollBar;import org.eclipse.ui.IActionBars;import org.eclipse.ui.ISelectionListener;import org.eclipse.ui.IViewSite;import org.eclipse.ui.IWorkbenchActionConstants;import org.eclipse.ui.IWorkbenchPart;import org.eclipse.ui.IWorkbenchPreferenceConstants;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 ChartView extends ViewPart implements PlotMouseListener, CTabFolder2Listener, ICollectionObserver, ISelectionListener{    public static final String VIEW_ID = "net.sourceforge.eclipsetrader.views.chart"; //$NON-NLS-1$    public static final String THEME_CHART_BACKGROUND = "CHART_BACKGROUND";    public static final String THEME_CHART_GRID_COLOR = "CHART_GRID_COLOR";    public static final String THEME_SCALE_BACKGROUND = "CHART_SCALE_BACKGROUND";    public static final String THEME_SCALE_FOREGROUND = "CHART_SCALE_FOREGROUND";    public static final String THEME_SUMMARY_BACKGROUND = "CHART_SUMMARY_BACKGROUND";    public static final String THEME_SUMMARY_FOREGROUND = "CHART_SUMMARY_FOREGROUND";    public static final String THEME_PERIOD_BACKGROUND = "CHART_PERIOD_BACKGROUND";    public static final String THEME_PERIOD_FOREGROUND = "CHART_PERIOD_FOREGROUND";    public static final String THEME_PERIOD_MARKERS = "CHART_PERIOD_MARKERS";    public static final String THEME_CHART_SELECTION_COLOR = "CHART_SELECTION_COLOR";    public static final int PERIOD_ALL = 0;    public static final int PERIOD_LAST6MONTHS = 1;    public static final int PERIOD_LASTYEAR = 2;    public static final int PERIOD_LAST2YEARS = 3;    public static final int PERIOD_CUSTOM = -1;    public static final int HIDE_TABS_NEVER = 0;    public static final int HIDE_TABS_ONLYONE = 1;    public static final String PREFS_FOLLOW_SELECTION = "followSelection";    public static final String PREFS_SHOW_ADJUSTED_VALUES = "showAdjustedValues";    public static final String PREFS_SHOW_MARKETVALUE = "showMarketValue";    public static final String PREFS_WEIGHTS = "weights";    static boolean DEFAULT_FOLLOW_SELECTION = false;    static boolean DEFAULT_SHOW_ADJUSTED_VALUES = false;    static boolean DEFAULT_SHOW_MARKET_VALUE = false;    Chart chart;    SashForm sashForm;    DatePlot datePlot;    ScrollBar hBar;    List tabGroups = new ArrayList();    Security security;    int oldMouseX = -1, oldMouseY = -1;    boolean autoScale = false;    boolean followSelection = false;    boolean showAdjustedValues = false;    boolean showMarketValue = false;    ChartObject newChartObject;    Action viewAll = new SetViewAllAction(this);    Action viewLast2Years = new SetLast2YearsPeriodAction(this);    Action viewLastYear = new SetLastYearPeriodAction(this);    Action viewLast6Months = new SetLast6MonthsPeriodAction(this);    Action viewCustom = new SetCustomPeriodAction(this);    Action monthlyAction = new SetMonthlyIntervalAction(this);    Action weeklyAction = new SetWeeklyIntervalAction(this);    Action dailyAction = new Set1DayIntervalAction(this);    Action minute1Action = new Set1MinuteIntervalAction(this);    Action minute2Action = new Set2MinuteIntervalAction(this);    Action minute5Action = new Set5MinuteIntervalAction(this);    Action minute10Action = new Set10MinuteIntervalAction(this);    Action minute15Action = new Set15MinuteIntervalAction(this);    Action minute30Action = new Set30MinuteIntervalAction(this);    Action minute60Action = new Set60MinuteIntervalAction(this);    Action autoScaleAction = new AutoScaleAction(this);    Action toggleFollowSelectionAction;    Action toggleAdjustedValuesAction;    Action toggleMarketValueAction;    Action cutAction;    Action copyAction;    Action pasteAction;    Action pasteSpecialAction;    Action deleteAction;    PreferenceStore preferences;    ITheme theme;    Log logger = LogFactory.getLog(getClass());    IPropertyChangeListener themeChangeListener = new IPropertyChangeListener() {        public void propertyChange(PropertyChangeEvent event)        {            String property = event.getProperty();            if (property.equals(IThemeManager.CHANGE_CURRENT_THEME))            {                IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();                if (theme != null)                    theme.removePropertyChangeListener(themeChangeListener);                theme = themeManager.getCurrentTheme();                theme.addPropertyChangeListener(themeChangeListener);                datePlot.setBackground(theme.getColorRegistry().get(property));                datePlot.setForeground(theme.getColorRegistry().get(property));                datePlot.setHilight(theme.getColorRegistry().get(property));                datePlot.redrawAll();            }            else if (property.equals(ChartView.THEME_PERIOD_BACKGROUND))            {                datePlot.setBackground(theme.getColorRegistry().get(property));                datePlot.redrawAll();            }            else if (property.equals(ChartView.THEME_PERIOD_FOREGROUND))            {                datePlot.setForeground(theme.getColorRegistry().get(property));                datePlot.redrawAll();            }            else if (property.equals(ChartView.THEME_PERIOD_MARKERS))            {                datePlot.setHilight(theme.getColorRegistry().get(property));                datePlot.redrawAll();            }        }    };    ControlListener sashResizeListener = new ControlAdapter() {        public void controlResized(ControlEvent e)        {            String values = "";            int[] weights = sashForm.getWeights();            for (int i = 0; i < weights.length; i++)                values += (i == 0 ? "" : ";") + String.valueOf(weights[i]);            preferences.setValue(PREFS_WEIGHTS, values);        }    };    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]);            }        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -