org.eclipse.php.internal.debug.ui.views.coverage.CodeCoverageViewer.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.php.internal.debug.ui.views.coverage.CodeCoverageViewer.java

Source

/*******************************************************************************
 * Copyright (c) 2017 Rogue Wave Software Inc. 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:
 *  Rogue Wave Software Inc. - initial implementation
 *******************************************************************************/
package org.eclipse.php.internal.debug.ui.views.coverage;

import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.php.internal.debug.ui.PHPDebugUIMessages;
import org.eclipse.php.internal.debug.ui.preferences.coverage.CodeCoveragePreferenceKeys;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;

/**
 * Code coverage viewer.
 */
public class CodeCoverageViewer extends TreeViewer {
    private TreeColumn[] treeColumns = new TreeColumn[2];

    public CodeCoverageViewer(final Composite parent) {
        super(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
        createColumns();
        getTree().addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                dispose();
            }
        });
    }

    protected void createColumns() {
        Tree tree = getTree();
        TableLayout layout = new TableLayout();
        tree.setLayout(layout);
        tree.setHeaderVisible(true);
        tree.setLinesVisible(true);
        int[] columnWidths = CodeCoveragePreferenceKeys.getCodeCoverageColumnWidths();
        int i = 0;
        treeColumns[i] = new TreeColumn(tree, SWT.LEFT, i);
        treeColumns[i].setText(PHPDebugUIMessages.CodeCoverageViewer_0);
        treeColumns[i].setMoveable(false);
        treeColumns[i].setWidth(columnWidths[i]);
        ++i;
        treeColumns[i] = new TreeColumn(tree, SWT.LEFT, i);
        treeColumns[i].setText(PHPDebugUIMessages.CodeCoverageViewer_1);
        treeColumns[i].setMoveable(false);
        treeColumns[i].setWidth(columnWidths[i]);
    }

    public void dispose() {
        CodeCoveragePreferenceKeys.setCodeCoverageColumnWidths(getColumnWidths());
        getTree().dispose();
    }

    int[] getColumnWidths() {
        int[] widths = new int[treeColumns.length];
        for (int i = 0; i < treeColumns.length; ++i) {
            widths[i] = treeColumns[i].getWidth();
        }
        return widths;
    }

    void setColumnWidths(int[] widths) {
        boolean isParamLimiter = widths.length < treeColumns.length;
        int limit = isParamLimiter ? widths.length : treeColumns.length;
        for (int i = 0; i < limit; ++i) {
            treeColumns[i].setWidth(widths[i]);
        }
        if (!isParamLimiter) {
            for (int i = widths.length; i < treeColumns.length; ++i) {
                treeColumns[i].setWidth(widths[widths.length - 1]);
            }
        }
    }
}