/*******************************************************************************
* Copyright (c) 2011 Tasktop Technologies and others.
* 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.commons.activity.ui;
import org.eclipse.jface.layout.GridDataFactory;
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.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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* @author Mik Kersten
* @author Rob Elves
* @author Steffen Pingel
*/
public class ActivityUiPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private static final int MS_MINUTES = 60 * 1000;
private Spinner timeoutMinutes;
private Button timeoutEnabledButton;
private Button activityTrackingEnabledButton;
private Label timeoutLabel1;
private Label timeoutLabel2;
public ActivityUiPreferencePage() {
setPreferenceStore(ActivityUiPlugin.getDefault().getPreferenceStore());
}
@Override
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout(1, false);
container.setLayout(layout);
createTaskActivityGroup(container);
updateControls();
applyDialogFont(container);
return container;
}
public void init(IWorkbench workbench) {
// ignore
}
@Override
public boolean performOk() {
getPreferenceStore().setValue(IActivityUiConstants.ACTIVITY_TIMEOUT_ENABLED,
timeoutEnabledButton.getSelection());
getPreferenceStore().setValue(IActivityUiConstants.ACTIVITY_TIMEOUT,
timeoutMinutes.getSelection() * (60 * 1000));
getPreferenceStore().setValue(IActivityUiConstants.ACTIVITY_TRACKING_ENABLED,
activityTrackingEnabledButton.getSelection());
return true;
}
@Override
public boolean performCancel() {
int minutes = getPreferenceStore().getInt(IActivityUiConstants.ACTIVITY_TIMEOUT) / MS_MINUTES;
timeoutMinutes.setSelection(minutes);
timeoutEnabledButton.setSelection(getPreferenceStore().getBoolean(IActivityUiConstants.ACTIVITY_TIMEOUT_ENABLED));
activityTrackingEnabledButton.setSelection(getPreferenceStore().getBoolean(
IActivityUiConstants.ACTIVITY_TRACKING_ENABLED));
return true;
}
@Override
public void performDefaults() {
super.performDefaults();
int activityTimeoutMinutes = getPreferenceStore().getDefaultInt(IActivityUiConstants.ACTIVITY_TIMEOUT)
/ MS_MINUTES;
timeoutMinutes.setSelection(activityTimeoutMinutes);
timeoutEnabledButton.setSelection(getPreferenceStore().getDefaultBoolean(
IActivityUiConstants.ACTIVITY_TIMEOUT_ENABLED));
activityTrackingEnabledButton.setSelection(getPreferenceStore().getDefaultBoolean(
IActivityUiConstants.ACTIVITY_TRACKING_ENABLED));
}
private Group createTaskActivityGroup(Composite container) {
Group group = new Group(container, SWT.SHADOW_ETCHED_IN);
group.setText(Messages.TasksUiPreferencePage_Task_Timing);
group.setLayout(new GridLayout(3, false));
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
boolean activityTrackingEnabled = getPreferenceStore().getBoolean(
IActivityUiConstants.ACTIVITY_TRACKING_ENABLED);
boolean timeoutEnabled = getPreferenceStore().getBoolean(IActivityUiConstants.ACTIVITY_TIMEOUT_ENABLED);
activityTrackingEnabledButton = new Button(group, SWT.CHECK);
activityTrackingEnabledButton.setText(Messages.TasksUiPreferencePage_Enable_Time_Tracking);
activityTrackingEnabledButton.setSelection(activityTrackingEnabled);
activityTrackingEnabledButton.setToolTipText(Messages.TasksUiPreferencePage_Track_Time_Spent);
activityTrackingEnabledButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateControls();
}
});
GridDataFactory.swtDefaults().span(3, 1).applyTo(activityTrackingEnabledButton);
timeoutEnabledButton = new Button(group, SWT.CHECK);
timeoutEnabledButton.setText(Messages.TasksUiPreferencePage_Enable_inactivity_timeouts);
timeoutEnabledButton.setSelection(timeoutEnabled);
timeoutEnabledButton.setToolTipText(Messages.TasksUiPreferencePage_If_disabled);
timeoutEnabledButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateControls();
}
});
GridDataFactory.swtDefaults().span(3, 1).applyTo(timeoutEnabledButton);
timeoutLabel1 = new Label(group, SWT.NONE);
timeoutLabel1.setText(Messages.TasksUiPreferencePage_Stop_time_accumulation_after);
timeoutMinutes = new Spinner(group, SWT.BORDER);
timeoutMinutes.setDigits(0);
timeoutMinutes.setIncrement(5);
timeoutMinutes.setMaximum(60);
timeoutMinutes.setMinimum(1);
long minutes = getPreferenceStore().getLong(IActivityUiConstants.ACTIVITY_TIMEOUT) / MS_MINUTES;
timeoutMinutes.setSelection((int) minutes);
timeoutMinutes.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateControls();
}
});
timeoutLabel2 = new Label(group, SWT.NONE);
timeoutLabel2.setText(Messages.TasksUiPreferencePage_minutes_of_inactivity);
return group;
}
public void updateControls() {
if (activityTrackingEnabledButton.getSelection()) {
timeoutEnabledButton.setEnabled(true);
timeoutMinutes.setEnabled(timeoutEnabledButton.getSelection());
timeoutLabel1.setEnabled(timeoutEnabledButton.getSelection());
timeoutLabel2.setEnabled(timeoutEnabledButton.getSelection());
} else {
timeoutEnabledButton.setEnabled(false);
timeoutMinutes.setEnabled(false);
timeoutLabel1.setEnabled(false);
timeoutLabel2.setEnabled(false);
}
}
}