trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/LineCountPropertyDialog.java
changeset 11 5b9d4d8641ce
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/LineCountPropertyDialog.java	Wed Jun 23 14:49:59 2010 +0300
@@ -0,0 +1,337 @@
+/*
+ * 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:
+ *
+ * Line Count Property Dialog class
+ *
+ */
+package com.nokia.traceviewer.dialog;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Shell;
+
+import com.nokia.traceviewer.dialog.treeitem.LineCountTreeComponentItem;
+import com.nokia.traceviewer.dialog.treeitem.LineCountTreeItem;
+import com.nokia.traceviewer.dialog.treeitem.LineCountTreeTextItem;
+import com.nokia.traceviewer.dialog.treeitem.TreeItemListener;
+import com.nokia.traceviewer.engine.TraceViewerGlobals;
+import com.nokia.traceviewer.engine.activation.TraceActivationComponentItem;
+import com.nokia.traceviewer.engine.activation.TraceActivationGroupItem;
+
+/**
+ * Line Count Property Dialog class
+ * 
+ */
+public class LineCountPropertyDialog extends BasePropertyDialog {
+
+	/**
+	 * Text to show when Text rule is selected
+	 */
+	private static final String TEXT_RULE_INFORMATION_TEXT = Messages
+			.getString("LineCountPropertyDialog.TextRuleInfo"); //$NON-NLS-1$
+
+	/**
+	 * Text to show when Component rule is selected
+	 */
+	private static final String COMPONENT_RULE_INFORMATION_TEXT = Messages
+			.getString("LineCountPropertyDialog.ComponentRuleInfoLine1") //$NON-NLS-1$
+			+ WILDCARD_STRING
+			+ Messages
+					.getString("LineCountPropertyDialog.ComponentRuleInfoLine2"); //$NON-NLS-1$
+
+	/**
+	 * Old item used when editing
+	 */
+	private LineCountTreeItem oldItem;
+
+	/**
+	 * Selected item in tree
+	 */
+	private final LineCountTreeItem selectedItem;
+
+	/**
+	 * TreeItem listener
+	 */
+	private final TreeItemListener listener;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 *            Parent shell
+	 * @param newItem
+	 *            TreeItem to modify, null if creating new one
+	 * @param listener
+	 *            TreeItem listener
+	 * @param selected
+	 *            selected item in tree
+	 */
+	public LineCountPropertyDialog(Shell parent, LineCountTreeItem newItem,
+			TreeItemListener listener, Object selected) {
+		super(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		this.newItem = newItem;
+		this.selectedItem = (LineCountTreeItem) selected;
+		this.listener = listener;
+
+		// If edit, save the old item to insert info to fields
+		if (newItem != null) {
+			oldItem = newItem;
+			textFieldTouched = true;
+			nameFieldTouched = true;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.traceviewer.dialog.BaseDialog#createDialogContents()
+	 */
+	@Override
+	protected void createDialogContents() {
+		getShell().setText(
+				Messages.getString("LineCountPropertyDialog.ShellTitle")); //$NON-NLS-1$
+		composite.setLayout(new GridLayout());
+		createMainComposite();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToUpperComposite
+	 * ()
+	 */
+	@Override
+	protected void insertDataToUpperComposite() {
+		// Set data from old item
+		if (oldItem != null) {
+			nameText.setText(oldItem.getName());
+			if (oldItem.getRule() == LineCountTreeItem.Rule.TEXT_RULE) {
+				selectedRuleLabel.setText(TEXT_RULE_NAME);
+			} else if (oldItem.getRule() == LineCountTreeItem.Rule.TEXT_RULE) {
+				selectedRuleLabel.setText(COMPONENT_RULE_NAME);
+			} else {
+				selectedRuleLabel.setText(TEXT_RULE_NAME);
+			}
+		} else {
+			selectedRuleLabel.setText(TEXT_RULE_NAME);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.traceviewer.dialog.BasePropertyDialog#setListSelection()
+	 */
+	@Override
+	protected void setListSelection() {
+		ruleList.add(TEXT_RULE_NAME, TEXT_RULE_INDEX);
+		ruleList.add(COMPONENT_RULE_NAME, COMPONENT_RULE_INDEX);
+		// Set list selection
+		if (oldItem != null) {
+			if (oldItem.getRule() == LineCountTreeItem.Rule.TEXT_RULE) {
+				ruleList.setSelection(TEXT_RULE_INDEX);
+			} else if (oldItem.getRule() == LineCountTreeItem.Rule.COMPONENT_RULE) {
+				ruleList.setSelection(COMPONENT_RULE_INDEX);
+			}
+		} else {
+			ruleList.setSelection(TEXT_RULE_INDEX);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToTextFields()
+	 */
+	@Override
+	protected void insertDataToTextFields() {
+		if (oldItem instanceof LineCountTreeTextItem) {
+			LineCountTreeTextItem item = (LineCountTreeTextItem) 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() {
+		// Get component list
+		List<TraceActivationComponentItem> components = null;
+		if (TraceViewerGlobals.getDecodeProvider() != null) {
+			components = TraceViewerGlobals.getDecodeProvider()
+					.getActivationInformation(false);
+		}
+
+		// Insert data to fields
+		if (oldItem instanceof LineCountTreeComponentItem) {
+			LineCountTreeComponentItem item = (LineCountTreeComponentItem) oldItem;
+			if (item.getComponentId() == WILDCARD_INTEGER) {
+				componentTextField.setText(WILDCARD_STRING);
+			} else {
+				componentTextField.setText(HEX_PREFIX
+						+ Integer.toHexString(item.getComponentId()));
+			}
+			if (item.getGroupId() == WILDCARD_INTEGER) {
+				groupTextField.setText(WILDCARD_STRING);
+			} else {
+				groupTextField.setText(HEX_PREFIX
+						+ Integer.toHexString(item.getGroupId()));
+			}
+
+			// Loop through components
+			if (components != null) {
+				for (int i = 0; i < components.size(); i++) {
+					if (components.get(i).getId() == item.getComponentId()) {
+						componentNameLabel.setText(components.get(i).getName());
+						// Get groups
+						List<TraceActivationGroupItem> groups = components.get(
+								i).getGroups();
+						// Loop through groups
+						for (int j = 0; j < groups.size(); j++) {
+							if (groups.get(j).getId() == item.getGroupId()) {
+								groupNameLabel.setText(groups.get(j).getName());
+								break;
+							}
+						}
+						break;
+					}
+				}
+			}
+		}
+
+		// Disable change component / group buttons if no components are
+		// available
+		if (components == null || components.size() <= 0) {
+			changeComponentButton.setEnabled(false);
+			changeGroupButton.setEnabled(false);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	@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;
+		LineCountTreeItem parent = selectedItem;
+		if (oldItem != null) {
+			pos = getOldPosition();
+			parent = (LineCountTreeItem) oldItem.getParent();
+			parent.removeChild(oldItem);
+		}
+
+		// Create new LineCountTreeTextItem
+		if (ruleList.getSelectionIndex() == TEXT_RULE_INDEX) {
+			newItem = new LineCountTreeTextItem(listener, parent, nameText
+					.getText(), LineCountTreeItem.Rule.TEXT_RULE, textText
+					.getText(), matchCaseCheckBox.getSelection());
+
+			// Create new LineCountTreeComponentItem
+		} else if (ruleList.getSelectionIndex() == COMPONENT_RULE_INDEX) {
+			int componentId = WILDCARD_INTEGER;
+			int groupId = WILDCARD_INTEGER;
+
+			// Get component ID
+			try {
+				String cid = componentTextField.getText();
+				if (cid.substring(0, HEX_PREFIX.length()).equals(HEX_PREFIX)) {
+					cid = cid.substring(HEX_PREFIX.length());
+				}
+				componentId = Integer.parseInt(cid, HEX_RADIX);
+			} catch (Exception e) {
+			}
+
+			// Get group ID
+			try {
+				String gid = groupTextField.getText();
+				if (gid.substring(0, HEX_PREFIX.length()).equals(HEX_PREFIX)) {
+					gid = gid.substring(HEX_PREFIX.length());
+				}
+				groupId = Integer.parseInt(gid, HEX_RADIX);
+			} catch (Exception e) {
+			}
+
+			// Create new item
+			newItem = new LineCountTreeComponentItem(listener, parent, nameText
+					.getText(), LineCountTreeItem.Rule.COMPONENT_RULE,
+					componentId, groupId);
+		}
+
+		// Add mode
+		if (parent.equals(selectedItem)) {
+			parent.addChild(newItem);
+
+			// Edit mode
+		} else {
+			parent.addChild(pos, newItem);
+		}
+
+		super.okPressed();
+		TraceViewerGlobals.postUiEvent("OkButton", "0"); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/*
+	 * (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);
+		} else if (ruleList.getSelectionIndex() == COMPONENT_RULE_INDEX) {
+			informationLabel.setText(COMPONENT_RULE_INFORMATION_TEXT);
+			selectedRuleLabel.setText(COMPONENT_RULE_NAME);
+		}
+	}
+
+	/**
+	 * Gets old position of this item
+	 * 
+	 * @return old position
+	 */
+	protected int getOldPosition() {
+		LineCountTreeItem item = (LineCountTreeItem) 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;
+	}
+
+}