001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.ui.tests.macro;
011:
012: import java.io.PrintWriter;
013: import java.util.Hashtable;
014:
015: import org.eclipse.core.runtime.CoreException;
016: import org.eclipse.core.runtime.IProgressMonitor;
017: import org.eclipse.swt.custom.CCombo;
018: import org.eclipse.swt.custom.StyledText;
019: import org.eclipse.swt.widgets.Combo;
020: import org.eclipse.swt.widgets.Composite;
021: import org.eclipse.swt.widgets.Display;
022: import org.eclipse.swt.widgets.Event;
023: import org.eclipse.swt.widgets.Text;
024: import org.eclipse.swt.widgets.Widget;
025: import org.w3c.dom.Node;
026: import org.w3c.dom.NodeList;
027:
028: public class ModifyCommand extends MacroCommand {
029: public static final String TYPE = "modify";
030:
031: private String text;
032:
033: public ModifyCommand(WidgetIdentifier wid) {
034: super (wid);
035: }
036:
037: public String getType() {
038: return TYPE;
039: }
040:
041: public boolean mergeEvent(Event e) {
042: return doProcessEvent(e);
043: }
044:
045: public void processEvent(Event e) {
046: doProcessEvent(e);
047: }
048:
049: protected void load(Node node, Hashtable lineTable) {
050: super .load(node, lineTable);
051:
052: NodeList children = node.getChildNodes();
053: for (int i = 0; i < children.getLength(); i++) {
054: Node child = children.item(i);
055: if (child.getNodeType() == Node.TEXT_NODE) {
056: text = MacroUtil
057: .getNormalizedText(child.getNodeValue());
058: break;
059: }
060: }
061: }
062:
063: private boolean doProcessEvent(Event e) {
064: String text = extractText(e.widget);
065: if (text != null) {
066: this .text = text;
067: return true;
068: }
069: return false;
070: }
071:
072: private String extractText(Widget widget) {
073: if (widget instanceof Text)
074: return ((Text) widget).getText();
075: if (widget instanceof Combo)
076: return ((Combo) widget).getText();
077: if (widget instanceof CCombo)
078: return ((CCombo) widget).getText();
079: if (widget instanceof StyledText)
080: return MacroUtil.getWritableText(((StyledText) widget)
081: .getText());
082: return null;
083: }
084:
085: public void write(String indent, PrintWriter writer) {
086: writer.print(indent);
087: writer.print("<command type=\"");
088: writer.print(getType());
089: writer.print("\" contextId=\"");
090: writer.print(getWidgetId().getContextId());
091: writer.print("\" widgetId=\"");
092: writer.print(getWidgetId().getWidgetId());
093: writer.println("\">");
094: if (text != null) {
095: writer.print(indent);
096: writer.print(text);
097: writer.println();
098: }
099: writer.print(indent);
100: writer.println("</command>");
101: }
102:
103: public boolean playback(Display display, Composite parent,
104: IProgressMonitor monitor) throws CoreException {
105: if (parent.isDisposed())
106: return false;
107: CommandTarget target = MacroUtil.locateCommandTarget(parent,
108: getWidgetId(), getStartLine());
109: if (target != null) {
110: target.setFocus();
111: Widget widget = target.getWidget();
112: if (widget instanceof Text)
113: ((Text) widget).setText(text);
114: else if (widget instanceof Combo)
115: ((Combo) widget).setText(text);
116: else if (widget instanceof CCombo)
117: ((CCombo) widget).setText(text);
118: else if (widget instanceof StyledText)
119: ((StyledText) widget).setText(text);
120: }
121: return true;
122: }
123: }
|