custom content provider not automatically activated [message #325760] |
Tue, 26 February 2008 14:48 |
Andreas Pakulat Messages: 127 Registered: July 2009 |
Senior Member |
|
|
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;
}
}
|
|
|
Re: custom content provider not automatically activated [message #325777 is a reply to message #325760] |
Tue, 26 February 2008 19:20 |
Xiang Qinxian Messages: 119 Registered: July 2009 |
Senior Member |
|
|
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;
> }
> }
>
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03795 seconds