/******************************************************************************* * Copyright (c) 2007-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.notes; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.text.ETFTextPlugin; import ch.elexis.core.ui.text.ITextPlugin.ICallback; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.ExHandler; /** * Dislplay details (text., links, keywords) of a note * * @author gerry * */ public class NotesDetail extends Composite { private ETFTextPlugin etf; List lRefs; Text tKeywords; ScrolledForm fNote, fRefs; FormToolkit tk = UiDesk.getToolkit(); private IAction newRefAction, delRefAction; Note actNote; NotesDetail(Composite parent){ super(parent, SWT.NONE); etf = new ETFTextPlugin(); setLayout(new GridLayout()); SashForm sash = new SashForm(this, SWT.VERTICAL); sash.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); fNote = tk.createScrolledForm(sash); fNote.getBody().setLayout(new GridLayout()); etf.createContainer(fNote.getBody(), new SaveCallback()).setLayoutData( SWTHelper.getFillGridData(1, true, 1, true)); etf.setSaveOnFocusLost(true); tKeywords = tk.createText(fNote.getBody(), ""); //$NON-NLS-1$ tKeywords.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); tKeywords.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e){ if (actNote != null) { actNote.setKeywords(tKeywords.getText()); } super.focusLost(e); } }); fRefs = tk.createScrolledForm(sash); fRefs.getBody().setLayout(new GridLayout()); lRefs = new List(fRefs.getBody(), SWT.SINGLE); lRefs.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e){ String[] sel = lRefs.getSelection(); if (sel.length > 0) { execute(sel[0]); } } }); lRefs.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); fRefs.setText(Messages.NotesDetail_xrefs); makeActions(); fRefs.getToolBarManager().add(newRefAction); fRefs.getToolBarManager().add(delRefAction); fRefs.updateToolBar(); tk.adapt(lRefs, true, true); sash.setWeights(new int[] { 80, 20 }); } public void setNote(Note note){ actNote = note; fNote.setText(note.get("Title")); //$NON-NLS-1$ etf.loadFromByteArray(note.getContent(), false); // etf.insertText("",note.get("Contents"),SWT.LEFT); tKeywords.setText(note.getKeywords()); lRefs.removeAll(); for (String s : note.getRefs()) { lRefs.add(s); } } /** * Run a program to view an external file * * @param filename */ public void execute(String filename){ try { int r = filename.lastIndexOf('.'); String ext = ""; //$NON-NLS-1$ if (r != -1) { ext = filename.substring(r + 1); } Program proggie = Program.findProgram(ext); if (proggie != null) { proggie.execute(filename); } else { if (Program.launch(filename) == false) { Runtime.getRuntime().exec(filename); } } } catch (Exception ex) { ExHandler.handle(ex); SWTHelper.showError(Messages.NotesDetail_couldNotLaunch, ex.getMessage()); } } private void makeActions(){ newRefAction = new Action(Messages.NotesDetail_newActionCaption) { { setToolTipText(Messages.NotesDetail_newActionToolTip); setImageDescriptor(Images.IMG_NEW.getImageDescriptor()); } public void run(){ if (new AddLinkDialog(getShell(), actNote).open() == Dialog.OK) { setNote(actNote); } } }; delRefAction = new Action(Messages.NotesDetail_deleteActionCaption) { { setToolTipText(Messages.NotesDetail_deleteActionToolTip); setImageDescriptor(Images.IMG_DELETE.getImageDescriptor()); } public void run(){ String actRef = lRefs.getSelection()[0]; if (SWTHelper.askYesNo(Messages.NotesDetail_deleteConfirmCaption, Messages.NotesDetail_deleteConfirmMessage)) { actNote.removeRef(actRef); setNote(actNote); } } }; } class SaveCallback implements ICallback { public void save(){ byte[] cnt = etf.storeToByteArray(); actNote.setContent(cnt); } public boolean saveAs(){ // TODO Auto-generated method stub return false; } } }