ch.elexis.agenda.ui.week.AgendaWeek.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.agenda.ui.week.AgendaWeek.java

Source

/*******************************************************************************
 * 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);
    }

}