blob: 2a814c2dacc5ecaf90323f20c7b8814fae33a8bf [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.motorola.studio.android.codesnippets;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.osgi.service.prefs.BackingStoreException;
import com.motorola.studio.android.codesnippets.i18n.AndroidSnippetsNLS;
import com.motorola.studio.android.common.log.StudioLogger;
/**
* This {@link ControlContribution} adds the check box button which
* shows or hides the tooltip of the snippet.
*
* @see ControlContribution
* @see {@link AndroidSnippetsStartup}
*
*/
public class TooltipDisplayConfigContriutionItem extends ControlContribution
{
/**
* Listener which updates the status of whether or not to display
* the tool tip.
*
* @see SelectionListener
*
*/
private final class TooltipSelectionListener implements SelectionListener
{
/**
* Here the state of the tooltip display button is persisted in
* the {@link IDialogSettings}.
*
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e)
{
// action for when the check box is pressed.
performButtonSelection();
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent e)
{
// do nothing
}
}
/**
* Check box {@link Button} which shows or hides the tooltip.
*/
private Button showToolTipButton = null;
/**
* {@link IDialogSettings} field for whether or not the tooltip
* is to be displayed.
*/
private static final String DIALOG_SETTINGS__IS_TOOLTIP_DISPLAYED = "IsTooltipDisplayed";
/**
* Constructor which initiates this {@link ControlContribution}.
*/
public TooltipDisplayConfigContriutionItem()
{
super("com.motorola.studio.android.codesnippets.tooltipDisplayConfig"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.ControlContribution#createControl(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createControl(Composite parent)
{
// adjust layout in order to produce space to the left
Composite mainComposite = new Composite(parent, SWT.NONE);
RowLayout layout = new RowLayout(SWT.FILL);
layout.center = true;
layout.marginLeft = 10;
mainComposite.setLayout(layout);
// create the check box button
showToolTipButton = new Button(mainComposite, SWT.CHECK);
showToolTipButton
.setText(AndroidSnippetsNLS.TooltipDisplayConfigContriutionItem_ShowPreview);
showToolTipButton.addSelectionListener(new TooltipSelectionListener());
// set the selection persisted
IEclipsePreferences preferences = getEclipsePreferences();
boolean isTooltipDisplayed =
preferences.getBoolean(DIALOG_SETTINGS__IS_TOOLTIP_DISPLAYED, true);
showToolTipButton.setSelection(isTooltipDisplayed);
performButtonSelection();
return mainComposite;
}
/**
* Returns <code>true</code> in case the tool tip is to
* be displayed, or <code>false</code> should it be hidden.
*
* @return <code>true</code> in case the tool tip
* is to be displayed, <code>false</code> otherwise.
*/
public boolean isTooltipDisplayed()
{
return showToolTipButton.getSelection();
}
/**
* Method called when the check box {@link Button} is called. It
* persists the check box selection state in the {@link IDialogSettings}.
*/
private void performButtonSelection()
{
// persist whether or not to show the tooltip
IEclipsePreferences preferences = getEclipsePreferences();
preferences.putBoolean(DIALOG_SETTINGS__IS_TOOLTIP_DISPLAYED,
showToolTipButton.getSelection());
try
{
preferences.flush();
}
catch (BackingStoreException bse)
{
StudioLogger.error(TooltipDisplayConfigContriutionItem.class.toString(),
"Preferences for snippets could not be saved.", bse); //$NON-NLS-1$
}
}
/**
* Get Eclipse´s preferences.
*
* @return Return Eclipse´s preferences.
*/
private IEclipsePreferences getEclipsePreferences()
{
return ConfigurationScope.INSTANCE.getNode(AndroidSnippetsStartup.SNIPPETS_VIEW_ID);
}
}