Home » Eclipse Projects » Eclipse Platform » Why two editor? 
| Why two editor? [message #329737] | 
Wed, 02 July 2008 06:40  | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: fucillax.libero.it 
 
I developed a little plugin for eclipse, for editing of a language of  
programming...After the compiler, I need to signal the error by  
annotation... 
I try to do this, with : 
 
public class BglEditor extends TextEditor implements  
ISelectionChangedListener { // , IPropertyChangeListener  
	private ColorManager colorManager; 
	/*private EMonoCSharpFolder fFolder;*/ 
	private ISourceViewer sourceViewer; 
	private IDocument document; 
	//private IdleTimer idleTimer; 
	private ProjectionSupport projectionSupport; 
	private BglConfiguration configuration; 
	/*protected  EMonoOutlinePage page;*/ 
	protected BglEditorExamineJob examinJob; 
	private BglBracketInserter bracketInserter; 
	protected BglBracketMatcher bracketMatcher = new BglBracketMatcher(); 
	/*private TaskTracker taskTracker;*/ 
	private ArrayList menuActionName; 
	private ArrayList menuActionSection; 
	private IWorkbenchWindow window; 
	private boolean compileWhenSave = false; 
	private String pathOfOutput = ""; 
	 
	/** 
	 * MODIFICHE 30 GIUGNO 2008 
	 */ 
    // error identifiers, images and colors 
    public static String ERROR_TYPE = "error.type"; 
    public static Image ERROR_IMAGE = new Image(Display.getDefault(),  
"C:\\Documents and  
 Settings\\Utente\\Desktop\\Tesi\\workspace\\bglEditor\\icons \\sample.gif ");; 
    public static final RGB ERROR_RGB = new RGB(255, 0, 0); 
    private AnnotationModel fAnnotationModel = new AnnotationModel(); 
 
	 
	/** 
	 * The property change listener gets notified if the preferences for this  
plug-in change 
	 */ 
	private final IPropertyChangeListener prefChangeListener = new  
IPropertyChangeListener() { 
		public void propertyChange(PropertyChangeEvent event) { 
			if  (event.getProperty().equals(DefaultPrefsSetter.QUOTESCOMPLET ION) || 
					 event.getProperty().equals(DefaultPrefsSetter.BRACESCOMPLETI ONATENTER)  
|| 
					 event.getProperty().equals(DefaultPrefsSetter.BRACESCOMPLETI ON) || 
					 event.getProperty().equals(DefaultPrefsSetter.BRACKETCOMPLET ION) || 
					 event.getProperty().equals(DefaultPrefsSetter.COMPILEWHENSAV E)) { 
					//|| event.getProperty().equals(DefaultPrefsSetter.PATHOUTPUT)) { 
				 
				// update completions of bracket inserter 
				 bracketInserter.setCloseBracketsEnabled(getPreferenceStore() .getBoolean( 
						DefaultPrefsSetter.BRACKETCOMPLETION)); 
				bracketInserter.setCloseBracesEnabled( 
						 getPreferenceStore().getBoolean(DefaultPrefsSetter.BRACESCOM PLETION)  
&& ! 
						 getPreferenceStore().getBoolean(DefaultPrefsSetter.BRACESCOM PLETIONATENTER)); 
				 bracketInserter.setCloseStringsEnabled(getPreferenceStore(). getBoolean( 
						DefaultPrefsSetter.QUOTESCOMPLETION)); 
				 
				compileWhenSave =  
 BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.COMPILEWHENSAVE); 
				//pathOfOutput =  
 BglPlugin.getDefault().getPreferenceStore().getString(Defaul tPrefsSetter.PATHOUTPUT); 
				 
				// get the BglAutoIndentStrategy via our source viewer configuration  
and 
				// call its setBracesCompletion() method 
				 ((BglAutoIndentStrategy)configuration.getAutoEditStrategies( 
						 sourceViewer,IDocument.DEFAULT_CONTENT_TYPE)[0]).setBracesCo mpletion( 
								 BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.BRACESCOMPLETIONATENTER)  
&&  
								 BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.BRACESCOMPLETION) 
						);	 
			} 
		} 
	}; 
	private Composite compositeParent; 
 
 
	/** 
	 * Constructor 
	 */ 
	public BglEditor() { 
		super(); 
		examinJob = new BglEditorExamineJob(this,"ExamineEditor"); 
		colorManager = new ColorManager(); 
		configuration = new BglConfiguration(colorManager,this); 
		setSourceViewerConfiguration(configuration); 
		setDocumentProvider(new BglDocumentProvider()); 
		IPreferenceStore generalTextStore = EditorsUI.getPreferenceStore(); 
		ChainedPreferenceStore preferenceStore = new ChainedPreferenceStore(new  
IPreferenceStore[] {BglPlugin.getDefault().getPreferenceStore(),  
generalTextStore}); 
		setPreferenceStore(preferenceStore); 
		compileWhenSave =  
 BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.COMPILEWHENSAVE); 
		//pathOfOutput =  
 BglPlugin.getDefault().getPreferenceStore().getString(Defaul tPrefsSetter.PATHOUTPUT); 
	} 
 
	/** 
	 * Is called on changes in the preferences. Triggers update of editor  
colors 
	 * on changes in syntax coloring. 
	 * @param event The event containing the preference changes 
	 */ 
	protected boolean affectsTextPresentation(PropertyChangeEvent event) 
	{ 
		if (event.getProperty().equals(DefaultPrefsSetter.STRINGCOLOR) || 
				event.getProperty().equals(DefaultPrefsSetter.STRINGBOLD) || 
				event.getProperty().equals(DefaultPrefsSetter.COMMENTBOLD) || 
				event.getProperty().equals(DefaultPrefsSetter.COMMENTCOLOR) || 
				event.getProperty().equals(DefaultPrefsSetter.CALCBOLD) || 
				event.getProperty().equals(DefaultPrefsSetter.CALCCOLOR) || 
				event.getProperty().equals(DefaultPrefsSetter.KEYWORDBOLD) || 
				 event.getProperty().equals(DefaultPrefsSetter.KEYWORDCOLOR)) { 
 
			// this will update the tokens of the scanners - must be done before 
			configuration.updateScannerColors(); 
			// this will kick the scanner 
			return true; 
		} 
		return false; 
	} 
 
 
	/** 
	 * @see org.eclipse.ui.editors.text.TextEditor#dispose() 
	 */ 
	public void dispose() { 
		if (colorManager != null) colorManager.dispose(); 
		 
		if (examinJob != null) examinJob.cancel(); 
		 
		//actions 
		/*String[] actionIds = DefaultBglSourceDelegate.getEditorActions(); 
		for (int i = 0; i < actionIds.length; i++) { 
			IAction action = getAction(actionIds[i]); 
			if (action instanceof DefaultBglSourceAction) 
				((DefaultBglSourceAction) action).dispose(); 
		}*/ 
		if (sourceViewer instanceof ITextViewerExtension) 
			((ITextViewerExtension)  
sourceViewer).removeVerifyKeyListener(bracketInserter); 
		// remove property listener of preference store 
		 getPreferenceStore().removePropertyChangeListener(prefChange Listener); 
		super.dispose(); 
	} 
	 
	 
 
 
	/** 
	 * @see  
 org.eclipse.ui.texteditor.AbstractTextEditor#rulerContextMen uAboutToShow(IMenuManager) 
	 */ 
	public void rulerContextMenuAboutToShow(IMenuManager menu) { 
		super.rulerContextMenuAboutToShow(menu); 
		// We dont use it quite now, but may be we add some ations to the ruler  
menu some time 
		 
//		ViewerActionBuilder builder = new ViewerActionBuilder(); 
//		builder.readViewerContributions("#CSharpRulerContext", 
//				getSelectionProvider(), this); 
//		builder.contribute(menu, null, true); 
	} 
 
 
	/** 
	 * Returns the ExamineJob that is responsible for various jobs (scanning,  
parsing, ...) 
	 * @return The CSharpEditorExamineJob instance of this editor 
	 */ 
	public BglEditorExamineJob getExamineJob(){ 
		return examinJob; 
	} 
 
 
	/** 
	 * @see  org.eclipse.ui.texteditor.AbstractTextEditor#createActions() 
	 */ 
	protected void createActions() { 
		super.createActions(); 
		IDocumentProvider provider = getDocumentProvider(); 
		document = provider.getDocument(getEditorInput()); 
		sourceViewer = getSourceViewer(); 
		sourceViewer.setDocument(document); 
		 
	 
		 
		// create BracketInserter; do it here because we need the sourceViewer 
		bracketInserter = new BglBracketInserter(this, sourceViewer); 
		 bracketInserter.setCloseBracketsEnabled(getPreferenceStore() .getBoolean(DefaultPrefsSetter.BRACKETCOMPLETION)); 
		 bracketInserter.setCloseBracesEnabled(getPreferenceStore().g etBoolean(DefaultPrefsSetter.BRACESCOMPLETION)  
&&  
 !getPreferenceStore().getBoolean(DefaultPrefsSetter.BRACESCO MPLETIONATENTER)  
); 
		 bracketInserter.setCloseStringsEnabled(getPreferenceStore(). getBoolean(DefaultPrefsSetter.QUOTESCOMPLETION)); 
 
	 
	} 
 
	/** 
	 * @see  
 org.eclipse.ui.texteditor.AbstractTextEditor#editorContextMe nuAboutToShow(IMenuManager) 
	 */ 
	public void editorContextMenuAboutToShow(IMenuManager menu) { 
		super.editorContextMenuAboutToShow(menu); 
		Separator s = new Separator(); 
		menu.appendToGroup("additions", s); 
		if (menuActionName != null && menuActionSection != null) { 
			for (int i = 0; i < menuActionName.size(); i++) { 
				addAction(menu, (String) menuActionSection.get(i), 
						(String) menuActionName.get(i)); 
			} 
		} 
	} 
 
	/** 
	 * @see org.eclipse.ui.editors.text.TextEditor#getAdapter(Class) 
	 */ 
	public Object getAdapter(Class adapter) { 
 
		if (ProjectionAnnotationModel.class.equals(adapter)) { 
			if (projectionSupport != null) { 
				// forward request 
				Object result = projectionSupport.getAdapter(getSourceViewer(),  
adapter); 
				if (result != null) { 
					return result; 
				} 
			} 
		} 
 
		// Adapter for the Outline view 
		/*if (adapter.equals(IContentOutlinePage.class)) { 
			if (page == null) 
				page = new EMonoOutlinePage(this, getSourceViewer()); 
			//this.registerIdleListener(page); 
			//page.addSelectionChangedListener(this); 
			return page; 
		}*/ 
		return super.getAdapter(adapter); 
	} 
 
 
	/** 
	 * @see  
 org.eclipse.ui.texteditor.AbstractTextEditor#createPartContr ol(Composite) 
	 */ 
	public void createPartControl(Composite parent) { 
		super.createPartControl(parent); 
		 
		/* Tolto il 2 luglio 2008 
		ProjectionViewer viewer = (ProjectionViewer) getSourceViewer(); 
		projectionSupport = new ProjectionSupport(viewer, 
				getAnnotationAccess(), getSharedColors()); 
		projectionSupport 
		.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error "); 
		projectionSupport 
		.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning "); 
		projectionSupport.install(); 
		viewer.doOperation(ProjectionViewer.TOGGLE); 
		* fin qui 
		*/ 
		 
		// Verify key listener for Bracket Inserter 
		if (sourceViewer instanceof ITextViewerExtension) { 
			((ITextViewerExtension)  
sourceViewer).prependVerifyKeyListener(bracketInserter); 
		} 
		 
		// listen for property changes 
		 getPreferenceStore().addPropertyChangeListener(prefChangeLis tener); 
		 
		setProva(); 
	} 
 
 
	/** 
	 * @see  
 org.eclipse.ui.texteditor.AbstractTextEditor#createSourceVie wer(Composite,  
IVerticalRuler, int) 
	 */ 
	protected final ISourceViewer createSourceViewer(Composite parent,  
IVerticalRuler ruler, int styles) { 
		fOverviewRuler = createOverviewRuler(getSharedColors()); 
		ISourceViewer sourceViewer = new BglSourceViewer(parent, ruler,  
fOverviewRuler, isOverviewRulerVisible(), styles); 
        getSourceViewerDecorationSupport(sourceViewer); 
        compositeParent = parent; 
		return sourceViewer; 
	} 
	 
	 
	protected void  
 configureSourceViewerDecorationSupport(SourceViewerDecoratio nSupport  
support) { 
		support.setCharacterPairMatcher(bracketMatcher); 
		 support.setMatchingCharacterPainterPreferenceKeys(DefaultPre fsSetter.BRACKETMATCHING,  
DefaultPrefsSetter.BRACKETMATCHINGCOLOR); 
		super.configureSourceViewerDecorationSupport(support); 
	} 
	 
	protected void editorSaved(){ 
		super.editorSaved(); 
		IResource resource = (IResource)  
getEditorInput().getAdapter(IResource.class); 
		/*if (resource != null) { 
			taskTracker.checkForTasks(document, resource); 
		}*/ 
		 
		/***************************** 
		 ******* Modifiche *********** 
		 ***************************** 
		 */ 
		if (compileWhenSave) { 
			MessageConsole console = findConsole("BusinessGame compiler"); 
			MessageConsoleStream out = console.newMessageStream();		 
			 
			String s = eseguiExe(); 
			if (s.equals("Editor nullo")) { 
				MessageDialog.openInformation( 
						window.getShell(), 
						"BGL Plug-in", 
						"Nessun modello correntemente aperto!!!"); 
			} 
			else if (s.equals("Estensione non corretta")) { 
				MessageDialog.openInformation( 
						window.getShell(), 
						"BGL Plug-in", 
						"Il file che si desidera compilare non e' un \"BGL model\"!!!"); 
			} 
			else { 
				out.println(s); 
			} 
		} 
		prova2(); 
	} 
	 
	 
	/** 
	 * Returns the source viewer 
	 * @return the source viewer 
	 */ 
	public ISourceViewer getViewer(){ 
		return sourceViewer; 
	} 
 
 
	public void selectionChanged(SelectionChangedEvent event) { 
		// Nothing to do there in the moment 
		 
	} 
	 
	private MessageConsole findConsole(String name)  
	{ 
		ConsolePlugin plugin = ConsolePlugin.getDefault(); 
		IConsoleManager conMan = plugin.getConsoleManager(); 
		MessageConsole console = new MessageConsole(name, null); 
		console.activate(); 
		conMan.addConsoles(new IConsole[]{console}); 
		return console; 
   	} 
	 
	public String eseguiExe() 
	{ 
		String s = ""; 
		IWorkbench wb = PlatformUI.getWorkbench(); 
		IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); 
		IWorkbenchPage page = win.getActivePage(); 
		IEditorPart editor = page.getActiveEditor(); 
		if (editor == null) { 
			return "Editor nullo"; 
		} 
		else { 
			IFile original = ((FileEditorInput)editor.getEditorInput()).getFile(); 
			if (!(original.getFileExtension().equals("bgl"))) return "Estensione  
non corretta"; 
			s += original.getLocation().toString(); 
			try 
			{ 
				BGCompileOutput out = BGCompiler.compile(s); 
				s = out.getOutput(); 
				if (out.success()) { 
					// Crea il modello 
					BGModel modello = out.getBGModel(); 
					// String nomeProgetto = original.getProject().getName(); 
					if (pathOfOutput.equals("")) { 
						IProject progetto = original.getProject(); 
						String percorsoProgetto = progetto.getLocation().toString(); 
						int pos = original.getName().lastIndexOf("."); 
						String nome = original.getName().substring(0, pos); 
						File fileOutput = new File(percorsoProgetto+"/bgm_output"); 
						fileOutput.mkdir(); 
						String fileName = percorsoProgetto + "/bgm_output/"+nome+".bgm"; 
						FileOutputStream f = new FileOutputStream(fileName); 
						ObjectOutputStream oos = new ObjectOutputStream(f); 
						oos.writeObject(modello); 
						oos.flush(); 
						oos.close(); 
					} 
					else { 
						int pos = original.getName().lastIndexOf("."); 
						String nome = original.getName().substring(0, pos); 
						String fileName = pathOfOutput + "\\"+nome+".bgm"; 
						FileOutputStream f = new FileOutputStream(fileName); 
						ObjectOutputStream oos = new ObjectOutputStream(f); 
						oos.writeObject(modello); 
						oos.flush(); 
						oos.close(); 
					} 
				} 
			} 
			catch(Throwable e) 
			{ 
				e.printStackTrace(); 
				s = "Eccezione nella compilazione"; 
			} 
			return s; 
		} 
	} 
	 
	/** 
	 * MODIFICHE 30 GIUGNO 2008 
	 */ 
    class AnnotationConfiguration implements IInformationControlCreator { 
        public IInformationControl createInformationControl(Shell shell) { 
            return new DefaultInformationControl(shell); 
        } 
    } 
 
    class ColorCache implements ISharedTextColors { 
        public Color getColor(RGB rgb) { 
            return new Color(Display.getDefault(), rgb); 
        } 
 
        public void dispose() { 
        } 
    } 
 
    // santa's little helper 
    class AnnotationMarkerAccess implements IAnnotationAccess,  
