/******************************************************************************* * 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.views; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.ISaveablePart2; import org.eclipse.ui.forms.widgets.FormText; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.actions.GlobalActions; import ch.elexis.core.ui.actions.LazyTreeLoader; import ch.elexis.core.ui.util.viewers.CommonViewer; import ch.elexis.core.ui.util.viewers.DefaultControlFieldProvider; import ch.elexis.core.ui.util.viewers.SimpleWidgetProvider; import ch.elexis.core.ui.util.viewers.TreeContentProvider; import ch.elexis.core.ui.util.viewers.ViewerConfigurer; import ch.elexis.data.BBSEntry; import ch.elexis.data.Query; import ch.rgw.tools.ExHandler; import ch.rgw.tools.Tree; /** * Bulletin Board System - ein Schwarzes Brett. Im Prinzip Erweiterung des Reminder-Konzepts zu * Threads ähnlich newsreader und Webforen. Farben können mit <span * color="rot">...</span> kontrolliert werden (bzw. "grün" und "blau") * * @author gerry */ @Deprecated public class BBSView extends ViewPart implements ISelectionChangedListener, ISaveablePart2 { public static final String ID = "ch.elexis.BBSView"; //$NON-NLS-1$ private CommonViewer headlines; private ViewerConfigurer vc; private ScrolledForm form; private FormToolkit tk; private Query<BBSEntry> qbe; private LazyTreeLoader<BBSEntry> loader; private Label origin; private FormText msg; private Text input; @Override public void createPartControl(Composite parent){ SashForm sash = new SashForm(parent, SWT.NONE); qbe = new Query<BBSEntry>(BBSEntry.class); loader = new LazyTreeLoader<BBSEntry>("BBS", qbe, "reference", new String[] { //$NON-NLS-1$ //$NON-NLS-2$ "datum", "time", "Thema" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ }); headlines = new CommonViewer(); vc = new ViewerConfigurer(new TreeContentProvider(headlines, loader), new ViewerConfigurer.TreeLabelProvider(), new DefaultControlFieldProvider( headlines, new String[] { "Thema" //$NON-NLS-1$ }), new NewThread(), new SimpleWidgetProvider(SimpleWidgetProvider.TYPE_TREE, SWT.NONE, null)); headlines.create(vc, sash, SWT.NONE, getViewSite()); tk = UiDesk.getToolkit(); form = tk.createScrolledForm(sash); form.getBody().setLayout(new GridLayout(1, false)); form.setText(Messages.BBSView_PleaseEnterSubject); //$NON-NLS-1$ origin = tk.createLabel(form.getBody(), ""); //$NON-NLS-1$ GridData gd = new GridData(GridData.FILL_HORIZONTAL); origin.setLayoutData(gd); msg = tk.createFormText(form.getBody(), false); gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.FILL_VERTICAL); msg.setLayoutData(gd); msg.setColor(Messages.BBSView_rot, UiDesk.getColor(UiDesk.COL_RED)); //$NON-NLS-1$ msg.setColor(Messages.BBSView_gruen, UiDesk.getColor(UiDesk.COL_GREEN)); //$NON-NLS-1$ msg.setColor(Messages.BBSView_blau, UiDesk.getColor(UiDesk.COL_BLUE)); //$NON-NLS-1$ input = tk.createText(form.getBody(), "", SWT.WRAP | SWT.MULTI | SWT.BORDER); //$NON-NLS-1$ gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); input.setLayoutData(gd); Button send = tk.createButton(form.getBody(), Messages.BBSView_DoSend, SWT.PUSH); //$NON-NLS-1$ send.addSelectionListener(new SelectionAdapter() { @SuppressWarnings("unchecked") @Override public void widgetSelected(SelectionEvent e){ Object[] sel = headlines.getSelection(); if (sel == null || sel.length == 0) { return; } Tree item = (Tree) sel[0]; BBSEntry en = (BBSEntry) (item).contents; BBSEntry ne = new BBSEntry(en.getTopic(), CoreHub.actUser, en, input.getText()); Tree child = item.add(ne); ((TreeViewer) headlines.getViewerWidget()).add(sel[0], child); ((TreeViewer) headlines.getViewerWidget()).setSelection(new StructuredSelection( child), true); } }); headlines.getViewerWidget().addSelectionChangedListener(this); ((TreeContentProvider) headlines.getConfigurer().getContentProvider()).startListening(); setDisplay(); } @Override public void setFocus(){ // TODO Auto-generated method stub } /* * (Kein Javadoc) * * @see org.eclipse.ui.part.WorkbenchPart#dispose() */ @Override public void dispose(){ ((TreeContentProvider) headlines.getConfigurer().getContentProvider()).stopListening(); super.dispose(); } @SuppressWarnings("unchecked") public void setDisplay(){ Object[] sel = headlines.getSelection(); if (sel == null || sel.length == 0) { form.setText(Messages.BBSView_14); //$NON-NLS-1$ return; } BBSEntry en = ((Tree<BBSEntry>) sel[0]).contents; form.setText(en.getTopic()); StringBuilder sb = new StringBuilder(); sb.append(en.getAuthor().getLabel()).append(Messages.BBSView_15).append(en.getDate()) .append( //$NON-NLS-1$ Messages.BBSView_16).append(en.getTime()).append(Messages.BBSView_17); //$NON-NLS-1$ //$NON-NLS-2$ origin.setText(sb.toString()); try { msg.setText(Messages.BBSView_18 + en.getText() + Messages.BBSView_19, true, true); //$NON-NLS-1$ //$NON-NLS-2$ } catch (Exception ex) { ExHandler.handle(ex); } input.setText(Messages.BBSView_20); //$NON-NLS-1$ } class NewThread implements ViewerConfigurer.ButtonProvider { public Button createButton(Composite parent){ Button ret = new Button(parent, SWT.PUSH); ret.setText(Messages.BBSView_21); //$NON-NLS-1$ ret.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ new BBSEntry( headlines.getConfigurer().getControlFieldProvider().getValues()[0], CoreHub.actUser, null, Messages.BBSView_22); //$NON-NLS-1$ loader.invalidate(); headlines.notify(CommonViewer.Message.update); setDisplay(); } }); return ret; } public boolean isAlwaysEnabled(){ return false; } } public void selectionChanged(SelectionChangedEvent event){ setDisplay(); } /* * Die folgenden 6 Methoden implementieren das Interface ISaveablePart2 Wir benötigen das * Interface nur, um das Schliessen einer View zu verhindern, wenn die Perspektive fixiert ist. * Gibt es da keine einfachere Methode? */ public int promptToSaveOnClose(){ return GlobalActions.fixLayoutAction.isChecked() ? ISaveablePart2.CANCEL : ISaveablePart2.NO; } public void doSave(IProgressMonitor monitor){ /* leer */} public void doSaveAs(){ /* leer */} public boolean isDirty(){ return true; } public boolean isSaveAsAllowed(){ return false; } public boolean isSaveOnCloseNeeded(){ return true; } }