/*******************************************************************************
* Copyright (c) 2005-2010, D. Lutz 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:
* D. Lutz - initial implementation
*
*******************************************************************************/
package ch.elexis.agenda.preferences;
import java.util.List;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.PrinterData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import ch.elexis.core.constants.StringConstants;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.ui.Hub;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Brief;
import ch.elexis.data.Query;
public class AgendaDruck extends PreferencePage implements IWorkbenchPreferencePage {
Combo cTerminTemplate;
Text tTerminPrinter;
Button bTerminPrinterButton;
Text tTerminTray;
Composite cPrinterArea;
Button bDirectPrint;
PrinterSelector psel;
public AgendaDruck(){
setDescription(Messages.AgendaDruck_settingsForPrint);
}
@Override
protected Control createContents(Composite parent){
psel = new PrinterSelector();
Composite ret = new Composite(parent, SWT.NONE);
ret.setLayout(new GridLayout(3, false));
new Label(ret, SWT.NONE).setText(Messages.AgendaDruck_templateForCards);
cTerminTemplate = new Combo(ret, SWT.READ_ONLY);
cTerminTemplate.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false));
bDirectPrint = new Button(ret, SWT.CHECK);
bDirectPrint.setLayoutData(SWTHelper.getFillGridData(3, true, 1, false));
bDirectPrint.setText(Messages.AgendaDruck_printDirectly);
bDirectPrint.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e){
refreshDirectPrint();
}
public void widgetDefaultSelected(SelectionEvent e){
widgetSelected(e);
}
});
cPrinterArea = new Composite(ret, SWT.NONE);
cPrinterArea.setLayoutData(SWTHelper.getFillGridData(3, true, 1, false));
cPrinterArea.setLayout(new GridLayout(3, false));
new Label(cPrinterArea, SWT.NONE).setText(Messages.AgendaDruck_printerForCards);
tTerminPrinter = new Text(cPrinterArea, SWT.BORDER | SWT.READ_ONLY);
tTerminPrinter.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
tTerminPrinter.setData("TerminPrinter"); //$NON-NLS-1$
bTerminPrinterButton = new Button(cPrinterArea, SWT.PUSH);
bTerminPrinterButton.setText(" ->"); //$NON-NLS-1$
bTerminPrinterButton.setData(tTerminPrinter);
bTerminPrinterButton.addSelectionListener(psel);
new Label(cPrinterArea, SWT.NONE).setText(Messages.AgendaDruck_TrayForCards);
tTerminTray = new Text(cPrinterArea, SWT.BORDER);
tTerminTray.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false));
setInitialValues();
return ret;
}
private void refreshDirectPrint(){
boolean directPrint = bDirectPrint.getSelection();
if (directPrint) {
cPrinterArea.setVisible(true);
} else {
cPrinterArea.setVisible(false);
}
}
/* fill combo box with available templates */
private void setTemplates(){
cTerminTemplate.removeAll();
String currentTemplate =
CoreHub.localCfg.get(PreferenceConstants.AG_PRINT_APPOINTMENTCARD_TEMPLATE,
PreferenceConstants.AG_PRINT_APPOINTMENTCARD_TEMPLATE_DEFAULT);
Brief[] templates = getSystemTemplates();
for (int i = 0; i < templates.length; i++) {
Brief brief = templates[i];
String name = brief.getBetreff();
cTerminTemplate.add(name);
}
cTerminTemplate.setText(currentTemplate);
}
private void setInitialValues(){
setTemplates();
tTerminPrinter.setText(CoreHub.localCfg.get(
PreferenceConstants.AG_PRINT_APPOINTMENTCARD_PRINTER_NAME, "")); //$NON-NLS-1$
tTerminTray.setText(CoreHub.localCfg.get(
PreferenceConstants.AG_PRINT_APPOINTMENTCARD_PRINTER_TRAY, "")); //$NON-NLS-1$
boolean directPrint =
CoreHub.localCfg.get(PreferenceConstants.AG_PRINT_APPOINTMENTCARD_DIRECTPRINT,
PreferenceConstants.AG_PRINT_APPOINTMENTCARD_DIRECTPRINT_DEFAULT);
bDirectPrint.setSelection(directPrint);
refreshDirectPrint();
}
@Override
public boolean performOk(){
CoreHub.localCfg.set(PreferenceConstants.AG_PRINT_APPOINTMENTCARD_TEMPLATE,
cTerminTemplate.getText());
CoreHub.localCfg.set(PreferenceConstants.AG_PRINT_APPOINTMENTCARD_PRINTER_NAME,
tTerminPrinter.getText());
CoreHub.localCfg.set(PreferenceConstants.AG_PRINT_APPOINTMENTCARD_PRINTER_TRAY,
tTerminTray.getText());
CoreHub.localCfg.set(PreferenceConstants.AG_PRINT_APPOINTMENTCARD_DIRECTPRINT,
bDirectPrint.getSelection());
CoreHub.localCfg.flush();
return super.performOk();
}
public void init(IWorkbench workbench){
// nothing to do
}
private Brief[] getSystemTemplates(){
Query<Brief> qbe = new Query<Brief>(Brief.class);
qbe.add(Brief.FLD_TYPE, Query.EQUALS, Brief.TEMPLATE);
qbe.add(Brief.FLD_KONSULTATION_ID, Query.EQUALS, "SYS");
qbe.startGroup();
qbe.add(Brief.FLD_DESTINATION_ID, Query.EQUALS, CoreHub.actMandant.getId());
qbe.or();
qbe.add(Brief.FLD_DESTINATION_ID, Query.EQUALS, StringConstants.EMPTY);
qbe.endGroup();
qbe.and();
qbe.add("geloescht", Query.NOT_EQUAL, StringConstants.ONE);
qbe.orderBy(false, Brief.FLD_DATE);
List<Brief> l = qbe.execute();
if (l != null) {
return l.toArray(new Brief[0]);
} else {
return new Brief[0];
}
}
class PrinterSelector extends SelectionAdapter {
@Override
public void widgetSelected(SelectionEvent e){
PrintDialog pd = new PrintDialog(getShell());
PrinterData pdata = pd.open();
if (pdata != null) {
Text tx = (Text) ((Button) e.getSource()).getData();
tx.setText(pdata.name);
tx.setData(pdata);
}
}
};
}