/*******************************************************************************
* Copyright (c) 2007, 2009 Wind River Systems, Inc. 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:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.dialogs;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.cdt.utils.ui.controls.TabFolderLayout;
abstract public class PreferenceScopeBlock {
private Button fUseProjectSettings;
private Button fStoreWithProject;
private String fPrefPageID;
private Link fLink;
public PreferenceScopeBlock(String linkedPrefPageID) {
fPrefPageID= linkedPrefPageID;
}
public void createControl(final Composite parent) {
Composite group= ControlFactory.createComposite(parent,2);
GridLayout layout = (GridLayout)group.getLayout();
layout.marginHeight= 0;
layout.marginWidth= 0;
GridData gd = (GridData) group.getLayoutData();
gd.horizontalIndent= 0;
fUseProjectSettings= ControlFactory.createCheckBox(group, DialogsMessages.PreferenceScopeBlock_enableProjectSettings);
Composite two= ControlFactory.createComposite(group, 1);
two.setLayout(new TabFolderLayout());
fStoreWithProject= ControlFactory.createCheckBox(two, DialogsMessages.PreferenceScopeBlock_storeWithProject);
SelectionListener sl= new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateEnablement();
onPreferenceScopeChange();
}
};
fUseProjectSettings.addSelectionListener(sl);
fStoreWithProject.addSelectionListener(sl);
fLink= new Link(two, SWT.NONE);
fLink.setText(DialogsMessages.PreferenceScopeBlock_preferenceLink);
fLink.setLayoutData(new GridData());
sl= new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
PreferencesUtil.createPreferenceDialogOn(parent.getShell(), fPrefPageID, null, null).open();
onPreferenceScopeChange();
}
};
fLink.addSelectionListener(sl);
Label horizontalLine= new Label(group, SWT.SEPARATOR | SWT.HORIZONTAL);
horizontalLine.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1));
horizontalLine.setFont(group.getFont());
}
abstract protected void onPreferenceScopeChange();
private void updateEnablement() {
if (fUseProjectSettings.getSelection()) {
fLink.setVisible(false);
fStoreWithProject.setVisible(true);
}
else {
fStoreWithProject.setVisible(false);
fLink.setVisible(true);
}
fUseProjectSettings.getParent().layout(true);
}
public void setProjectLocalScope() {
fUseProjectSettings.setSelection(true);
fStoreWithProject.setSelection(false);
updateEnablement();
}
public void setProjectScope() {
fUseProjectSettings.setSelection(true);
fStoreWithProject.setSelection(true);
updateEnablement();
}
public void setInstanceScope() {
fUseProjectSettings.setSelection(false);
fStoreWithProject.setSelection(false);
updateEnablement();
}
public boolean isProjectLocalScope() {
return fUseProjectSettings.getSelection() && !fStoreWithProject.getSelection();
}
public boolean isProjectScope() {
return fUseProjectSettings.getSelection() && fStoreWithProject.getSelection();
}
public boolean isInstanceScope() {
return !fUseProjectSettings.getSelection();
}
}