diff -r ed1c9f64298a -r 5b9d4d8641ce trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/TriggerPropertyDialog.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/TriggerPropertyDialog.java Wed Jun 23 14:49:59 2010 +0300 @@ -0,0 +1,512 @@ +/* + * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + * Trigger Property Dialog class + * + */ +package com.nokia.traceviewer.dialog; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +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.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +import com.nokia.traceviewer.dialog.treeitem.TreeItemListener; +import com.nokia.traceviewer.dialog.treeitem.TriggerTreeItem; +import com.nokia.traceviewer.dialog.treeitem.TriggerTreeTextItem; +import com.nokia.traceviewer.engine.TraceViewerGlobals; + +/** + * Trigger Property Dialog class + * + */ +public class TriggerPropertyDialog extends BasePropertyDialog { + + /** + * Text to show when Text rule is selected + */ + private static final String TEXT_RULE_INFORMATION_TEXT = Messages + .getString("TriggerPropertyDialog.TextRuleInfo"); //$NON-NLS-1$ + + /** + * Text to show when Activation rule is selected + */ + private static final String ACTIVATION_RULE_INFORMATION_TEXT = Messages + .getString("TriggerPropertyDialog.ActivationRuleInfo"); //$NON-NLS-1$ + + /** + * Stop trigger text + */ + private static final String STOP_TRIGGER_TEXT = Messages + .getString("TriggerPropertyDialog.StopTrigger"); //$NON-NLS-1$ + + /** + * Start trigger text + */ + private static final String START_TRIGGER_TEXT = Messages + .getString("TriggerPropertyDialog.StartTrigger"); //$NON-NLS-1$ + + /** + * Activation trigger text + */ + private static final String ACTIVATION_TRIGGER_TEXT = Messages + .getString("TriggerPropertyDialog.ActivationTrigger"); //$NON-NLS-1$ + + /** + * Activation rule index in the type array + */ + private static final int ACTIVATION_RULE_INDEX = 2; + + /** + * Old item when editing + */ + private TriggerTreeItem oldItem; + + /** + * Selected item in the tree + */ + private final TriggerTreeItem selectedItem; + + /** + * Combo box for trigger type + */ + private Combo typeCombo; + + /** + * Configuration file label + */ + private Label configurationFileLabel; + + /** + * Activation configuration text field + */ + private Text activationConfText; + + /** + * Load activation configuration button + */ + private Button loadActivationConfButton; + + /** + * Configuration file path + */ + private String configurationFilePath; + + /** + * Configuration name + */ + private String configurationName; + + /** + * TreeItem listener + */ + private final TreeItemListener listener; + + /** + * Constructor + * + * @param parent + * Parent shell + * @param newItem + * TreeItem to modify, null if creating new one + * @param listener + * Tree item listener + * @param selected + * selected object + */ + public TriggerPropertyDialog(Shell parent, TriggerTreeItem newItem, + TreeItemListener listener, Object selected) { + super(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); + this.newItem = newItem; + this.selectedItem = (TriggerTreeItem) selected; + this.listener = listener; + + // If edit, save the old item to insert info to fields + if (newItem != null) { + oldItem = newItem; + textFieldTouched = true; + nameFieldTouched = true; + + if (oldItem instanceof TriggerTreeTextItem) { + configurationFilePath = ((TriggerTreeTextItem) oldItem) + .getConfigurationFilePath(); + configurationName = ((TriggerTreeTextItem) oldItem) + .getConfigurationName(); + } + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.traceviewer.dialog.BaseDialog#createDialogContents() + */ + @Override + protected void createDialogContents() { + getShell().setText( + Messages.getString("TriggerPropertyDialog.TriggerDialogTitle")); //$NON-NLS-1$ + composite.setLayout(new GridLayout()); + createMainComposite(); + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.dialog.BasePropertyDialog#createRightUnderComposite + * () + */ + @Override + protected void createRightUnderComposite() { + // Dispose changeable elements + if (rightUnderComposite != null) { + disposeChangeableElements(); + } else { + // Right under composite + GridLayout rightUnderCompositeGridLayout = new GridLayout(); + rightUnderCompositeGridLayout.marginHeight = 14; + rightUnderCompositeGridLayout.numColumns = 3; + GridData rightUnderCompositeGridData = new GridData(); + rightUnderCompositeGridData.heightHint = 114; + rightUnderCompositeGridData.verticalAlignment = GridData.BEGINNING; + rightUnderCompositeGridData.horizontalAlignment = SWT.FILL; + rightUnderComposite = new Composite(mainComposite, SWT.BORDER); + rightUnderComposite.setLayoutData(rightUnderCompositeGridData); + rightUnderComposite.setLayout(rightUnderCompositeGridLayout); + + // Text label + textLabel = new Label(rightUnderComposite, SWT.NONE); + textLabel.setText(Messages + .getString("TriggerPropertyDialog.TextString")); //$NON-NLS-1$ + + // Text text + GridData textTextGridData = new GridData(); + textTextGridData.horizontalIndent = 28; + textTextGridData.horizontalAlignment = SWT.FILL; + textTextGridData.horizontalSpan = 2; + textTextGridData.grabExcessHorizontalSpace = true; + textText = new Text(rightUnderComposite, SWT.BORDER); + textText.setLayoutData(textTextGridData); + if (oldItem instanceof TriggerTreeTextItem) { + TriggerTreeTextItem item = (TriggerTreeTextItem) oldItem; + textText.setText(item.getText()); + } + + // Spacer + spacer = new Label(rightUnderComposite, SWT.NONE); + + // Match case checkbox + GridData matchCaseCheckBoxGridData = new GridData(); + matchCaseCheckBoxGridData.horizontalIndent = 28; + matchCaseCheckBoxGridData.horizontalSpan = 2; + matchCaseCheckBox = new Button(rightUnderComposite, SWT.CHECK); + matchCaseCheckBox.setText(Messages + .getString("TriggerPropertyDialog.MatchCaseString")); //$NON-NLS-1$ + matchCaseCheckBox.setLayoutData(matchCaseCheckBoxGridData); + + // Set match case checkbox value + if (oldItem instanceof TriggerTreeTextItem) { + TriggerTreeTextItem item = (TriggerTreeTextItem) oldItem; + matchCaseCheckBox.setSelection(item.isMatchCase()); + } + + // Type label + Label typeLabel = new Label(rightUnderComposite, SWT.NONE); + typeLabel.setText(Messages + .getString("TriggerPropertyDialog.TypeString")); //$NON-NLS-1$ + createTypeCombo(); + } + + // Activation trigger type + if (typeCombo.getSelectionIndex() == ACTIVATION_RULE_INDEX) { + // Add new UI component, create action listeners for opening a file + // Configuration file label + configurationFileLabel = new Label(rightUnderComposite, SWT.NONE); + configurationFileLabel.setText(Messages + .getString("TriggerPropertyDialog.ConfFileString")); //$NON-NLS-1$ + + GridData activationConfGridData = new GridData(); + activationConfGridData.horizontalIndent = 28; + activationConfGridData.horizontalAlignment = SWT.FILL; + activationConfGridData.grabExcessHorizontalSpace = true; + activationConfText = new Text(rightUnderComposite, SWT.BORDER); + activationConfText.setEditable(false); + activationConfText.setLayoutData(activationConfGridData); + if (oldItem instanceof TriggerTreeTextItem) { + TriggerTreeTextItem item = (TriggerTreeTextItem) oldItem; + activationConfText.setText(item.getConfigurationName()); + } + + GridData loadActivationConfButtonGridData = new GridData(); + loadActivationConfButtonGridData.heightHint = 25; + loadActivationConfButtonGridData.widthHint = 30; + loadActivationConfButton = new Button(rightUnderComposite, SWT.PUSH); + loadActivationConfButton.setText("..."); //$NON-NLS-1$ + loadActivationConfButton + .setLayoutData(loadActivationConfButtonGridData); + loadActivationConfButton + .addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + + // Open "Load configuration" dialog + TraceConfigurationLoadDialog dialog = new TraceConfigurationLoadDialog( + false, configurationFilePath); + dialog.open(); + + configurationFilePath = dialog + .getLoadedConfigurationFilePath(); + configurationName = dialog + .getLoadedConfigurationName(); + activationConfText.setText(configurationName); + } + }); + + } else { + // Remove extra UI component + if (configurationFileLabel != null) { + configurationFileLabel.dispose(); + } + if (activationConfText != null) { + activationConfText.dispose(); + } + if (loadActivationConfButton != null) { + loadActivationConfButton.dispose(); + } + } + + // Layout again + rightUnderComposite.layout(); + } + + /** + * This method initializes typeCombo + * + */ + private void createTypeCombo() { + GridData typeComboGridData = new GridData(); + typeComboGridData.horizontalIndent = 28; + typeComboGridData.horizontalAlignment = SWT.FILL; + typeComboGridData.horizontalSpan = 2; + typeComboGridData.grabExcessHorizontalSpace = true; + typeCombo = new Combo(rightUnderComposite, SWT.READ_ONLY); + typeCombo.setLayoutData(typeComboGridData); + + // Keep in this order + typeCombo.add(START_TRIGGER_TEXT); + typeCombo.add(STOP_TRIGGER_TEXT); + typeCombo.add(ACTIVATION_TRIGGER_TEXT); + + // Set match case checkbox value + if (oldItem instanceof TriggerTreeTextItem) { + TriggerTreeTextItem item = (TriggerTreeTextItem) oldItem; + typeCombo.setText(typeCombo.getItem(item.getType().ordinal())); + matchCaseCheckBox.setSelection(item.isMatchCase()); + } else { + typeCombo.setText(typeCombo.getItem(0)); + } + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToUpperComposite + * () + */ + @Override + protected void insertDataToUpperComposite() { + nameLabel.setText(Messages + .getString("TriggerPropertyDialog.RuleNameString")); //$NON-NLS-1$ + // Set data from old item + if (oldItem != null) { + nameText.setText(oldItem.getName()); + if (oldItem.getRule() == TriggerTreeItem.Rule.TEXT_RULE) { + selectedRuleLabel.setText(TEXT_RULE_NAME); + } else { + selectedRuleLabel.setText(TEXT_RULE_NAME); + } + } else { + selectedRuleLabel.setText(TEXT_RULE_NAME); + } + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToTextFields() + */ + @Override + protected void insertDataToTextFields() { + if (oldItem instanceof TriggerTreeTextItem) { + TriggerTreeTextItem item = (TriggerTreeTextItem) oldItem; + if (item.getText() != null) { + textText.setText(item.getText()); + } + matchCaseCheckBox.setSelection(item.isMatchCase()); + } + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToComponentFields + * () + */ + @Override + protected void insertDataToComponentFields() { + } + + /* + * (non-Javadoc) + * + * @see com.nokia.traceviewer.dialog.BasePropertyDialog#setListSelection() + */ + @Override + protected void setListSelection() { + ruleList.add(TEXT_RULE_NAME, TEXT_RULE_INDEX); + // Set list selection + if (oldItem != null) { + if (oldItem.getRule() == TriggerTreeItem.Rule.TEXT_RULE) { + ruleList.setSelection(TEXT_RULE_INDEX); + } + } else { + ruleList.setSelection(TEXT_RULE_INDEX); + } + } + + @Override + protected void okPressed() { + TraceViewerGlobals.postUiEvent("OkButton", "1"); //$NON-NLS-1$ //$NON-NLS-2$ + // Save the position of this item to set it back after creation + // and remove the old child + int pos = 0; + TriggerTreeItem parent = selectedItem; + if (oldItem != null) { + pos = getOldPosition(); + parent = (TriggerTreeItem) oldItem.getParent(); + parent.removeChild(oldItem); + } + + // Create new TriggerTreeTextItem + if (ruleList.getSelectionIndex() == TEXT_RULE_INDEX) { + newItem = new TriggerTreeTextItem( + listener, + parent, + nameText.getText(), + TriggerTreeItem.Rule.TEXT_RULE, + textText.getText(), + matchCaseCheckBox.getSelection(), + TriggerTreeItem.Type.values()[typeCombo.getSelectionIndex()], + configurationFilePath, configurationName); + + // Add mode + if (parent.equals(selectedItem)) { + parent.addChild(newItem); + + // Edit mode + } else { + parent.addChild(pos, newItem); + } + + } else { + // No other rules yet + } + + super.okPressed(); + TraceViewerGlobals.postUiEvent("OkButton", "0"); //$NON-NLS-1$ //$NON-NLS-2$ + + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.dialog.BasePropertyDialog#createActionListeners() + */ + @Override + protected void createActionListeners() { + super.createActionListeners(); + super.createActionListenersForTextRule(); + + // Add selection listener to Trigger type combobox + typeCombo.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent event) { + // If type changes, we might need more or less UI components + createRightUnderComposite(); + setInformationLabel(); + } + }); + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.dialog.BasePropertyDialog#setInformationLabel() + */ + @Override + protected void setInformationLabel() { + if (ruleList.getSelectionIndex() == TEXT_RULE_INDEX) { + informationLabel.setText(TEXT_RULE_INFORMATION_TEXT); + selectedRuleLabel.setText(TEXT_RULE_NAME); + + // Activation configuration + if (typeCombo.getSelectionIndex() == ACTIVATION_RULE_INDEX) { + informationLabel.setText(TEXT_RULE_INFORMATION_TEXT + + ACTIVATION_RULE_INFORMATION_TEXT); + } + + } + } + + /** + * Gets old position of this item + * + * @return old position + */ + protected int getOldPosition() { + TriggerTreeItem item = (TriggerTreeItem) oldItem.getParent(); + Object[] children = item.getChildren(); + int pos = 0; + for (int i = 0; i < children.length; i++) { + if (children[i].equals(oldItem)) { + pos = i; + break; + } + } + + return pos; + } + + /** + * Disposes changeable elements if they exist. Is called when selection is + * changed from the trigger type list and some ui components are changed + */ + private void disposeChangeableElements() { + + } +}