/******************************************************************************* * Copyright (c) 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.agenda.ui.week; import java.util.ArrayList; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; 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.Label; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.ImageHyperlink; import ch.elexis.actions.Activator; import ch.elexis.agenda.preferences.PreferenceConstants; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.StringTool; import ch.rgw.tools.TimeTool; public class ColumnHeader extends Composite { AgendaWeek view; static final String IMG_PERSONS_NAME = Activator.PLUGIN_ID + "/personen"; //$NON-NLS-1$ static final String IMG_PERSONS_PATH = "icons/personen.png"; //$NON-NLS-1$ ImageHyperlink ihRes; public ColumnHeader(Composite parent, AgendaWeek aw){ super(parent, SWT.NONE); view = aw; if (UiDesk.getImage(IMG_PERSONS_NAME) == null) { UiDesk.getImageRegistry().put(IMG_PERSONS_NAME, Activator.getImageDescriptor(IMG_PERSONS_PATH)); } ihRes = new ImageHyperlink(this, SWT.NONE); ihRes.setImage(UiDesk.getImage(IMG_PERSONS_NAME)); ihRes.setToolTipText(Messages.ColumnHeader_selectDaysToDisplay); ihRes.addHyperlinkListener(new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent e){ new SelectDaysDlg().open(); } }); } void recalc(double widthPerColumn, int left_offset, int padding, int textSize){ GridData gd = (GridData) getLayoutData(); gd.heightHint = textSize + 2; for (Control c : getChildren()) { if (c instanceof Label) { c.dispose(); } } Point bSize = ihRes.computeSize(SWT.DEFAULT, SWT.DEFAULT); ihRes.setBounds(0, 0, bSize.x, bSize.y); String[] labels = view.getDisplayedDays(); int count = labels.length; for (int i = 0; i < count; i++) { int lx = left_offset + (int) Math.round(i * (widthPerColumn + padding)); Label l = new Label(this, SWT.NONE); TimeTool tt = new TimeTool(labels[i]); StringBuilder sb = new StringBuilder(tt.toString(TimeTool.WEEKDAY)); sb.append(", ").append(tt.toString(TimeTool.DATE_GER)); //$NON-NLS-1$ String coltext = sb.toString(); Point extend = SWTHelper.getStringBounds(this, coltext); if (extend.x > widthPerColumn) { coltext = coltext.substring(0, coltext.length() - 4); extend = SWTHelper.getStringBounds(this, coltext); if (extend.x > widthPerColumn) { coltext = coltext.substring(0, 2); } } l.setText(coltext); int outer = (int) Math.round(widthPerColumn); int inner = l.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; int off = (outer - inner) / 2; lx += off; l.setBounds(lx, 0, inner, textSize + 2); } } class SelectDaysDlg extends TitleAreaDialog { SelectDaysDlg(){ super(ColumnHeader.this.getShell()); } @Override protected Control createDialogArea(Composite parent){ Composite ret = (Composite) super.createDialogArea(parent); ret.setLayout(new GridLayout()); String resources = CoreHub.localCfg.get(PreferenceConstants.AG_DAYSTOSHOW, StringTool.join(TimeTool.Wochentage, ",")); //$NON-NLS-1$ String[] daysSelected = resources.split(","); for (TimeTool.DAYS day : TimeTool.DAYS.values()) { Button b = new Button(ret, SWT.CHECK); b.setText(day.fullName); b.setSelection(false); b.setData(day.numericDayValue); for (String string : daysSelected) { if (string.toLowerCase().equalsIgnoreCase(day.fullName.toLowerCase())) b.setSelection(true); } } return ret; } @Override public void create(){ super.create(); getShell().setText(Messages.ColumnHeader_configureDisplay); setTitle(Messages.ColumnHeader_displayWeekdays); setMessage(Messages.ColumnHeader_pleaseSelectWeekdays); } @Override protected void okPressed(){ Composite dlg = (Composite) getDialogArea(); String[] res = TimeTool.Wochentage; ArrayList<String> sel = new ArrayList<String>(res.length); for (Control c : dlg.getChildren()) { if (c instanceof Button) { if (((Button) c).getSelection()) { int dayValue = (Integer) ((Button) c).getData(); sel.add(TimeTool.DAYS.valueOf(dayValue).fullName); } } } view.clear(); CoreHub.localCfg.set(PreferenceConstants.AG_DAYSTOSHOW, StringTool.join(sel, ",")); //$NON-NLS-1$ view.refresh(); super.okPressed(); } } }