Java tutorial
/******************************************************************************* * Copyright (c) 2007-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.base.messages; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.data.events.ElexisEvent; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.model.issue.Visibility; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.data.Anwender; import ch.elexis.data.Reminder; import ch.elexis.messages.Message; import ch.rgw.tools.TimeTool; public class MsgDetailDialog extends Dialog { private Label lblFrom; private ComboViewer cbTo; private Text txtMessage; private Message incomingMsg; private List<Anwender> users = CoreHub.getUserList(); private Button bOK, bAnswer; MsgDetailDialog(final Shell shell, final Message msg) { super(shell); this.incomingMsg = msg; } @Override protected Control createDialogArea(final Composite parent) { Composite ret = new Composite(parent, SWT.NONE); ret.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); ret.setLayout(new GridLayout(4, false)); Label lblMessageInfo = new Label(ret, SWT.NONE); lblMessageInfo.setLayoutData(SWTHelper.getFillGridData(4, true, 1, false)); String msgLabel = (incomingMsg == null) ? new TimeTool().toString(TimeTool.FULL_GER) : new TimeTool(incomingMsg.get(Message.FLD_TIME)).toString(TimeTool.FULL_GER); lblMessageInfo.setText(Messages.MsgDetailDialog_messageDated + msgLabel); new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_from); lblFrom = new Label(ret, SWT.NONE); new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_to); cbTo = new ComboViewer(ret, SWT.SINGLE | SWT.READ_ONLY); cbTo.setContentProvider(ArrayContentProvider.getInstance()); cbTo.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { Anwender anw = (Anwender) element; return anw.getLabel(); } }); cbTo.setInput(users); cbTo.setSelection(new StructuredSelection(users.get(0))); new Label(ret, SWT.SEPARATOR | SWT.HORIZONTAL).setLayoutData(SWTHelper.getFillGridData(4, true, 1, false)); if (incomingMsg != null) { lblFrom.setText(incomingMsg.getSender().getLabel()); Anwender sender = null; for (Anwender anwender : users) { if (incomingMsg.getDest().getId().equals(anwender.getId())) { sender = anwender; break; } } if (sender != null) { cbTo.setSelection(new StructuredSelection(sender)); } cbTo.getCombo().setEnabled(false); new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_message); Label lblIncomingMsg = new Label(ret, SWT.None); lblIncomingMsg.setLayoutData(SWTHelper.getFillGridData(3, true, 1, true)); lblIncomingMsg.setText(incomingMsg.get(Message.FLD_TEXT)); new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_answer); } else { lblFrom.setText(CoreHub.actUser.getLabel()); new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_message); } txtMessage = SWTHelper.createText(ret, 1, SWT.BORDER); txtMessage.setLayoutData(SWTHelper.getFillGridData(3, true, 1, true)); txtMessage.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if (txtMessage.getText() != null && txtMessage.getText().length() > 0) { getShell().setDefaultButton(bAnswer); } else { getShell().setDefaultButton(bOK); } } }); return ret; } @Override public void create() { super.create(); if (incomingMsg == null) { getShell().setText(Messages.MsgDetailDialog_createMessage); } else { getShell().setText(Messages.MsgDetailDialog_readMessage); } } @Override protected void createButtonsForButtonBar(final Composite parent) { String sOK; if (incomingMsg == null) { sOK = Messages.MsgDetailDialog_send; } else { sOK = Messages.MsgDetailDialog_delete; } bOK = createButton(parent, IDialogConstants.OK_ID, sOK, false); parent.getShell().setDefaultButton(bOK); bAnswer = createButton(parent, IDialogConstants.CLIENT_ID + 1, Messages.MsgDetailDialog_reply, false); if (incomingMsg == null) { bAnswer.setEnabled(false); } createButton(parent, IDialogConstants.CLIENT_ID + 2, Messages.MsgDetailDialog_asReminder, false); createButton(parent, IDialogConstants.CANCEL_ID, Messages.MsgDetailDialog_cancel, false); } @Override protected void buttonPressed(int buttonId) { switch (buttonId) { case IDialogConstants.OK_ID: okPressed(); return; case IDialogConstants.CLIENT_ID + 1: if (incomingMsg != null) { Anwender an = incomingMsg.getSender(); new Message(an, txtMessage.getText()); } okPressed(); case IDialogConstants.CLIENT_ID + 2: StructuredSelection ss = ((StructuredSelection) cbTo.getSelection()); if (!ss.isEmpty()) { Anwender anw = (Anwender) ss.getFirstElement(); Reminder rem = new Reminder(null, new TimeTool().toString(TimeTool.DATE_GER), Visibility.ALWAYS, "", incomingMsg.get(Message.FLD_TEXT)); ElexisEventDispatcher.getInstance() .fire(new ElexisEvent(rem, Reminder.class, ElexisEvent.EVENT_CREATE)); rem.addResponsible(anw); } okPressed(); default: break; } super.buttonPressed(buttonId); } @Override protected void okPressed() { if (incomingMsg == null) { StructuredSelection ss = ((StructuredSelection) cbTo.getSelection()); if (!ss.isEmpty()) { incomingMsg = new Message((Anwender) ss.getFirstElement(), txtMessage.getText()); } } else { incomingMsg.delete(); } super.okPressed(); } }