/*******************************************************************************
* Copyright (c) 2008, 2009 Symbian Software Systems 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:
* Andrew Ferguson (Symbian) - Initial implementation
*******************************************************************************/
package org.eclipse.cdt.ui.dialogs;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Link;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.cdt.ui.text.doctools.IDocCommentOwner;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
/**
* Project property page for setting documentation comment owner.
* <em>This class is not intended for use outside of CDT</em>
*
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class DocCommentOwnerBlock extends AbstractCOptionPage {
private static String EDITOR_PREF_PAGE_ID= "org.eclipse.cdt.ui.preferences.CEditorPreferencePage"; //$NON-NLS-1$
protected DocCommentOwnerComposite fDocComboComposite;
protected DocCommentOwnerManager fManager;
protected Button fCheckbox;
protected Link fLink;
public DocCommentOwnerBlock() {
fManager= DocCommentOwnerManager.getInstance();
}
void handleCheckBox() {
fDocComboComposite.setEnabled(fCheckbox.getSelection());
fLink.setVisible(!fCheckbox.getSelection());
}
@Override
public void createControl(final Composite parent) {
Composite pane= new Composite(parent, SWT.NONE);
pane.setLayout(new GridLayout(2, true));
pane.setLayoutData(GridDataFactory.fillDefaults().grab(true,false).span(2, 1).create());
setControl(pane);
fCheckbox= ControlFactory.createCheckBox(pane, DialogsMessages.DocCommentOwnerBlock_EnableProjectSpecificSettings);
fCheckbox.setLayoutData(GridDataFactory.fillDefaults().grab(true,false).create());
fCheckbox.addSelectionListener(new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent e) {
handleCheckBox();
}
});
fLink= new Link(pane, SWT.NONE);
fLink.setText(DialogsMessages.PreferenceScopeBlock_preferenceLink);
fLink.setLayoutData(GridDataFactory.fillDefaults().align(GridData.CENTER, GridData.BEGINNING).grab(true,false).create());
fLink.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
PreferencesUtil.createPreferenceDialogOn(parent.getShell(), EDITOR_PREF_PAGE_ID, null, null).open();
}
});
String dsc= DialogsMessages.DocCommentOwnerBlock_SelectDocToolDescription;
String msg= DialogsMessages.DocCommentOwnerBlock_DocToolLabel;
IDocCommentOwner prjOwner= DocCommentOwnerManager.getInstance().getCommentOwner(getProject());
fDocComboComposite= new DocCommentOwnerComposite(pane, prjOwner, dsc, msg);
fDocComboComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true,false).span(2, 1).create());
fCheckbox.setSelection(fManager.projectDefinesOwnership(getProject()));
handleCheckBox();
}
@Override
public void performApply(IProgressMonitor monitor) throws CoreException {
if(!fCheckbox.getSelection())
fManager.setCommentOwner(getProject(), null, true);
else {
IDocCommentOwner newOwner= fDocComboComposite.getSelectedDocCommentOwner();
IProject p= getProject();
fManager.setCommentOwner(p, newOwner, true);
}
}
public IProject getProject() {
ICOptionContainer container = getContainer();
if (container != null){
if (container instanceof ICOptionContainerExtension) {
try {
return ((ICOptionContainerExtension) container).getProjectHandle();
}
catch (Exception e) {
return null;
}
}
return container.getProject();
}
return null;
}
@Override
public void performDefaults() {
}
}