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

📄 treelayout.java

📁 EclipseTrader is a stock exchange analysis system, featuring shares pricing watch, intraday and hi
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation 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: *     IBM Corporation - initial API and implementation *******************************************************************************/package net.sourceforge.eclipsetrader.trading.internal;import java.util.ArrayList;import java.util.List;import org.eclipse.jface.util.Assert;import org.eclipse.jface.viewers.ColumnLayoutData;import org.eclipse.jface.viewers.ColumnPixelData;import org.eclipse.jface.viewers.ColumnWeightData;import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Layout;import org.eclipse.swt.widgets.Tree;import org.eclipse.swt.widgets.TreeColumn;/** * A layout for a tree. * Call <code>addColumnData</code> to add columns. */public class TreeLayout extends Layout{    /**     * The number of extra pixels taken as horizontal trim by the table column.      * To ensure there are N pixels available for the content of the column,     * assign N+COLUMN_TRIM for the column width.     *      * @since 3.1     */    private static int COLUMN_TRIM = "carbon".equals(SWT.getPlatform()) ? 24 : 3; //$NON-NLS-1$                /**     * The list of column layout data (element type:     *  <code>ColumnLayoutData</code>).     */    private List columns = new ArrayList();    /**     * Indicates whether <code>layout</code> has yet to be called.     */    private boolean firstTime = true;    public TreeLayout()    {    }    /**     * Adds a new column of data to this table layout.     *     * @param data the column layout data     */    public void addColumnData(ColumnLayoutData data) {        columns.add(data);    }    /* (non-Javadoc)     * Method declared on Layout.     */    public Point computeSize(Composite c, int wHint, int hHint, boolean flush) {        if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)            return new Point(wHint, hHint);        Tree table = (Tree) c;        // To avoid recursions.        table.setLayout(null);        // Use native layout algorithm        Point result = table.computeSize(wHint, hHint, flush);        table.setLayout(this);        int width = 0;        int size = columns.size();        for (int i = 0; i < size; ++i) {            ColumnLayoutData layoutData = (ColumnLayoutData) columns.get(i);            if (layoutData instanceof ColumnPixelData) {                ColumnPixelData col = (ColumnPixelData) layoutData;                width += col.width;                if (col.addTrim) {                    width += COLUMN_TRIM;                }            } else if (layoutData instanceof ColumnWeightData) {                ColumnWeightData col = (ColumnWeightData) layoutData;                width += col.minimumWidth;            } else {                Assert.isTrue(false, "Unknown column layout data");//$NON-NLS-1$            }        }        if (width > result.x)            result.x = width;        return result;    }    /* (non-Javadoc)     * Method declared on Layout.     */    public void layout(Composite c, boolean flush) {        // Only do initial layout.  Trying to maintain proportions when resizing is too hard,        // causes lots of widget flicker, causes scroll bars to appear and occasionally stick around (on Windows),        // requires hooking column resizing as well, and may not be what the user wants anyway.        if (!firstTime)            return;        Tree table = (Tree) c;        int width = table.getClientArea().width;        // XXX: Layout is being called with an invalid value the first time        // it is being called on Linux. This method resets the        // Layout to null so we make sure we run it only when        // the value is OK.        if (width <= 1)            return;        TreeColumn[] tableColumns = table.getColumns();        int size = Math.min(columns.size(), tableColumns.length);        int[] widths = new int[size];        int fixedWidth = 0;        int numberOfWeightColumns = 0;        int totalWeight = 0;        // First calc space occupied by fixed columns        for (int i = 0; i < size; i++) {            ColumnLayoutData col = (ColumnLayoutData) columns.get(i);            if (col instanceof ColumnPixelData) {                ColumnPixelData cpd = (ColumnPixelData) col;                int pixels = cpd.width;                if (cpd.addTrim) {                    pixels += COLUMN_TRIM;                }                widths[i] = pixels;                fixedWidth += pixels;            } else if (col instanceof ColumnWeightData) {                ColumnWeightData cw = (ColumnWeightData) col;                numberOfWeightColumns++;                // first time, use the weight specified by the column data, otherwise use the actual width as the weight                // int weight = firstTime ? cw.weight : tableColumns[i].getWidth();                int weight = cw.weight;                totalWeight += weight;            } else {                Assert.isTrue(false, "Unknown column layout data");//$NON-NLS-1$            }        }        // Do we have columns that have a weight        if (numberOfWeightColumns > 0) {            // Now distribute the rest to the columns with weight.            int rest = width - fixedWidth;            int totalDistributed = 0;            for (int i = 0; i < size; ++i) {                ColumnLayoutData col = (ColumnLayoutData) columns.get(i);                if (col instanceof ColumnWeightData) {                    ColumnWeightData cw = (ColumnWeightData) col;                    // calculate weight as above                    // int weight = firstTime ? cw.weight : tableColumns[i].getWidth();                    int weight = cw.weight;                    int pixels = totalWeight == 0 ? 0 : weight * rest                            / totalWeight;                    if (pixels < cw.minimumWidth)                        pixels = cw.minimumWidth;                    totalDistributed += pixels;                    widths[i] = pixels;                }            }            // Distribute any remaining pixels to columns with weight.            int diff = rest - totalDistributed;            for (int i = 0; diff > 0; ++i) {                if (i == size)                    i = 0;                ColumnLayoutData col = (ColumnLayoutData) columns.get(i);                if (col instanceof ColumnWeightData) {                    ++widths[i];                    --diff;                }            }        }        //  System.out.print("Width: " + width);        //  int total = 0;        //  for (int i = 0; i < widths.length; i++) {        //      System.out.print(" " + widths[i]);        //      total += widths[i];        //  }        //  System.out.println(" Total: " + total);        firstTime = false;        for (int i = 0; i < size; i++) {            tableColumns[i].setWidth(widths[i]);        }    }}

⌨️ 快捷键说明

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