package ch.elexis.core.mail.ui.preference; import java.util.List; import java.util.Optional; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; 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.Control; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import ch.elexis.core.mail.MailAccount; import ch.elexis.core.mail.ui.client.MailClientComponent; public class Preference extends PreferencePage implements IWorkbenchPreferencePage { private Composite parentComposite; private MailAccountComposite accountComposite; private ComboViewer accountsViewer; private Button testButton; @Override public void init(IWorkbench workbench){ } @Override protected Control createContents(Composite parent){ parentComposite = new Composite(parent, SWT.NONE); parentComposite.setLayout(new GridLayout(2, false)); accountsViewer = new ComboViewer(parentComposite); accountsViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); accountsViewer.setContentProvider(new ArrayContentProvider()); accountsViewer.setLabelProvider(new LabelProvider()); updateAccountsCombo(); accountsViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event){ int index = accountsViewer.getCombo().getSelectionIndex(); if (index == 0) { accountComposite.setAccount(new MailAccount()); testButton.setEnabled(true); } else { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); String accountId = (String) selection.getFirstElement(); if (accountId != null) { Optional<MailAccount> selectedAccount = MailClientComponent.getMailClient().getAccount(accountId); if (selectedAccount.isPresent()) { accountComposite.setAccount(selectedAccount.get()); testButton.setEnabled(true); } } } } }); ToolBar accountsTool = new ToolBar(parentComposite, SWT.NONE); accountComposite = new MailAccountComposite(parentComposite, SWT.NONE); accountComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); testButton = new Button(parentComposite, SWT.PUSH); testButton.setText("Test"); testButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ if (MailClientComponent.getMailClient() != null && accountComposite.getAccount() != null) { if (MailClientComponent.getMailClient() .testAccount(accountComposite.getAccount())) { MessageDialog.openInformation(getShell(), "Test", "Test erfolgreich."); } else { String message = MailClientComponent.getLastErrorMessage(); MessageDialog.openError(getShell(), "Fehler", message); } } } }); ToolBarManager accountsToolMgr = new ToolBarManager(accountsTool); accountsToolMgr.add(new SaveAccountAction(accountComposite, this)); accountsToolMgr.add(new RemoveAccountAction(accountComposite, this)); accountsToolMgr.update(true); return parentComposite; } @Override public boolean performOk(){ MailAccount account = accountComposite.getAccount(); if (account != null) { MailClientComponent.getMailClient().saveAccount(account); } return super.performOk(); } protected void updateAccountsCombo(){ if (MailClientComponent.getMailClient() != null) { accountsViewer.getControl().setEnabled(true); List<String> accountsInput = MailClientComponent.getMailClient().getAccounts(); accountsInput.add(0, "Neu erstellen"); accountsViewer.setInput(accountsInput); if (accountComposite != null) { MailAccount account = accountComposite.getAccount(); if (account != null) { accountsViewer.setSelection(new StructuredSelection(account.getId())); } } } else { accountsViewer.getControl().setEnabled(false); testButton.setEnabled(false); } } }