Java tutorial
/******************************************************************************* * 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 gendert 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", //$NON-NLS-1$ message); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { kontakteTableViewer.getControl().setFocus(); } }