/******************************************************************************* | |
* Copyright (c) 2000, 2003 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Common Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/cpl-v10.html | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.update.ui.forms.internal; | |
import org.eclipse.swt.events.*; | |
import org.eclipse.swt.widgets.*; | |
import java.util.*; | |
public class FormEntry { | |
private Text text; | |
private String value; | |
private boolean dirty; | |
private Vector listeners=new Vector(); | |
boolean ignoreModify=false; | |
public FormEntry(Text text) { | |
this.text = text; | |
this.value = text.getText(); | |
addListeners(); | |
} | |
public void addFormTextListener(IFormTextListener listener) { | |
listeners.addElement(listener); | |
} | |
private void addListeners() { | |
text.addKeyListener(new KeyAdapter() { | |
public void keyReleased(KeyEvent e) { | |
keyReleaseOccured(e); | |
} | |
}); | |
text.addModifyListener(new ModifyListener() { | |
public void modifyText(ModifyEvent e) { | |
editOccured(e); | |
} | |
}); | |
text.addFocusListener (new FocusAdapter() { | |
public void focusLost(FocusEvent e) { | |
if (dirty) commit(); | |
} | |
}); | |
} | |
public void commit() { | |
if (dirty) { | |
value = text.getText(); | |
//notify | |
for (Iterator iter = listeners.iterator(); iter.hasNext();) { | |
((IFormTextListener) iter.next()).textValueChanged(this); | |
} | |
} | |
dirty = false; | |
} | |
protected void editOccured(ModifyEvent e) { | |
if (ignoreModify) return; | |
dirty = true; | |
for (Iterator iter = listeners.iterator(); iter.hasNext();) { | |
((IFormTextListener) iter.next()).textDirty(this); | |
} | |
} | |
public Text getControl() { | |
return text; | |
} | |
public java.lang.String getValue() { | |
return value; | |
} | |
public boolean isDirty() { | |
return dirty; | |
} | |
protected void keyReleaseOccured(KeyEvent e) { | |
if (e.character == '\r') { | |
// commit value | |
if (dirty) commit(); | |
} | |
else if (e.character == '\u001b') { // Escape character | |
text.setText(value!=null?value:""); // restore old | |
dirty= false; | |
} | |
} | |
public void removeFormTextListener(IFormTextListener listener) { | |
listeners.removeElement(listener); | |
} | |
public void setDirty(boolean newDirty) { | |
dirty = newDirty; | |
} | |
public void setValue(String value) { | |
if (text!=null) text.setText(value!=null?value:""); | |
this.value = value; | |
} | |
public void setValue(String value, boolean blockNotification) { | |
ignoreModify = blockNotification; | |
setValue(value); | |
ignoreModify = false; | |
} | |
} |