/* ********************************************************************** ** ** 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.importer; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; 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.rssowl.core.internal.newsaction.LabelNewsAction; import org.rssowl.core.persist.IFilterAction; import org.rssowl.core.persist.ISearchFilter; import org.rssowl.ui.internal.OwlUI; import org.rssowl.ui.internal.dialogs.welcome.WelcomeWizard; import java.util.Collection; import java.util.List; /** * A {@link WizardPage} to select additionsl options for the import. * * @author bpasero */ public class ImportOptionsPage extends WizardPage { private Button fImportLabelsCheck; private Button fImportFiltersCheck; private Button fImportPreferencesCheck; private boolean fFiltersUseLabels; ImportOptionsPage() { super(Messages.ImportOptionsPage_IMPORT_OPTIONS, Messages.ImportOptionsPage_IMPORT_OPTIONS, null); setMessage(Messages.ImportOptionsPage_SELECT_OPTIONS); } /* * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { /* Title Image */ setImageDescriptor(OwlUI.getImageDescriptor(getWizard() instanceof WelcomeWizard ? "icons/wizban/welcome_wiz.gif" : "icons/wizban/import_wiz.png")); //$NON-NLS-1$ //$NON-NLS-2$ /* Container */ Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(1, false)); /* Info Text */ StyledText infoText = new StyledText(container, SWT.WRAP | SWT.READ_ONLY); infoText.setEnabled(false); infoText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); ((GridData) infoText.getLayoutData()).widthHint = 300; infoText.setBackground(container.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); infoText.setText(Messages.ImportOptionsPage_OPTIONS_INFO); /* Labels */ fImportLabelsCheck = new Button(container, SWT.CHECK); fImportLabelsCheck.setImage(OwlUI.getImage(fImportLabelsCheck, "icons/elcl16/labels.gif")); //$NON-NLS-1$ fImportLabelsCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false)); ((GridData) fImportLabelsCheck.getLayoutData()).verticalIndent = 10; /* Filters */ fImportFiltersCheck = new Button(container, SWT.CHECK); fImportFiltersCheck.setImage(OwlUI.getImage(fImportFiltersCheck, OwlUI.FILTER)); fImportFiltersCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false)); fImportFiltersCheck.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (fImportFiltersCheck.getSelection() && !fImportLabelsCheck.getSelection() && fFiltersUseLabels) { fImportLabelsCheck.setSelection(true); setMessage(Messages.ImportOptionsPage_LABELS_INFO, IMessageProvider.INFORMATION); } else if (!fImportFiltersCheck.getSelection()) { setMessage(Messages.ImportOptionsPage_SELECT_OPTIONS); } } }); /* Preferences */ fImportPreferencesCheck = new Button(container, SWT.CHECK); fImportPreferencesCheck.setImage(OwlUI.getImage(fImportPreferencesCheck, "icons/elcl16/preferences.gif")); //$NON-NLS-1$ fImportPreferencesCheck.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false)); Dialog.applyDialogFont(container); setControl(container); } /* * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean) */ @Override public void setVisible(boolean visible) { /* Updated Checkboxes based on the Imported Elements */ ImportElementsPage elementsPage; if (getPreviousPage() instanceof ImportElementsPage) elementsPage = (ImportElementsPage) getPreviousPage(); else elementsPage = (ImportElementsPage) getPreviousPage().getPreviousPage(); update(elementsPage.getLabelsToImport().size(), elementsPage.getFiltersToImport().size(), !elementsPage.getPreferencesToImport().isEmpty()); fFiltersUseLabels = filtersUseLabels(elementsPage.getFiltersToImport()); super.setVisible(visible); } /* Import Labels */ boolean importLabels() { return fImportLabelsCheck.getSelection(); } /* Import Filters */ boolean importFilters() { return fImportFiltersCheck.getSelection(); } /* Import Preferences */ boolean importPreferences() { return fImportPreferencesCheck.getSelection(); } /* Update Checkboxes based on the given Counter Values */ private void update(int labelCount, int filterCount, boolean hasPreferences) { /* Labels */ if (labelCount != 0) fImportLabelsCheck.setText(NLS.bind(Messages.ImportOptionsPage_IMPORT_N_LABELS, labelCount)); else fImportLabelsCheck.setText(Messages.ImportOptionsPage_IMPORT_LABELS); fImportLabelsCheck.setEnabled(labelCount != 0); /* Filters */ if (filterCount != 0) fImportFiltersCheck.setText(NLS.bind(Messages.ImportOptionsPage_IMPORT_N_FILTERS, filterCount)); else fImportFiltersCheck.setText(Messages.ImportOptionsPage_IMPORT_FILTERS); fImportFiltersCheck.setEnabled(filterCount != 0); /* Preferences */ if (hasPreferences) fImportPreferencesCheck.setText(Messages.ImportOptionsPage_IMPORT_PREFRENCES); else fImportPreferencesCheck.setText(Messages.ImportOptionsPage_IMPORT_PREFERENCES_UNAVAILABLE); fImportPreferencesCheck.setEnabled(hasPreferences); } /* Check if any Filter uses the Label Action */ private boolean filtersUseLabels(Collection<ISearchFilter> filters) { for (ISearchFilter filter : filters) { List<IFilterAction> actions = filter.getActions(); for (IFilterAction action : actions) { if (LabelNewsAction.ID.equals(action.getActionId())) return true; } } return false; } }