/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2009 RSSOwl Development Team **
** http://www.rssowl.org/ **
** **
** 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.rssowl.org/legal/epl-v10.html **
** **
** A copy is found in the file epl-v10.html and important notices to the **
** license from the team is found in the textfile LICENSE.txt distributed **
** in this package. **
** **
** This copyright notice MUST APPEAR in all copies of the file! **
** **
** Contributors: **
** RSSOwl Development Team - initial API and implementation **
** **
** ********************************************************************** */
package org.rssowl.ui.internal.dialogs.preferences;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.persist.pref.DefaultPreferences;
import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.IMark;
import org.rssowl.core.persist.INewsMark;
import org.rssowl.core.persist.pref.IPreferenceScope;
import org.rssowl.core.persist.service.PersistenceException;
import org.rssowl.core.util.CoreUtils;
import org.rssowl.core.util.RetentionStrategy;
import org.rssowl.ui.internal.Controller;
import org.rssowl.ui.internal.FolderNewsMark;
import org.rssowl.ui.internal.LinkTransformer;
import org.rssowl.ui.internal.OwlUI;
import org.rssowl.ui.internal.OwlUI.Layout;
import org.rssowl.ui.internal.OwlUI.PageSize;
import org.rssowl.ui.internal.editors.feed.NewsColumnViewModel;
import org.rssowl.ui.internal.editors.feed.NewsFilter;
import org.rssowl.ui.internal.editors.feed.NewsGrouping;
import org.rssowl.ui.internal.services.FeedReloadService;
import org.rssowl.ui.internal.util.EditorUtils;
import org.rssowl.ui.internal.util.LayoutUtils;
import org.rssowl.ui.internal.util.ModelUtils;
import org.rssowl.ui.internal.util.NewsColumnSelectionControl;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Preferences related to Feeds.
*
* @author bpasero
*/
public class FeedsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
/** ID of the Page */
public static String ID = "org.rssowl.ui.FeedsPreferences"; //$NON-NLS-1$
/* Interval-Scopes in Seconds */
private static final long DAY_IN_SECONDS = 24 * 60 * 60;
private static final long HOUR_IN_SECONDS = 60 * 60;
private static final long MINUTE_IN_SECONDS = 60;
/* Interval-Indeces in Combo */
private static final int SECONDS_SCOPE = 0;
private static final int MINUTES_SCOPE = 1;
private static final int HOURS_SCOPE = 2;
private static final int DAYS_SCOPE = 3;
private IPreferenceScope fGlobalScope;
private FeedReloadService fReloadService;
private Button fUpdateCheck;
private Combo fUpdateScopeCombo;
private Spinner fUpdateValueSpinner;
private Button fOpenOnStartupCheck;
private Button fDeleteNewsByCountCheck;
private Spinner fDeleteNewsByCountValue;
private Button fDeleteNewsByAgeCheck;
private Spinner fDeleteNewsByAgeValue;
private Button fDeleteReadNewsCheck;
private Button fNeverDeleteUnReadNewsCheck;
private Button fNeverDeleteLabeledNewsCheck;
private Button fReloadOnStartupCheck;
private Combo fFilterCombo;
private Combo fGroupCombo;
private Combo fLayoutCombo;
private Combo fPageSizeCombo;
private Button fOpenSiteForEmptyNewsCheck;
private Button fLoadImagesForNewsCheck;
private Button fLoadMediaForNewsCheck;
private Button fDisplayContentsOfNewsRadio;
private Button fOpenLinkOfNewsRadio;
private Button fUseTransformerCheck;
private ComboViewer fLinkTransformerViewer;
private Button fMarkReadStateCheck;
private Spinner fMarkReadAfterSpinner;
private Button fMarkReadOnMinimize;
private Button fMarkReadOnScrolling;
private Button fMarkReadOnChange;
private Button fMarkReadDuplicateNews;
private LocalResourceManager fResources;
private Button fMarkReadOnTabClose;
private NewsColumnSelectionControl fColumnSelectionControl;
/** Leave for reflection */
public FeedsPreferencePage() {
fGlobalScope = Owl.getPreferenceService().getGlobalScope();
fReloadService = Controller.getDefault().getReloadService();
fResources = new LocalResourceManager(JFaceResources.getResources());
setImageDescriptor(OwlUI.BOOKMARK);
}
/*
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {}
/*
* @see org.eclipse.jface.preference.PreferencePage#createControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createControl(Composite parent) {
super.createControl(parent);
updateApplyEnablement(false);
}
/*
* @see org.eclipse.jface.dialogs.DialogPage#dispose()
*/
@Override
public void dispose() {
super.dispose();
fResources.dispose();
}
/*
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createContents(Composite parent) {
Composite container = createComposite(parent);
TabFolder tabFolder = new TabFolder(container, SWT.None);
tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
/* General */
createGeneralGroup(tabFolder);
/* Reading */
createReadingGroup(tabFolder);
/* Display */
createDisplayGroup(tabFolder);
/* Columns */
createColumnsGroup(tabFolder);
/* Clean-Up */
createCleanUpGroup(tabFolder);
/* Info Container */
Composite infoContainer = new Composite(container, SWT.None);
infoContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
infoContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 0));
Label infoImg = new Label(infoContainer, SWT.NONE);
infoImg.setImage(OwlUI.getImage(fResources, "icons/obj16/info.gif")); //$NON-NLS-1$
infoImg.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
Label infoText = new Label(infoContainer, SWT.WRAP);
infoText.setText(Messages.FeedsPreferencePage_PROPERTY_INFO);
infoText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
applyDialogFont(container);
/* Enable Apply Button on Selection Changes */
OwlUI.runOnSelection(new Runnable() {
public void run() {
updateApplyEnablement(true);
}
}, container);
return container;
}
private void createGeneralGroup(TabFolder parent) {
Composite group = new Composite(parent, SWT.NONE);
group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
group.setLayout(LayoutUtils.createGridLayout(1, 10, 10));
TabItem item = new TabItem(parent, SWT.None);
item.setText(Messages.FeedsPreferencePage_GENERAL);
item.setControl(group);
/* Auto-Reload */
Composite autoReloadContainer = new Composite(group, SWT.NONE);
autoReloadContainer.setLayout(LayoutUtils.createGridLayout(3, 0, 0));
autoReloadContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
fUpdateCheck = new Button(autoReloadContainer, SWT.CHECK);
fUpdateCheck.setText(Messages.FeedsPreferencePage_UPDATE_FEEDS);
fUpdateCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.BM_UPDATE_INTERVAL_STATE));
fUpdateCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fUpdateValueSpinner.setEnabled(fUpdateCheck.getSelection());
fUpdateScopeCombo.setEnabled(fUpdateCheck.getSelection());
}
});
fUpdateValueSpinner = new Spinner(autoReloadContainer, SWT.BORDER);
fUpdateValueSpinner.setMinimum(1);
fUpdateValueSpinner.setMaximum(999);
fUpdateValueSpinner.setEnabled(fUpdateCheck.getSelection());
long updateInterval = fGlobalScope.getLong(DefaultPreferences.BM_UPDATE_INTERVAL);
int updateScope = getUpdateIntervalScope();
if (updateScope == SECONDS_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval));
else if (updateScope == MINUTES_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval / MINUTE_IN_SECONDS));
else if (updateScope == HOURS_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval / HOUR_IN_SECONDS));
else if (updateScope == DAYS_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval / DAY_IN_SECONDS));
fUpdateScopeCombo = new Combo(autoReloadContainer, SWT.READ_ONLY);
fUpdateScopeCombo.add(Messages.FeedsPreferencePage_INTERVAL_SECONDS);
fUpdateScopeCombo.add(Messages.FeedsPreferencePage_MINUTES);
fUpdateScopeCombo.add(Messages.FeedsPreferencePage_HOURS);
fUpdateScopeCombo.add(Messages.FeedsPreferencePage_DAYS);
fUpdateScopeCombo.select(updateScope);
fUpdateScopeCombo.setEnabled(fUpdateCheck.getSelection());
/* Reload Feeds on Startup */
fReloadOnStartupCheck = new Button(group, SWT.CHECK);
fReloadOnStartupCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
fReloadOnStartupCheck.setText(Messages.FeedsPreferencePage_UPDATE_ON_STARTUP);
fReloadOnStartupCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.BM_RELOAD_ON_STARTUP));
/* Open on Startup */
fOpenOnStartupCheck = new Button(group, SWT.CHECK);
fOpenOnStartupCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
((GridData)fOpenOnStartupCheck.getLayoutData()).exclude = true; //Disabled due to performance issues opening 100 feeds at once
fOpenOnStartupCheck.setText(Messages.FeedsPreferencePage_DISPLAY_ON_STARTUP);
fOpenOnStartupCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.BM_OPEN_ON_STARTUP));
}
private void createReadingGroup(TabFolder parent) {
Composite group = new Composite(parent, SWT.NONE);
group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
group.setLayout(LayoutUtils.createGridLayout(1, 10, 10));
TabItem item = new TabItem(parent, SWT.None);
item.setText(Messages.FeedsPreferencePage_READING);
item.setControl(group);
/* Mark read after millis */
Composite markReadAfterContainer = new Composite(group, SWT.None);
markReadAfterContainer.setLayout(LayoutUtils.createGridLayout(3, 0, 0));
/* Mark Read after Millis */
fMarkReadStateCheck = new Button(markReadAfterContainer, SWT.CHECK);
fMarkReadStateCheck.setText(Messages.FeedsPreferencePage_MARK_READ_AFTER);
fMarkReadStateCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.MARK_READ_STATE));
fMarkReadStateCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fMarkReadAfterSpinner.setEnabled(fMarkReadStateCheck.getSelection());
}
});
fMarkReadAfterSpinner = new Spinner(markReadAfterContainer, SWT.BORDER);
fMarkReadAfterSpinner.setMinimum(0);
fMarkReadAfterSpinner.setMaximum(100);
fMarkReadAfterSpinner.setSelection(fGlobalScope.getInteger(DefaultPreferences.MARK_READ_IN_MILLIS) / 1000);
fMarkReadAfterSpinner.setEnabled(fMarkReadStateCheck.getSelection());
Label label = new Label(markReadAfterContainer, SWT.None);
label.setText(Messages.FeedsPreferencePage_SECONDS);
/* Mark Read on Scrolling */
fMarkReadOnScrolling = new Button(group, SWT.CHECK);
fMarkReadOnScrolling.setText(Messages.FeedsPreferencePage_MARK_READ_ON_SCROLLING);
fMarkReadOnScrolling.setSelection(fGlobalScope.getBoolean(DefaultPreferences.MARK_READ_ON_SCROLLING));
/* Mark Read on changing displayed Feed */
fMarkReadOnChange = new Button(group, SWT.CHECK);
fMarkReadOnChange.setText(Messages.FeedsPreferencePage_MARK_READ_ON_SWITCH);
fMarkReadOnChange.setSelection(fGlobalScope.getBoolean(DefaultPreferences.MARK_READ_ON_CHANGE));
/* Mark Read on closing the Feed Tab */
fMarkReadOnTabClose = new Button(group, SWT.CHECK);
fMarkReadOnTabClose.setText(Messages.FeedsPreferencePage_MARK_READ_ON_CLOSE);
fMarkReadOnTabClose.setSelection(fGlobalScope.getBoolean(DefaultPreferences.MARK_READ_ON_TAB_CLOSE));
/* Mark Read on Minimize */
fMarkReadOnMinimize = new Button(group, SWT.CHECK);
fMarkReadOnMinimize.setText(Messages.FeedsPreferencePage_MARK_READ_ON_MINIMIZE);
fMarkReadOnMinimize.setSelection(fGlobalScope.getBoolean(DefaultPreferences.MARK_READ_ON_MINIMIZE));
/* Mark Read Duplicates (including description) */
Composite markReadDuplicatesContainer = new Composite(group, SWT.NONE);
markReadDuplicatesContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
markReadDuplicatesContainer.setLayout(LayoutUtils.createGridLayout(1, 0, 0));
((GridLayout) markReadDuplicatesContainer.getLayout()).marginTop = 10;
label = new Label(markReadDuplicatesContainer, SWT.NONE);
label.setText(Messages.FeedsPreferencePage_UPDATE_DUPLICATE_LABEL);
label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
Label infoText = new Label(markReadDuplicatesContainer, SWT.WRAP);
infoText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
((GridData) infoText.getLayoutData()).widthHint = 200;
infoText.setText(Messages.FeedsPreferencePage_UPDATE_DUPLICATES_DESCRIPTION);
fMarkReadDuplicateNews = new Button(markReadDuplicatesContainer, SWT.CHECK);
fMarkReadDuplicateNews.setText(Messages.FeedsPreferencePage_UPDATE_DUPLICATES);
fMarkReadDuplicateNews.setSelection(fGlobalScope.getBoolean(DefaultPreferences.MARK_READ_DUPLICATES));
fMarkReadDuplicateNews.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
}
private void createDisplayGroup(TabFolder parent) {
Composite group = new Composite(parent, SWT.NONE);
group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
group.setLayout(LayoutUtils.createGridLayout(2, 10, 10));
TabItem item = new TabItem(parent, SWT.None);
item.setText(Messages.FeedsPreferencePage_DISPLAY);
item.setControl(group);
Composite topContainer = new Composite(group, SWT.None);
topContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 0, 5, 15, false));
topContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
/* Layout Settings */
Label layoutLabel = new Label(topContainer, SWT.None);
layoutLabel.setText(Messages.FeedsPreferencePage_LAYOUT);
Composite layoutContainer = new Composite(topContainer, SWT.None);
layoutContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
layoutContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 0, 0, 5, false));
fLayoutCombo = new Combo(layoutContainer, SWT.BORDER | SWT.READ_ONLY);
fLayoutCombo.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
for (Layout layout : Layout.values()) {
fLayoutCombo.add(layout.getName());
}
fLayoutCombo.select(fGlobalScope.getInteger(DefaultPreferences.FV_LAYOUT));
fLayoutCombo.setVisibleItemCount(fLayoutCombo.getItemCount());
fLayoutCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateDisplayButtons();
}
});
/* Layout Page Size */
fPageSizeCombo = new Combo(layoutContainer, SWT.BORDER | SWT.READ_ONLY);
fPageSizeCombo.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
for (PageSize pageSize : PageSize.values()) {
fPageSizeCombo.add(pageSize.getName());
}
fPageSizeCombo.select(PageSize.from(fGlobalScope.getInteger(DefaultPreferences.NEWS_BROWSER_PAGE_SIZE)).ordinal());
fPageSizeCombo.setVisibleItemCount(fPageSizeCombo.getItemCount());
/* Filter Settings */
Label filterLabel = new Label(topContainer, SWT.None);
filterLabel.setText(Messages.FeedsPreferencePage_FILTER_NEWS);
fFilterCombo = new Combo(topContainer, SWT.BORDER | SWT.READ_ONLY);
fFilterCombo.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
NewsFilter.Type[] filters = NewsFilter.Type.values();
for (NewsFilter.Type filter : filters)
fFilterCombo.add(filter.getName());
fFilterCombo.select(ModelUtils.loadIntegerValueWithFallback(fGlobalScope, DefaultPreferences.BM_NEWS_FILTERING, fGlobalScope, DefaultPreferences.FV_FILTER_TYPE));
fFilterCombo.setVisibleItemCount(fFilterCombo.getItemCount());
/* Group Settings */
Label groupLabel = new Label(topContainer, SWT.None);
groupLabel.setText(Messages.FeedsPreferencePage_GROUP_NEWS);
fGroupCombo = new Combo(topContainer, SWT.BORDER | SWT.READ_ONLY);
fGroupCombo.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
NewsGrouping.Type[] groups = NewsGrouping.Type.values();
for (NewsGrouping.Type groupT : groups)
fGroupCombo.add(groupT.getName());
fGroupCombo.select(ModelUtils.loadIntegerValueWithFallback(fGlobalScope, DefaultPreferences.BM_NEWS_GROUPING, fGlobalScope, DefaultPreferences.FV_GROUP_TYPE));
fGroupCombo.setVisibleItemCount(fGroupCombo.getItemCount());
Composite bottomContainer = new Composite(group, SWT.None);
bottomContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 10));
bottomContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
/* Display Content of News */
fDisplayContentsOfNewsRadio = new Button(bottomContainer, SWT.RADIO);
fDisplayContentsOfNewsRadio.setText(Messages.FeedsPreferencePage_DISPLAY_NEWS_CONTENT);
fDisplayContentsOfNewsRadio.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
fDisplayContentsOfNewsRadio.setSelection(!fGlobalScope.getBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_NEWS));
Composite bottomSubContainer = new Composite(bottomContainer, SWT.None);
bottomSubContainer.setLayout(LayoutUtils.createGridLayout(1, 0, 5));
bottomSubContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
((GridLayout) bottomSubContainer.getLayout()).marginLeft = 15;
/* Load Images */
fLoadImagesForNewsCheck = new Button(bottomSubContainer, SWT.CHECK);
fLoadImagesForNewsCheck.setText(Messages.FeedsPreferencePage_LOAD_IMAGES);
fLoadImagesForNewsCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
fLoadImagesForNewsCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.ENABLE_IMAGES));
/* Load other Media and Flash Content */
fLoadMediaForNewsCheck= new Button(bottomSubContainer, SWT.CHECK);
fLoadMediaForNewsCheck.setText(Messages.FeedsPreferencePage_LOAD_MEDIA);
fLoadMediaForNewsCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false));
fLoadMediaForNewsCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.ENABLE_MEDIA));
/* Open Link of News */
fOpenLinkOfNewsRadio = new Button(bottomContainer, SWT.RADIO);
fOpenLinkOfNewsRadio.setText(Messages.FeedsPreferencePage_OPEN_NEWS_LINK);
fOpenLinkOfNewsRadio.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
fOpenLinkOfNewsRadio.setSelection(fGlobalScope.getBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_NEWS));
fOpenLinkOfNewsRadio.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateDisplayButtons();
}
});
bottomSubContainer = new Composite(bottomContainer, SWT.None);
bottomSubContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 5));
bottomSubContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
((GridLayout) bottomSubContainer.getLayout()).marginLeft = 15;
/* Open Link only when content is empty */
fOpenSiteForEmptyNewsCheck = new Button(bottomSubContainer, SWT.CHECK);
fOpenSiteForEmptyNewsCheck.setText(Messages.FeedsPreferencePage_ONLY_WHEN_EMPTY);
fOpenSiteForEmptyNewsCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, false, false, 2, 1));
fOpenSiteForEmptyNewsCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_EMPTY_NEWS));
fOpenSiteForEmptyNewsCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateDisplayButtons();
}
});
/* Use Link Transformer */
fUseTransformerCheck = new Button(bottomSubContainer, SWT.CHECK);
fUseTransformerCheck.setText(Messages.FeedsPreferencePage_USE_TRANSFORMER);
fUseTransformerCheck.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
fUseTransformerCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.BM_USE_TRANSFORMER));
fUseTransformerCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateDisplayButtons();
}
});
/* Selected Link Transformer */
Combo linkTransformerCombo = new Combo(bottomSubContainer, SWT.READ_ONLY | SWT.BORDER);
linkTransformerCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
fLinkTransformerViewer = new ComboViewer(linkTransformerCombo);
fLinkTransformerViewer.setContentProvider(new ArrayContentProvider());
fLinkTransformerViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return ((LinkTransformer) element).getName();
}
});
fLinkTransformerViewer.setInput(Controller.getDefault().getLinkTransformers());
fLinkTransformerViewer.setSelection(new StructuredSelection(Controller.getDefault().getLinkTransformer(fGlobalScope)));
updateDisplayButtons(false);
}
private void updateDisplayButtons() {
updateDisplayButtons(true);
}
private void updateDisplayButtons(boolean layout) {
boolean isNewspaperLayout = (fLayoutCombo.getSelectionIndex() == Layout.NEWSPAPER.ordinal() || fLayoutCombo.getSelectionIndex() == Layout.HEADLINES.ordinal());
boolean isListLayout = (fLayoutCombo.getSelectionIndex() == Layout.LIST.ordinal());
/* Force selection to first radio if using newspaper layout */
if (isNewspaperLayout && !fDisplayContentsOfNewsRadio.getSelection()) {
fDisplayContentsOfNewsRadio.setSelection(true);
fOpenLinkOfNewsRadio.setSelection(false);
}
/* Update Enablement */
fDisplayContentsOfNewsRadio.setEnabled(!isListLayout);
fLoadImagesForNewsCheck.setEnabled(!isListLayout && (fDisplayContentsOfNewsRadio.getSelection() || fOpenSiteForEmptyNewsCheck.getSelection()));
fLoadMediaForNewsCheck.setEnabled(!isListLayout && (fDisplayContentsOfNewsRadio.getSelection() || fOpenSiteForEmptyNewsCheck.getSelection()));
fOpenLinkOfNewsRadio.setEnabled(!isListLayout && !isNewspaperLayout);
fOpenSiteForEmptyNewsCheck.setEnabled(!isListLayout && !isNewspaperLayout && fOpenLinkOfNewsRadio.getSelection());
fUseTransformerCheck.setEnabled(!isListLayout && !isNewspaperLayout && fOpenLinkOfNewsRadio.getSelection());
fLinkTransformerViewer.getCombo().setEnabled(!isListLayout && !isNewspaperLayout && fOpenLinkOfNewsRadio.getSelection() && fUseTransformerCheck.getSelection());
/* Update Layout */
GridData data = (GridData) fLayoutCombo.getLayoutData();
data.horizontalSpan = isNewspaperLayout ? 1 : 2;
data = (GridData) fPageSizeCombo.getLayoutData();
data.exclude = !isNewspaperLayout;
if (layout)
fPageSizeCombo.getParent().getParent().layout(true, true);
}
private void createColumnsGroup(TabFolder parent) {
Composite group = new Composite(parent, SWT.NONE);
group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
group.setLayout(LayoutUtils.createGridLayout(1, 10, 10));
TabItem item = new TabItem(parent, SWT.None);
item.setText(Messages.FeedsPreferencePage_COLUMNS);
item.setControl(group);
fColumnSelectionControl = new NewsColumnSelectionControl(group, SWT.NONE);
fColumnSelectionControl.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
fColumnSelectionControl.setInput(NewsColumnViewModel.loadFrom(fGlobalScope));
}
private void createCleanUpGroup(TabFolder parent) {
Composite group = new Composite(parent, SWT.NONE);
group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
group.setLayout(LayoutUtils.createGridLayout(2, 10, 10, 5, 5, false));
TabItem item = new TabItem(parent, SWT.None);
item.setText(Messages.FeedsPreferencePage_CLEAN_UP);
item.setControl(group);
/* Explanation Label */
Label explanationLabel = new Label(group, SWT.WRAP);
explanationLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
explanationLabel.setText(Messages.FeedsPreferencePage_CLEAN_UP_INFO);
/* Delete by Count */
fDeleteNewsByCountCheck = new Button(group, SWT.CHECK);
fDeleteNewsByCountCheck.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
fDeleteNewsByCountCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE));
fDeleteNewsByCountCheck.setText(Messages.FeedsPreferencePage_MAX_NUMBER);
fDeleteNewsByCountCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fDeleteNewsByCountValue.setEnabled(fDeleteNewsByCountCheck.getSelection());
}
});
fDeleteNewsByCountValue = new Spinner(group, SWT.BORDER);
fDeleteNewsByCountValue.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
fDeleteNewsByCountValue.setEnabled(fDeleteNewsByCountCheck.getSelection());
fDeleteNewsByCountValue.setMinimum(0);
fDeleteNewsByCountValue.setMaximum(99999);
fDeleteNewsByCountValue.setSelection(fGlobalScope.getInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE));
/* Delete by Age */
fDeleteNewsByAgeCheck = new Button(group, SWT.CHECK);
fDeleteNewsByAgeCheck.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
fDeleteNewsByAgeCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE));
fDeleteNewsByAgeCheck.setText(Messages.FeedsPreferencePage_MAX_AGE);
fDeleteNewsByAgeCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fDeleteNewsByAgeValue.setEnabled(fDeleteNewsByAgeCheck.getSelection());
}
});
fDeleteNewsByAgeValue = new Spinner(group, SWT.BORDER);
fDeleteNewsByAgeValue.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
fDeleteNewsByAgeValue.setEnabled(fDeleteNewsByAgeCheck.getSelection());
fDeleteNewsByAgeValue.setMinimum(0);
fDeleteNewsByAgeValue.setMaximum(99999);
fDeleteNewsByAgeValue.setSelection(fGlobalScope.getInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE));
/* Delete by State */
fDeleteReadNewsCheck = new Button(group, SWT.CHECK);
fDeleteReadNewsCheck.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1));
fDeleteReadNewsCheck.setText(Messages.FeedsPreferencePage_DELETE_READ);
fDeleteReadNewsCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.DEL_READ_NEWS_STATE));
/* Never Delete Unread State */
fNeverDeleteUnReadNewsCheck = new Button(group, SWT.CHECK);
fNeverDeleteUnReadNewsCheck.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1));
fNeverDeleteUnReadNewsCheck.setText(Messages.FeedsPreferencePage_NEVER_DELETE_UNREAD);
fNeverDeleteUnReadNewsCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE));
/* Never Delete Labeled State */
fNeverDeleteLabeledNewsCheck = new Button(group, SWT.CHECK);
fNeverDeleteLabeledNewsCheck.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1));
fNeverDeleteLabeledNewsCheck.setText(Messages.FeedsPreferencePage_NEVER_DELETE_LABELED);
fNeverDeleteLabeledNewsCheck.setSelection(fGlobalScope.getBoolean(DefaultPreferences.NEVER_DEL_LABELED_NEWS_STATE));
/* Info Container */
Composite infoContainer = new Composite(group, SWT.None);
infoContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
infoContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 0));
((GridLayout) infoContainer.getLayout()).marginTop = 5;
Label infoImg = new Label(infoContainer, SWT.NONE);
infoImg.setImage(OwlUI.getImage(fResources, "icons/obj16/info.gif")); //$NON-NLS-1$
infoImg.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
Label infoText = new Label(infoContainer, SWT.WRAP);
infoText.setText(Messages.FeedsPreferencePage_CLEAN_UP_NOTE);
infoText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
}
private Composite createComposite(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
composite.setFont(parent.getFont());
return composite;
}
/*
* @see org.eclipse.jface.preference.PreferencePage#performOk()
*/
@Override
public boolean performOk() {
/* Track Changes */
boolean autoUpdateChange = false;
boolean displayChange = false;
boolean layoutChange = false;
boolean columnChange = false;
boolean runCleanUp = false;
/* General */
long lVal;
int updateScope = fUpdateScopeCombo.getSelectionIndex();
if (updateScope == SECONDS_SCOPE)
lVal = fUpdateValueSpinner.getSelection();
else if (updateScope == MINUTES_SCOPE)
lVal = fUpdateValueSpinner.getSelection() * MINUTE_IN_SECONDS;
else if (updateScope == HOURS_SCOPE)
lVal = fUpdateValueSpinner.getSelection() * HOUR_IN_SECONDS;
else
lVal = fUpdateValueSpinner.getSelection() * DAY_IN_SECONDS;
if (fGlobalScope.getBoolean(DefaultPreferences.BM_UPDATE_INTERVAL_STATE) != fUpdateCheck.getSelection()) {
autoUpdateChange = true;
fGlobalScope.putBoolean(DefaultPreferences.BM_UPDATE_INTERVAL_STATE, fUpdateCheck.getSelection());
}
if (fGlobalScope.getLong(DefaultPreferences.BM_UPDATE_INTERVAL) != lVal) {
autoUpdateChange = true;
fGlobalScope.putLong(DefaultPreferences.BM_UPDATE_INTERVAL, lVal);
}
fGlobalScope.putBoolean(DefaultPreferences.BM_OPEN_ON_STARTUP, fOpenOnStartupCheck.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.BM_RELOAD_ON_STARTUP, fReloadOnStartupCheck.getSelection());
/* Reading */
fGlobalScope.putBoolean(DefaultPreferences.MARK_READ_ON_SCROLLING, fMarkReadOnScrolling.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.MARK_READ_ON_MINIMIZE, fMarkReadOnMinimize.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.MARK_READ_ON_CHANGE, fMarkReadOnChange.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.MARK_READ_ON_TAB_CLOSE, fMarkReadOnTabClose.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.MARK_READ_STATE, fMarkReadStateCheck.getSelection());
fGlobalScope.putInteger(DefaultPreferences.MARK_READ_IN_MILLIS, fMarkReadAfterSpinner.getSelection() * 1000);
fGlobalScope.putBoolean(DefaultPreferences.MARK_READ_DUPLICATES, fMarkReadDuplicateNews.getSelection());
/* Display */
if (ModelUtils.loadIntegerValueWithFallback(fGlobalScope, DefaultPreferences.BM_NEWS_FILTERING, fGlobalScope, DefaultPreferences.FV_FILTER_TYPE) != (fFilterCombo.getSelectionIndex())) {
fGlobalScope.putInteger(DefaultPreferences.BM_NEWS_FILTERING, fFilterCombo.getSelectionIndex());
displayChange = true;
}
if (ModelUtils.loadIntegerValueWithFallback(fGlobalScope, DefaultPreferences.BM_NEWS_GROUPING, fGlobalScope, DefaultPreferences.FV_GROUP_TYPE) != (fGroupCombo.getSelectionIndex())) {
fGlobalScope.putInteger(DefaultPreferences.BM_NEWS_GROUPING, fGroupCombo.getSelectionIndex());
displayChange = true;
}
int iVal = fLayoutCombo.getSelectionIndex();
if (fGlobalScope.getInteger(DefaultPreferences.FV_LAYOUT) != iVal) {
fGlobalScope.putInteger(DefaultPreferences.FV_LAYOUT, iVal);
layoutChange = true;
}
iVal = fPageSizeCombo.getSelectionIndex();
PageSize size = PageSize.values()[iVal];
if (fGlobalScope.getInteger(DefaultPreferences.NEWS_BROWSER_PAGE_SIZE) != size.getPageSize())
fGlobalScope.putInteger(DefaultPreferences.NEWS_BROWSER_PAGE_SIZE, size.getPageSize());
fGlobalScope.putBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_NEWS, fOpenLinkOfNewsRadio.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_EMPTY_NEWS, fOpenSiteForEmptyNewsCheck.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.ENABLE_IMAGES, fLoadImagesForNewsCheck.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.ENABLE_MEDIA, fLoadMediaForNewsCheck.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.BM_USE_TRANSFORMER, fUseTransformerCheck.getSelection());
IStructuredSelection selection = (IStructuredSelection) fLinkTransformerViewer.getSelection();
if (!selection.isEmpty()) {
LinkTransformer transformer = (LinkTransformer) selection.getFirstElement();
fGlobalScope.putString(DefaultPreferences.BM_TRANSFORMER_ID, transformer.getId());
}
/* Columns */
columnChange = fColumnSelectionControl.getModel().saveTo(fGlobalScope);
/* Clean-Up */
if (fGlobalScope.getBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE) != fDeleteNewsByCountCheck.getSelection()) {
fGlobalScope.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, fDeleteNewsByCountCheck.getSelection());
if (fDeleteNewsByCountCheck.getSelection())
runCleanUp = true;
}
if (fGlobalScope.getInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE) != fDeleteNewsByCountValue.getSelection()) {
fGlobalScope.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, fDeleteNewsByCountValue.getSelection());
runCleanUp = true;
}
if (fGlobalScope.getBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE) != fDeleteNewsByAgeCheck.getSelection()) {
fGlobalScope.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, fDeleteNewsByAgeCheck.getSelection());
if (fDeleteNewsByAgeCheck.getSelection())
runCleanUp = true;
}
if (fGlobalScope.getInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE) != fDeleteNewsByAgeValue.getSelection()) {
fGlobalScope.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, fDeleteNewsByAgeValue.getSelection());
runCleanUp = true;
}
if (fGlobalScope.getBoolean(DefaultPreferences.DEL_READ_NEWS_STATE) != fDeleteReadNewsCheck.getSelection()) {
fGlobalScope.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, fDeleteReadNewsCheck.getSelection());
if (fDeleteReadNewsCheck.getSelection())
runCleanUp = true;
}
fGlobalScope.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, fNeverDeleteUnReadNewsCheck.getSelection());
fGlobalScope.putBoolean(DefaultPreferences.NEVER_DEL_LABELED_NEWS_STATE, fNeverDeleteLabeledNewsCheck.getSelection());
/* Run certain tasks now */
finish(autoUpdateChange, displayChange, layoutChange, columnChange, runCleanUp);
return super.performOk();
}
/*
* @see org.eclipse.jface.preference.PreferencePage#performApply()
*/
@Override
protected void performApply() {
super.performApply();
updateApplyEnablement(false);
}
private void finish(boolean autoUpdateChange, boolean displayChange, boolean layoutChange, boolean columnChange, boolean runCleanup) throws PersistenceException {
final Collection<IFolder> rootFolders = CoreUtils.loadRootFolders();
/* Inform Reload Service about update-change */
if (autoUpdateChange) {
for (IFolder rootFolder : rootFolders) {
updateReloadService(rootFolder);
}
}
/* Inform open editors about layout-change */
if (layoutChange)
EditorUtils.updateLayout();
/* Inform open editors about display-change */
if (displayChange)
EditorUtils.updateFilterAndGrouping();
/* Inform open editors about columns-change */
if (columnChange)
EditorUtils.updateColumns();
/* Perform clean-up on all BookMarks */
if (runCleanup) {
final INewsMark activeFeedViewNewsMark = OwlUI.getActiveFeedViewNewsMark();
Job retentionJob = new Job(Messages.FeedsPreferencePage_PERFORMNG_CLEANUP) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
Set<IBookMark> bookmarks = new HashSet<IBookMark>();
CoreUtils.fillBookMarks(bookmarks, rootFolders);
monitor.beginTask(Messages.FeedsPreferencePage_PERFORMNG_CLEANUP, bookmarks.size());
for (IBookMark bookmark : bookmarks) {
if (Controller.getDefault().isShuttingDown() || monitor.isCanceled())
break;
/* Check if retention should run or not */
if (activeFeedViewNewsMark != null) {
if (activeFeedViewNewsMark.equals(bookmark))
continue; //Avoid clean up on feed the user is reading on
else if (activeFeedViewNewsMark instanceof FolderNewsMark && ((FolderNewsMark) activeFeedViewNewsMark).contains(bookmark))
continue; //Avoid clean up on folder the user is reading on if feed contained
}
monitor.subTask(bookmark.getName());
RetentionStrategy.process(bookmark);
monitor.worked(1);
}
} finally {
monitor.done();
}
return Status.OK_STATUS;
}
};
retentionJob.schedule();
}
}
private void updateReloadService(IFolder folder) {
List<IMark> marks = folder.getMarks();
for (IMark mark : marks) {
if (mark instanceof IBookMark)
fReloadService.sync(((IBookMark) mark));
}
List<IFolder> childFolders = folder.getFolders();
for (IFolder childFolder : childFolders) {
updateReloadService(childFolder);
}
}
/*
* @see org.eclipse.jface.preference.PreferencePage#performDefaults()
*/
@Override
protected void performDefaults() {
super.performDefaults();
IPreferenceScope defaultScope = Owl.getPreferenceService().getDefaultScope();
/* General */
fUpdateCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.BM_UPDATE_INTERVAL_STATE));
fUpdateValueSpinner.setEnabled(fUpdateCheck.getSelection());
fUpdateScopeCombo.setEnabled(fUpdateCheck.getSelection());
long updateInterval = defaultScope.getLong(DefaultPreferences.BM_UPDATE_INTERVAL);
int updateScope = getUpdateIntervalScope();
if (updateScope == SECONDS_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval));
else if (updateScope == MINUTES_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval / MINUTE_IN_SECONDS));
else if (updateScope == HOURS_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval / HOUR_IN_SECONDS));
else if (updateScope == DAYS_SCOPE)
fUpdateValueSpinner.setSelection((int) (updateInterval / DAY_IN_SECONDS));
fUpdateScopeCombo.select(updateScope);
fOpenOnStartupCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.BM_OPEN_ON_STARTUP));
fReloadOnStartupCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.BM_RELOAD_ON_STARTUP));
/* Reading */
fMarkReadOnScrolling.setSelection(defaultScope.getBoolean(DefaultPreferences.MARK_READ_ON_SCROLLING));
fMarkReadOnMinimize.setSelection(defaultScope.getBoolean(DefaultPreferences.MARK_READ_ON_MINIMIZE));
fMarkReadOnChange.setSelection(defaultScope.getBoolean(DefaultPreferences.MARK_READ_ON_CHANGE));
fMarkReadOnTabClose.setSelection(defaultScope.getBoolean(DefaultPreferences.MARK_READ_ON_TAB_CLOSE));
fMarkReadStateCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.MARK_READ_STATE));
fMarkReadAfterSpinner.setSelection(defaultScope.getInteger(DefaultPreferences.MARK_READ_IN_MILLIS) / 1000);
fMarkReadAfterSpinner.setEnabled(fMarkReadStateCheck.getSelection());
fMarkReadDuplicateNews.setSelection(defaultScope.getBoolean(DefaultPreferences.MARK_READ_DUPLICATES));
/* Display */
fFilterCombo.select(ModelUtils.loadIntegerValueWithFallback(defaultScope, DefaultPreferences.BM_NEWS_FILTERING, defaultScope, DefaultPreferences.FV_FILTER_TYPE));
fGroupCombo.select(ModelUtils.loadIntegerValueWithFallback(defaultScope, DefaultPreferences.BM_NEWS_GROUPING, defaultScope, DefaultPreferences.FV_GROUP_TYPE));
fLayoutCombo.select(defaultScope.getInteger(DefaultPreferences.FV_LAYOUT));
fPageSizeCombo.select(PageSize.from(defaultScope.getInteger(DefaultPreferences.NEWS_BROWSER_PAGE_SIZE)).ordinal());
fDisplayContentsOfNewsRadio.setSelection(!defaultScope.getBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_NEWS));
fOpenLinkOfNewsRadio.setSelection(defaultScope.getBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_NEWS));
fOpenSiteForEmptyNewsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.BM_OPEN_SITE_FOR_EMPTY_NEWS));
fLoadImagesForNewsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.ENABLE_IMAGES));
fLoadMediaForNewsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.ENABLE_MEDIA));
fUseTransformerCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.BM_USE_TRANSFORMER));
fLinkTransformerViewer.setSelection(new StructuredSelection(Controller.getDefault().getLinkTransformer(defaultScope)));
updateDisplayButtons();
/* Columns */
fColumnSelectionControl.setInput(NewsColumnViewModel.loadFrom(defaultScope));
/* Clean-Up */
fDeleteNewsByCountCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE));
fDeleteNewsByCountValue.setSelection(defaultScope.getInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE));
fDeleteNewsByCountValue.setEnabled(fDeleteNewsByCountCheck.getSelection());
fDeleteNewsByAgeCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE));
fDeleteNewsByAgeValue.setSelection(defaultScope.getInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE));
fDeleteNewsByAgeValue.setEnabled(fDeleteNewsByAgeCheck.getSelection());
fDeleteReadNewsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.DEL_READ_NEWS_STATE));
fNeverDeleteUnReadNewsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE));
fNeverDeleteLabeledNewsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.NEVER_DEL_LABELED_NEWS_STATE));
updateApplyEnablement(true);
}
private int getUpdateIntervalScope() {
long updateInterval = fGlobalScope.getLong(DefaultPreferences.BM_UPDATE_INTERVAL);
if (updateInterval % DAY_IN_SECONDS == 0)
return DAYS_SCOPE;
if (updateInterval % HOUR_IN_SECONDS == 0)
return HOURS_SCOPE;
if (updateInterval % MINUTE_IN_SECONDS == 0)
return MINUTES_SCOPE;
return SECONDS_SCOPE;
}
private void updateApplyEnablement(boolean enable) {
Button applyButton = getApplyButton();
if (applyButton != null && !applyButton.isDisposed() && applyButton.isEnabled() != enable)
applyButton.setEnabled(enable);
}
}