/**
* Copyright (c) 2011 committers of YAKINDU and others.
* 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
* Contributors:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.generator.genmodel.ui.wizard;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
/**
* Will expand/collapse all expandable elements on double click and
* check/uncheck all others.
*
* @author holger willebrandt - Initial contribution and API
*/
public class TreeExpandingDoubleClickListener implements IDoubleClickListener {
private final CheckboxTreeViewer treeViewer;
private final ICheckStateListener checkStateListener;
/**
* @param treeViewer
* the {@link TreeViewer}
* @param checkStateListener
* the {@link ICheckStateListener} to notify if double clicking
* changes a checked state
*/
public TreeExpandingDoubleClickListener(CheckboxTreeViewer treeViewer,
ICheckStateListener checkStateListener) {
super();
this.treeViewer = treeViewer;
this.checkStateListener = checkStateListener;
}
/**
* @param treeViewer
* the {@link TreeViewer}
*/
public TreeExpandingDoubleClickListener(CheckboxTreeViewer treeViewer) {
this(treeViewer, null);
}
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event
.getSelection();
Object firstElement = selection.getFirstElement();
if (treeViewer.isExpandable(firstElement)) {
boolean expanded = treeViewer.getExpandedState(firstElement);
treeViewer.setExpandedState(firstElement, !expanded);
} else {
// FIXME :: does not trigger validation
boolean newState = !treeViewer.getChecked(firstElement);
treeViewer.setChecked(firstElement, newState);
if (checkStateListener != null) {
checkStateListener
.checkStateChanged(new CheckStateChangedEvent(
treeViewer, firstElement, newState));
}
}
}
}