⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pyeditnotifier.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
字号:
package org.python.pydev.editor;

import java.lang.ref.WeakReference;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.text.IDocument;
import org.python.pydev.editor.PyEdit.MyResources;
import org.python.pydev.plugin.PydevPlugin;

public class PyEditNotifier {
	
	private WeakReference<PyEdit> pyEdit;

	public static interface INotifierRunnable{
		public void run(IProgressMonitor monitor);
	}
	
	public PyEditNotifier(PyEdit edit){
		this.pyEdit = new WeakReference<PyEdit>(edit);
	}
	
    public void notifyOnCreateActions(final MyResources resources) {
    	final PyEdit edit = pyEdit.get();
    	if(edit == null){
    		return;
    	}
    	INotifierRunnable runnable = new INotifierRunnable(){
    		public void run(final IProgressMonitor monitor){
		        for(IPyEditListener listener : edit.getAllListeners()){
		            try {
		            	if(!monitor.isCanceled()){
		            		listener.onCreateActions(resources, edit, monitor);
		            	}
		            } catch (Exception e) {
		                //must not fail
		                PydevPlugin.log(e);
		            }
		        }
	        }
    	};
    	runIt(runnable);
    }

    public void notifyOnSave() {
    	final PyEdit edit = pyEdit.get();
    	if(edit == null){
    		return;
    	}
    	INotifierRunnable runnable = new INotifierRunnable(){
    		public void run(IProgressMonitor monitor){
    			for(IPyEditListener listener : edit.getAllListeners()){
    				try {
		            	if(!monitor.isCanceled()){
		            		listener.onSave(edit, monitor);
		            	}
    				} catch (Throwable e) {
    					//must not fail
    					PydevPlugin.log(e);
    				}
    			}
	        }
    	};
    	runIt(runnable);

    }

	private void runIt(final INotifierRunnable runnable) {
		Job job = new Job("PyEditNotifier"){

			@Override
			protected IStatus run(IProgressMonitor monitor) {
				runnable.run(monitor);
				return Status.OK_STATUS;
			}
			
		};
		job.setPriority(Job.BUILD);
		job.setSystem(true);
		job.schedule();
	}

    public void notifyOnDispose() {
    	final PyEdit edit = pyEdit.get();
    	if(edit == null){
    		return;
    	}
    	
    	INotifierRunnable runnable = new INotifierRunnable(){
    		public void run(IProgressMonitor monitor){
    			for(IPyEditListener listener : edit.getAllListeners()){
    				try {
		            	if(!monitor.isCanceled()){
		            		listener.onDispose(edit, monitor);
		            	}
    				} catch (Throwable e) {
    					//no need to worry... as we're disposing, in shutdown, we may not have access to some classes anymore
    				}
    			}
	        }
    	};
    	runIt(runnable);
    }

    /**
     * @param document the document just set
     */
    public void notifyOnSetDocument(final IDocument document) {
    	final PyEdit edit = pyEdit.get();
    	if(edit == null){
    		return;
    	}
    	INotifierRunnable runnable = new INotifierRunnable(){
    		public void run(IProgressMonitor monitor){
    			for(IPyEditListener listener : edit.getAllListeners()){
    				try {
		            	if(!monitor.isCanceled()){
		            		listener.onSetDocument(document, edit, monitor);
		            	}
    				} catch (Exception e) {
    					//must not fail
    					PydevPlugin.log(e);
    				}
    			}
	        }
    	};
    	runIt(runnable);
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -