/******************************************************************************* * Copyright (c) 2007, medshare 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: * M. Imhof - initial implementation * *******************************************************************************/ package ch.medshare.elexis.directories.views; import java.util.Iterator; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IActionBars; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; import ch.medshare.elexis.directories.KontaktEntry; /** * Weisse-Seiten View. Diese View besteht aus zwei Eingabefelder und einer Liste der gefundenen * Resultate. */ public class WeisseSeitenSearchView extends ViewPart { private TableViewer kontakteTableViewer; private Text searchInfoText; private Action newPatientAction; private Action newKontaktAction; WeisseSeitenSearchForm searchForm; class WhitePageLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex){ KontaktEntry entry = (KontaktEntry) element; switch (columnIndex) { case 0: return entry.getName() + " " + entry.getVorname(); //$NON-NLS-1$ case 1: return entry.getAdresse(); case 2: return entry.getPlz(); case 3: return entry.getOrt(); case 4: return entry.getTelefon(); default: return "-"; //$NON-NLS-1$ } } public Image getColumnImage(Object element, int columnIndex){ return null; } } class WhitePageContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement){ return ((List<?>) inputElement).toArray(); } public void dispose(){} public void inputChanged(Viewer viewer, Object oldInput, Object newInput){} } class KontaktSorter extends ViewerSorter { public int compare(final Viewer viewer, final Object e1, final Object e2){ String s1 = ((KontaktEntry) e1).getName() + ((KontaktEntry) e1).getVorname(); String s2 = ((KontaktEntry) e2).getName() + ((KontaktEntry) e1).getVorname(); return s1.compareTo(s2); } } /** * The constructor. */ public WeisseSeitenSearchView(){} /** * Inhalt der View aufbauen */ public void createPartControl(Composite parent){ parent.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); parent.setLayout(new GridLayout(1, false)); // SuchForm searchForm = new WeisseSeitenSearchForm(parent, SWT.NONE); searchForm.addResultChangeListener(new Listener() { public void handleEvent(Event event){ showResult(); } }); // Liste Composite listArea = new Composite(parent, SWT.NONE); listArea.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); listArea.setLayout(new GridLayout(1, false)); searchInfoText = new Text(listArea, SWT.NONE); searchInfoText.setEnabled(false); searchInfoText.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); Table table = new Table(listArea, SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER); TableColumn nameTc = new TableColumn(table, SWT.CENTER); nameTc.setText(Messages.getString("WeisseSeitenSearchView.header.Name")); //$NON-NLS-1$ nameTc.setWidth(250); TableColumn adrTc = new TableColumn(table, SWT.LEFT); adrTc.setText(Messages.getString("WeisseSeitenSearchView.header.Adresse")); //$NON-NLS-1$ adrTc.setWidth(140); TableColumn plzTc = new TableColumn(table, SWT.LEFT); plzTc.setText(Messages.getString("WeisseSeitenSearchView.header.Plz")); //$NON-NLS-1$ plzTc.setWidth(40); TableColumn ortTc = new TableColumn(table, SWT.LEFT); ortTc.setText(Messages.getString("WeisseSeitenSearchView.header.Ort")); //$NON-NLS-1$ ortTc.setWidth(150); TableColumn telTc = new TableColumn(table, SWT.LEFT); telTc.setText(Messages.getString("WeisseSeitenSearchView.header.Tel")); //$NON-NLS-1$ telTc.setWidth(90); table.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); table.setHeaderVisible(true); table.setLinesVisible(true); kontakteTableViewer = new TableViewer(table); kontakteTableViewer.setContentProvider(new WhitePageContentProvider()); kontakteTableViewer.setLabelProvider(new WhitePageLabelProvider()); kontakteTableViewer.setSorter(new KontaktSorter()); getSite().setSelectionProvider(kontakteTableViewer); makeActions(); hookContextMenu(); hookDoubleClickAction(); contributeToActionBars(); } /** * Falls Suche geƤndert hat, werden die neuen Resultate angezeigt. Dies ist ein Callback der * SearchForm */ private void showResult(){ try { kontakteTableViewer.setInput(searchForm.getKontakte()); searchInfoText.setText(searchForm.getSearchInfoText()); if (kontakteTableViewer.getTable().getItems().length > 0) { kontakteTableViewer.getTable().select(0); } kontakteTableViewer.getTable().setFocus(); } catch (Exception e) { showMessage(e.getMessage()); } } private void hookContextMenu(){ MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager){ fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(kontakteTableViewer.getControl()); kontakteTableViewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, kontakteTableViewer); } private void contributeToActionBars(){ IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager()); } private void fillLocalPullDown(IMenuManager manager){ manager.add(newKontaktAction); manager.add(new Separator()); manager.add(newPatientAction); } private void fillContextMenu(IMenuManager manager){ manager.add(newKontaktAction); manager.add(new Separator()); manager.add(newPatientAction); } private void fillLocalToolBar(IToolBarManager manager){ manager.add(newKontaktAction); manager.add(new Separator()); manager.add(newPatientAction); } @SuppressWarnings("unchecked") private void openPatientenDialog(){ final StructuredSelection selection = (StructuredSelection) kontakteTableViewer.getSelection(); if (!selection.isEmpty()) { Iterator<KontaktEntry> iterator = selection.iterator(); while (iterator.hasNext()) { final KontaktEntry selectedKontakt = iterator.next(); searchForm.openPatientenDialog(selectedKontakt); } } } @SuppressWarnings("unchecked") private void openKontaktDialog(){ final StructuredSelection selection = (StructuredSelection) kontakteTableViewer.getSelection(); if (!selection.isEmpty()) { Iterator<KontaktEntry> iterator = selection.iterator(); while (iterator.hasNext()) { final KontaktEntry selectedKontakt = iterator.next(); searchForm.openKontaktDialog(selectedKontakt); } } } private void makeActions(){ newPatientAction = new Action() { public void run(){ openPatientenDialog(); } }; newPatientAction.setText(Messages.getString("WeisseSeitenSearchView.popup.newPatient")); //$NON-NLS-1$ newPatientAction.setToolTipText(Messages .getString("WeisseSeitenSearchView.tooltip.newPatient")); //$NON-NLS-1$ newPatientAction.setImageDescriptor(Images.IMG_PERSON_ADD.getImageDescriptor()); newKontaktAction = new Action() { public void run(){ openKontaktDialog(); } }; newKontaktAction.setText(Messages.getString("WeisseSeitenSearchView.popup.newKontakt")); //$NON-NLS-1$ newKontaktAction.setToolTipText(Messages .getString("WeisseSeitenSearchView.tooltip.newKontakt")); //$NON-NLS-1$ newKontaktAction.setImageDescriptor(Images.IMG_NEW.getImageDescriptor()); } private void hookDoubleClickAction(){ kontakteTableViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event){ newKontaktAction.run(); } }); } private void showMessage(String message){ MessageDialog.openInformation(kontakteTableViewer.getControl().getShell(), "ch.elexis.WeiSeitSearch", message); //$NON-NLS-1$ } /** * Passing the focus request to the viewer's control. */ public void setFocus(){ kontakteTableViewer.getControl().setFocus(); } }