blob: 20747ba3e11eb4a4efe2a2ca4f8431b8a3b0022b [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2005, 2014 IBM Corporation, 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:
* IBM - Initial API and implementation
* Bernd Hufmann - Updated for TMF
**********************************************************************/
package org.eclipse.tracecompass.tmf.ui.views.uml2sd.dialogs;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.handlers.provider.ISDGraphNodeSupporter;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.util.Messages;
/**
* Class implementation contains the controls that allows to create or update a find or filter Criteria.
*
* @version 1.0
* @author sveyrier
*/
public class TabContents extends Composite {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The button for lifelines.
*/
private Button fLifelineButton;
/**
* The button for stops.
*/
private Button fStopButton = null;
/**
* The button for synchronous messages
*/
private Button fSynMessageButton = null;
/**
* The button for synchronous return messages
*/
private Button fSynMessageReturnButton = null;
/**
* The button for asynchronous messages
*/
private Button fAsynMessageButton = null;
/**
* The button for asynchronous return messages
*/
private Button fAsynMessageReturnButton = null;
/**
* The search text combo box.
*/
private Combo fSearchText = null;
/**
* The button for case sensitive expressions.
*/
private Button fCaseSensitive = null;
/**
* The label for the result string.
*/
private Label fResult = null;
/**
* The button for notifying parent about valid data.
*/
private Button fParentOkButton = null;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Creates the dialog contents
*
* @param parent the parent widget
* @param provider the provider which handle the action
* @param okButton of the dialog (to be enabled/disabled)
* @param expressionList list of strings already searched for
*/
public TabContents(Composite parent, ISDGraphNodeSupporter provider, Button okButton, String[] expressionList) {
super(parent, SWT.NONE);
fParentOkButton = okButton;
setLayout(new GridLayout());
GraphNodeTypeListener graphNodeTypeListener = new GraphNodeTypeListener();
ExpressionListener expressionListener = new ExpressionListener();
// Inform the user how to fill the string to search
Label searchTitle = new Label(this, SWT.LEFT);
searchTitle.setText(Messages.SequenceDiagram_MatchingString);
Composite searchPart = new Composite(this, SWT.NONE);
GridData searchPartData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
GridLayout searchPartLayout = new GridLayout();
searchPartLayout.numColumns = 2;
searchPart.setLayout(searchPartLayout);
searchPart.setLayoutData(searchPartData);
// Create the user string input area
fSearchText = new Combo(searchPart, SWT.DROP_DOWN);
GridData comboData = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL);
/*
* GridData tabLayoutData2 = new GridData(GridData.HORIZONTAL_ALIGN_FILL| GridData.VERTICAL_ALIGN_FILL);
*/
fSearchText.setLayoutData(comboData);
if (expressionList != null) {
for (int i = 0; i < expressionList.length; i++) {
fSearchText.add(expressionList[i]);
}
}
fSearchText.addModifyListener(expressionListener);
// Create the case sensitive check button
fCaseSensitive = new Button(searchPart, SWT.CHECK);
fCaseSensitive.setText(Messages.SequenceDiagram_CaseSensitive);
// Create the group for searched graph node kind selection
Group kindSelection = new Group(this, SWT.SHADOW_NONE);
kindSelection.setText(Messages.SequenceDiagram_SearchFor);
// kindSelection.setLayoutData(tabLayoutData2);
GridLayout kindSelectionLayout = new GridLayout();
kindSelectionLayout.numColumns = 1;
kindSelection.setLayout(kindSelectionLayout);
GridData kindSelectionData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
kindSelection.setLayoutData(kindSelectionData);
// Create the lifeline check button
if (provider != null && provider.isNodeSupported(ISDGraphNodeSupporter.LIFELINE)) {
fLifelineButton = new Button(kindSelection, SWT.CHECK);
String nodeName = provider.getNodeName(ISDGraphNodeSupporter.LIFELINE, null);
if (nodeName != null) {
fLifelineButton.setText(nodeName);
} else {
fLifelineButton.setText(Messages.SequenceDiagram_Lifeline);
}
fLifelineButton.setEnabled(true);
fLifelineButton.addSelectionListener(graphNodeTypeListener);
}
if (provider != null && provider.isNodeSupported(ISDGraphNodeSupporter.STOP)) {
// Create the stop check button
fStopButton = new Button(kindSelection, SWT.CHECK);
String nodeName = provider.getNodeName(ISDGraphNodeSupporter.STOP, null);
if (nodeName != null) {
fStopButton.setText(nodeName);
} else {
fStopButton.setText(Messages.SequenceDiagram_Stop);
}
fStopButton.setEnabled(true);
fStopButton.addSelectionListener(graphNodeTypeListener);
}
if (provider != null && provider.isNodeSupported(ISDGraphNodeSupporter.SYNCMESSAGE)) {
// Create the synchronous message check button
fSynMessageButton = new Button(kindSelection, SWT.CHECK);
String nodeName = provider.getNodeName(ISDGraphNodeSupporter.SYNCMESSAGE, null);
if (nodeName != null) {
fSynMessageButton.setText(nodeName);
} else {
fSynMessageButton.setText(Messages.SequenceDiagram_SynchronousMessage);
}
fSynMessageButton.setEnabled(true);
fSynMessageButton.addSelectionListener(graphNodeTypeListener);
}
if (provider != null && provider.isNodeSupported(ISDGraphNodeSupporter.SYNCMESSAGERETURN)) {
// Create the synchronous message return check button
fSynMessageReturnButton = new Button(kindSelection, SWT.CHECK);
String nodeName = provider.getNodeName(ISDGraphNodeSupporter.SYNCMESSAGERETURN, null);
if (nodeName != null) {
fSynMessageReturnButton.setText(nodeName);
} else {
fSynMessageReturnButton.setText(Messages.SequenceDiagram_SynchronousMessageReturn);
}
fSynMessageReturnButton.setEnabled(true);
fSynMessageReturnButton.addSelectionListener(graphNodeTypeListener);
}
if (provider != null && provider.isNodeSupported(ISDGraphNodeSupporter.ASYNCMESSAGE)) {
// Create the asynchronous message check button
fAsynMessageButton = new Button(kindSelection, SWT.CHECK);
String nodeName = provider.getNodeName(ISDGraphNodeSupporter.ASYNCMESSAGE, null);
if (nodeName != null) {
fAsynMessageButton.setText(nodeName);
} else {
fAsynMessageButton.setText(Messages.SequenceDiagram_AsynchronousMessage);
}
fAsynMessageButton.setEnabled(true);
fAsynMessageButton.addSelectionListener(graphNodeTypeListener);
}
if (provider != null && provider.isNodeSupported(ISDGraphNodeSupporter.ASYNCMESSAGERETURN)) {
// Create the asynchronous message return check button
fAsynMessageReturnButton = new Button(kindSelection, SWT.CHECK);
String nodeName = provider.getNodeName(ISDGraphNodeSupporter.ASYNCMESSAGERETURN, null);
if (nodeName != null) {
fAsynMessageReturnButton.setText(nodeName);
} else {
fAsynMessageReturnButton.setText(Messages.SequenceDiagram_AsynchronousMessageReturn);
}
fAsynMessageReturnButton.setEnabled(true);
fAsynMessageReturnButton.addSelectionListener(graphNodeTypeListener);
}
fResult = new Label(this, SWT.LEFT);
fResult.setText(Messages.SequenceDiagram_StringNotFound);
fResult.setVisible(false);
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
/**
* Set result text visibility
* @param found <code>true</code> for found (enable visibility) else false
*/
public void setResult(boolean found) {
fResult.setVisible(!found);
}
/**
* Updates parent OK button based on input data.
*/
public void updateOkButton() {
if (fParentOkButton == null) {
return;
}
boolean enabled = (fSearchText.getText() != null && !fSearchText.getText().equals("")) && //$NON-NLS-1$
(isLifelineButtonSelected() || isStopButtonSelected() || isSynMessageButtonSelected() || isSynMessageReturnButtonSelected() || isAsynMessageButtonSelected() || isAsynMessageReturnButtonSelected());
fParentOkButton.setEnabled(enabled);
}
/**
* Sets the parent OK button reference.
*
* @param okButton The parent OK button
*/
public void setOkButton(Button okButton) {
fParentOkButton = okButton;
}
/**
* Returns the asynchronous message check button state
*
* @return true if check, false otherwise
*/
public boolean isAsynMessageButtonSelected() {
if (fAsynMessageButton != null) {
return fAsynMessageButton.getSelection();
}
return false;
}
/**
* Returns the asynchronous message return check button state
*
* @return true if check, false otherwise
*/
public boolean isAsynMessageReturnButtonSelected() {
if (fAsynMessageReturnButton != null) {
return fAsynMessageReturnButton.getSelection();
}
return false;
}
/**
* Returns the case sensitive check button state
*
* @return true if check, false otherwise
*/
public boolean isCaseSensitiveSelected() {
if (fCaseSensitive != null) {
return fCaseSensitive.getSelection();
}
return false;
}
/**
* Returns the lifeline check button state
*
* @return true if check, false otherwise
*/
public boolean isLifelineButtonSelected() {
if (fLifelineButton != null) {
return fLifelineButton.getSelection();
}
return false;
}
/**
* Returns the user input string
*
* @return the string to search for
*/
public String getSearchText() {
return fSearchText.getText();
}
/**
* Returns the stop check button state
*
* @return true if check, false otherwise
*/
public boolean isStopButtonSelected() {
if (fStopButton != null) {
return fStopButton.getSelection();
}
return false;
}
/**
* Returns the synchronous message check button state
*
* @return true if check, false otherwise
*/
public boolean isSynMessageButtonSelected() {
if (fSynMessageButton != null) {
return fSynMessageButton.getSelection();
}
return false;
}
/**
* Returns the synchronous message return check button state
*
* @return true if check, false otherwise
*/
public boolean isSynMessageReturnButtonSelected() {
if (fSynMessageReturnButton != null) {
return fSynMessageReturnButton.getSelection();
}
return false;
}
/**
* Set the asynchronous message check button state
*
* @param state
* The new state to set
*/
public void setAsynMessageButtonSelection(boolean state) {
if (fAsynMessageButton != null) {
fAsynMessageButton.setSelection(state);
}
}
/**
* Set the asynchronous message return check button state
*
* @param state
* The new state to set
*/
public void setAsynMessageReturnButtonSelection(boolean state) {
if (fAsynMessageReturnButton != null) {
fAsynMessageReturnButton.setSelection(state);
}
}
/**
* Set the case sensitive check button state
*
* @param state
* The new state to set
*/
public void setCaseSensitiveSelection(boolean state) {
if (fCaseSensitive != null) {
fCaseSensitive.setSelection(state);
}
}
/**
* Set the lifeline check button state
*
* @param state
* The new state to set
*/
public void setLifelineButtonSelection(boolean state) {
if (fLifelineButton != null) {
fLifelineButton.setSelection(state);
}
}
/**
* Set the user input string
*
* @param text
* The search text
*/
public void setSearchText(String text) {
fSearchText.setText(text);
}
/**
* Set the stop check button state
*
* @param state
* The new state to set
*/
public void setStopButtonSelection(boolean state) {
if (fStopButton != null) {
fStopButton.setSelection(state);
}
}
/**
* Set the synchronous message check button state
*
* @param state
* The new state to set
*/
public void setSynMessageButtonSelection(boolean state) {
if (fSynMessageButton != null) {
fSynMessageButton.setSelection(state);
}
}
/**
* Set the synchronous message return check button state
*
* @param state
* The new state to set
*/
public void setSynMessageReturnButtonSelection(boolean state) {
if (fSynMessageReturnButton != null) {
fSynMessageReturnButton.setSelection(state);
}
}
// ------------------------------------------------------------------------
// Helper classes
// ------------------------------------------------------------------------
/**
* Selection listener implementation for graph node types.
* @version 1.0
*/
protected class GraphNodeTypeListener implements SelectionListener {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// Nothing to do
}
@Override
public void widgetSelected(SelectionEvent e) {
updateOkButton();
}
}
/**
* Modify listener implementation for the expression field.
*
* @version 1.0
*/
protected class ExpressionListener implements ModifyListener {
@Override
public void modifyText(ModifyEvent e) {
updateOkButton();
}
}
}