trace/tracebuilder/com.nokia.tracebuilder.view/src/com/nokia/tracebuilder/view/PropertyDialogUITarget.java
author Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
Tue, 24 Aug 2010 14:01:48 +0300
changeset 16 72f198be1c1d
parent 10 ed1c9f64298a
permissions -rw-r--r--
Crash Analyser Carbide Extension 1.4.0

/*
 * Copyright (c) 2009-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:
 *
 * Composite for target label and combo box
 *
 */
package com.nokia.tracebuilder.view;

import java.util.Iterator;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import com.nokia.tracebuilder.engine.SoftwareComponent;
import com.nokia.tracebuilder.engine.TraceBuilderGlobals;
import com.nokia.tracebuilder.engine.TraceObjectPropertyDialog;
import com.nokia.tracebuilder.engine.rules.RuleUtils;
import com.nokia.tracebuilder.model.TraceConstantTable;
import com.nokia.tracebuilder.project.FormattingUtils;
import com.nokia.tracebuilder.project.GroupNameHandlerBase;

/**
 * Composite for target label and combo box
 * 
 */
final class PropertyDialogUITarget extends PropertyDialogComposite {

	/**
	 * Target label
	 */
	private Label targetLabel = null;

	/**
	 * Target selector
	 */
	private Combo targetCombo = null;

	/**
	 * Property dialog UI
	 */
	private PropertyDialogUI dialogUI;

	/**
	 * Constructor
	 * 
	 * @param parent
	 *            parent composite
	 * @param uiType
	 *            the type of UI
	 * @param modifyListener
	 *            combobox text change listener
	 * @param selectionListener
	 *            combobox selection change listener
	 */
	PropertyDialogUITarget(Composite parent, int uiType,
			ModifyListener modifyListener, SelectionListener selectionListener) {
		super(parent);
		this.dialogUI = (PropertyDialogUI) parent;
		create(uiType, modifyListener, selectionListener);
	}

	/**
	 * Creates the label and combo box
	 * 
	 * @param uiType
	 *            the UI type
	 * @param modifyListener
	 *            combobox text change listener
	 * @param selectionListener
	 *            combobox selection change listener
	 */
	private void create(int uiType, ModifyListener modifyListener,
			SelectionListener selectionListener) {
		targetLabel = new Label(getParent(), SWT.NONE);

		if (uiType == TraceObjectPropertyDialog.SELECT_COMPONENT) {
			targetCombo = new Combo(getParent(), SWT.READ_ONLY);
		} else {
			targetCombo = new Combo(getParent(), SWT.NONE);
		}

		int selid = 0;
		String text;
		if (uiType == TraceObjectPropertyDialog.SELECT_COMPONENT) {
			text = Messages
					.getString("PropertyDialogUI.SelectComponentNameLabel"); //$NON-NLS-1$	
			Iterator<SoftwareComponent> components = TraceBuilderGlobals
					.getSoftwareComponents();
			while (components.hasNext()) {
				SoftwareComponent component = components.next();
				targetCombo.add(component.getName());
			}
		} else if (uiType == TraceObjectPropertyDialog.ADD_CONSTANT) {
			text = Messages
					.getString("PropertyDialogUITarget.AddConstantTargetLabel"); //$NON-NLS-1$
			Iterator<TraceConstantTable> tables = TraceBuilderGlobals
					.getTraceModel().getConstantTables();
			while (tables.hasNext()) {
				targetCombo.add(tables.next().getName());
			}
		} else {
			text = Messages.getString("PropertyDialogUI.AddTraceTargetLabel"); //$NON-NLS-1$
			Iterator<String> groups = FormattingUtils
					.getGroupNames(TraceBuilderGlobals.getTraceModel());
			while (groups.hasNext()) {
				String group = groups.next();

				// TRACE_STATE and TRACE_PERFORMACE group names are not added
				// to combo, those can be used only via templates
				GroupNameHandlerBase groupNameHandler = TraceBuilderGlobals.getGroupNameHandler();
				String[] defaultGroups = groupNameHandler.getDefaultGroups();
				if (group != defaultGroups[groupNameHandler.getStateGroupIdIndex()]
						&& group != defaultGroups[groupNameHandler.getPerformanceGroupIdIndex()]) {
					targetCombo.add(group);
				}
			}
		}

		targetLabel.setText(text);
		targetCombo.select(selid);
		targetCombo.addSelectionListener(selectionListener);
		targetCombo.addModifyListener(modifyListener);
		setFieldButtonLayoutData(targetCombo, null);
	}

	/**
	 * Gets the target trace object
	 * 
	 * @return the target
	 */
	String getTarget() {
		return targetCombo.getText();
	}

	/**
	 * Sets the target object
	 * 
	 * @param target
	 *            the new target
	 */
	void setTarget(String target) {
		int found = -1;
		for (int i = 0; i < targetCombo.getItemCount() && found == -1; i++) {
			if (targetCombo.getItem(i).equals(target)) {
				found = i;
			}
		}
		int uiType = dialogUI.getUiType();
		if (found >= 0) {
			targetCombo.select(found);
		} else if (uiType == TraceObjectPropertyDialog.ADD_PARAMETER
				|| uiType == TraceObjectPropertyDialog.ADD_TRACE
				|| uiType == TraceObjectPropertyDialog.INSTRUMENTER) {
			int templateIndex = dialogUI.templateComposite.getTemplateIndex();
			GroupNameHandlerBase groupNameHandler = TraceBuilderGlobals.getGroupNameHandler();
			String[] defaultGroups = groupNameHandler.getDefaultGroups();
			if (((!target
					.equals(defaultGroups[groupNameHandler.getStateGroupIdIndex()]) && !target
					.equals(defaultGroups[groupNameHandler.getPerformanceGroupIdIndex()])) && templateIndex == 0)
					|| (target
							.equals(defaultGroups[groupNameHandler.getStateGroupIdIndex()]) && templateIndex == RuleUtils.TYPE_STATE_TRACE + 1)
					|| (target
							.equals(defaultGroups[groupNameHandler.getPerformanceGroupIdIndex()]) && templateIndex == RuleUtils.TYPE_PERF_EVENT + 1)
					|| (target
							.equals(defaultGroups[groupNameHandler.getFlowGroupIdIndex()]) && templateIndex == RuleUtils.TYPE_ENTRY_EXIT + 1)) {
				targetCombo.setText(target);
			} else {
				targetCombo.select(groupNameHandler.getNormalGroupIdIndex() - 1);
			}
		}
	}

	/**
	 * Enables / disables the target field
	 * 
	 * @param flag
	 *            new enabled state
	 */
	void setEnabled(boolean flag) {
		targetCombo.setEnabled(flag);
	}
}