/******************************************************************************* * Copyright (c) 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.impfplan.view; import java.util.Collection; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.data.events.ElexisEvent; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.exceptions.ElexisException; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.events.ElexisUiEventListenerImpl; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.util.ViewMenus; import ch.elexis.data.Patient; import ch.elexis.impfplan.controller.ImpfplanController; import ch.elexis.impfplan.controller.VaccinationSorter; import ch.elexis.impfplan.model.Vaccination; import ch.elexis.impfplan.model.VaccinationType; import ch.rgw.tools.TimeTool; public class ImpfplanView extends ViewPart { private IAction addVacination, printVaccinations, removeVaccination; TableViewer tvVaccsDone; TableViewer tvVaccsRecommended; int[] columnWidths = new int[] { 300, 100 }; String[] columnTitles = new String[] { Messages.ImpfplanView_vaccinationColumn, Messages.ImpfplanView_dateColumn }; ScrolledForm form; VaccinationSorter sorter = new VaccinationSorter(); ElexisUiEventListenerImpl eeli_pat = new ElexisUiEventListenerImpl(Patient.class) { @Override public void runInUi(ElexisEvent ev){ tvVaccsDone.refresh(); tvVaccsRecommended.refresh(); if (ElexisEventDispatcher.getSelectedPatient() != null) { addVacination.setEnabled(true); printVaccinations.setEnabled(true); } } }; @Override public void createPartControl(Composite parent){ form = UiDesk.getToolkit().createScrolledForm(parent); form.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); Composite body = form.getBody(); body.setLayout(new GridLayout()); makeActions(); ViewMenus menu = new ViewMenus(getViewSite()); menu.createToolbar(addVacination, printVaccinations); Label lblVaccsDone = new Label(body, SWT.NONE); lblVaccsDone.setText(Messages.ImpfplanView_vaccinationsDOne); Table tVaccsDone = new Table(body, SWT.FULL_SELECTION); tVaccsDone.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); for (int i = 0; i < columnTitles.length; i++) { TableColumn tc = new TableColumn(tVaccsDone, SWT.NONE); tc.setWidth(columnWidths[i]); tc.setText(columnTitles[i]); } tVaccsDone.setHeaderVisible(true); tVaccsDone.setLinesVisible(true); tvVaccsDone = new TableViewer(tVaccsDone); tvVaccsDone.setContentProvider(new ContentProviderAdapter() { @Override public Object[] getElements(Object inputElement){ Patient actPatient = ElexisEventDispatcher.getSelectedPatient(); if (actPatient != null) { Collection<Vaccination> r = ImpfplanController.getVaccinations(actPatient); return r.toArray(); } return new Object[0]; } }); MenuManager contextMenu = new MenuManager(); contextMenu.add(removeVaccination); tvVaccsDone.getControl().setMenu(contextMenu.createContextMenu(tvVaccsDone.getControl())); tvVaccsDone.setSorter(sorter); tvVaccsDone.setLabelProvider(new VaccinationLabelProvider()); Label lblVaccsReccomended = new Label(body, SWT.NONE); lblVaccsReccomended.setText(Messages.ImpfplanView_vaccinationsRecommended); Table tVaccsRecommended = new Table(body, SWT.FULL_SELECTION); tVaccsRecommended.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); for (int i = 0; i < columnTitles.length; i++) { TableColumn tc = new TableColumn(tVaccsRecommended, SWT.NONE); tc.setWidth(columnWidths[i]); tc.setText(columnTitles[i]); } tVaccsRecommended.setHeaderVisible(true); tVaccsRecommended.setLinesVisible(true); tvVaccsRecommended = new TableViewer(tVaccsRecommended); tvVaccsRecommended.setContentProvider(new ContentProviderAdapter() { @Override public Object[] getElements(Object inputElement){ Patient actPatient = ElexisEventDispatcher.getSelectedPatient(); if (actPatient != null) { try { List<VaccinationType> r = VaccinationType.findDueFor(actPatient); return r.toArray(); } catch (ElexisException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return new Object[0]; } }); tvVaccsRecommended.setSorter(sorter); tvVaccsRecommended.setLabelProvider(new VaccinationLabelProvider()); tvVaccsRecommended.setInput(this); tvVaccsDone.setInput(this); boolean enable = ElexisEventDispatcher.getSelectedPatient() != null; addVacination.setEnabled(enable); printVaccinations.setEnabled(enable); ElexisEventDispatcher.getInstance().addListeners(eeli_pat); } @Override public void dispose(){ ElexisEventDispatcher.getInstance().removeListeners(eeli_pat); } @Override public void setFocus(){ // TODO Auto-generated method stub } private void makeActions(){ addVacination = new Action(Messages.ImpfplanView_vaccinateActionTitle) { { setToolTipText(Messages.ImpfplanView_vaccinateActionTooltip); setImageDescriptor(Images.IMG_ADDITEM.getImageDescriptor()); } @Override public void run(){ AddVaccinationDialog dlg = new AddVaccinationDialog(getViewSite().getShell()); if (dlg.open() == Dialog.OK) { new Vaccination(dlg.result, ElexisEventDispatcher.getSelectedPatient(), new TimeTool(dlg.date), dlg.bUnexact); tvVaccsDone.refresh(); tvVaccsRecommended.refresh(); } } }; printVaccinations = new Action(Messages.ImpfplanView_printActionTitle) { { setToolTipText(Messages.ImpfplanView_printActionTooltip); setImageDescriptor(Images.IMG_PRINTER.getImageDescriptor()); } @Override public void run(){ ImpfplanPrinter ipr = new ImpfplanPrinter(getSite().getShell()); ipr.open(); } }; removeVaccination = new Action(Messages.ImpfplanView_removeActionTitle) { { setToolTipText(Messages.ImpfplanView_removeActionTooltip); setImageDescriptor(Images.IMG_DELETE.getImageDescriptor()); } @Override public void run(){ IStructuredSelection sel = (IStructuredSelection) tvVaccsDone.getSelection(); if (!sel.isEmpty()) { Vaccination v = (Vaccination) sel.getFirstElement(); if (v.delete()) { tvVaccsDone.remove(v); } } } }; } }