ch.elexis.core.ui.dialogs.ImageChooser.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.core.ui.dialogs.ImageChooser.java

Source

/*******************************************************************************
 * Copyright (c) 2008-2010, 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.dialogs;

import java.io.File;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.List;

import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.AbstractElementListSelectionDialog;
import org.eclipse.ui.dialogs.FilteredList;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.Hyperlink;

import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.data.UiDBImage;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.DBImage;
import ch.elexis.data.Query;
import ch.rgw.tools.ExHandler;

public class ImageChooser extends AbstractElementListSelectionDialog {

    private Object[] fElements;
    private Hyperlink hl;
    private Text tTitle;
    private static String NOFILESELECTED = Messages.ImageChooser_PleaseChooseFile; //$NON-NLS-1$
    private Button bDB, bFile;
    private UiDBImage result;

    public UiDBImage getSelection() {
        return result;
    }

    public ImageChooser(Shell shell) {
        super(shell, new LabelProvider() {
            @Override
            public Image getImage(Object element) {
                if (element instanceof UiDBImage) {
                    return ((UiDBImage) element).getImage();
                }
                return null;
            }

            @Override
            public String getText(Object element) {
                if (element instanceof DBImage) {
                    return ((DBImage) element).getName();
                }
                return "?"; //$NON-NLS-1$
            }
        });
    }

    /**
     * Sets the elements of the list.
     * 
     * @param elements
     *            the elements of the list.
     */
    public void setElements(Object[] elements) {
        fElements = elements;
    }

    /*
     * @see SelectionStatusDialog#computeResult()
     */
    protected void computeResult() {
        if (bDB.getSelection()) {
            setResult(Arrays.asList(getSelectedElements()));
            Object[] sel = getResult();
            if (sel != null && sel.length > 0) {
                result = new UiDBImage((DBImage) sel[0]);
            } else {
                result = null;
            }
        }
    }

    private Menu createMenu(Control parent) {
        Menu ret = new Menu(parent);
        MenuItem item = new MenuItem(ret, SWT.NONE);
        item.setText(Messages.ImageChooser_delete); //$NON-NLS-1$
        item.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                Object[] oo = getSelectedElements();
                if (oo != null && oo.length > 0) {
                    if (SWTHelper.askYesNo(Messages.ImageChooser_reallyDeleteHeading, //$NON-NLS-1$
                            Messages.ImageChooser_reallyDeleteText)) { //$NON-NLS-1$
                        for (Object o : oo) {
                            ((DBImage) o).delete();
                        }
                    }
                }
            }
        });
        return ret;
    }

    /*
     * @see Dialog#createDialogArea(Composite)
     */
    protected Control createDialogArea(Composite parent) {
        Composite ret = (Composite) super.createDialogArea(parent);
        bDB = new Button(ret, SWT.RADIO);
        bDB.setText(Messages.ImageChooser_chooseImagefromDB); //$NON-NLS-1$
        createMessageArea(ret);
        createFilterText(ret);
        FilteredList list = createFilteredList(ret);
        list.setMenu(createMenu(list));
        list.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                bFile.setSelection(false);
                bDB.setSelection(true);
            }

        });
        new Label(ret, SWT.SEPARATOR | SWT.HORIZONTAL).setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        bFile = new Button(ret, SWT.RADIO);
        bFile.setText(Messages.ImageChooser_importImage); //$NON-NLS-1$
        Composite cBottom = new Composite(ret, SWT.BORDER);
        cBottom.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));

        cBottom.setLayout(new GridLayout(2, false));
        new Label(cBottom, SWT.NONE).setText(Messages.ImageChooser_imageFile); //$NON-NLS-1$
        new Label(cBottom, SWT.NONE).setText(Messages.ImageChooser_imageTitle); //$NON-NLS-1$
        hl = new Hyperlink(cBottom, SWT.NONE);
        tTitle = new Text(cBottom, SWT.BORDER);
        hl.addHyperlinkListener(new HyperlinkAdapter() {

            @Override
            public void linkActivated(HyperlinkEvent e) {
                bFile.setSelection(true);
                bDB.setSelection(false);
                FileDialog fd = new FileDialog(getShell(), SWT.OPEN);
                fd.setFilterExtensions(new String[] { "*.png", "*.gif", //$NON-NLS-1$ //$NON-NLS-2$
                        "*.jpg", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$
                fd.setFilterNames(new String[] { "Portable Network Graphics", //$NON-NLS-1$
                        "Grafics Interchange Format", "JPEG", Messages.ImageChooser_allFilesDesc }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                String filename = fd.open();
                if (filename != null) {
                    hl.setText(filename);
                    getOkButton().setEnabled(true);
                }
            }

        });
        hl.setText(NOFILESELECTED);
        hl.setForeground(UiDesk.getColor(UiDesk.COL_BLUE));
        hl.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tTitle.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tTitle.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                bFile.setSelection(true);
                bDB.setSelection(false);
            }

        });
        bDB.setSelection(true);

        Query<DBImage> qbe = new Query<DBImage>(DBImage.class);
        List<DBImage> imgs = qbe.execute();
        if (imgs != null) {
            fElements = imgs.toArray();
        } else {
            fElements = new Object[0];
        }
        setListElements(fElements);
        setSelection(getInitialElementSelections().toArray());
        return ret;
    }

    @Override
    public void okPressed() {
        if (bFile.getSelection()) {
            String fname = hl.getText();
            if (!fname.equals(NOFILESELECTED)) {
                try {
                    File file = new File(fname);
                    result = new UiDBImage("ch.elexis.images", tTitle.getText() + ":" //$NON-NLS-1$
                            + file.getName(), new FileInputStream(file));
                } catch (Exception ex) {
                    ExHandler.handle(ex);
                }
            }
        }
        super.okPressed();
    }

    @Override
    public void create() {
        super.create();
        getShell().setText(Messages.ImageChooser_choseFileFromDBHeading); //$NON-NLS-1$
        setMessage(Messages.ImageChooser_choseFileFromDBText); //$NON-NLS-1$
        setTitle(Messages.ImageChooser_imageSelection); //$NON-NLS-1$
    }

}