/**********************************************************************
* Copyright (c) 2004, 2005 Intel Corporation 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:
* Intel Corporation - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.internal.ui.text;
import org.eclipse.cdt.core.CCProjectNature;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.ui.ICHelpBook;
import org.eclipse.cdt.ui.text.ICHelpInvocationContext;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* This class represents the CHelpBook settings
*
* @since 2.1
*/
public class CHelpBookDescriptor {
final private static String ELEMENT_BOOK = "book"; //$NON-NLS-1$
final private static String ATTRIBUTE_TITLE = "title"; //$NON-NLS-1$
final private static String ATTRIBUTE_ENABLED = "enabled"; //$NON-NLS-1$
final private static String VALUE_TRUE = "true"; //$NON-NLS-1$
final private static String VALUE_FALSE = "false"; //$NON-NLS-1$
private boolean fEnabled = true;
private ICHelpBook fCHelpBook;
CHelpBookDescriptor(ICHelpBook book){
this(book,null);
}
CHelpBookDescriptor(ICHelpBook book, Element parentElement){
fCHelpBook = book;
if(parentElement == null)
return;
NodeList bookElements = parentElement.getElementsByTagName(ELEMENT_BOOK);
if(bookElements.getLength() == 0)
return;
String title = book.getTitle();
for(int i = 0; i < bookElements.getLength(); i++){
Element bookElement = (Element)bookElements.item(i);
if(title.equals(bookElement.getAttribute(ATTRIBUTE_TITLE))){
fEnabled = VALUE_TRUE.equalsIgnoreCase(bookElement.getAttribute(ATTRIBUTE_ENABLED));
break;
}
}
}
public boolean isEnabled(){
return fEnabled;
}
public boolean matches(ICHelpInvocationContext context){
ITranslationUnit unit = context.getTranslationUnit();
if(unit != null)
return matches(unit);
IProject project = context.getProject();
if(project != null)
return matches(project);
return true;
}
public boolean matches(IProject project){
ICHelpBook book = getCHelpBook();
boolean bMatches = false;
switch(book.getCHelpType()){
case ICHelpBook.HELP_TYPE_CPP:
try{
bMatches = project.hasNature(CCProjectNature.CC_NATURE_ID);
}catch(CoreException e){
}
break;
case ICHelpBook.HELP_TYPE_C:
case ICHelpBook.HELP_TYPE_ASM:
try{
bMatches = project.hasNature(CProjectNature.C_NATURE_ID);
}catch(CoreException e){
}
break;
default:
bMatches = true;
}
return bMatches;
}
public boolean matches(ITranslationUnit unit){
ICHelpBook book = getCHelpBook();
boolean bMatches = false;
switch(book.getCHelpType()){
case ICHelpBook.HELP_TYPE_CPP:
bMatches = unit.isCXXLanguage();
break;
case ICHelpBook.HELP_TYPE_C:
bMatches = unit.isCLanguage() || unit.isCXXLanguage();
break;
case ICHelpBook.HELP_TYPE_ASM:
bMatches = unit.isASMLanguage();
break;
default:
bMatches = true;
}
return bMatches;
}
public void enable(boolean enable){
fEnabled = enable;
}
public ICHelpBook getCHelpBook(){
return fCHelpBook;
}
public void serialize(Document doc, Element parentElement){
Element bookElement = doc.createElement(ELEMENT_BOOK);
bookElement.setAttribute(ATTRIBUTE_TITLE,getCHelpBook().getTitle());
bookElement.setAttribute(ATTRIBUTE_ENABLED,fEnabled ? VALUE_TRUE : VALUE_FALSE);
parentElement.appendChild(bookElement);
}
}