package org.teiid.designer.ui.preferences;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.core.designer.util.StringUtilities;
import org.teiid.designer.ui.PluginConstants;
import org.teiid.designer.ui.UiConstants;
import org.teiid.designer.ui.UiPlugin;
import org.teiid.designer.ui.common.util.WidgetFactory;
/**
* @since 8.0
*/
public class AutoOpenPerspectivePreferenceContributor implements IGeneralPreferencePageContributor, UiConstants {
private static final String PREF_ID = PluginConstants.Prefs.General.AUTO_OPEN_PERSPECTIVE_WHEN_MODEL_EDITOR_OPENED;
private static final String PREFIX = I18nUtil.getPropertyPrefix(AutoOpenPerspectivePreferenceContributor.class);
private Button btnAlways;
private Button btnNever;
private Button btnPrompt;
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#createPreferenceEditor(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createPreferenceEditor( Composite parent ) {
Group pnlButtons = WidgetFactory.createGroup(parent,
Util.getStringOrKey(PREFIX + "lbl.text"), //$NON-NLS-1$
GridData.FILL_HORIZONTAL,
1,
3);
pnlButtons.setFont(JFaceResources.getDialogFont());
this.btnAlways = WidgetFactory.createRadioButton(pnlButtons, Util.getStringOrKey(PREFIX + "btnAlways.text")); //$NON-NLS-1$
this.btnAlways.setToolTipText(Util.getStringOrKey(PREFIX + "btnAlways.toolTip")); //$NON-NLS-1$
this.btnNever = WidgetFactory.createRadioButton(pnlButtons, Util.getStringOrKey(PREFIX + "btnNever.text")); //$NON-NLS-1$
this.btnNever.setToolTipText(Util.getStringOrKey(PREFIX + "btnNever.toolTip")); //$NON-NLS-1$
this.btnPrompt = WidgetFactory.createRadioButton(pnlButtons, Util.getStringOrKey(PREFIX + "btnPrompt.text")); //$NON-NLS-1$
this.btnPrompt.setToolTipText(Util.getStringOrKey(PREFIX + "btnPrompt.toolTip")); //$NON-NLS-1$
// initialize state
refresh();
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#getName()
*/
@Override
public String getName() {
return Util.getStringOrKey(PREFIX + "name"); //$NON-NLS-1$
}
/**
* Obtains the <code>IPreferenceStore</code> where this preference is being persisted.
*
* @return the preference store
*/
private IPreferenceStore getPreferenceStore() {
return UiPlugin.getDefault().getPreferenceStore();
}
/**
* Obtains the {@link IPreferenceStore}'s default or current value for this preference
*
* @param defaultFlag indicates if the default or current value is being requested
* @return the requested value
*/
private String getPreferenceStoreValue( boolean defaultFlag ) {
IPreferenceStore prefStore = getPreferenceStore();
String value = null;
if (defaultFlag) {
value = prefStore.getDefaultString(PREF_ID);
} else {
value = prefStore.getString(PREF_ID);
}
if (StringUtilities.isEmpty(value)) {
value = MessageDialogWithToggle.PROMPT;
}
return value;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#getToolTip()
*/
@Override
public String getToolTip() {
return Util.getStringOrKey(PREFIX + "toolTip"); //$NON-NLS-1$
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#performCancel()
*/
@Override
public boolean performCancel() {
return true;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#performDefaults()
*/
@Override
public boolean performDefaults() {
update(getPreferenceStoreValue(true));
return true;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#performOk()
*/
@Override
public boolean performOk() {
String value = MessageDialogWithToggle.PROMPT;
if (this.btnAlways.getSelection()) {
value = MessageDialogWithToggle.ALWAYS;
} else if (this.btnNever.getSelection()) {
value = MessageDialogWithToggle.NEVER;
}
// persist value
getPreferenceStore().setValue(PREF_ID, value);
return true;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#refresh()
*/
@Override
public void refresh() {
update(getPreferenceStoreValue(false));
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#setWorkbench(org.eclipse.ui.IWorkbench)
*/
@Override
public void setWorkbench( IWorkbench theWorkbench ) {
// nothing to do
}
/**
* Updates the radio buttons selection states corresponding to the new value.
*
* @param value the new value
*/
private void update( String value ) {
if (MessageDialogWithToggle.ALWAYS.equals(value)) {
if (!this.btnAlways.getSelection()) {
this.btnAlways.setSelection(true);
this.btnNever.setSelection(false);
this.btnPrompt.setSelection(false);
}
} else if (MessageDialogWithToggle.NEVER.equals(value)) {
if (!this.btnNever.getSelection()) {
this.btnAlways.setSelection(false);
this.btnNever.setSelection(true);
this.btnPrompt.setSelection(false);
}
} else {
if (!this.btnPrompt.getSelection()) {
this.btnAlways.setSelection(false);
this.btnNever.setSelection(false);
this.btnPrompt.setSelection(true);
}
}
}
}