blob: b59e3e5bf88b10bcd89bad29b5a1986ba3bb9dfb [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2010, 2019 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Nicolas Guyomar (Mia-Software) - initial API and implementation
* Nicolas Guyomar (Mia-Software) - Bug 334546 - [celleditors] no border on Text field
* Gregoire Dupe (Mia-Software) - Bug 339998 - public methods of AbstractCellEditorComposite have to be protected
* Nicolas Bros (Mia-Software) - Bug 334539 - [celleditors] change listener
*****************************************************************************/
package org.eclipse.modisco.facet.widgets.celleditors;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
public abstract class AbstractCellEditorComposite<T> extends Composite implements IWidget2<T> {
private final List<IListener> commitListeners;
private final List<IListener> changeListeners;
@Deprecated
private final List<Listener> compatibilityCommitListeners;
private final IValidator defaultValidator = new IValidator() {
public IStatus validate(final Object object) {
return Status.OK_STATUS;
}
};
public AbstractCellEditorComposite(final Composite parent) {
this(parent, SWT.NONE);
}
@SuppressWarnings("deprecation") /* backwards-compatibility */
public AbstractCellEditorComposite(final Composite parent, final int style) {
super(parent, style);
this.compatibilityCommitListeners = new ArrayList<Listener>();
this.commitListeners = new ArrayList<IListener>();
this.changeListeners = new ArrayList<IListener>();
}
public void addCommitListener(final IListener listener) {
synchronized (this.commitListeners) {
if (!this.commitListeners.contains(listener)) {
this.commitListeners.add(listener);
}
}
}
public void removeCommitListener(final IListener listener) {
synchronized (this.commitListeners) {
this.commitListeners.remove(listener);
}
}
@SuppressWarnings("deprecation") /* backwards-compatibility */
protected final void fireCommit() {
synchronized (this.compatibilityCommitListeners) {
for (Listener commitListener : new ArrayList<Listener>(
this.compatibilityCommitListeners)) {
commitListener.handleEvent(new Event());
}
}
synchronized (this.commitListeners) {
for (IListener commitListener : new ArrayList<IListener>(this.commitListeners)) {
commitListener.handleEvent();
}
}
}
public void addChangeListener(final IListener listener) {
synchronized (this.changeListeners) {
if (!this.changeListeners.contains(listener)) {
this.changeListeners.add(listener);
}
}
}
public void removeChangeListener(final IListener listener) {
synchronized (this.changeListeners) {
this.changeListeners.remove(listener);
}
}
protected final void fireChanged() {
synchronized (this.changeListeners) {
for (IListener changeListener : new ArrayList<IListener>(this.changeListeners)) {
changeListener.handleEvent();
}
}
}
public IValidator getValidator() {
// always valid by default
return this.defaultValidator;
}
protected final void close() {
if (!isDisposed()) {
getParent().forceFocus();
dispose();
}
}
}