[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform] Re: custom content provider not automatically activated

Hi,

The content provider must be set before that viewer call setInput method.
Is this?


Cheers, Xiangya Andreas Pakulat åé:
Hi,

I've got a relatively simple custom content provider for a CommonNavigator
view. The provider itself seems to work quite fine, but I can't seem to
find out why it displays the content only after I've disabled and
re-enabled the content provider under the Customize View dialog. After the
re-enabling I see the two nodes, but not when initially showing the view.

Any ideas?

Andreas

The content provider code is as follows and its just bound to a plain
CommonNavigator view.

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.progress.UIJob;

public class MyTreeContentProvider implements ITreeContentProvider,
        IResourceChangeListener, IResourceDeltaVisitor
{

private String root;
private String[] childs = { "foo", "bar" };
private StructuredViewer viewer;


    public MyTreeContentProvider()
    {
        System.err.println("content tree provider");
        System.out.println( "Using squish content provider" );
        ResourcesPlugin.getWorkspace().addResourceChangeListener( this,
                IResourceChangeEvent.POST_CHANGE );
    }

    @Override
    public Object[] getChildren( Object parentElement )
    {
        // TODO Auto-generated method stub
        System.err.println( "TreeProvider.getChildren:" +
parentElement+"|"+parentElement.getClass() );
        if ( parentElement instanceof String ) {
            return new String[0];
        } else {
            return childs;
        }
    }

    @Override
    public Object getParent( Object element )
    {
        // TODO Auto-generated method stub
        if( element.equals( childs[0] ) || element.equals( childs[1] ) )
            return root;
        System.err.println( "TreeProvider.getParent" + element
+"|"+element.getClass() );
        return null;
    }

    @Override
    public boolean hasChildren( Object element )
    {
        // TODO Auto-generated method stub
        System.err.println( "TreeProvider.hasChildren:"+element+"|"+
                element.getClass() );
        return getChildren( element ).length > 0;
    }

    @Override
    public Object[] getElements( Object inputElement )
    {
        // TODO Auto-generated method stub
        System.err.println( "TreeProvider.getElements:" +
inputElement+"|"+inputElement.getClass() );
        return getChildren( inputElement );
    }

    @Override
    public void dispose()
    {
        System.err.println( "TreeProvider.dispose" );
        ResourcesPlugin.getWorkspace().removeResourceChangeListener( this );
        // TODO Auto-generated method stub

    }

    @Override
    public void inputChanged( Viewer aviewer, Object oldInput, Object
newInput )
    {
        System.err.println( "TreeProvider.inputChanged" );
        viewer = (StructuredViewer)aviewer;
        // TODO Auto-generated method stub

    }

/*
* (non-Javadoc)
* */
public void resourceChanged( IResourceChangeEvent event )
{
System.out.println("TreeProvider.resourceChagned");
IResourceDelta delta = event.getDelta();
try {
delta.accept( this );
} catch ( CoreException e ) {
e.printStackTrace();
}
}


/*
* (non-Javadoc)
* */
public boolean visit( IResourceDelta delta )
{
IResource source = delta.getResource();
System.out.println("TreeProvider.visit:"+source.getType() );
switch ( source.getType() ) {
case IResource.FOLDER:
System.err.println("folder change");
final IFolder f = (IFolder)source;
System.err.println("updating view");
new UIJob("Update Properties Model in CommonViewer") {
public IStatus runInUIThread(IProgressMonitor monitor) {
if (viewer != null
&& !viewer.getControl().isDisposed()) {
System.err.println("refreshing viewer for
project");
viewer.refresh(f);
}
return Status.OK_STATUS;
}
}.schedule();
case IResource.ROOT:
System.err.println("root change:");
final IResource root = (IResource)source;
System.err.println("updating view");
new UIJob("Update Properties Model in CommonViewer") {
public IStatus runInUIThread(IProgressMonitor monitor) {
if (viewer != null
&& !viewer.getControl().isDisposed()) {
System.err.println("refreshing viewer for
project");
viewer.refresh(root);
}
return Status.OK_STATUS;
}
}.schedule();
case IResource.PROJECT:
System.err.println("project change");
final IProject project = (IProject)source;
System.err.println("updating view");
new UIJob("Update Properties Model in CommonViewer") {
public IStatus runInUIThread(IProgressMonitor monitor) {
if (viewer != null
&& !viewer.getControl().isDisposed()) {
System.err.println("refreshing viewer for
project");
viewer.refresh(project);
}
return Status.OK_STATUS;
}
}.schedule();
return false;
case IResource.FILE:
System.err.println("got file");
final IFile file = (IFile) source;
// if (PROPERTIES_EXT.equals(file.getFileExtension())) {
// updateModel(file);
new UIJob("Update Properties Model in CommonViewer") {
public IStatus runInUIThread(IProgressMonitor monitor)
{
if (viewer != null
&& !viewer.getControl().isDisposed()) {
System.err.println("refreshing viewer for
file");
viewer.refresh(file);
}
return Status.OK_STATUS;
}
}.schedule();
// }
return false;
default:
System.err.println("unknown change");
}
return true;
}
}