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

📄 highlightsourceviewer.java

📁 MSP IM Source code 2008 update
💻 JAVA
字号:
/* * Copyright (c) 2007, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the Institute nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id: HighlightSourceViewer.java 199 2008-03-19 15:32:18Z nifi $ * * ----------------------------------------------------------------- * * HighlightSourceViewer * * Authors : Adam Dunkels, Joakim Eriksson, Niclas Finne * Created : 6 dec 2007 * Updated : $Date: 2008-03-19 16:32:18 +0100 (Wed, 19 Mar 2008) $ *           $Revision: 199 $ */package se.sics.mspsim.extutil.highlight;import java.awt.Color;import java.awt.Container;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.SwingUtilities;import se.sics.mspsim.ui.SourceViewer;import se.sics.mspsim.ui.WindowUtils;/** * */public class HighlightSourceViewer implements SourceViewer {  private JFrame window;  private SyntaxHighlighter highlighter;  private String currentFile;  private ArrayList<File> path = null;  private JFileChooser fileChooser;  public HighlightSourceViewer() {    //  }  private void setup() {    if (window == null) {      window = new JFrame("Source Viewer");      window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);      LineNumberedBorder border = new LineNumberedBorder(LineNumberedBorder.LEFT_SIDE, LineNumberedBorder.RIGHT_JUSTIFY);      border.setSeparatorColor(Color.lightGray);      Scanner scanner = new CScanner();      highlighter = new SyntaxHighlighter(24, 120, scanner);      highlighter.setEditable(false);      highlighter.setBorder(border);      JScrollPane scroller = new JScrollPane(highlighter);      scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);      Container pane = window.getContentPane();      pane.add(scroller);      WindowUtils.restoreWindowBounds("SourceViewer", window);      WindowUtils.addSaveOnShutdown("SourceViewer", window);      String searchPath = System.getProperty("CONTIKI_PATH");      if (searchPath != null) {        addEnvPath(searchPath);      }      searchPath = System.getenv("CONTIKI_PATH");      if (searchPath != null) {        addEnvPath(searchPath);      }    }  }    private void addEnvPath(String searchPath) {    String[] p = searchPath.split(File.pathSeparator);    if (p != null) {      for (int i = 0, n = p.length; i < n; i++) {        addSearchPath(new File(p[i]));      }    }  }  public boolean isVisible() {    return window != null && window.isVisible();  }  public void setVisible(boolean isVisible) {    setup();    window.setVisible(isVisible);  }  public void viewFile(final String path, final String filename) {    if (filename.equals(currentFile)) {      // Already showing this file      return;    }    currentFile = filename;    SwingUtilities.invokeLater(new Runnable() {      public void run() {        try {	  setup();          File file = findSourceFile(path, filename);          if (file != null) {            FileReader reader = new FileReader(file);            try {              highlighter.read(reader, null);              // Workaround for bug 4782232 in Java 1.4              highlighter.setCaretPosition(1);              highlighter.setCaretPosition(0);	      window.setTitle("Source Viewer (" + file.getAbsolutePath()			      + ')');              if (!window.isVisible()) {                window.setVisible(true);              }            } finally {              reader.close();            }          }        } catch (IOException err) {          err.printStackTrace();          JOptionPane.showMessageDialog(window, "Failed to read the file '" + filename + '\'', "Could not read file", JOptionPane.ERROR_MESSAGE);        }      }    });  }  public void viewLine(final int line) {    if (highlighter != null) {      SwingUtilities.invokeLater(new Runnable() {        public void run() {          highlighter.viewLine(line - 1);          if (!window.isVisible()) {            window.setVisible(true);          }        }      });    }  }  public void addSearchPath(File directory) {    if (path == null) {      path = new ArrayList<File>();    }    path.add(directory);  }  public void removeSearchPath(File directory) {    if (path != null) {      path.remove(directory);    }  }  private File findSourceFile(String fPath, String filename) {    File fp = new File(fPath, filename);    if (fp.exists()) {      return fp;    }    fp = new File(filename);    if (fp.exists()) {      return fp;    }    if (path != null) {      for(File p : path) {        File nfp = new File(p, filename);        if (nfp.exists()) {          return nfp;        }      }    } else {      path = new ArrayList<File>();    }    // Find new path to search from    if (fileChooser == null) {      fileChooser = new JFileChooser("./");      fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);      fileChooser.setDialogTitle("Select compilation directory");    }    if (!window.isVisible()) {      window.setVisible(true);    }    if (fileChooser.showOpenDialog(window) == JFileChooser.APPROVE_OPTION) {      File d = fileChooser.getSelectedFile();      if (d != null) {	path.add(d);	return findSourceFile(fPath, filename);      }    }    return null;  }  public static void main(String[] args) {    HighlightSourceViewer sv = new HighlightSourceViewer();    sv.setVisible(true);    sv.viewFile(".", args[0]);  }}

⌨️ 快捷键说明

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