|
From: Christopher W. <caw...@us...> - 2006-03-30 03:16:43
|
Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/rubyeditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4970/src/org/rubypeople/rdt/internal/ui/rubyeditor Modified Files: RubyDocumentProvider.java Log Message: show temporary marker annotations (markers on working copy that isn't saved for problems/tasks/warnings) Index: RubyDocumentProvider.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/rubyeditor/RubyDocumentProvider.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** RubyDocumentProvider.java 13 Dec 2005 20:01:50 -0000 1.21 --- RubyDocumentProvider.java 30 Mar 2006 03:16:39 -0000 1.22 *************** *** 10,13 **** --- 10,14 ---- import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; + import org.eclipse.jface.util.ListenerList; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; *************** *** 23,28 **** --- 24,33 ---- import org.eclipse.jface.text.source.IAnnotationAccessExtension; import org.eclipse.jface.text.source.IAnnotationModel; + import org.eclipse.jface.text.source.IAnnotationModelListener; + import org.eclipse.jface.text.source.IAnnotationModelListenerExtension; import org.eclipse.jface.text.source.IAnnotationPresentation; import org.eclipse.jface.text.source.ImageUtilities; + import org.eclipse.jface.util.IPropertyChangeListener; + import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.GC; *************** *** 60,63 **** --- 65,108 ---- } + protected static class GlobalAnnotationModelListener implements IAnnotationModelListener, IAnnotationModelListenerExtension { + + private ListenerList fListenerList; + + public GlobalAnnotationModelListener() { + fListenerList= new ListenerList(); + } + + /** + * @see IAnnotationModelListener#modelChanged(IAnnotationModel) + */ + public void modelChanged(IAnnotationModel model) { + Object[] listeners= fListenerList.getListeners(); + for (int i= 0; i < listeners.length; i++) { + ((IAnnotationModelListener) listeners[i]).modelChanged(model); + } + } + + /** + * @see IAnnotationModelListenerExtension#modelChanged(AnnotationModelEvent) + */ + public void modelChanged(AnnotationModelEvent event) { + Object[] listeners= fListenerList.getListeners(); + for (int i= 0; i < listeners.length; i++) { + Object curr= listeners[i]; + if (curr instanceof IAnnotationModelListenerExtension) { + ((IAnnotationModelListenerExtension) curr).modelChanged(event); + } + } + } + + public void addListener(IAnnotationModelListener listener) { + fListenerList.add(listener); + } + + public void removeListener(IAnnotationModelListener listener) { + fListenerList.remove(listener); + } + } + /** Preference key for temporary problems */ private final static String HANDLE_TEMPORARY_PROBLEMS= PreferenceConstants.EDITOR_EVALUTE_TEMPORARY_PROBLEMS; *************** *** 67,74 **** --- 112,132 ---- /** The save policy used by this provider */ private ISavePolicy fSavePolicy; + /** Internal property changed listener */ + private IPropertyChangeListener fPropertyListener; + /** Annotation model listener added to all created CU annotation models */ + private GlobalAnnotationModelListener fGlobalAnnotationModelListener; public RubyDocumentProvider() { IDocumentProvider provider = new TextFileDocumentProvider(); setParentDocumentProvider(provider); + + fGlobalAnnotationModelListener= new GlobalAnnotationModelListener(); + fPropertyListener= new IPropertyChangeListener() { + public void propertyChange(PropertyChangeEvent event) { + if (HANDLE_TEMPORARY_PROBLEMS.equals(event.getProperty())) + enableHandlingTemporaryProblems(); + } + }; + RubyPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPropertyListener); } *************** *** 99,102 **** --- 157,188 ---- } + /** + * Switches the state of problem acceptance according to the value in the preference store. + */ + protected void enableHandlingTemporaryProblems() { + boolean enable= isHandlingTemporaryProblems(); + for (Iterator iter= getFileInfosIterator(); iter.hasNext();) { + FileInfo info= (FileInfo) iter.next(); + if (info.fModel instanceof IProblemRequestorExtension) { + IProblemRequestorExtension extension= (IProblemRequestorExtension) info.fModel; + extension.setIsHandlingTemporaryProblems(enable); + } + } + } + + /* + * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#addGlobalAnnotationModelListener(org.eclipse.jface.text.source.IAnnotationModelListener) + */ + public void addGlobalAnnotationModelListener(IAnnotationModelListener listener) { + fGlobalAnnotationModelListener.addListener(listener); + } + + /* + * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#removeGlobalAnnotationModelListener(org.eclipse.jface.text.source.IAnnotationModelListener) + */ + public void removeGlobalAnnotationModelListener(IAnnotationModelListener listener) { + fGlobalAnnotationModelListener.removeListener(listener); + } + /* * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createFileInfo(java.lang.Object) *************** *** 122,127 **** } - // FIXME Pass in a RubyScriptAnnotationModel as an IProblemRequestor - // This is how the UI gets updated with the problems generated during parsing on a working copy original.becomeWorkingCopy(requestor, getProgressMonitor()); cuInfo.fCopy = original; --- 208,211 ---- *************** *** 132,135 **** --- 216,222 ---- } + if (cuInfo.fModel != null) + cuInfo.fModel.addAnnotationModelListener(fGlobalAnnotationModelListener); + return cuInfo; } *************** *** 174,177 **** --- 261,266 ---- handleCoreException(x, x.getMessage()); } + if (cuInfo.fModel != null) + cuInfo.fModel.removeAnnotationModelListener(fGlobalAnnotationModelListener); } super.disposeFileInfo(element, info); *************** *** 728,732 **** */ public void acceptProblem(IProblem problem) { - System.out.println("RubyScriptAnnotationModel received problem: " + problem); if (fIsHandlingTemporaryProblems) { ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get(); --- 817,820 ---- |