/******************************************************************************* * 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$ } }