| /*****************************************************************************
|
| * 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();
|
| }
|
| }
|
| }
|