blob: 78371d1c484edb9ccc45e98c851dac15c02abc52 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2012, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Bernd Hufmann - Initial API and implementation
* Bernd Hufmann - Updated for support of LTTng Tools 2.1
**********************************************************************/
package org.eclipse.tracecompass.internal.lttng2.control.ui.views.dialogs;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceChannelComponent;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceDomainComponent;
/**
* <p>
* Dialog box for collecting information about the events to enable.
* </p>
*
* @author Bernd Hufmann
*/
public class GetEventInfoDialog extends BaseGetInfoDialog implements IGetEventInfoDialog {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The channel combo box.
*/
private CCombo fChannelsCombo = null;
/**
* The filter text
*/
private Text fFilterText;
/**
* The domain type ({@link TraceDomainType})
*/
private TraceDomainType fDomain;
/**
* The Channel where the events should be enabled.
*/
private TraceChannelComponent fChannel;
/**
* List of available channels of the selected session.
*/
private TraceChannelComponent[] fChannels;
/**
* The filter expression
*/
private String fFilterExpression;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor of dialog box.
* @param shell - the shell for the dialog box
*/
public GetEventInfoDialog(Shell shell) {
super(shell);
setShellStyle(SWT.RESIZE | getShellStyle());
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
@Override
public TraceChannelComponent getChannel() {
return fChannel;
}
@Override
public void setDomain(TraceDomainType domain) {
fDomain = domain;
}
@Override
public String getFilterExpression() {
return fFilterExpression;
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(Messages.TraceControl_EnableEventsDialogTitle);
newShell.setImage(Activator.getDefault().loadIcon(TARGET_NEW_CONNECTION_ICON_FILE));
}
@Override
protected Control createDialogArea(Composite parent) {
// Creating the main component
super.createDialogArea(parent);
// Initializations
Composite dialogComposite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(1, true);
dialogComposite.setLayout(layout);
dialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
GridData data = new GridData(GridData.FILL_HORIZONTAL);
// Adding the listener to the session component
fSessionsCombo.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
fSessionIndex = fSessionsCombo.getSelectionIndex();
if (fSessionIndex >= 0) {
TraceDomainComponent domain = null;
TraceDomainComponent[] domains = fSessions[fSessionIndex].getDomains();
for (int i = 0; i < domains.length; i++) {
if (domains[i].getDomain().equals(fDomain)) {
domain = domains[i];
break;
}
}
if (domain != null) {
fChannels = domain.getChannels();
String selectionItems[] = new String[fChannels.length];
for (int i = 0; i < selectionItems.length; i++) {
selectionItems[i] = String.valueOf(fChannels[i].getName());
}
fChannelsCombo.setItems(selectionItems);
fChannelsCombo.setEnabled(fChannels.length > 0);
} else {
fChannelsCombo.setItems(new String[0]);
fChannelsCombo.setEnabled(false);
fChannels = null;
}
fChannelsCombo.getParent().getParent().layout();
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// Do nothing
}
});
// Channel group
Group channelsGroup = new Group(dialogComposite, SWT.SHADOW_NONE);
channelsGroup.setText(Messages.TraceControl_EnableEventsChannelGroupName);
layout = new GridLayout(1, true);
channelsGroup.setLayout(layout);
data = new GridData(GridData.FILL_HORIZONTAL);
channelsGroup.setLayoutData(data);
fChannelsCombo = new CCombo(channelsGroup, SWT.READ_ONLY);
fChannelsCombo.setToolTipText(Messages.TraceControl_EnableEventsChannelsTooltip);
fChannelsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fChannelsCombo.setEnabled(false);
// take first session to test whether events filtering is supported or not
if (fSessions[0].isEventFilteringSupported(fDomain)) {
Group filterMainGroup = new Group(dialogComposite, SWT.SHADOW_NONE);
filterMainGroup.setText(Messages.TraceControl_EnableEventsFilterGroupName);
layout = new GridLayout(2, false);
filterMainGroup.setLayout(layout);
data = new GridData(GridData.FILL_HORIZONTAL);
filterMainGroup.setLayoutData(data);
fFilterText = new Text(filterMainGroup, SWT.LEFT);
fFilterText.setToolTipText(Messages.TraceControl_EnableEventsFilterTooltip);
data = new GridData(GridData.FILL_HORIZONTAL);
fFilterText.setLayoutData(data);
}
getShell().setMinimumSize(new Point(300, 200));
return dialogComposite;
}
@Override
protected void okPressed() {
if (fSessionsCombo.getSelectionIndex() < 0) {
MessageDialog.openError(getShell(),
Messages.TraceControl_EnableEventsDialogTitle,
Messages.TraceControl_EnableEventsNoSessionError);
return;
}
fSessionIndex = fSessionsCombo.getSelectionIndex();
// if no channel is available or no channel is selected use default channel indicated by fChannel=null
fChannel = null;
if ((fChannels != null) && (fChannelsCombo.getSelectionIndex() >= 0)) {
fChannel = fChannels[fChannelsCombo.getSelectionIndex()];
}
// initialize filter with null
fFilterExpression = null;
if (fSessions[0].isEventFilteringSupported(fDomain)) {
String tempFilter = fFilterText.getText();
if(!tempFilter.trim().isEmpty()) {
fFilterExpression = tempFilter;
}
}
super.okPressed();
}
}