IAnnotationAccessExtension { 
        public Object getType(Annotation annotation) { 
            return annotation.getType(); 
        } 
 
        public boolean isMultiLine(Annotation annotation) { 
            return true; 
        } 
 
        public boolean isTemporary(Annotation annotation) { 
            return !annotation.isPersistent(); 
        } 
 
        public String getTypeLabel(Annotation annotation) { 
            if (annotation instanceof ErrorAnnotation) 
                return "Errors"; 
 
            return null; 
        } 
 
        public int getLayer(Annotation annotation) { 
            if (annotation instanceof ErrorAnnotation) 
                return ((ErrorAnnotation)annotation).getLayer(); 
 
            return 0; 
        } 
 
        public void paint(Annotation annotation, GC gc, Canvas canvas,  
Rectangle bounds) { 
             
 ImageUtilities.drawImage(((ErrorAnnotation)annotation).getIm age(), gc,  
canvas, bounds, SWT.CENTER, SWT.TOP); 
        } 
 
        public boolean isPaintable(Annotation annotation) { 
            if (annotation instanceof ErrorAnnotation) 
                return ((ErrorAnnotation)annotation).getImage() != null; 
 
            return false; 
        } 
 
        public boolean isSubtype(Object annotationType, Object  
potentialSupertype) { 
            if (annotationType.equals(potentialSupertype)) 
                return true; 
 
            return false; 
 
        } 
 
        public Object[] getSupertypes(Object annotationType) { 
            return new Object[0]; 
        } 
    } 
 
    // source viewer configuration 
    class CodeViewerConfiguration extends SourceViewerConfiguration { 
        private ColorCache manager; 
 
        public CodeViewerConfiguration(ColorCache manager) { 
            this.manager = manager; 
        } 
 
        public IPresentationReconciler  
getPresentationReconciler(ISourceViewer sourceViewer) { 
            PresentationReconciler reconciler = new  
PresentationReconciler(); 
            return reconciler; 
        } 
 
        public IAnnotationHover getAnnotationHover(ISourceViewer  
sourceViewer) { 
            return new AnnotationHover(); 
        } 
    } 
 
    // annotation hover manager 
    class AnnotationHover implements IAnnotationHover, ITextHover { 
        public String getHoverInfo(ISourceViewer sourceViewer, int  
lineNumber) { 
            Iterator ite = fAnnotationModel.getAnnotationIterator(); 
 
            ArrayList<String> all = new ArrayList<String>(); 
 
            while (ite.hasNext()) { 
                Annotation a = (Annotation) ite.next(); 
                if (a instanceof ErrorAnnotation) { 
                    all.add(((ErrorAnnotation)a).getText()); 
                } 
            } 
 
            StringBuffer total = new StringBuffer(); 
            for (int x = 0; x < all.size(); x++) { 
                String str = (String) all.get(x); 
                total.append(" " + str + (x == (all.size()-1) ? "" :  
"\n")); 
            } 
 
            return total.toString(); 
        } 
 
        public String getHoverInfo(ITextViewer textViewer, IRegion  
hoverRegion) { 
            return null; 
        } 
 
        public IRegion getHoverRegion(ITextViewer textViewer, int offset) { 
            return null; 
        } 
    } 
 
    // one error annotation 
    class ErrorAnnotation extends Annotation { 
        private IMarker marker; 
        private String text; 
        private int line; 
        private Position position; 
 
        public ErrorAnnotation(IMarker marker) { 
            this.marker = marker; 
        } 
 
        public ErrorAnnotation(int line, String text) { 
            super(ERROR_TYPE, true, null); 
            this.marker = null; 
            this.line = line; 
            this.text = text; 
        } 
 
        public IMarker getMarker() { 
            return marker; 
        } 
 
        public int getLine() { 
            return line; 
        } 
 
        public String getText() { 
            return text; 
        } 
 
        public Image getImage() { 
            return ERROR_IMAGE; 
        } 
 
        public int getLayer() { 
            return 3; 
        } 
 
        public String getType() { 
            return ERROR_TYPE; 
        } 
 
        public Position getPosition() { 
            return position; 
        } 
 
        public void setPosition(Position position) { 
            this.position = position; 
        } 
    } 
     
    private void setProva() { 
    	if (document == null) { 
    		System.out.println("document nullo"); 
    	} 
    	if (compositeParent == null) { 
    		System.out.println("parent nullo"); 
    		return; 
    	}   	 
    	 
        int styles = SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.BORDER  
| SWT.FULL_SELECTION; 
        fAnnotationAccess = new AnnotationMarkerAccess(); 
        ColorCache cc = new ColorCache(); 
        CompositeRuler fCompositeRuler = new CompositeRuler(); 
        fOverviewRuler = new OverviewRuler(fAnnotationAccess, 12,  
getSharedColors()); 
        AnnotationRulerColumn annotationRuler = new  
AnnotationRulerColumn(fAnnotationModel, 16, fAnnotationAccess); 
        fCompositeRuler.setModel(fAnnotationModel); 
        fOverviewRuler.setModel(fAnnotationModel); 
        fCompositeRuler.addDecorator(0, annotationRuler); 
        annotationRuler.addAnnotationType(ERROR_TYPE); 
        fOverviewRuler.addAnnotationType(ERROR_TYPE); 
        fOverviewRuler.addHeaderAnnotationType(ERROR_TYPE); 
        fOverviewRuler.setAnnotationTypeLayer(ERROR_TYPE, 3); 
        fOverviewRuler.setAnnotationTypeColor(ERROR_TYPE, new  
Color(Display.getDefault(), ERROR_RGB)); 
        sourceViewer = new BglSourceViewer(compositeParent,  
fCompositeRuler, fOverviewRuler, isOverviewRulerVisible(), styles); 
        sourceViewer.setDocument(document, fAnnotationModel); 
        AnnotationBarHoverManager fAnnotationHoverManager = new  
AnnotationBarHoverManager(fCompositeRuler, sourceViewer, new  
AnnotationHover(), new AnnotationConfiguration()); 
         fAnnotationHoverManager.install(annotationRuler.getControl() ); 
        AnnotationPainter ap = new AnnotationPainter(sourceViewer,  
fAnnotationAccess); 
        ap.addAnnotationType(ERROR_TYPE); 
        ap.setAnnotationTypeColor(ERROR_TYPE, new  
Color(Display.getDefault(), ERROR_RGB)); 
        ((BglSourceViewer)sourceViewer).addPainter(ap); 
        sourceViewer.configure(new CodeViewerConfiguration(cc)); 
    } 
     
    private void prova2() { 
        ErrorAnnotation errorAnnotation = new ErrorAnnotation(1,  
"Error!!!"); 
        fAnnotationModel.addAnnotation(errorAnnotation, new Position(5,  
12)); 
    } 
} 
 
the method "setProva()" call in createPartControl(Composite parent), open  
two textEditor in a window... 
 
Can anyone help me please???
 |  
 |  
  |   
Goto Forum:
 
 Current Time: Tue Nov 04 00:26:25 EST 2025 
 Powered by  FUDForum. Page generated in 0.04376 seconds  
 |