/******************************************************************************* * Copyright (c) 2006-2008, 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.agenda.preferences; import java.lang.reflect.InvocationTargetException; import java.util.Hashtable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.PreferencePage; 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.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.DateTime; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.statushandlers.StatusManager; import ch.elexis.actions.Activator; import ch.elexis.agenda.Messages; import ch.elexis.agenda.data.Termin; import ch.elexis.agenda.util.Plannables; import ch.elexis.agenda.util.TermineLockedTimesUpdater; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.TimeTool; import ch.rgw.tools.TimeTool.DAYS; public class Tageseinteilung extends PreferencePage implements IWorkbenchPreferencePage { Text tMo, tDi, tMi, tDo, tFr, tSa, tSo; int actBereich; String[] bereiche; private Composite compositeDayBorders; private Text sodt; private Text eodt; private ComboViewer comboViewerDayEditSelector; private Button btnEditValuesFor; private Label lblChangedValuesAre; private DateTime dateTimeStartingFrom; private Button btnApplyEdit; private Composite compositeEditStarting; private TimeTool.DAYS editSelection; private Text editSelectionText; private Color originalBackgroundColor; public Tageseinteilung(){ super(Messages.Tageseinteilung_dayPlanning); bereiche = CoreHub.globalCfg.get(PreferenceConstants.AG_BEREICHE, Messages.Tageseinteilung_praxis) .split(","); //$NON-NLS-1$ actBereich = 0; } @Override protected Control createContents(Composite parent){ Composite ret = new Composite(parent, SWT.NONE); ret.setLayout(new GridLayout()); new Label(ret, SWT.None).setText(Messages.Tageseinteilung_enterPeriods); final Combo cbBereich = new Combo(ret, SWT.READ_ONLY | SWT.SINGLE); cbBereich.setItems(bereiche); Composite grid = new Composite(ret, SWT.BORDER); grid.setLayout(new GridLayout(7, true)); grid.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); new Label(grid, SWT.CENTER).setText(Messages.Tageseinteilung_mo); new Label(grid, SWT.CENTER).setText(Messages.Tageseinteilung_tu); new Label(grid, SWT.CENTER).setText(Messages.Tageseinteilung_we); new Label(grid, SWT.CENTER).setText(Messages.Tageseinteilung_th); new Label(grid, SWT.NONE).setText(Messages.Tageseinteilung_fr); new Label(grid, SWT.NONE).setText(Messages.Tageseinteilung_sa); new Label(grid, SWT.NONE).setText(Messages.Tageseinteilung_so); tMo = new Text(grid, SWT.BORDER | SWT.MULTI); tMo.setEnabled(false); tMo.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); originalBackgroundColor = tMo.getBackground(); tDi = new Text(grid, SWT.BORDER | SWT.MULTI); tDi.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tDi.setEnabled(false); tMi = new Text(grid, SWT.BORDER | SWT.MULTI); tMi.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tMi.setEnabled(false); tDo = new Text(grid, SWT.BORDER | SWT.MULTI); tDo.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tDo.setEnabled(false); tFr = new Text(grid, SWT.BORDER | SWT.MULTI); tFr.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tFr.setEnabled(false); tSa = new Text(grid, SWT.BORDER | SWT.MULTI); tSa.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tSa.setEnabled(false); tSo = new Text(grid, SWT.BORDER | SWT.MULTI); tSo.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tSo.setEnabled(false); cbBereich.select(actBereich); Composite editDayComposite = new Composite(grid, SWT.None); editDayComposite.setLayoutData(SWTHelper.getFillGridData(7, true, 1, false)); editDayComposite.setLayout(new GridLayout(3, false)); btnEditValuesFor = new Button(editDayComposite, SWT.NONE); btnEditValuesFor.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ StructuredSelection ss = (StructuredSelection) comboViewerDayEditSelector.getSelection(); editSelection = (DAYS) ss.getFirstElement(); if (editSelection == null) return; Text[] days = new Text[] { tMo, tDi, tMi, tDo, tFr, tSa, tSo }; for (Text text : days) { text.setEnabled(false); text.setBackground(originalBackgroundColor); } switch (editSelection) { case MONDAY: editSelectionText = tMo; break; case TUESDAY: editSelectionText = tDi; break; case FRIDAY: editSelectionText = tFr; break; case SATURDAY: editSelectionText = tSa; break; case SUNDAY: editSelectionText = tSo; break; case THURSDAY: editSelectionText = tDo; break; case WEDNESDAY: editSelectionText = tMi; break; default: break; } editSelectionText.setEnabled(true); editSelectionText.setBackground(PlatformUI.getWorkbench().getDisplay() .getSystemColor(SWT.COLOR_YELLOW)); btnApplyEdit.setEnabled(true); dateTimeStartingFrom.setEnabled(true); editSelectionText.setFocus(); } }); btnEditValuesFor.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); btnEditValuesFor.setText(Messages.Tageseinteilung_lblEditValuesFor_text); comboViewerDayEditSelector = new ComboViewer(editDayComposite, SWT.NONE); Combo comboDayEditSelector = comboViewerDayEditSelector.getCombo(); comboDayEditSelector.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); compositeEditStarting = new Composite(editDayComposite, SWT.NONE); compositeEditStarting.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); GridLayout gl_compositeEditStarting = new GridLayout(3, false); gl_compositeEditStarting.verticalSpacing = 0; gl_compositeEditStarting.marginHeight = 0; compositeEditStarting.setLayout(gl_compositeEditStarting); lblChangedValuesAre = new Label(compositeEditStarting, SWT.NONE); lblChangedValuesAre.setText(Messages.Tageseinteilung_lblChangedValuesAre_text); dateTimeStartingFrom = new DateTime(compositeEditStarting, SWT.BORDER); TimeTool tomorrow = new TimeTool(); tomorrow.addDays(1); dateTimeStartingFrom.setDate(tomorrow.get(TimeTool.YEAR), tomorrow.get(TimeTool.MONTH), tomorrow.get(TimeTool.DAY_OF_MONTH)); dateTimeStartingFrom.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ setErrorMessage(null); DateTime dt = (DateTime) e.getSource(); int day = dateTimeStartingFrom.getDay(); // Calendar.DAY_OF_MONTH int month = dateTimeStartingFrom.getMonth(); // Calendar.MONTH int year = dateTimeStartingFrom.getYear(); // Calendar.YEAR String timeString = String.format("%02d", day) + "." + String.format("%02d", month + 1) + "." + String.format("%04d", year); TimeTool tt = new TimeTool(timeString); if (tt.isBefore(new TimeTool())) { setErrorMessage(Messages.Tageseinteilung_no_past_Date); TimeTool tomorrow = new TimeTool(); tomorrow.addDays(1); dateTimeStartingFrom.setDate(tomorrow.get(TimeTool.YEAR), tomorrow.get(TimeTool.MONTH), tomorrow.get(TimeTool.DAY_OF_MONTH)); } } }); dateTimeStartingFrom.setEnabled(false); btnApplyEdit = new Button(compositeEditStarting, SWT.NONE); btnApplyEdit.setText(Messages.Tageseinteilung_btnNewButton_text); btnApplyEdit.setEnabled(false); btnApplyEdit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ // Apply the selected edits starting from the selected date int day = dateTimeStartingFrom.getDay(); // Calendar.DAY_OF_MONTH int month = dateTimeStartingFrom.getMonth(); // Calendar.MONTH int year = dateTimeStartingFrom.getYear(); // Calendar.YEAR String timeString = String.format("%02d", day) + "." + String.format("%02d", month + 1) + "." + String.format("%04d", year); ProgressMonitorDialog pmd = new ProgressMonitorDialog(UiDesk.getTopShell()); IRunnableWithProgress irp = new TermineLockedTimesUpdater(new TimeTool(timeString), editSelection, editSelectionText.getText(), Termin.TerminBereiche[actBereich]); try { pmd.run(false, false, irp); editSelectionText.setBackground(originalBackgroundColor); editSelectionText.setEnabled(false); } catch (InvocationTargetException e1) { Status status = new Status(IStatus.WARNING, Activator.PLUGIN_ID, "Execution Error", e1); StatusManager.getManager().handle(status, StatusManager.SHOW); } catch (InterruptedException e1) { Status status = new Status(IStatus.WARNING, Activator.PLUGIN_ID, "Execution Error", e1); StatusManager.getManager().handle(status, StatusManager.SHOW); } dateTimeStartingFrom.setEnabled(false); btnApplyEdit.setEnabled(false); } }); comboViewerDayEditSelector.setContentProvider(ArrayContentProvider.getInstance()); comboViewerDayEditSelector.setLabelProvider(new LabelProvider() { @Override public String getText(Object element){ TimeTool.DAYS day = (TimeTool.DAYS) element; return day.fullName; } }); TimeTool.DAYS[] days = TimeTool.DAYS.values(); comboViewerDayEditSelector.setInput(days); comboViewerDayEditSelector.setSelection(new StructuredSelection(days[0])); compositeDayBorders = new Composite(ret, SWT.NONE); compositeDayBorders.setLayout(new GridLayout(2, false)); Composite compositeStart = new Composite(compositeDayBorders, SWT.NONE); compositeStart.setLayout(new GridLayout(3, false)); Label btnDayStartHourIsSet = new Label(compositeStart, SWT.CHECK); btnDayStartHourIsSet.setText(Messages.Tageseinteilung_btnCheckButton_text); sodt = new Text(compositeStart, SWT.BORDER); sodt.setTextLimit(4); Label lblHours = new Label(compositeStart, SWT.NONE); lblHours.setText(Messages.Tageseinteilung_lblHours_text); Composite compositeEnd = new Composite(compositeDayBorders, SWT.NONE); compositeEnd.setLayout(new GridLayout(3, false)); Label btnEndStartHourIsSet = new Label(compositeEnd, SWT.CHECK); btnEndStartHourIsSet.setText(Messages.Tageseinteilung_btnCheckButton_text_1); eodt = new Text(compositeEnd, SWT.BORDER); eodt.setTextLimit(4); Label lblHours_1 = new Label(compositeEnd, SWT.NONE); lblHours_1.setText(Messages.Tageseinteilung_lblHours_1_text); reload(); cbBereich.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ int idx = cbBereich.getSelectionIndex(); if (idx != -1) { save(); actBereich = idx; reload(); } } }); return ret; } void reload(){ Hashtable<String, String> map = Plannables.getDayPrefFor(bereiche[actBereich]); String p = map.get(Messages.Tageseinteilung_mo); tMo.setText(p == null ? "0000-0800\n1800-2359" : p); //$NON-NLS-1$ p = map.get(Messages.Tageseinteilung_tu); tDi.setText(p == null ? "0000-0800\n1800-2359" : p); //$NON-NLS-1$ p = map.get(Messages.Tageseinteilung_we); tMi.setText(p == null ? "0000-0800\n1800-2359" : p); //$NON-NLS-1$ p = map.get(Messages.Tageseinteilung_th); tDo.setText(p == null ? "0000-0800\n1800-2359" : p); //$NON-NLS-1$ p = map.get(Messages.Tageseinteilung_fr); tFr.setText(p == null ? "0000-0800\n1800-2359" : p); //$NON-NLS-1$ p = map.get(Messages.Tageseinteilung_sa); tSa.setText(p == null ? "0000-0800\n1200-2359" : p); //$NON-NLS-1$ p = map.get(Messages.Tageseinteilung_su); tSo.setText(p == null ? "0000-2359" : p); //$NON-NLS-1$ String sodtString = CoreHub.globalCfg.get(PreferenceConstants.AG_DAY_PRESENTATION_STARTS_AT, "0000"); sodt.setText(sodtString); String eodtString = CoreHub.globalCfg.get(PreferenceConstants.AG_DAY_PRESENTATION_ENDS_AT, "2359"); eodt.setText(eodtString); } void save(){ Hashtable<String, String> map = new Hashtable<String, String>(); map.put(Messages.Tageseinteilung_mo, tMo.getText()); map.put(Messages.Tageseinteilung_tu, tDi.getText()); map.put(Messages.Tageseinteilung_we, tMi.getText()); map.put(Messages.Tageseinteilung_th, tDo.getText()); map.put(Messages.Tageseinteilung_fr, tFr.getText()); map.put(Messages.Tageseinteilung_sa, tSa.getText()); map.put(Messages.Tageseinteilung_su, tSo.getText()); Plannables.setDayPrefFor(bereiche[actBereich], map); CoreHub.globalCfg.set(PreferenceConstants.AG_DAY_PRESENTATION_STARTS_AT, sodt.getText()); CoreHub.globalCfg.set(PreferenceConstants.AG_DAY_PRESENTATION_ENDS_AT, eodt.getText()); CoreHub.globalCfg.flush(); } public void init(IWorkbench workbench){ // TODO Auto-generated method stub } @Override protected void performApply(){ save(); super.performApply(); } @Override public boolean performOk(){ save(); return super.performOk(); } }