| /******************************************************************************* |
| * Copyright (c) 2009, 2016 IBM Corporation and others. |
| * 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.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Mike Evans - Fix for Bug 283136 |
| *******************************************************************************/ |
| |
| package org.eclipse.ui.intro.contentproviders; |
| |
| import java.io.PrintWriter; |
| import java.util.Properties; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.IWorkbenchPreferenceConstants; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.internal.intro.impl.Messages; |
| import org.eclipse.ui.internal.intro.impl.util.ReopenUtil; |
| import org.eclipse.ui.intro.IIntroSite; |
| import org.eclipse.ui.intro.config.IIntroAction; |
| import org.eclipse.ui.intro.config.IIntroContentProvider; |
| import org.eclipse.ui.intro.config.IIntroContentProviderSite; |
| import org.eclipse.ui.PlatformUI; |
| /** |
| * |
| * Class which contributes a checkbox to an intro page which allows welcome to show |
| * on startup. If the checkbox is checked the home page of intro will be shown the next |
| * time the Eclipse application starts up. This class may be subclassed to override |
| * the text for the checkbox label. |
| * |
| * Implements the IIntroContentProvider to create the checkbox ui, and the |
| * org.eclipse.ui.intro.config.IIntroAction interface for handling checkbox click events. |
| * |
| * @since 3.3 |
| */ |
| public class AlwaysWelcomeCheckbox implements IIntroContentProvider,IIntroAction { |
| |
| public final static String ALWAYS_SHOW_INTRO = "alwaysShowIntro"; //$NON-NLS-1$ |
| |
| private boolean disposed = false; |
| |
| /** |
| * Override this method to change the default text used for the checkbox |
| * |
| * @return String label for the checkbox |
| * |
| * @since 3.3 |
| * |
| */ |
| protected String getText() |
| { |
| // Default text |
| return Messages.AlwaysWelcomeCheckbox_Text; |
| } |
| |
| |
| @Override |
| public void createContent(String id, PrintWriter out) { |
| |
| boolean alwaysShowIntro = getAlwaysShowIntroPref(); |
| |
| // Use an IIntroAction url that points back to this class - |
| // particularly invoking run(). |
| // This url is 'activated' using the onClick event. |
| out.print("<div id=\""+id+"\"><input type=\"checkbox\" "+ //$NON-NLS-1$//$NON-NLS-2$ |
| "onClick=window.location="+ //$NON-NLS-1$ |
| "\"http://org.eclipse.ui.intro/runAction?"+ //$NON-NLS-1$ |
| "pluginId=org.eclipse.ui.intro&"+ //$NON-NLS-1$ |
| "class="+this.getClass().getName()+"\" "); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| if (alwaysShowIntro) |
| { |
| out.print(" checked=\"checked\""); //$NON-NLS-1$ |
| |
| PlatformUI.getPreferenceStore().setValue( |
| IWorkbenchPreferenceConstants.SHOW_INTRO, alwaysShowIntro); |
| } |
| |
| out.println("/>"+getText()+"</div>"); //$NON-NLS-1$//$NON-NLS-2$ |
| } |
| |
| |
| @Override |
| public void createContent(String id, Composite parent, FormToolkit toolkit) { |
| if (disposed) |
| return; |
| |
| boolean alwaysShowIntro = getAlwaysShowIntroPref(); |
| |
| Button checkBox = new Button(parent,SWT.CHECK); |
| toolkit.adapt((Control)checkBox,false,false); |
| |
| checkBox.setText(getText()); |
| checkBox.setSelection(alwaysShowIntro); |
| checkBox.addSelectionListener(new SelectionAdapter(){ |
| @Override |
| public void widgetSelected(SelectionEvent e){ |
| reverseShowIntroState(); |
| } |
| }); |
| |
| if (alwaysShowIntro) |
| PlatformUI.getPreferenceStore().setValue( |
| IWorkbenchPreferenceConstants.SHOW_INTRO, alwaysShowIntro); |
| } |
| |
| @Override |
| public void dispose() { |
| disposed = true; |
| } |
| |
| @Override |
| public void init(IIntroContentProviderSite site) { |
| } |
| |
| /** |
| * Method called when box is clicked in html (swt is handled with a |
| * SelectionAdapter - both methods call reverseShowIntroState()) |
| */ |
| @Override |
| public void run(IIntroSite site, Properties params) { |
| reverseShowIntroState(); |
| } |
| |
| /** |
| * Method reverses preference ALWAYS_SHOW_INTRO due to checkbox selection change |
| * |
| */ |
| private void reverseShowIntroState() |
| { |
| // Retrieve current state of IUniversalIntroConst.ALWAYS_SHOW_INTRO, change it, and save it back |
| // to both ALWAYS_SHOW_INTRO and SHOW_INTRO |
| boolean alwaysShowIntro = !getAlwaysShowIntroPref(); |
| |
| // local preference store |
| setAlwaysShowIntroPref(alwaysShowIntro); |
| |
| // workbench preference store |
| PlatformUI.getPreferenceStore().setValue( |
| IWorkbenchPreferenceConstants.SHOW_INTRO, alwaysShowIntro); |
| |
| } |
| |
| public boolean getAlwaysShowIntroPref() |
| { |
| // If uninitialized, we will default to true (box will be checked) |
| if (!ReopenUtil.isReopenPreferenceInitialized()) { |
| setAlwaysShowIntroPref(true); |
| } |
| return ReopenUtil.isReopenPreference(); |
| } |
| |
| public void setAlwaysShowIntroPref(boolean val) |
| { |
| ReopenUtil.setReopenPreference(val); |
| } |
| } |