ch.elexis.core.ui.views.BBSView.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.core.ui.views.BBSView.java

Source

/*******************************************************************************
 * 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 knnen mit <span
 * color="rot">...</span> kontrolliert werden (bzw. "grn" 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 bentigen 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;
    }
}