/*******************************************************************************
* 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]);
}
}
}
}