package gov.redhawk.ui.views.event;
/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* All rights reserved. This program and the accompanying materials are 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
*******************************************************************************/
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.databinding.viewers.IViewerUpdater;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.nebula.widgets.xviewer.XViewer;
/**
*
*/
public class EventViewerContentProvider implements ITreeContentProvider {
private IViewerUpdater viewerUpdater = new IViewerUpdater() {
@Override
public void replace(Object oldElement, Object newElement, int position) {
if (scrollLock) {
viewer.replace(input, position, newElement);
} else {
refresh();
}
}
@Override
public void remove(Object element, int position) {
if (scrollLock) {
viewer.remove(element, position);
} else {
refresh();
}
}
@Override
public void remove(Object[] elements) {
if (scrollLock) {
viewer.remove(elements);
} else {
refresh();
}
}
private void refresh() {
viewer.refresh();
List< ? > inputList = (List< ? >) input;
viewer.setSelection(StructuredSelection.EMPTY);
if (!inputList.isEmpty()) {
viewer.reveal(inputList.get(inputList.size() - 1));
}
}
@Override
public void move(Object element, int oldPosition, int newPosition) {
if (scrollLock) {
viewer.refresh();
} else {
refresh();
}
}
@Override
public void insert(Object element, int position) {
if (scrollLock) {
viewer.insert(input, element, position);
} else {
refresh();
}
}
@Override
public void add(Object[] elements) {
if (scrollLock) {
viewer.add(input, elements);
} else {
refresh();
}
}
};
private ObservableListContentProvider contentProvider = new ObservableListContentProvider(viewerUpdater);
private XViewer viewer;
private Object input;
private boolean scrollLock = false;
/**
*
*/
public EventViewerContentProvider() {
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
@Override
public void dispose() {
contentProvider.dispose();
}
public void setScrollLock(boolean scrollLock) {
this.scrollLock = scrollLock;
}
public boolean isScrollLock() {
return scrollLock;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.input = newInput;
contentProvider.inputChanged(viewer, oldInput, newInput);
this.viewer = (XViewer) viewer;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
*/
@Override
public Object[] getElements(Object inputElement) {
return contentProvider.getElements(inputElement);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
@Override
public Object[] getChildren(Object parentElement) {
return Collections.EMPTY_LIST.toArray();
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
@Override
public Object getParent(Object element) {
if (element == input) {
return null;
}
return input;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
@Override
public boolean hasChildren(Object element) {
return false;
}
}