package ch.elexis.core.ui.commands;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import ch.elexis.core.ui.util.viewers.CommonViewer;
import ch.elexis.core.ui.views.rechnung.KonsZumVerrechnenView;
import ch.elexis.data.Fall;
import ch.elexis.data.Konsultation;
import ch.elexis.data.Patient;
import ch.rgw.tools.Tree;
public class KonsZumVerrechnenLinkCommand extends AbstractHandler {
public static final String CMD_ID = "ch.elexis.core.command.linkViews";
private TreeSelectionChangedListener leftSideSelChangeListener, rightSideSelChangeListener;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException{
boolean alreadyToggled = HandlerUtil.toggleCommandState(event.getCommand());
IWorkbenchPage activePage =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
KonsZumVerrechnenView kzvView =
(KonsZumVerrechnenView) activePage.findView(KonsZumVerrechnenView.ID);
final CommonViewer cv = kzvView.getLeftSide();
final TreeViewer tvSel = kzvView.getRightSide();
// goes from toggled to not toggled
if (alreadyToggled) {
cv.getViewerWidget().removeSelectionChangedListener(leftSideSelChangeListener);
tvSel.removeSelectionChangedListener(rightSideSelChangeListener);
} else {
// toggled
leftSideSelChangeListener = new TreeSelectionChangedListener(tvSel);
rightSideSelChangeListener =
new TreeSelectionChangedListener((TreeViewer) cv.getViewerWidget());
cv.getViewerWidget().addSelectionChangedListener(leftSideSelChangeListener);
tvSel.addSelectionChangedListener(rightSideSelChangeListener);
}
return null;
}
class TreeSelectionChangedListener implements ISelectionChangedListener {
private TreeViewer treeViewer;
public TreeSelectionChangedListener(TreeViewer treeViewer){
this.treeViewer = treeViewer;
}
@Override
public void selectionChanged(SelectionChangedEvent event){
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
Tree treeElement = (Tree) selection.getFirstElement();
if (treeElement != null) {
Object selObj = treeElement.contents;
Patient selPatient = null;
// get belonging patient
if (selObj instanceof Patient) {
selPatient = (Patient) selObj;
} else if (selObj instanceof Fall) {
Fall fall = (Fall) selObj;
selPatient = fall.getPatient();
} else if (selObj instanceof Konsultation) {
Konsultation kons = (Konsultation) selObj;
Fall fall = kons.getFall();
if (fall != null && fall.exists()) {
selPatient = fall.getPatient();
}
}
if (selPatient != null) {
for (TreeItem i : treeViewer.getTree().getItems()) {
Patient p = (Patient) ((Tree) i.getData()).contents;
if (p.getId().equals(selPatient.getId())) {
treeViewer.getTree().setSelection(i);
}
}
treeViewer.refresh();
}
}
}
}
}