| /******************************************************************************* |
| * Copyright (c) 2013 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 org.eclipse.e4.tools.event.spy.ui; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.e4.tools.event.spy.model.CapturedEvent; |
| import org.eclipse.e4.tools.event.spy.model.CapturedEventTreeSelection; |
| import org.eclipse.e4.tools.event.spy.model.ItemToFilter; |
| import org.eclipse.e4.tools.event.spy.model.Parameter; |
| import org.eclipse.e4.tools.event.spy.util.ParameterFormatter; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.events.MouseListener; |
| import org.eclipse.swt.events.TreeEvent; |
| import org.eclipse.swt.events.TreeListener; |
| import org.eclipse.swt.graphics.Rectangle; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Tree; |
| import org.eclipse.swt.widgets.TreeColumn; |
| import org.eclipse.swt.widgets.TreeItem; |
| |
| |
| |
| public class CapturedEventTree { |
| |
| public interface SelectionListener { |
| void selectionChanged(CapturedEventTreeSelection selection); |
| } |
| |
| private final Tree tree; |
| |
| private SelectionListener selectionListener; |
| |
| private final List<ItemToFilter> columns = new ArrayList<ItemToFilter>(); |
| |
| |
| /* Layout scheme: |
| * |
| * +-- parent---------------+ |
| * | | |
| * | Tree | |
| * | | |
| * +------------------------+ |
| * |
| * */ |
| |
| public CapturedEventTree(Composite parent) { |
| tree = new Tree(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); |
| tree.setHeaderVisible(true); |
| tree.setLinesVisible(true); |
| |
| TreeColumn column = new TreeColumn(tree, SWT.LEFT); |
| column.setText(ItemToFilter.Topic.toString()); |
| column.setWidth(350); |
| columns.add(ItemToFilter.Topic); |
| |
| column = new TreeColumn(tree, SWT.LEFT); |
| column.setText(ItemToFilter.Publisher.toString()); |
| column.setWidth(150); |
| columns.add(ItemToFilter.Publisher); |
| |
| column = new TreeColumn(tree, SWT.LEFT); |
| column.setText(ItemToFilter.ChangedElement.toString()); |
| column.setWidth(150); |
| columns.add(ItemToFilter.ChangedElement); |
| |
| addTreeEventListeners(); |
| } |
| |
| @SuppressWarnings("unchecked") |
| private void addTreeEventListeners() { |
| tree.addTreeListener(new TreeListener() { |
| public void treeExpanded(TreeEvent e) { |
| TreeItem item = (TreeItem) e.item; |
| TreeItem paramItem = item.getItem(0); |
| if (paramItem.getText().length() == 0) { |
| for (Parameter param: (List<Parameter>) paramItem.getData()) { |
| if (paramItem == null) { |
| paramItem = new TreeItem(item, SWT.NONE); |
| } |
| paramItem.setText(ParameterFormatter.toString(param)); |
| paramItem = null; |
| } |
| } |
| |
| } |
| public void treeCollapsed(TreeEvent e) { |
| } |
| }); |
| |
| tree.addMouseListener(new MouseListener() { |
| public void mouseUp(MouseEvent e) { |
| } |
| public void mouseDoubleClick(MouseEvent e) { |
| |
| } |
| public void mouseDown(MouseEvent e) { |
| TreeItem[] items = tree.getSelection(); |
| if (items == null || items.length == 0) { |
| return; |
| } |
| int selectedItemIndex = -1; |
| for (int i=0; i<columns.size(); i++) { |
| Rectangle rec = items[0].getBounds(i); |
| if (e.x >= rec.x && e.x <= rec.x + rec.width) { |
| selectedItemIndex = i; |
| break; |
| } |
| } |
| if (selectedItemIndex >= 0 && selectionListener != null) { |
| String selection = items[0].getText(selectedItemIndex); |
| if (selection.length() != 0) { |
| selectionListener.selectionChanged(new CapturedEventTreeSelection(selection,items[0].getItemCount() == 0)); |
| } |
| } |
| } |
| }); |
| } |
| |
| public void addEvent(CapturedEvent event) { |
| TreeItem item = new TreeItem(tree, SWT.NONE); |
| |
| item.setText(columns.indexOf(ItemToFilter.Topic), event.getTopic()); |
| item.setText(columns.indexOf(ItemToFilter.Publisher), event.getPublisherClassName()); |
| item.setText(columns.indexOf(ItemToFilter.ChangedElement), event.getChangedElementClassName()); |
| |
| if (event.hasParameters()) { |
| item = new TreeItem(item, SWT.NONE); |
| item.setData(event.getParameters()); |
| } |
| } |
| |
| public void setSelectionListener(SelectionListener selectionListener) { |
| this.selectionListener = selectionListener; |
| } |
| |
| public Control getControl() { |
| return tree; |
| } |
| |
| public void removeAll() { |
| tree.removeAll(); |
| } |
| } |