Java tutorial
/******************************************************************************* * Copyright (c) 2005-2009, 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.core.ui.util; import java.util.ArrayList; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.events.IHyperlinkListener; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.actions.RestrictedAction; import ch.elexis.core.ui.locks.IUnlockable; /** * A List of objects with UI (definable hyperlinks) Replaces DynamicListDisplay */ public class ListDisplay<T> extends Composite implements IUnlockable { public interface LDListener { public void hyperlinkActivated(String l); public String getLabel(Object o); } private IHyperlinkListener listen; protected List list; private final ArrayList<T> objects; private LDListener dlisten; private final Composite cLinks; private final FormToolkit tk = UiDesk.getToolkit(); Transfer myTransfer = TextTransfer.getInstance(); public void toClipBoard(boolean bAsString) { Clipboard clip = new Clipboard(UiDesk.getDisplay()); StringBuilder sb = new StringBuilder(); for (String s : list.getItems()) { sb.append(s).append("\n"); } clip.setContents(new Object[] { sb.toString() }, new Transfer[] { myTransfer }); } public void setDLDListener(final LDListener dld) { dlisten = dld; } public ListDisplay(final Composite parent, final int flags, final LDListener dld) { super(parent, flags); objects = new ArrayList<T>(); dlisten = dld; setLayout(new GridLayout(1, false)); cLinks = new Composite(this, SWT.NONE); RowLayout rl = new RowLayout(SWT.HORIZONTAL); rl.spacing = 2; cLinks.setLayout(rl); list = new List(this, SWT.SINGLE | SWT.V_SCROLL); list.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tk.adapt(this); } public void addHyperlinks(final String... titles) { if (listen == null) { listen = new HyperlinkAdapter() { @Override public void linkActivated(final HyperlinkEvent e) { if (dlisten != null) { dlisten.hyperlinkActivated(e.getLabel()); } } }; } for (String title : titles) { Hyperlink mhl = tk.createHyperlink(cLinks, title, SWT.NONE); mhl.addHyperlinkListener(listen); } } @Override public void setUnlocked(boolean unlock) { enableHyperlinks(unlock); } private void enableHyperlinks(boolean bEnable) { cLinks.setEnabled(bEnable); for (Control c : cLinks.getChildren()) { Hyperlink hl = (Hyperlink) c; if (bEnable) { hl.setForeground(UiDesk.getColor(UiDesk.COL_BLUE)); } else { hl.setForeground(UiDesk.getColor(UiDesk.COL_GREY)); } c.setEnabled(bEnable); } cLinks.redraw(); } /** * Ein Objekt der Liste hinzufgen * * @param item * das Objekt. Muss getLabel() implementieren */ public void add(final T item) { objects.add(item); list.add(dlisten.getLabel(item)); } /** * Ein Objekt aus der Liste entfernen * * @param item * das Objekt */ public void remove(final T item) { objects.remove(item); list.remove(dlisten.getLabel(item)); } /** Die Liste leeren */ public void clear() { list.removeAll(); objects.clear(); } /** Ein Kontextmenu fr die Liste sezen */ public void setMenu(final IAction... actions) { MenuManager menuMgr = new MenuManager(); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { fillContextMenu(manager, actions); } }); Menu menu = menuMgr.createContextMenu(list); list.setMenu(menu); } protected void fillContextMenu(IMenuManager manager, IAction... actions) { manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); for (IAction ac : actions) { if (ac == null) { manager.add(new Separator()); } else { if (ac instanceof RestrictedAction) { ((RestrictedAction) ac).reflectRight(); } manager.add(ac); } } } /** * Das momentan ausgewhlte Objekt holen */ public T getSelection() { String[] obj = list.getSelection(); if ((obj == null) || (obj.length == 0)) { return null; } for (T po : objects) { if (dlisten.getLabel(po).equals(obj[0])) { return po; } } return null; } public void setSelection(final T object) { if (object == null) { list.deselectAll(); } else { for (T t : objects) { if (t.equals(object)) { list.setSelection(new String[] { dlisten.getLabel(t) }); break; } } } } public void setSelection(final int index) { list.setSelection(index); } public java.util.List<T> getAll() { return objects; } public void addListener(final SelectionListener l) { list.addSelectionListener(l); } public void removeListener(final SelectionListener l) { list.removeSelectionListener(l); } }