All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aspectj.tools.ajbrowser.ui.EditorManager Maven / Gradle / Ivy

There is a newer version: 1.9.22.1
Show newest version
/* *******************************************************************
 * Copyright (c) 1999-2001 Xerox Corporation,
 *               2002 Palo Alto Research Center, Incorporated (PARC).
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * Contributors:
 *     Xerox/PARC     initial implementation
 * ******************************************************************/

package org.aspectj.tools.ajbrowser.ui;

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.Box;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import org.aspectj.ajde.EditorAdapter;
import org.aspectj.ajde.EditorListener;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler;

/**
 * Responsible for controlling the editor.
 *
 * 

TODO: remove coupling to BasicEditor

* @author Mik Kersten */ public class EditorManager { /** @return true if input modifiers have shift down */ public static boolean isShiftDown(int modifiers) { return (0 != (modifiers & KeyEvent.SHIFT_MASK)); } private EditorAdapter editor = null; private BasicEditor basicEditor = null; private List editorListeners = new ArrayList<>(); private Vector editors = new Vector<>(); private JPanel editor_panel = null; private Box editors_box = Box.createVerticalBox(); public EditorManager(EditorAdapter ajdeEditor) { if (ajdeEditor instanceof BasicEditor) { this.basicEditor = (BasicEditor) ajdeEditor; editors.add(basicEditor); editors_box.add(basicEditor.getPanel()); editor_panel = new JPanel(new BorderLayout()); editor_panel.add(editors_box, BorderLayout.CENTER); } else { editors.add(ajdeEditor); this.editor = ajdeEditor; } } public void addListener(EditorListener editorListener) { editorListeners.add(editorListener); } public void removeListener(EditorListener editorListener) { editorListeners.remove(editorListener); } public void notifyCurrentFileChanged(String filePath) { for (EditorListener editorListener : editorListeners) { editorListener.currentFileChanged(filePath); } } public void addViewForSourceLine(final String filePath, final int lineNumber) { if (basicEditor == null) return; editors_box.remove(basicEditor.getPanel()); final BasicEditor newEditor = new BasicEditor(); editors.add(newEditor); Runnable update = new Runnable() { public void run() { editors_box.add(newEditor.getPanel()); newEditor.showSourceLine(filePath, lineNumber, true); // AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI(); } }; if (SwingUtilities.isEventDispatchThread()) { update.run(); } else { try { SwingUtilities.invokeAndWait(update); } catch (Exception e) { BrowserErrorHandler.handleError("Could not add view for source line.", e); } } } public String getCurrFile() { if (basicEditor != null) { return basicEditor.getCurrFile(); } else { return editor.getCurrFile(); } } public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) { if (sourceLocation != null) { showSourceLine(sourceLocation.getSourceFile().getAbsolutePath(), sourceLocation.getLine(), highlight); } } /** * TODO: remove "instanceof AjdeManager" hack */ public void showSourceLine(String filePath, int lineNumber, boolean highlight) { if (editors.size() > 1) { editors_box.removeAll(); editors_box.add(basicEditor.getPanel()); // AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI(); editors.removeAllElements(); editors.add(basicEditor); } if (basicEditor != null) { basicEditor.showSourceLine(filePath, lineNumber, highlight); } else { editor.showSourceLine(filePath, lineNumber, highlight); } } public void pasteToCaretPos(String text) { if (basicEditor != null) { basicEditor.pasteToCaretPos(text); } else { editor.pasteToCaretPos(text); } } public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) { editor.showSourcelineAnnotation(filePath, lineNumber, items); } public void saveContents() { try { for (EditorAdapter editorAdapter : editors) { editorAdapter.saveContents(); } } catch (IOException ioe) { BrowserErrorHandler.handleError("Editor could not save the current file.", ioe); } } public JPanel getEditorPanel() { if (editor_panel != null) { return editor_panel; } else { return basicEditor.getPanel(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy