blob: 3be80f605bca73115713d51090998d66d8945b9a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.editor.build;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.Path;
import org.eclipse.pde.core.IModelChangedEvent;
import org.eclipse.pde.core.IModelChangedListener;
import org.eclipse.pde.core.build.IBuild;
import org.eclipse.pde.core.build.IBuildEntry;
import org.eclipse.pde.internal.build.IBuildPropertiesConstants;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.swt.widgets.Composite;
public class BinSection extends BuildContentsSection implements IModelChangedListener {
public BinSection(BuildPage page, Composite parent) {
super(page, parent);
getSection().setText(PDEUIMessages.BuildEditor_BinSection_title);
getSection().setDescription(PDEUIMessages.BuildEditor_BinSection_desc);
}
protected void initializeCheckState() {
super.initializeCheckState();
IBuild build = fBuildModel.getBuild();
IBuildEntry binIncl = build.getEntry(IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES);
IBuildEntry binExcl = build.getEntry(IBuildPropertiesConstants.PROPERTY_BIN_EXCLUDES);
if (binIncl == null)
return;
super.initializeCheckState(binIncl, binExcl);
}
protected void deleteFolderChildrenFromEntries(IFolder folder) {
IBuild build = fBuildModel.getBuild();
IBuildEntry binIncl = build.getEntry(IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES);
IBuildEntry binExcl = build.getEntry(IBuildPropertiesConstants.PROPERTY_BIN_EXCLUDES);
String parentFolder = getResourceFolderName(folder.getProjectRelativePath().toString());
removeChildren(binIncl, parentFolder);
removeChildren(binExcl, parentFolder);
}
protected void handleBuildCheckStateChange(boolean wasTopParentChecked) {
IResource resource = fParentResource;
String resourceName = fParentResource.getProjectRelativePath().toString();
IBuild build = fBuildModel.getBuild();
IBuildEntry includes = build.getEntry(IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES);
IBuildEntry excludes = build.getEntry(IBuildPropertiesConstants.PROPERTY_BIN_EXCLUDES);
resourceName = handleResourceFolder(resource, resourceName);
if (isChecked)
handleCheck(includes, excludes, resourceName, resource, wasTopParentChecked, IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES);
else
handleUncheck(includes, excludes, resourceName, resource, IBuildPropertiesConstants.PROPERTY_BIN_EXCLUDES);
deleteEmptyEntries();
fParentResource = fOriginalResource = null;
}
public void modelChanged(IModelChangedEvent event) {
if (event.getChangeType() == IModelChangedEvent.WORLD_CHANGED) {
markStale();
}
Object changeObject = event.getChangedObjects()[0];
if (!(changeObject instanceof IBuildEntry && (((IBuildEntry) changeObject).getName().equals(IBuildPropertiesConstants.PROPERTY_BIN_EXCLUDES) || ((IBuildEntry) changeObject).getName().equals(IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES))))
return;
if ((fParentResource == null && fOriginalResource != null) || (fOriginalResource == null && fParentResource != null)) {
initializeCheckState();
return;
}
if (fParentResource == null && fOriginalResource == null) {
if (event.getChangedProperty() != null && event.getChangedProperty().equals(IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES)) {
if (event.getOldValue() == null && event.getNewValue() != null) {
if (event.getNewValue().equals(".")) //$NON-NLS-1$
return;
// adding token
IFile file = fProject.getFile(new Path(event.getNewValue().toString()));
if (!file.exists())
return;
fParentResource = fOriginalResource = file;
isChecked = true;
} else if (event.getOldValue() != null && event.getNewValue() == null) {
if (event.getOldValue().equals(".")) //$NON-NLS-1$
return;
// removing token
IFile file = fProject.getFile(new Path(event.getOldValue().toString()));
if (!file.exists())
return;
fParentResource = fOriginalResource = file;
isChecked = false;
} else {
return;
}
}
return;
}
fTreeViewer.setChecked(fParentResource, isChecked);
fTreeViewer.setGrayed(fOriginalResource, false);
fTreeViewer.setParentsGrayed(fParentResource, true);
setParentsChecked(fParentResource);
fTreeViewer.setGrayed(fParentResource, false);
if (fParentResource instanceof IFolder) {
fTreeViewer.setSubtreeChecked(fParentResource, isChecked);
setChildrenGrayed(fParentResource, false);
}
while (!fOriginalResource.equals(fParentResource)) {
fTreeViewer.setChecked(fOriginalResource, isChecked);
fOriginalResource = fOriginalResource.getParent();
}
fParentResource = null;
fOriginalResource = null;
}
}