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

📄 watchlisttableviewer.java

📁 EclipseTrader is a stock exchange analysis system, featuring shares pricing watch, intraday and hi
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * 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 *     Danilo Tuler     - column selection */package net.sourceforge.eclipsetrader.trading.internal;import java.util.ArrayList;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.IEditableLabelProvider;import net.sourceforge.eclipsetrader.core.db.Security;import net.sourceforge.eclipsetrader.core.db.WatchlistColumn;import net.sourceforge.eclipsetrader.core.db.WatchlistItem;import net.sourceforge.eclipsetrader.core.transfers.SecurityTransfer;import net.sourceforge.eclipsetrader.core.transfers.WatchlistItemTransfer;import net.sourceforge.eclipsetrader.core.ui.NullSelection;import net.sourceforge.eclipsetrader.core.ui.widgets.EditableTable;import net.sourceforge.eclipsetrader.core.ui.widgets.EditableTableColumn;import net.sourceforge.eclipsetrader.core.ui.widgets.IEditableItem;import net.sourceforge.eclipsetrader.trading.WatchlistColumnSelection;import net.sourceforge.eclipsetrader.trading.WatchlistItemSelection;import net.sourceforge.eclipsetrader.trading.actions.ToggleShowTotalsAction;import net.sourceforge.eclipsetrader.trading.internal.watchlist.ColumnRegistry;import net.sourceforge.eclipsetrader.trading.views.WatchlistView;import net.sourceforge.eclipsetrader.trading.wizards.WatchlistItemPropertiesDialog;import org.apache.commons.logging.LogFactory;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuListener;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.preference.PreferenceStore;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.dnd.DND;import org.eclipse.swt.dnd.DragSource;import org.eclipse.swt.dnd.DragSourceEvent;import org.eclipse.swt.dnd.DragSourceListener;import org.eclipse.swt.dnd.TextTransfer;import org.eclipse.swt.dnd.Transfer;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.MouseAdapter;import org.eclipse.swt.events.MouseEvent;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.events.SelectionListener;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.RGB;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.Event;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableColumn;import org.eclipse.swt.widgets.TableItem;import org.eclipse.ui.IActionBars;import org.eclipse.ui.IWorkbenchActionConstants;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.themes.ITheme;import org.eclipse.ui.themes.IThemeManager;/** */public class WatchlistTableViewer extends AbstractLayout{    public static final String EVEN_ROWS_BACKGROUND = "TABLE_EVEN_ROWS_BACKGROUND";    public static final String EVEN_ROWS_FOREGROUND = "TABLE_EVEN_ROWS_FOREGROUND";    public static final String ODD_ROWS_BACKGROUND = "TABLE_ODD_ROWS_BACKGROUND";    public static final String ODD_ROWS_FOREGROUND = "TABLE_ODD_ROWS_FOREGROUND";    public static final String TOTALS_ROWS_BACKGROUND = "TABLE_TOTALS_ROWS_BACKGROUND";    public static final String TOTALS_ROWS_FOREGROUND = "TABLE_TOTALS_ROWS_FOREGROUND";    public static final String TICK_BACKGROUND = "TABLE_TICK_BACKGROUND";    public static final String POSITIVE_FOREGROUND = "TABLE_POSITIVE_FOREGROUND";    public static final String NEGATIVE_FOREGROUND = "TABLE_NEGATIVE_FOREGROUND";    public static final String ALERT_BACKGROUND = "TABLE_ALERT_BACKGROUND";    List list = new ArrayList();    Composite content;    EditableTable table;    Color evenForeground;    Color evenBackground;    Color oddForeground;    Color oddBackground;    Color totalsForeground;    Color totalsBackground;    Color tickBackground;    Color negativeForeground;    Color positiveForeground;    Color alertHilightBackground;    boolean showTotals = false;    boolean singleClick = true;    int sortColumn = -1;    int sortDirection = 0;    Action toggleShowTotals;    Action autoResizeAction;    Action propertiesAction;    WatchlistColumn selectedColumn;    IPropertyChangeListener themeChangeListener = new IPropertyChangeListener() {        public void propertyChange(PropertyChangeEvent event)        {            if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME))            {                ((ITheme) event.getOldValue()).removePropertyChangeListener(this);                setTheme((ITheme) event.getNewValue());            }            else            {                IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();                ITheme theme = themeManager.getCurrentTheme();                if (event.getProperty().equals(EVEN_ROWS_BACKGROUND))                    evenBackground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(EVEN_ROWS_FOREGROUND))                    evenForeground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(ODD_ROWS_BACKGROUND))                    oddBackground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(ODD_ROWS_FOREGROUND))                    oddForeground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(TOTALS_ROWS_FOREGROUND))                    totalsForeground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(TOTALS_ROWS_FOREGROUND))                    totalsForeground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(POSITIVE_FOREGROUND))                    positiveForeground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(NEGATIVE_FOREGROUND))                    negativeForeground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(TICK_BACKGROUND))                    tickBackground = theme.getColorRegistry().get(event.getProperty());                else if (event.getProperty().equals(ALERT_BACKGROUND))                    alertHilightBackground = theme.getColorRegistry().get(event.getProperty());            }            updateView();        }    };    Comparator comparator = new Comparator() {        public int compare(Object arg0, Object arg1)        {            Object provider = table.getColumn(sortColumn).getData("labelProvider");            if (provider instanceof Comparator)            {                if (sortDirection == 0)                    return ((Comparator)provider).compare(arg0, arg1);                else                    return ((Comparator)provider).compare(arg1, arg0);            }            return 0;        }    };    SelectionListener columnSelectionListener = new SelectionAdapter() {        public void widgetSelected(SelectionEvent e)        {            TableColumn tableColumn = (TableColumn) e.widget;            WatchlistColumn column = (WatchlistColumn)tableColumn.getData();                        int index = table.indexOf(tableColumn);            if (index == sortColumn)            {                if (sortDirection == 1)                    sortColumn = -1;                else                    sortDirection = 1;            }            else            {                sortColumn = index;                sortDirection = 0;            }            if (sortColumn != -1)            {                String s = column.getId() + ";" + String.valueOf(sortDirection);                getView().getPreferenceStore().setValue(WatchlistView.PREFS_SORTING, s);            }            else                getView().getPreferenceStore().setValue(WatchlistView.PREFS_SORTING, "");            updateView();        }    };    ControlAdapter columnControlListener = new ControlAdapter() {        public void controlResized(ControlEvent e)        {            TableColumn tableColumn = (TableColumn)e.widget;            WatchlistColumn column = (WatchlistColumn)tableColumn.getData();            getView().getPreferenceStore().setValue(column.getId() + ".width", tableColumn.getWidth());        }    };       public WatchlistTableViewer(WatchlistView view)    {        super(view);                showTotals = getView().getPreferenceStore().getBoolean(WatchlistView.PREFS_SHOW_TOTALS);        toggleShowTotals = new ToggleShowTotalsAction(this);        toggleShowTotals.setChecked(showTotals);        IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();        menuManager.appendToGroup("toggles", toggleShowTotals);                autoResizeAction = new Action() {            public void run()            {                TableColumn[] column = table.getColumns();                for (int i = 0; i < column.length; i++)                {                    if (column[i].getResizable())                        column[i].pack();                }            }        };        autoResizeAction.setId("autoResizeColumns");        autoResizeAction.setText("Resize columns");        menuManager.appendToGroup("layout", autoResizeAction);                propertiesAction = new Action() {            public void run()            {                TableItem[] selection = table.getSelection();                if (selection.length != 0 && selection[0] instanceof WatchlistTableItem)                {                    WatchlistItem item = ((WatchlistTableItem) selection[0]).getWatchlistItem();                    WatchlistItemPropertiesDialog dlg = new WatchlistItemPropertiesDialog(item, getViewSite().getShell());                    dlg.open();                }                            }        };        propertiesAction.setText("Properties");        propertiesAction.setEnabled(false);        IActionBars actionBars = getViewSite().getActionBars();        actionBars.setGlobalActionHandler("properties", propertiesAction);        actionBars.updateActionBars();    }        public Composite createPartControl(Composite parent)    {        content = new Composite(parent, SWT.NONE);        GridLayout gridLayout = new GridLayout();        gridLayout.marginWidth = gridLayout.marginHeight = 0;        content.setLayout(gridLayout);                IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();        themeManager.addPropertyChangeListener(themeChangeListener);        ITheme theme = themeManager.getCurrentTheme();        setTheme(theme);        table = new EditableTable(content, SWT.MULTI|SWT.FULL_SELECTION);        table.setHeaderVisible(true);        table.setLinesVisible(false);        table.setBackground(parent.getBackground());        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));        table.addSelectionListener(new SelectionAdapter() {            public void widgetSelected(SelectionEvent e)            {            	if (singleClick)                    updateSelection();            }        });        table.addMouseListener(new MouseAdapter() {			public void mouseDown(MouseEvent e)            {				if (singleClick)				{	            	selectedColumn = getColumn(e);	                if (table.getItem(new Point(e.x, e.y)) == null)	                {	                    table.deselectAll();                        updateSelection();	                }				}            }						public void mouseDoubleClick(MouseEvent e)			{				if (!singleClick)				{	            	selectedColumn = getColumn(e);	                if (table.getItem(new Point(e.x, e.y)) == null)	                {	                    table.deselectAll();	                }                    updateSelection();				}			}        });        // TODO This is a workaround for the sort column background color        table.addListener(SWT.EraseItem, new Listener() {            public void handleEvent(Event event)            {                event.gc.setBackground(((TableItem)event.item).getBackground());                event.gc.fillRectangle(event.getBounds());            }        });        TableColumn column = new TableColumn(table, SWT.NONE);        column.setWidth(0);        column.setResizable(false);                // Drag and drop support        DragSource dragSource = new DragSource(table, DND.DROP_COPY|DND.DROP_MOVE);        dragSource.setTransfer(new Transfer[] { SecurityTransfer.getInstance(), WatchlistItemTransfer.getInstance(), TextTransfer.getInstance() });        dragSource.addDragListener(new DragSourceListener() {            WatchlistItem[] watchlistSelection;                        public void dragStart(DragSourceEvent event)            {                if (table.getSelectionCount() == 0)                    event.doit = false;            }            public void dragSetData(DragSourceEvent event)            {                TableItem[] selection = table.getSelection();

⌨️ 快捷键说明

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