Package org.rssowl.ui.internal.dialogs.preferences

Source Code of org.rssowl.ui.internal.dialogs.preferences.MiscPreferencePage

/*   **********************************************************************  **
**   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.jface.preference.PreferencePage;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.OpenStrategy;
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.Label;
import org.eclipse.swt.widgets.Spinner;
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.pref.IPreferenceScope;
import org.rssowl.ui.internal.Application;
import org.rssowl.ui.internal.OwlUI;
import org.rssowl.ui.internal.editors.feed.FeedView;
import org.rssowl.ui.internal.util.LayoutUtils;

import java.util.List;

/**
* Container for all Preferences that have not yet been categorized.
*
* @author bpasero
*/
public class MiscPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

  /** ID of this Preferences Page */
  public static final String ID = "org.rssowl.ui.MiscPreferences"; //$NON-NLS-1$

  private IPreferenceScope fGlobalScope;
  private IPreferenceScope fEclipseScope;
  private Button fBrowserMaximizedLayoutRadio;
  private Button fVerticalLayoutRadio;
  private Button fClassicLayoutRadio;
  private Button fMinimizeToTray;
  private Button fMoveToTrayOnStart;
  private Button fMoveToTrayOnExit;
  private Spinner fAutoCloseTabsSpinner;
  private Button fAutoCloseTabsCheck;
  private Button fUseMultipleTabsCheck;
  private Button fReopenFeedsOnStartupCheck;
  private Button fAlwaysReuseFeedView;
  private Button fOpenOnSingleClick;
  private Button fUpdateOnStartup;
  private Button fAggregateNewsAsSearch;
  private Button fSingleClickRestore;
  private Button fDoubleClickRestore;

  /** Leave for reflection */
  public MiscPreferencePage() {
    fGlobalScope = Owl.getPreferenceService().getGlobalScope();
    fEclipseScope = Owl.getPreferenceService().getEclipseScope();
    setImageDescriptor(OwlUI.getImageDescriptor("icons/elcl16/view.gif")); //$NON-NLS-1$
  }

  /**
   * @param title
   */
  public MiscPreferencePage(String title) {
    super(title);
  }

  /*
   * @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.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
   */
  @Override
  protected Control createContents(Composite parent) {
    Composite container = createComposite(parent);

    /* Layout Options */
    createLayoutOptions(container);

    /* Tab Options */
    createTabOptions(container);

    /* System Tray Options */
    if (!Application.IS_ECLIPSE)
      createTrayOptions(container);

    /* Misc Options */
    createMiscOptions(container);

    applyDialogFont(container);

    /* Enable Apply Button on Selection Changes */
    OwlUI.runOnSelection(new Runnable() {
      public void run() {
        updateApplyEnablement(true);
      }
    }, container);

    return container;
  }

  private void createLayoutOptions(Composite container) {
    boolean browserMaximized = fGlobalScope.getBoolean(DefaultPreferences.FV_BROWSER_MAXIMIZED);

    Label label = new Label(container, SWT.NONE);
    label.setText(Messages.MiscPreferencePage_LAYOUT);
    label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));

    /* Group */
    Composite group = new Composite(container, SWT.None);
    group.setLayout(LayoutUtils.createGridLayout(3, 7, 3));
    ((GridLayout) group.getLayout()).marginBottom = 5;
    group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

    fClassicLayoutRadio = new Button(group, SWT.RADIO);
    fClassicLayoutRadio.setText(Messages.MiscPreferencePage_CLASSIC);
    fClassicLayoutRadio.setSelection(!browserMaximized && fGlobalScope.getBoolean(DefaultPreferences.FV_LAYOUT_CLASSIC));

    fVerticalLayoutRadio = new Button(group, SWT.RADIO);
    fVerticalLayoutRadio.setText(Messages.MiscPreferencePage_VERTICAL);
    fVerticalLayoutRadio.setSelection(!browserMaximized && !fGlobalScope.getBoolean(DefaultPreferences.FV_LAYOUT_CLASSIC));

    fBrowserMaximizedLayoutRadio = new Button(group, SWT.RADIO);
    fBrowserMaximizedLayoutRadio.setText(Messages.MiscPreferencePage_NEWSPAPER);
    fBrowserMaximizedLayoutRadio.setSelection(browserMaximized);
  }

  private void createTabOptions(Composite container) {
    Label label = new Label(container, SWT.NONE);
    label.setText(Messages.MiscPreferencePage_TABBED_BROWSING);
    label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));

    /* Group */
    Composite group = new Composite(container, SWT.None);
    group.setLayout(LayoutUtils.createGridLayout(1, 7, 3));
    ((GridLayout) group.getLayout()).marginBottom = 5;
    group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

    fAlwaysReuseFeedView = new Button(group, SWT.CHECK);
    fAlwaysReuseFeedView.setText(Messages.MiscPreferencePage_SAME_TAB);
    fAlwaysReuseFeedView.setSelection(fGlobalScope.getBoolean(DefaultPreferences.ALWAYS_REUSE_FEEDVIEW));

    fUseMultipleTabsCheck = new Button(group, SWT.CHECK);
    fUseMultipleTabsCheck.setText(Messages.MiscPreferencePage_MULTIPLE_TABS);
    fUseMultipleTabsCheck.setSelection(fEclipseScope.getBoolean(DefaultPreferences.ECLIPSE_MULTIPLE_TABS));

    Composite autoCloseTabsContainer = new Composite(group, SWT.None);
    autoCloseTabsContainer.setLayout(LayoutUtils.createGridLayout(3, 0, 0, 0, 2, false));

    fAutoCloseTabsCheck = new Button(autoCloseTabsContainer, SWT.CHECK);
    fAutoCloseTabsCheck.setText(Messages.MiscPreferencePage_TAB_LIMIT);
    fAutoCloseTabsCheck.setSelection(fEclipseScope.getBoolean(DefaultPreferences.ECLIPSE_AUTOCLOSE_TABS));
    fAutoCloseTabsCheck.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        fAutoCloseTabsSpinner.setEnabled(fAutoCloseTabsCheck.getSelection());
        fAlwaysReuseFeedView.setEnabled(!fAutoCloseTabsCheck.getSelection() || fAutoCloseTabsSpinner.getSelection() > 1);
      }
    });

    fAutoCloseTabsSpinner = new Spinner(autoCloseTabsContainer, SWT.BORDER);
    fAutoCloseTabsSpinner.setMinimum(1);
    fAutoCloseTabsSpinner.setMaximum(100);
    fAutoCloseTabsSpinner.setSelection(fEclipseScope.getInteger(DefaultPreferences.ECLIPSE_AUTOCLOSE_TABS_THRESHOLD));
    fAutoCloseTabsSpinner.setEnabled(fAutoCloseTabsCheck.getSelection());
    fAutoCloseTabsSpinner.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        fAlwaysReuseFeedView.setEnabled(!fAutoCloseTabsCheck.getSelection() || fAutoCloseTabsSpinner.getSelection() > 1);
      }
    });

    label = new Label(autoCloseTabsContainer, SWT.None);
    label.setText(Messages.MiscPreferencePage_TABS);

    fAlwaysReuseFeedView.setEnabled(!fAutoCloseTabsCheck.getSelection() || fAutoCloseTabsSpinner.getSelection() > 1);
  }

  private void createMiscOptions(Composite container) {
    Label label = new Label(container, SWT.NONE);
    label.setText(Messages.MiscPreferencePage_MISC);
    label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));

    /* Group */
    Composite miscGroup = new Composite(container, SWT.None);
    miscGroup.setLayout(LayoutUtils.createGridLayout(1, 7, 3));
    miscGroup.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

    fReopenFeedsOnStartupCheck = new Button(miscGroup, SWT.CHECK);
    fReopenFeedsOnStartupCheck.setText(Messages.MiscPreferencePage_REOPEN_LAST_OPENED);
    fReopenFeedsOnStartupCheck.setSelection(fEclipseScope.getBoolean(DefaultPreferences.ECLIPSE_RESTORE_TABS));

    fOpenOnSingleClick = new Button(miscGroup, SWT.CHECK);
    fOpenOnSingleClick.setText(Messages.MiscPreferencePage_SINGLE_CLICK);
    fOpenOnSingleClick.setSelection(fEclipseScope.getBoolean(DefaultPreferences.ECLIPSE_SINGLE_CLICK_OPEN));

    fAggregateNewsAsSearch = new Button(miscGroup, SWT.CHECK);
    fAggregateNewsAsSearch.setText(Messages.MiscPreferencePage_AGGREGATE_AS_SEARCH);
    fAggregateNewsAsSearch.setSelection(fGlobalScope.getBoolean(DefaultPreferences.AGGREGATE_NEWS_AS_SEARCH));

    if (!Application.IS_ECLIPSE) {
      fUpdateOnStartup = new Button(miscGroup, SWT.CHECK);
      fUpdateOnStartup.setText(Messages.MiscPreferencePage_UPDATE_ON_STARTUP);
      fUpdateOnStartup.setSelection(fGlobalScope.getBoolean(DefaultPreferences.UPDATE_ON_STARTUP));
    }
  }

  private void createTrayOptions(Composite container) {
    Label label = new Label(container, SWT.NONE);
    label.setText(Messages.MiscPreferencePage_SYSTEM_TRAY);
    label.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));

    /* Group */
    Composite group = new Composite(container, SWT.None);
    group.setLayout(LayoutUtils.createGridLayout(1, 7, 3));
    ((GridLayout) group.getLayout()).marginBottom = 5;
    group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

    label = new Label(group, SWT.NONE);
    label.setText(Messages.MiscPreferencePage_MOVE_TO_TRAY);

    /* Enable / Disable Tray */
    fMinimizeToTray = new Button(group, SWT.CHECK);
    fMinimizeToTray.setText(Messages.MiscPreferencePage_ON_MINIMIZE);
    fMinimizeToTray.setSelection(fGlobalScope.getBoolean(DefaultPreferences.TRAY_ON_MINIMIZE));
    fMinimizeToTray.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        updateRestoreEnablement();
      }
    });

    /* Move to Tray on Start */
    fMoveToTrayOnStart = new Button(group, SWT.CHECK);
    fMoveToTrayOnStart.setText(Messages.MiscPreferencePage_ON_START);
    fMoveToTrayOnStart.setSelection(fGlobalScope.getBoolean(DefaultPreferences.TRAY_ON_START));
    fMoveToTrayOnStart.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        updateRestoreEnablement();
      }
    });

    /* Move to Tray on Close */
    fMoveToTrayOnExit = new Button(group, SWT.CHECK);
    fMoveToTrayOnExit.setText(Messages.MiscPreferencePage_ON_CLOSE);
    fMoveToTrayOnExit.setSelection(fGlobalScope.getBoolean(DefaultPreferences.TRAY_ON_CLOSE));
    fMoveToTrayOnExit.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        updateRestoreEnablement();
      }
    });

    label = new Label(group, SWT.NONE);
    label.setText(Messages.MiscPreferencePage_RESTORE_FROM_TRAY);
    label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
    ((GridData) label.getLayoutData()).verticalIndent = 5;

    Composite buttonContainer = new Composite(group, SWT.None);
    buttonContainer.setLayout(LayoutUtils.createGridLayout(2, 0, 0));

    fSingleClickRestore = new Button(buttonContainer, SWT.RADIO);
    fSingleClickRestore.setText(Messages.MiscPreferencePage_SINGLE_CLICK_RESTORE);
    fSingleClickRestore.setSelection(!fGlobalScope.getBoolean(DefaultPreferences.RESTORE_TRAY_DOUBLECLICK));

    fDoubleClickRestore = new Button(buttonContainer, SWT.RADIO);
    fDoubleClickRestore.setText(Messages.MiscPreferencePage_DOUBLE_CLICK_RESTORE);
    fDoubleClickRestore.setSelection(fGlobalScope.getBoolean(DefaultPreferences.RESTORE_TRAY_DOUBLECLICK));

    updateRestoreEnablement();
  }

  private void updateRestoreEnablement() {
    boolean enable = fMinimizeToTray.getSelection() || fMoveToTrayOnStart.getSelection() || fMoveToTrayOnExit.getSelection();
    fSingleClickRestore.setEnabled(enable);
    fDoubleClickRestore.setEnabled(enable);
  }

  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() {
    boolean layoutChanged = false;

    if (!fBrowserMaximizedLayoutRadio.getSelection() && fGlobalScope.getBoolean(DefaultPreferences.FV_LAYOUT_CLASSIC) != fClassicLayoutRadio.getSelection()) {
      fGlobalScope.putBoolean(DefaultPreferences.FV_LAYOUT_CLASSIC, fClassicLayoutRadio.getSelection());
      layoutChanged = true;
    }

    if (fGlobalScope.getBoolean(DefaultPreferences.FV_BROWSER_MAXIMIZED) != fBrowserMaximizedLayoutRadio.getSelection()) {
      fGlobalScope.putBoolean(DefaultPreferences.FV_BROWSER_MAXIMIZED, fBrowserMaximizedLayoutRadio.getSelection());
      layoutChanged = true;
    }

    if (!Application.IS_ECLIPSE)
      fGlobalScope.putBoolean(DefaultPreferences.UPDATE_ON_STARTUP, fUpdateOnStartup.getSelection());

    fGlobalScope.putBoolean(DefaultPreferences.AGGREGATE_NEWS_AS_SEARCH, fAggregateNewsAsSearch.getSelection());
    fEclipseScope.putBoolean(DefaultPreferences.ECLIPSE_SINGLE_CLICK_OPEN, fOpenOnSingleClick.getSelection());
    if (!Application.IS_ECLIPSE)
      OpenStrategy.setOpenMethod(fOpenOnSingleClick.getSelection() ? OpenStrategy.SINGLE_CLICK | OpenStrategy.ARROW_KEYS_OPEN : OpenStrategy.DOUBLE_CLICK);
    fEclipseScope.putBoolean(DefaultPreferences.ECLIPSE_RESTORE_TABS, fReopenFeedsOnStartupCheck.getSelection());
    fGlobalScope.putBoolean(DefaultPreferences.ALWAYS_REUSE_FEEDVIEW, fAlwaysReuseFeedView.getSelection());
    fEclipseScope.putBoolean(DefaultPreferences.ECLIPSE_MULTIPLE_TABS, fUseMultipleTabsCheck.getSelection());
    fEclipseScope.putBoolean(DefaultPreferences.ECLIPSE_AUTOCLOSE_TABS, fAutoCloseTabsCheck.getSelection());
    fEclipseScope.putInteger(DefaultPreferences.ECLIPSE_AUTOCLOSE_TABS_THRESHOLD, fAutoCloseTabsSpinner.getSelection());

    if (!Application.IS_ECLIPSE) {
      fGlobalScope.putBoolean(DefaultPreferences.TRAY_ON_MINIMIZE, fMinimizeToTray.getSelection());
      fGlobalScope.putBoolean(DefaultPreferences.TRAY_ON_START, fMoveToTrayOnStart.getSelection());
      fGlobalScope.putBoolean(DefaultPreferences.TRAY_ON_CLOSE, fMoveToTrayOnExit.getSelection());
      fGlobalScope.putBoolean(DefaultPreferences.RESTORE_TRAY_DOUBLECLICK, fDoubleClickRestore.getSelection());
    }

    /* Update Visible Feedviews */
    if (layoutChanged) {
      List<FeedView> feedViews = OwlUI.getFeedViews();
      for (FeedView feedView : feedViews) {
        feedView.updateLayout();
      }
    }

    return super.performOk();
  }

  /*
   * @see org.eclipse.jface.preference.PreferencePage#performApply()
   */
  @Override
  protected void performApply() {
    super.performApply();
    updateApplyEnablement(false);
  }

  /*
   * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
   */
  @Override
  protected void performDefaults() {
    super.performDefaults();

    IPreferenceScope defaultScope = Owl.getPreferenceService().getDefaultScope();

    boolean browserMaximized = defaultScope.getBoolean(DefaultPreferences.FV_BROWSER_MAXIMIZED);
    fClassicLayoutRadio.setSelection(!browserMaximized && defaultScope.getBoolean(DefaultPreferences.FV_LAYOUT_CLASSIC));
    fVerticalLayoutRadio.setSelection(!browserMaximized && !defaultScope.getBoolean(DefaultPreferences.FV_LAYOUT_CLASSIC));
    fBrowserMaximizedLayoutRadio.setSelection(browserMaximized);

    if (!Application.IS_ECLIPSE)
      fUpdateOnStartup.setSelection(defaultScope.getBoolean(DefaultPreferences.UPDATE_ON_STARTUP));

    fAggregateNewsAsSearch.setSelection(defaultScope.getBoolean(DefaultPreferences.AGGREGATE_NEWS_AS_SEARCH));
    fOpenOnSingleClick.setSelection(defaultScope.getBoolean(DefaultPreferences.ECLIPSE_SINGLE_CLICK_OPEN));
    if (!Application.IS_ECLIPSE)
      OpenStrategy.setOpenMethod(fOpenOnSingleClick.getSelection() ? OpenStrategy.SINGLE_CLICK | OpenStrategy.ARROW_KEYS_OPEN : OpenStrategy.DOUBLE_CLICK);
    fReopenFeedsOnStartupCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.ECLIPSE_RESTORE_TABS));
    fAlwaysReuseFeedView.setSelection(defaultScope.getBoolean(DefaultPreferences.ALWAYS_REUSE_FEEDVIEW));
    fUseMultipleTabsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.ECLIPSE_MULTIPLE_TABS));
    fAutoCloseTabsCheck.setSelection(defaultScope.getBoolean(DefaultPreferences.ECLIPSE_AUTOCLOSE_TABS));
    fAutoCloseTabsSpinner.setSelection(defaultScope.getInteger(DefaultPreferences.ECLIPSE_AUTOCLOSE_TABS_THRESHOLD));
    fAutoCloseTabsSpinner.setEnabled(fAutoCloseTabsCheck.getSelection());

    if (!Application.IS_ECLIPSE) {
      fMinimizeToTray.setSelection(defaultScope.getBoolean(DefaultPreferences.TRAY_ON_MINIMIZE));
      fMoveToTrayOnStart.setSelection(defaultScope.getBoolean(DefaultPreferences.TRAY_ON_START));
      fMoveToTrayOnExit.setSelection(defaultScope.getBoolean(DefaultPreferences.TRAY_ON_CLOSE));
      fSingleClickRestore.setSelection(!defaultScope.getBoolean(DefaultPreferences.RESTORE_TRAY_DOUBLECLICK));
      fDoubleClickRestore.setSelection(defaultScope.getBoolean(DefaultPreferences.RESTORE_TRAY_DOUBLECLICK));
      updateRestoreEnablement();
    }

    fAlwaysReuseFeedView.setEnabled(!fAutoCloseTabsCheck.getSelection() || fAutoCloseTabsSpinner.getSelection() > 1);

    updateApplyEnablement(true);
  }

  private void updateApplyEnablement(boolean enable) {
    Button applyButton = getApplyButton();
    if (applyButton != null && !applyButton.isDisposed() && applyButton.isEnabled() != enable)
      applyButton.setEnabled(enable);
  }
}
TOP

Related Classes of org.rssowl.ui.internal.dialogs.preferences.MiscPreferencePage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.