blob: 31bd71b3d9ffc09c9e7021757b07869fb82dedce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
* Abner Ballardo - fix for bug 276113
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.preferences;
import java.io.File;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.mylyn.commons.core.CommonMessages;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.commons.ui.CommonImages;
import org.eclipse.mylyn.commons.ui.compatibility.CommonColors;
import org.eclipse.mylyn.internal.monitor.ui.ActivityContextManager;
import org.eclipse.mylyn.internal.monitor.ui.MonitorUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.actions.RestoreTaskListAction;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.dialogs.PreferenceLinkArea;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableMap;
/**
* @author Mik Kersten
* @author Rob Elves
* @author David Green
*/
public class TasksUiPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
public static final String ID = "org.eclipse.mylyn.tasks.ui.preferences"; //$NON-NLS-1$
private static final String FORWARDSLASH = "/"; //$NON-NLS-1$
private static final String BACKSLASH_MULTI = "\\\\"; //$NON-NLS-1$
private static final int MS_MINUTES = 60 * 1000;
private static BiMap<String, Integer> SCHEDULE_TIME_MAP = HashBiMap
.create(ImmutableMap.of(ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR_THIS_WEEK, 0,
ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR_TOMORROW, 1,
ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR_TODAY, 2,
ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR_NOT_SCHEDULED, 3));
private Button useRichEditor;
private Button editorHighlightsCurrentLine;
private Button useWebBrowser;
private Text fullSyncScheduleTime;
private Text relevantTasksSyncScheduleTime;
private Button enableFullTaskListSynch;
private Button enableRelevantTasksSynch;
private Text taskDirectoryText;
private Button browse;
private Button notificationEnabledButton;
private final FormToolkit toolkit;
private Spinner timeoutMinutes;
private Button timeoutEnabledButton;
private ExpandableComposite advancedComposite;
private Combo weekStartCombo;
private Combo scheduleNewTasksCombo;
private Button activityTrackingEnabledButton;
private Label timeoutLabel1;
private Label timeoutLabel2;
private Button taskListTooltipEnabledButton;
private Button showTaskTrimButton;
private Button taskListServiceMessageEnabledButton;
public TasksUiPreferencePage() {
super();
setPreferenceStore(TasksUiPlugin.getDefault().getPreferenceStore());
toolkit = new FormToolkit(Display.getCurrent());
}
@Override
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout(1, false);
container.setLayout(layout);
createTaskRefreshScheduleGroup(container);
createSchedulingGroup(container);
createTaskNavigationGroup(container);
createTaskListGroup(container);
createTaskEditorGroup(container);
Group taskActivityGroup = createTaskActivityGroup(container);
if (!TasksUiPlugin.getTaskActivityMonitor().isEnabled()) {
// hide controls but create them to avoid NPEs
taskActivityGroup.setVisible(false);
((GridData) taskActivityGroup.getLayoutData()).exclude = true;
}
Composite advanced = createAdvancedSection(container);
createTaskDataControl(advanced);
if (getContainer() instanceof IWorkbenchPreferenceContainer) {
String message = Messages.TasksUiPreferencePage_See_X_for_configuring_Task_List_colors;
new PreferenceLinkArea(advanced, SWT.NONE, "org.eclipse.ui.preferencePages.ColorsAndFonts", message, //$NON-NLS-1$
(IWorkbenchPreferenceContainer) getContainer(), null);
}
createLinks(advanced);
updateRefreshGroupEnablements();
applyDialogFont(container);
return container;
}
private void createLinks(Composite container) {
Hyperlink link = new Hyperlink(container, SWT.NULL);
link.setForeground(CommonColors.HYPERLINK_WIDGET);
link.setUnderlined(true);
link.setText(Messages.TasksUiPreferencePage_Use_the_Restore_dialog_to_recover_missing_tasks);
link.addHyperlinkListener(new IHyperlinkListener() {
public void linkActivated(HyperlinkEvent e) {
getShell().close();
new RestoreTaskListAction().run();
}
public void linkEntered(HyperlinkEvent e) {
// ignore
}
public void linkExited(HyperlinkEvent e) {
// ignore
}
});
}
private Composite createAdvancedSection(Composite container) {
advancedComposite = toolkit.createExpandableComposite(container,
ExpandableComposite.COMPACT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
advancedComposite.setFont(container.getFont());
advancedComposite.setBackground(container.getBackground());
advancedComposite.setText(Messages.TasksUiPreferencePage_Advanced);
advancedComposite.setLayout(new GridLayout(1, false));
advancedComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
advancedComposite.addExpansionListener(new ExpansionAdapter() {
@Override
public void expansionStateChanged(ExpansionEvent e) {
getControl().getShell().pack();
}
});
Composite advanced = new Composite(advancedComposite, SWT.NONE);
advanced.setLayout(new GridLayout(1, false));
advancedComposite.setClient(advanced);
return advanced;
}
public void init(IWorkbench workbench) {
// TODO Auto-generated method stub
}
@Override
public boolean performOk() {
getPreferenceStore().setValue(ITasksUiPreferenceConstants.NOTIFICATIONS_ENABLED,
notificationEnabledButton.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.EDITOR_TASKS_RICH, useRichEditor.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.EDITOR_CURRENT_LINE_HIGHLIGHT,
editorHighlightsCurrentLine.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED,
enableFullTaskListSynch.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.RELEVANT_SYNCH_SCHEDULE_ENABLED,
enableRelevantTasksSynch.getSelection());
String miliseconds = toMillisecondsString(fullSyncScheduleTime.getText());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS, miliseconds);
miliseconds = toMillisecondsString(relevantTasksSyncScheduleTime.getText());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.RELEVANT_TASKS_SCHEDULE_MILISECONDS, miliseconds);
getPreferenceStore().setValue(ITasksUiPreferenceConstants.TASK_LIST_TOOL_TIPS_ENABLED,
taskListTooltipEnabledButton.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.SERVICE_MESSAGES_ENABLED,
taskListServiceMessageEnabledButton.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.SHOW_TRIM, showTaskTrimButton.getSelection());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.WEEK_START_DAY, getWeekStartValue());
getPreferenceStore().setValue(ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR, getScheduleNewTasksValue());
MonitorUiPlugin.getDefault().getPreferenceStore().setValue(ActivityContextManager.ACTIVITY_TIMEOUT_ENABLED,
timeoutEnabledButton.getSelection());
MonitorUiPlugin.getDefault().getPreferenceStore().setValue(ActivityContextManager.ACTIVITY_TIMEOUT,
timeoutMinutes.getSelection() * (60 * 1000));
MonitorUiPlugin.getDefault().getPreferenceStore().setValue(MonitorUiPlugin.ACTIVITY_TRACKING_ENABLED,
activityTrackingEnabledButton.getSelection());
String taskDirectory = taskDirectoryText.getText();
taskDirectory = taskDirectory.replaceAll(BACKSLASH_MULTI, FORWARDSLASH);
if (!taskDirectory.equals(TasksUiPlugin.getDefault().getDataDirectory())) {
if (checkForExistingTasklist(taskDirectory)) {
Exception exception = null;
try {
TasksUiPlugin.getDefault().setDataDirectory(taskDirectory);
} catch (CoreException e) {
exception = e;
StatusHandler.log(e.getStatus());
MessageDialog.openError(getShell(), Messages.TasksUiPreferencePage_Task_Data_Directory_Error,
Messages.TasksUiPreferencePage_Error_applying_Task_List_data_directory_changes);
} catch (OperationCanceledException ce) {
exception = ce;
}
if (exception != null && !taskDirectoryText.isDisposed()) {
String originalDirectory = TasksUiPlugin.getDefault().getDefaultDataDirectory();
if (!taskDirectory.equals(originalDirectory)) {
taskDirectoryText.setText(originalDirectory);
}
}
} else {
taskDirectoryText.setFocus();
return false;
}
}
return true;
}
private String toMillisecondsString(String minutesString) {
return Long.toString(60 * 1000 * Long.parseLong(minutesString));
}
private int getWeekStartValue() {
return weekStartCombo.getSelectionIndex() + 1;
}
private String getScheduleNewTasksValue() {
int index = scheduleNewTasksCombo.getSelectionIndex();
return SCHEDULE_TIME_MAP.inverse().get(index);
}
@Override
public boolean performCancel() {
taskDirectoryText.setText(TasksUiPlugin.getDefault().getDefaultDataDirectory());
notificationEnabledButton
.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.NOTIFICATIONS_ENABLED));
useRichEditor.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.EDITOR_TASKS_RICH));
editorHighlightsCurrentLine.setSelection(
getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.EDITOR_CURRENT_LINE_HIGHLIGHT));
String repositorySyncMinutes = toMinutesString(
getPreferenceStore().getLong(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS));
String relevantSyncMinutes = toMinutesString(
getPreferenceStore().getLong(ITasksUiPreferenceConstants.RELEVANT_TASKS_SCHEDULE_MILISECONDS));
boolean shouldSyncTaskList = getPreferenceStore()
.getBoolean(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED);
boolean shouldSyncRelevantTasks = getPreferenceStore()
.getBoolean(ITasksUiPreferenceConstants.RELEVANT_SYNCH_SCHEDULE_ENABLED);
enableFullTaskListSynch.setSelection(shouldSyncTaskList);
enableRelevantTasksSynch.setSelection(shouldSyncRelevantTasks);
fullSyncScheduleTime.setText(repositorySyncMinutes);
relevantTasksSyncScheduleTime.setText(relevantSyncMinutes);
taskListTooltipEnabledButton
.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.TASK_LIST_TOOL_TIPS_ENABLED));
taskListServiceMessageEnabledButton
.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.SERVICE_MESSAGES_ENABLED));
showTaskTrimButton.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.SHOW_TRIM));
weekStartCombo.select(getPreferenceStore().getInt(ITasksUiPreferenceConstants.WEEK_START_DAY) - 1);
String scheduleFor = getPreferenceStore().getString(ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR);
scheduleNewTasksCombo.select(SCHEDULE_TIME_MAP.getOrDefault(scheduleFor, 0));
int minutes = MonitorUiPlugin.getDefault().getPreferenceStore().getInt(ActivityContextManager.ACTIVITY_TIMEOUT)
/ MS_MINUTES;
timeoutMinutes.setSelection(minutes);
timeoutEnabledButton.setSelection(MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getBoolean(ActivityContextManager.ACTIVITY_TIMEOUT_ENABLED));
activityTrackingEnabledButton.setSelection(MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getBoolean(MonitorUiPlugin.ACTIVITY_TRACKING_ENABLED));
return true;
}
@Override
public void performDefaults() {
super.performDefaults();
taskDirectoryText.setText(TasksUiPlugin.getDefault().getDefaultDataDirectory());
notificationEnabledButton.setSelection(
getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.NOTIFICATIONS_ENABLED));
useRichEditor
.setSelection(getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.EDITOR_TASKS_RICH));
editorHighlightsCurrentLine.setSelection(
getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.EDITOR_CURRENT_LINE_HIGHLIGHT));
taskListTooltipEnabledButton.setSelection(
getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.TASK_LIST_TOOL_TIPS_ENABLED));
taskListServiceMessageEnabledButton.setSelection(
getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.SERVICE_MESSAGES_ENABLED));
showTaskTrimButton.setSelection(getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.SHOW_TRIM));
enableFullTaskListSynch.setSelection(
getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED));
enableRelevantTasksSynch.setSelection(
getPreferenceStore().getDefaultBoolean(ITasksUiPreferenceConstants.RELEVANT_SYNCH_SCHEDULE_ENABLED));
fullSyncScheduleTime.setText(toMinutesString(getPreferenceStore()
.getDefaultLong(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS)));
relevantTasksSyncScheduleTime.setText(toMinutesString(
getPreferenceStore().getDefaultLong(ITasksUiPreferenceConstants.RELEVANT_TASKS_SCHEDULE_MILISECONDS)));
weekStartCombo.select(getPreferenceStore().getDefaultInt(ITasksUiPreferenceConstants.WEEK_START_DAY) - 1);
String defaultScheduleFor = getPreferenceStore()
.getDefaultString(ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR);
scheduleNewTasksCombo.select(SCHEDULE_TIME_MAP.getOrDefault(defaultScheduleFor, 0));
int activityTimeoutMinutes = MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getDefaultInt(ActivityContextManager.ACTIVITY_TIMEOUT) / MS_MINUTES;
timeoutMinutes.setSelection(activityTimeoutMinutes);
timeoutEnabledButton.setSelection(MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getDefaultBoolean(ActivityContextManager.ACTIVITY_TIMEOUT_ENABLED));
activityTrackingEnabledButton.setSelection(MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getDefaultBoolean(MonitorUiPlugin.ACTIVITY_TRACKING_ENABLED));
updateRefreshGroupEnablements();
}
private void createTaskRefreshScheduleGroup(Composite parent) {
Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
group.setText(Messages.TasksUiPreferencePage_Synchronization);
group.setLayout(new GridLayout(1, false));
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite backgroundSync = new Composite(group, SWT.NULL);
GridLayoutFactory.swtDefaults().numColumns(4).equalWidth(false).margins(0, 0).applyTo(backgroundSync);
//Enabled background synchronization
enableFullTaskListSynch = new Button(backgroundSync, SWT.CHECK);
enableFullTaskListSynch.setText(Messages.TasksUiPreferencePage_Synchronize_Task_List);
enableFullTaskListSynch.setSelection(
getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_ENABLED));
enableFullTaskListSynch.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateRefreshGroupEnablements();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
GridDataFactory.defaultsFor(enableFullTaskListSynch).span(4, 1).applyTo(enableFullTaskListSynch);
//Synchronize Task List Fully
new Label(backgroundSync, SWT.NONE).setText(Messages.TasksUiPreferencePage_Synchronize_Queries);
fullSyncScheduleTime = createSynchronizationScheduleTextBox(backgroundSync,
ITasksUiPreferenceConstants.REPOSITORY_SYNCH_SCHEDULE_MILISECONDS);
new Label(backgroundSync, SWT.NONE).setText(Messages.TasksUiPreferencePage_minutes);
new Label(backgroundSync, SWT.NONE);
//Synchronize Relevant Tasks
enableRelevantTasksSynch = new Button(backgroundSync, SWT.CHECK);
enableRelevantTasksSynch.setText(Messages.TasksUiPreferencePage_Synchronize_Relevant_Tasks);
enableRelevantTasksSynch.setSelection(
getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.RELEVANT_SYNCH_SCHEDULE_ENABLED));
enableRelevantTasksSynch.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateRefreshGroupEnablements();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
relevantTasksSyncScheduleTime = createSynchronizationScheduleTextBox(backgroundSync,
ITasksUiPreferenceConstants.RELEVANT_TASKS_SCHEDULE_MILISECONDS);
new Label(backgroundSync, SWT.NONE).setText(Messages.TasksUiPreferencePage_minutes);
Label help = new Label(backgroundSync, SWT.NONE);
help.setImage(CommonImages.getImage(CommonImages.QUESTION));
help.setToolTipText(Messages.TasksUiPreferencePage_RelevantTasksHelp);
//notification
notificationEnabledButton = new Button(group, SWT.CHECK);
notificationEnabledButton
.setText(Messages.TasksUiPreferencePage_Display_notifications_for_overdue_tasks_and_incoming_changes);
notificationEnabledButton
.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.NOTIFICATIONS_ENABLED));
GridDataFactory.defaultsFor(notificationEnabledButton).span(4, 1).applyTo(notificationEnabledButton);
}
private Text createSynchronizationScheduleTextBox(Composite backgroundSync, String preferenceKey) {
Text text = new Text(backgroundSync, SWT.BORDER | SWT.RIGHT);
GridData gridDataRepo = new GridData();
gridDataRepo.widthHint = 25;
text.setLayoutData(gridDataRepo);
long querySyncMilliseconds = getPreferenceStore().getLong(preferenceKey);
text.setText(toMinutesString(querySyncMilliseconds));
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateRefreshGroupEnablements();
}
});
return text;
}
private void createTaskEditorGroup(Composite parent) {
Group container = new Group(parent, SWT.SHADOW_ETCHED_IN);
container.setLayout(new GridLayout(2, false));
container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
container.setText(Messages.TasksUiPreferencePage_Task_Editing);
useRichEditor = new Button(container, SWT.RADIO);
useRichEditor.setText(Messages.TasksUiPreferencePage_Rich_Editor__Recommended_);
useRichEditor.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.EDITOR_TASKS_RICH));
useWebBrowser = new Button(container, SWT.RADIO);
useWebBrowser.setText(Messages.TasksUiPreferencePage_Web_Browser);
useWebBrowser.setSelection(!getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.EDITOR_TASKS_RICH));
editorHighlightsCurrentLine = new Button(container, SWT.CHECK);
editorHighlightsCurrentLine.setText(Messages.TasksUiPreferencePage_highlight_current_line);
editorHighlightsCurrentLine.setSelection(
getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.EDITOR_CURRENT_LINE_HIGHLIGHT));
}
private void createTaskDataControl(Composite parent) {
Group taskDataGroup = new Group(parent, SWT.SHADOW_ETCHED_IN);
taskDataGroup.setText(Messages.TasksUiPreferencePage_Task_Data);
taskDataGroup.setLayout(new GridLayout(1, false));
taskDataGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite dataDirComposite = new Composite(taskDataGroup, SWT.NULL);
GridLayout gridLayout = new GridLayout(3, false);
gridLayout.marginWidth = 0;
gridLayout.marginHeight = 0;
dataDirComposite.setLayout(gridLayout);
dataDirComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label label = new Label(dataDirComposite, SWT.NULL);
label.setText(Messages.TasksUiPreferencePage_Data_directory_);
String taskDirectory = TasksUiPlugin.getDefault().getDataDirectory();
taskDirectory = taskDirectory.replaceAll(BACKSLASH_MULTI, FORWARDSLASH);
taskDirectoryText = new Text(dataDirComposite, SWT.BORDER);
taskDirectoryText.setText(taskDirectory);
taskDirectoryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
browse = new Button(dataDirComposite, SWT.TRAIL);
browse.setText(Messages.TasksUiPreferencePage_Browse_);
browse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dialog = new DirectoryDialog(getShell());
dialog.setText(Messages.TasksUiPreferencePage_Folder_Selection);
dialog.setMessage(Messages.TasksUiPreferencePage_Specify_the_folder_for_tasks);
String dir = taskDirectoryText.getText();
dir = dir.replaceAll(BACKSLASH_MULTI, FORWARDSLASH);
dialog.setFilterPath(dir);
dir = dialog.open();
if (dir == null || dir.equals("")) { //$NON-NLS-1$
return;
}
dir = dir.replaceAll(BACKSLASH_MULTI, FORWARDSLASH);
taskDirectoryText.setText(dir);
}
});
}
private void createSchedulingGroup(Composite container) {
Group group = new Group(container, SWT.SHADOW_ETCHED_IN);
group.setText(Messages.TasksUiPreferencePage_Scheduling);
group.setLayout(new GridLayout(2, false));
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label weekStartLabel = new Label(group, SWT.NONE);
weekStartLabel.setText(Messages.TasksUiPreferencePage_Week_Start);
weekStartCombo = new Combo(group, SWT.READ_ONLY);
weekStartCombo.add(CommonMessages.Sunday);
weekStartCombo.add(CommonMessages.Monday);
weekStartCombo.add(CommonMessages.Tuesday);
weekStartCombo.add(CommonMessages.Wednesday);
weekStartCombo.add(CommonMessages.Thursday);
weekStartCombo.add(CommonMessages.Friday);
weekStartCombo.add(CommonMessages.Saturday);
weekStartCombo.select(getPreferenceStore().getInt(ITasksUiPreferenceConstants.WEEK_START_DAY) - 1);
Label scheduleNewTasksLabel = new Label(group, SWT.NONE);
scheduleNewTasksLabel.setText(Messages.TasksUiPreferencePage_ScheduleNewTasks);
scheduleNewTasksCombo = new Combo(group, SWT.READ_ONLY);
scheduleNewTasksCombo.add(Messages.TasksUiPreferencePage_ThisWeek);
scheduleNewTasksCombo.add(Messages.TasksUiPreferencePage_Tomorrow);
scheduleNewTasksCombo.add(Messages.TasksUiPreferencePage_Today);
scheduleNewTasksCombo.add(Messages.TasksUiPreferencePage_Unscheduled);
String scheduleFor = getPreferenceStore().getString(ITasksUiPreferenceConstants.SCHEDULE_NEW_TASKS_FOR);
scheduleNewTasksCombo.select(SCHEDULE_TIME_MAP.getOrDefault(scheduleFor, 0));
}
private void createTaskNavigationGroup(Composite parent) {
Group group = new Group(parent, SWT.NONE);
group.setText(Messages.TasksUiPreferencePage_Task_Navigation_Group_Label);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setLayout(new GridLayout());
showTaskTrimButton = new Button(group, SWT.CHECK);
showTaskTrimButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
showTaskTrimButton.setText(Messages.TasksUiPreferencePage_Show_active_task_trim_Button_Label);
showTaskTrimButton.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.SHOW_TRIM));
}
private void createTaskListGroup(Composite container) {
Group group = new Group(container, SWT.SHADOW_ETCHED_IN);
group.setText(Messages.TasksUiPreferencePage_Task_List_Group);
group.setLayout(new GridLayout(1, false));
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
taskListTooltipEnabledButton = new Button(group, SWT.CHECK);
taskListTooltipEnabledButton.setText(Messages.TasksUiPreferencePage_Show_tooltip_on_hover_Label);
taskListTooltipEnabledButton
.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.TASK_LIST_TOOL_TIPS_ENABLED));
taskListServiceMessageEnabledButton = new Button(group, SWT.CHECK);
taskListServiceMessageEnabledButton
.setText(Messages.TasksUiPreferencePage_Notification_for_new_connectors_available_Label);
taskListServiceMessageEnabledButton
.setSelection(getPreferenceStore().getBoolean(ITasksUiPreferenceConstants.SERVICE_MESSAGES_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 = MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getBoolean(MonitorUiPlugin.ACTIVITY_TRACKING_ENABLED);
boolean timeoutEnabled = MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getBoolean(ActivityContextManager.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) {
updateRefreshGroupEnablements();
}
});
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) {
updateRefreshGroupEnablements();
}
});
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 = MonitorUiPlugin.getDefault()
.getPreferenceStore()
.getLong(ActivityContextManager.ACTIVITY_TIMEOUT) / MS_MINUTES;
timeoutMinutes.setSelection((int) minutes);
timeoutMinutes.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateRefreshGroupEnablements();
}
});
timeoutLabel2 = new Label(group, SWT.NONE);
timeoutLabel2.setText(Messages.TasksUiPreferencePage_minutes_of_inactivity);
return group;
}
public void updateRefreshGroupEnablements() {
String errorMessage = null;
boolean synchronizeTaskList = enableFullTaskListSynch.getSelection();
if (synchronizeTaskList) {
errorMessage = validateSynchronizeSchedule(fullSyncScheduleTime);
if (errorMessage == null) {
errorMessage = validateSynchronizeSchedule(relevantTasksSyncScheduleTime);
}
}
setErrorMessage(errorMessage);
setValid(errorMessage == null);
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);
}
boolean synchronizeRelevantTasks = synchronizeTaskList && enableRelevantTasksSynch.getSelection();
enableRelevantTasksSynch.setEnabled(synchronizeTaskList);
fullSyncScheduleTime.setEnabled(synchronizeTaskList);
relevantTasksSyncScheduleTime.setEnabled(synchronizeRelevantTasks);
}
private String validateSynchronizeSchedule(Text synchronizeText) {
String errorMessage = null;
try {
long number = Long.parseLong(synchronizeText.getText());
if (number <= 0) {
errorMessage = Messages.TasksUiPreferencePage_Synchronize_schedule_time_must_be_GT_0;
}
} catch (NumberFormatException e) {
errorMessage = Messages.TasksUiPreferencePage_Synchronize_schedule_time_must_be_valid_integer;
}
return errorMessage;
}
private String toMinutesString(long miliseconds) {
long minutes = miliseconds / 60000;
return Long.toString(minutes);
}
private boolean checkForExistingTasklist(String dir) {
File newDataFolder = new File(dir);
if (!newDataFolder.exists() && !newDataFolder.mkdirs()) {
MessageDialog.openWarning(getControl().getShell(), Messages.TasksUiPreferencePage_Change_data_directory,
Messages.TasksUiPreferencePage_Destination_folder_cannot_be_created);
return false;
}
MessageDialog dialogConfirm = new MessageDialog(null,
Messages.TasksUiPreferencePage_Confirm_Task_List_data_directory_change, null,
Messages.TasksUiPreferencePage_A_new_empty_Task_List_will_be_created_in_the_chosen_directory_if_one_does_not_already_exists,
MessageDialog.WARNING, new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL },
IDialogConstants.CANCEL_ID);
int taskDataDirectoryAction = dialogConfirm.open();
if (taskDataDirectoryAction != IDialogConstants.OK_ID) {
return false;
}
for (TaskEditor taskEditor : TasksUiInternal.getActiveRepositoryTaskEditors()) {
TasksUiInternal.closeTaskEditorInAllPages(taskEditor.getTaskEditorInput().getTask(), true);
}
return true;
}
@Override
public void dispose() {
if (toolkit != null) {
if (toolkit.getColors() != null) {
toolkit.dispose();
}
}
super.dispose();
}
}