Java tutorial
/******************************************************************************* * 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.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import ch.elexis.actions.Activator; import ch.elexis.agenda.data.IPlannable; import ch.elexis.agenda.preferences.PreferenceConstants; import ch.elexis.agenda.ui.BaseView; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.ui.dialogs.DateSelectorDialog; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.StringTool; import ch.rgw.tools.TimeTool; public class AgendaWeek extends BaseView { private IAction weekFwdAction, weekBackAction, showCalendarAction; private ProportionalSheet sheet; private ColumnHeader header; public AgendaWeek() { } public ColumnHeader getHeader() { return header; } @Override protected void create(Composite parent) { makePrivateActions(); Composite wrapper = new Composite(parent, SWT.NONE); wrapper.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); wrapper.setLayout(new GridLayout()); header = new ColumnHeader(wrapper, this); header.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); ScrolledComposite bounding = new ScrolledComposite(wrapper, SWT.V_SCROLL); bounding.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); // bounding.setBackground(Desk.getColor(Desk.COL_RED)); sheet = new ProportionalSheet(bounding, this); // sheet.setSize(sheet.computeSize(SWT.DEFAULT,SWT.DEFAULT)); bounding.setContent(sheet); bounding.setMinSize(sheet.computeSize(SWT.DEFAULT, SWT.DEFAULT)); bounding.setExpandHorizontal(true); bounding.setExpandVertical(true); TimeTool tt = new TimeTool(); for (String s : getDisplayedDays()) { tt.set(s); checkDay(null, tt); } } void clear() { sheet.clear(); } @Override protected IPlannable getSelection() { // TODO Auto-generated method stub return null; } @Override protected void refresh() { TimeTool ttMonday = agenda.getActDate(); ttMonday.set(TimeTool.DAY_OF_WEEK, TimeTool.MONDAY); StringBuilder sb = new StringBuilder(ttMonday.toString(TimeTool.DATE_GER)); ttMonday.addDays(6); sb.append("-").append(ttMonday.toString(TimeTool.DATE_GER)); //$NON-NLS-1$ showCalendarAction.setText(sb.toString()); sheet.refresh(); } @Override public void setFocus() { refresh(); } public String[] getDisplayedDays() { TimeTool ttMonday = Activator.getDefault().getActDate(); ttMonday.set(TimeTool.DAY_OF_WEEK, TimeTool.MONDAY); ttMonday.chop(3); String resources = CoreHub.localCfg.get(PreferenceConstants.AG_DAYSTOSHOW, StringTool.join(TimeTool.Wochentage, ",")); //$NON-NLS-1$ if (resources == null) { return new String[0]; } else { ArrayList<String> ret = new ArrayList<String>(resources.length()); for (TimeTool.DAYS wd : TimeTool.DAYS.values()) { if (resources.indexOf(wd.fullName) != -1) { ret.add(ttMonday.toString(TimeTool.DATE_COMPACT)); } ttMonday.addDays(1); } return ret.toArray(new String[0]); } } private void makePrivateActions() { weekFwdAction = new Action(Messages.AgendaWeek_weekForward) { { setToolTipText(Messages.AgendaWeek_showNextWeek); setImageDescriptor(Images.IMG_NEXT.getImageDescriptor()); } @Override public void run() { agenda.addDays(7); TimeTool tt = new TimeTool(); for (String s : getDisplayedDays()) { tt.set(s); checkDay(null, tt); } refresh(); } }; weekBackAction = new Action(Messages.AgendaWeek_weekBackward) { { setToolTipText(Messages.AgendaWeek_showPreviousWeek); setImageDescriptor(Images.IMG_PREVIOUS.getImageDescriptor()); } @Override public void run() { agenda.addDays(-7); TimeTool tt = new TimeTool(); for (String s : getDisplayedDays()) { tt.set(s); checkDay(null, tt); } refresh(); } }; showCalendarAction = new Action(Messages.AgendaWeek_selectWeek) { { setToolTipText(Messages.AgendaWeek_showCalendarToSelect); // setImageDescriptor(Activator.getImageDescriptor("icons/calendar.png")); } @Override public void run() { DateSelectorDialog dsl = new DateSelectorDialog(getViewSite().getShell(), agenda.getActDate()); if (dsl.open() == Dialog.OK) { agenda.setActDate(dsl.getSelectedDate()); TimeTool tt = new TimeTool(); for (String s : getDisplayedDays()) { tt.set(s); checkDay(null, tt); } refresh(); } } }; final IAction zoomAction = new Action(Messages.AgendaWeek_zoom, Action.AS_DROP_DOWN_MENU) { Menu mine; { setToolTipText(Messages.AgendaWeek_setZoomFactor); setImageDescriptor(Activator.getImageDescriptor("icons/zoom.png")); //$NON-NLS-1$ setMenuCreator(new IMenuCreator() { public void dispose() { mine.dispose(); } public Menu getMenu(Control parent) { mine = new Menu(parent); fillMenu(); return mine; } public Menu getMenu(Menu parent) { mine = new Menu(parent); fillMenu(); return mine; } }); } private void fillMenu() { String currentFactorString = CoreHub.localCfg.get(PreferenceConstants.AG_PIXEL_PER_MINUTE, "0.4"); int currentFactor = (int) (Float.parseFloat(currentFactorString) * 100); for (String s : new String[] { "40", "60", "80", "100", "120", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ "140", "160", "200", "300" }) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ MenuItem it = new MenuItem(mine, SWT.RADIO); it.setText(s + "%"); //$NON-NLS-1$ it.setData(s); it.setSelection(Integer.parseInt(s) == currentFactor); it.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { MenuItem mi = (MenuItem) e.getSource(); int scale = Integer.parseInt(mi.getText().split("%")[0]); //$NON-NLS-1$ double factor = scale / 100.0; CoreHub.localCfg.set(PreferenceConstants.AG_PIXEL_PER_MINUTE, Double.toString(factor)); sheet.recalc(); } }); } } }; IToolBarManager tmr = getViewSite().getActionBars().getToolBarManager(); tmr.add(new Separator()); tmr.add(weekBackAction); tmr.add(showCalendarAction); tmr.add(weekFwdAction); tmr.add(new Separator()); tmr.add(zoomAction); } }