/******************************************************************************* * Copyright (c) 2007-2010, G. Weirich and Elexis * 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: * G. Weirich - initial implementation * *******************************************************************************/ package ch.elexis.icpc.views; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.data.events.ElexisEvent; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.ui.events.ElexisUiEventListenerImpl; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.actions.GlobalEventDispatcher; import ch.elexis.core.ui.actions.IActivationListener; import ch.elexis.core.ui.actions.ObjectFilterRegistry; import ch.elexis.data.Konsultation; import ch.elexis.data.Patient; import ch.elexis.data.PersistentObject; import ch.elexis.icpc.Episode; import ch.elexis.icpc.KonsFilter; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.util.ViewMenus; import ch.elexis.core.ui.util.ViewMenus.IMenuPopulator; public class EpisodesView extends ViewPart implements IActivationListener { public static final String ID = "ch.elexis.icpc.episodesView"; EpisodesDisplay display; KonsFilter episodesFilter = new KonsFilter(this); private IAction addEpisodeAction, removeEpisodeAction, editEpisodeAction, activateEpisodeAction, konsFilterAction, removeDiagnosesAction; private ElexisUiEventListenerImpl eeli_kons = new ElexisUiEventListenerImpl(Konsultation.class, ElexisEvent.EVENT_CREATE) { @Override public void catchElexisEvent(ElexisEvent ev){ switch (ev.getType()) { case ElexisEvent.EVENT_CREATE: /* * Konsultation k = (Konsultation) ev.getObject(); Samdas entry = k.getEntryRaw(); * Record record = entry.getRecord(); break; */ } } }; private ElexisUiEventListenerImpl eeli_pat = new ElexisUiEventListenerImpl(Patient.class, ElexisEvent.EVENT_SELECTED) { @Override public void runInUi(ElexisEvent ev){ display.setPatient((Patient) ev.getObject()); } }; private ElexisUiEventListenerImpl eeli_episode = new ElexisUiEventListenerImpl(Episode.class, ElexisEvent.EVENT_DESELECTED | ElexisEvent.EVENT_SELECTED | ElexisEvent.EVENT_UPDATE) { @Override public void runInUi(ElexisEvent ev){ Episode ep = (Episode) ev.getObject(); switch (ev.getType()) { case ElexisEvent.EVENT_SELECTED: if (ep.getStatus() == Episode.ACTIVE) { activateEpisodeAction.setChecked(true); } else { activateEpisodeAction.setChecked(false); } if (konsFilterAction.isChecked()) { episodesFilter.setProblem(ep); } break; case ElexisEvent.EVENT_DESELECTED: episodesFilter.setProblem(null); break; case ElexisEvent.EVENT_UPDATE: display.tvEpisodes.refresh(); break; } } }; @Override public void createPartControl(final Composite parent){ parent.setLayout(new GridLayout()); display = new EpisodesDisplay(parent); display.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); makeActions(); ViewMenus menu = new ViewMenus(getViewSite()); /* * menu.createViewerContextMenu(display.tvEpisodes, activateEpisodeAction, * editEpisodeAction, null, removeEpisodeAction); */ menu.createControlContextMenu(display.tvEpisodes.getControl(), new IMenuPopulator() { @Override public IAction[] fillMenu(){ return new IAction[] { activateEpisodeAction, editEpisodeAction, null, removeEpisodeAction, removeDiagnosesAction }; } }); menu.createToolbar(konsFilterAction, addEpisodeAction, editEpisodeAction); GlobalEventDispatcher.addActivationListener(this, getViewSite().getPart()); } @Override public void setFocus(){ // TODO Auto-generated method stub } public void clearEvent(final Class<? extends PersistentObject> template){ // TODO Auto-generated method stub } public void activation(final boolean mode){ // TODO Auto-generated method stub } public void visible(final boolean mode){ if (mode) { display.setPatient(ElexisEventDispatcher.getSelectedPatient()); ElexisEventDispatcher.getInstance().addListeners(eeli_episode, eeli_kons, eeli_pat); } else { ElexisEventDispatcher.getInstance().removeListeners(eeli_episode, eeli_kons, eeli_pat); } } private void makeActions(){ addEpisodeAction = new Action("Neues Problem") { { setToolTipText("Eine neues Problem erstellen"); setImageDescriptor(Images.IMG_NEW.getImageDescriptor()); } @Override public void run(){ EditEpisodeDialog dlg = new EditEpisodeDialog(getViewSite().getShell(), null); if (dlg.open() == Dialog.OK) { display.tvEpisodes.refresh(); } } }; removeEpisodeAction = new Action("Problem löschen") { { setToolTipText("Das gewählte Problem unwiderruflich löschen"); setImageDescriptor(Images.IMG_DELETE.getImageDescriptor()); } @Override public void run(){ Episode act = display.getSelectedEpisode(); if (act != null) { act.delete(); display.tvEpisodes.refresh(); } } }; removeDiagnosesAction = new Action("Diagnosen entfernen") { { setToolTipText("Entfernt die Verknüpfungen mit Diagnosen"); setImageDescriptor(Images.IMG_REMOVEITEM.getImageDescriptor()); } @Override public void run(){ Episode act = display.getSelectedEpisode(); if (act != null) { act.removeFromList("DiagLink"); display.tvEpisodes.refresh(); } } }; editEpisodeAction = new Action("Problem bearbeiten") { { setToolTipText("Titel des Problems ändern"); setImageDescriptor(Images.IMG_EDIT.getImageDescriptor()); } @Override public void run(){ Episode ep = display.getSelectedEpisode(); if (ep != null) { EditEpisodeDialog dlg = new EditEpisodeDialog(getViewSite().getShell(), ep); if (dlg.open() == Dialog.OK) { display.tvEpisodes.refresh(); } } } }; activateEpisodeAction = new Action("Aktiv", Action.AS_CHECK_BOX) { { setToolTipText("Problem aktivieren oder deaktivieren"); } @Override public void run(){ Episode ep = display.getSelectedEpisode(); if (ep != null) { ep.setStatus(activateEpisodeAction.isChecked() ? Episode.ACTIVE : Episode.INACTIVE); display.tvEpisodes.refresh(); } } }; konsFilterAction = new Action("Konsultationen filtern", Action.AS_CHECK_BOX) { { setToolTipText("Konsultationslisten auf markiertes Problem begrenzen"); setImageDescriptor(Images.IMG_FILTER.getImageDescriptor()); } @Override public void run(){ if (!isChecked()) { ObjectFilterRegistry.getInstance().unregisterObjectFilter(Konsultation.class, episodesFilter); } else { ObjectFilterRegistry.getInstance().registerObjectFilter(Konsultation.class, episodesFilter); Episode ep = display.getSelectedEpisode(); episodesFilter.setProblem(ep); } } }; } public void activateKonsFilterAction(final boolean bActivate){ konsFilterAction.setChecked(bActivate); } }