org.rssowl.ui.internal.dialogs.CleanUpReminderDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.rssowl.ui.internal.dialogs.CleanUpReminderDialog.java

Source

/*   **********************************************************************  **
 **   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;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
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.Shell;
import org.eclipse.swt.widgets.Spinner;
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.OwlUI;
import org.rssowl.ui.internal.util.LayoutUtils;

/**
 * A reminder for the user to perform clean up in certain intervals.
 *
 * @author bpasero@rssowl.org
 */
public class CleanUpReminderDialog extends TitleAreaDialog {

    /* Keep the visible instance saved */
    private static CleanUpReminderDialog fVisibleInstance;

    private LocalResourceManager fResources;
    private IPreferenceScope fPreferences = Owl.getPreferenceService().getGlobalScope();

    /**
     * @param parentShell
     */
    public CleanUpReminderDialog(Shell parentShell) {
        super(parentShell);
        fResources = new LocalResourceManager(JFaceResources.getResources());
    }

    /**
     * @return Returns an instance of <code>CleanUpReminderDialog</code> or
     * <code>NULL</code> in case no instance is currently open.
     */
    public static CleanUpReminderDialog getVisibleInstance() {
        return fVisibleInstance;
    }

    /*
     * @see org.eclipse.jface.window.Window#open()
     */
    @Override
    public int open() {
        fVisibleInstance = this;
        return super.open();
    }

    /*
     * @see org.eclipse.jface.dialogs.TitleAreaDialog#close()
     */
    @Override
    public boolean close() {
        fVisibleInstance = null;
        fResources.dispose();
        return super.close();
    }

    /*
     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
     */
    @Override
    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        shell.setText(Messages.CleanUpReminderDialog_CLEANUP_REMINDER_TITLE);
    }

    /*
     * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected Control createDialogArea(Composite parent) {

        /* Title */
        setTitle(Messages.CleanUpReminderDialog_CLEANUP_REMINDER);

        /* Title Image */
        setTitleImage(OwlUI.getImage(fResources, "icons/wizban/cleanup_wiz.gif")); //$NON-NLS-1$

        /* Title Message */
        setMessage(Messages.CleanUpReminderDialog_REMINDER_MSG);

        /* Separator */
        new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL)
                .setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

        /* Composite to hold all components */
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(LayoutUtils.createGridLayout(1, 5, 10));
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        Label infoLabel = new Label(composite, SWT.WRAP);
        infoLabel.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        infoLabel.setText(Messages.CleanUpReminderDialog_OPEN_CLEANUP_WIZARD);

        Composite controlsContainer = new Composite(composite, SWT.NONE);
        controlsContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        controlsContainer.setLayout(LayoutUtils.createGridLayout(3, 0, 0, 5, 0, false));
        ((GridLayout) controlsContainer.getLayout()).marginTop = 25;

        final Button reminderCheck = new Button(controlsContainer, SWT.CHECK);
        reminderCheck.setText(Messages.CleanUpReminderDialog_REMIND_EVERY);
        reminderCheck.setSelection(fPreferences.getBoolean(DefaultPreferences.CLEAN_UP_REMINDER_STATE));

        final Spinner reminderDaysValue = new Spinner(controlsContainer, SWT.BORDER);
        reminderDaysValue.setMaximum(100);
        reminderDaysValue.setMinimum(1);
        reminderDaysValue.setSelection(fPreferences.getInteger(DefaultPreferences.CLEAN_UP_REMINDER_DAYS_VALUE));
        reminderDaysValue.setEnabled(reminderCheck.getSelection());
        reminderDaysValue.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                fPreferences.putInteger(DefaultPreferences.CLEAN_UP_REMINDER_DAYS_VALUE,
                        reminderDaysValue.getSelection());
            }
        });

        reminderCheck.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                reminderDaysValue.setEnabled(reminderCheck.getSelection());
                fPreferences.putBoolean(DefaultPreferences.CLEAN_UP_REMINDER_STATE, reminderCheck.getSelection());
            }
        });

        Label reminderDaysLabel = new Label(controlsContainer, SWT.NONE);
        reminderDaysLabel.setText(Messages.CleanUpReminderDialog_DAYS);

        /* Separator */
        new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL)
                .setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));

        applyDialogFont(composite);

        return composite;
    }

    /*
     * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.YES_LABEL, true);
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.NO_LABEL, false);
    }

    /*
     * @see org.eclipse.jface.window.Window#getShellStyle()
     */
    @Override
    protected int getShellStyle() {
        int style = SWT.TITLE | SWT.BORDER | SWT.CLOSE | getDefaultOrientation();

        return style;
    }

    /*
     * @see org.eclipse.jface.dialogs.Dialog#initializeBounds()
     */
    @Override
    protected void initializeBounds() {
        super.initializeBounds();

        Shell shell = getShell();

        /* Minimum Size */
        int maxWidth = convertHorizontalDLUsToPixels(OwlUI.MIN_DIALOG_WIDTH_DLU);
        int maxHeight = 500;

        /* Required Size */
        Point requiredSize = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT);

        shell.setSize(Math.min(maxWidth, requiredSize.x), Math.min(maxHeight, requiredSize.y));
        LayoutUtils.positionShell(shell);
    }
}