/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.editor;
import java.util.ArrayList;
import org.eclipse.jface.viewers.IPostSelectionProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
public class SelectionNotifier implements ISelectionProvider, ISelectionChangedListener, IPostSelectionProvider {
private ArrayList<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>(3);
private ArrayList<ISelectionChangedListener> fires = new ArrayList<ISelectionChangedListener>(3);
private SelectionChangedEvent event;
private ISelection selection;
// ISelectionChangedListener
public void selectionChanged(SelectionChangedEvent event) {
if ((event==null)&&(this.event==null)) return;
if ((event!=null)&&(this.event!=null)) {
if ((event == this.event)||(event.equals(this.event))) return;
}
this.event = event;
if (event!=null) {
selection = event.getSelection();
} else {
selection = null;
}
this.fireSelectionChanged();
}
public void addSelectionChangedListener(ISelectionChangedListener listener) {
listeners.add(listener);
}
public ISelection getSelection() {
return selection;
}
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
listeners.remove(listener);
}
public void setSelection(ISelection selection) {
this.selection = selection;
event = new SelectionChangedEvent(this, selection);
fireSelectionChanged();
}
protected void fireSelectionChanged() {
fires.addAll(listeners); // copy listeners
if(fires.isEmpty()) return;
for (int i=0;i<fires.size();++i) ((ISelectionChangedListener)fires.get(i)).selectionChanged(event);
fires.clear();
}
public void addPostSelectionChangedListener(
ISelectionChangedListener listener) {
// do nothing - workaround for dali
}
public void removePostSelectionChangedListener(
ISelectionChangedListener listener) {
// do nothing - workaround for dali
}
}