/*******************************************************************************
* 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 java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
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;
import org.eclipse.cdt.internal.ui.text.doctools.NullDocCommentOwner;
/**
* Manages the population and selection of the doc-comment {@link Combo} box
* <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 DocCommentOwnerCombo extends Composite {
protected Combo fCombo;
protected IDocCommentOwner fOwners[], fInitialOwner;
public DocCommentOwnerCombo(Composite parent, int style, IDocCommentOwner initialOwner) {
super(parent, style);
setLayout(new GridLayout());
fInitialOwner= initialOwner;
fOwners= getNontestOwners();
createControl(this);
}
public IDocCommentOwner getSelectedDocCommentOwner() {
int index= fCombo.getSelectionIndex();
return index == 0 ? NullDocCommentOwner.INSTANCE : fOwners[index-1];
}
/**
* @return the list of registered doc-comment owners, filtering out those from the
* test plug-in.
*/
private static IDocCommentOwner[] getNontestOwners() {
List<IDocCommentOwner> result= new ArrayList<IDocCommentOwner>();
for(IDocCommentOwner owner : DocCommentOwnerManager.getInstance().getRegisteredOwners()) {
if(owner.getID().indexOf(".test.")==-1) //$NON-NLS-1$
result.add(owner);
}
return result.toArray(new IDocCommentOwner[result.size()]);
}
public void createControl(Composite parent) {
String[] items= new String[fOwners.length+1];
items[0]= DialogsMessages.DocCommentOwnerCombo_None;
for(int i=0; i<fOwners.length; i++) {
items[i+1]= fOwners[i].getName();
}
fCombo = ControlFactory.createSelectCombo(parent, items, DialogsMessages.DocCommentOwnerCombo_None);
selectInCombo(fInitialOwner);
}
public void selectInCombo(IDocCommentOwner owner) {
for(int i=0; i<fOwners.length; i++) {
if(fOwners[i].getID().equals(owner.getID())) {
fCombo.select(i+1);
return;
}
}
fCombo.select(0);
}
@Override
public void setEnabled(boolean enabled) {
fCombo.setEnabled(enabled);
}
}