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

📄 codeui.java

📁 Contiki是一个开源
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            codeList.getLocationOnScreen().y + event.getY());      }      final int currentLine = codeList.locationToIndex(new Point(event.getX(), event.getY())) + 1;      SwingUtilities.invokeLater(new Runnable() {        public void run() {          codeList.setSelectedIndex(currentLine - 1);        }      });      JPopupMenu popupMenu = createPopupMenu(currentFile, currentLine);      popupMenu.setLocation(menuLocation);      popupMenu.setInvoker(codeList);      popupMenu.setVisible(true);    }  }  private JPopupMenu createPopupMenu(final File codeFile, final int lineNr) {    final Integer executableAddress = breakpoints.getExecutableAddressOf(codeFile, lineNr);    boolean breakpointExists = false;    if (executableAddress != null) {      breakpointExists = breakpoints.breakpointExists(executableAddress);    }    JPopupMenu menuMotePlugins = new JPopupMenu();    JMenuItem headerMenuItem = new JMenuItem("Breakpoints:");    headerMenuItem.setEnabled(false);    menuMotePlugins.add(headerMenuItem);    menuMotePlugins.add(new JSeparator());    JMenuItem addBreakpointMenuItem = new JMenuItem("Add breakpoint on line " + lineNr);    if (executableAddress == null || breakpointExists) {      addBreakpointMenuItem.setEnabled(false);    } else {      addBreakpointMenuItem.addActionListener(new ActionListener() {        public void actionPerformed(ActionEvent e) {          breakpoints.addBreakpoint(codeFile, lineNr, executableAddress);        }      });    }    menuMotePlugins.add(addBreakpointMenuItem);    JMenuItem delBreakpointMenuItem = new JMenuItem("Delete breakpoint on line " + lineNr);    if (executableAddress == null || !breakpointExists) {      delBreakpointMenuItem.setEnabled(false);    } else {      delBreakpointMenuItem.addActionListener(new ActionListener() {        public void actionPerformed(ActionEvent e) {          breakpoints.removeBreakpoint(executableAddress);        }      });    }    menuMotePlugins.add(delBreakpointMenuItem);    return menuMotePlugins;  }  private class CodeListModel extends AbstractListModel {    private Vector<String> codeData;    public CodeListModel(Vector<String> codeData) {      super();      this.codeData = codeData;    }    public int getSize() {      if (codeData == null || codeData.isEmpty()) {        return 0;      }      return codeData.size();    }    public Object getElementAt(int index) {      if (codeData == null || codeData.isEmpty()) {        return "No code to display";      }      return codeData.get(index);    }  }  /* FROM: http://www.rgagnon.com/javadetails/java-0306.html, 03/19/2008 */  private static String stringToHTMLString(String string) {    StringBuffer sb = new StringBuffer(string.length());    boolean lastWasBlankChar = false;    int len = string.length();    char c;    for (int i = 0; i < len; i++)    {      c = string.charAt(i);      if (c == ' ') {        if (lastWasBlankChar) {          lastWasBlankChar = false;          sb.append("&nbsp;");        }        else {          lastWasBlankChar = true;          sb.append(' ');        }      }      else {        lastWasBlankChar = false;        //        // HTML Special Chars        if (c == '"') {          sb.append("&quot;");        } else if (c == '&') {          sb.append("&amp;");        } else if (c == '<') {          sb.append("&lt;");        } else if (c == '>') {          sb.append("&gt;");        } else if (c == '\n') {          // Handle Newline          sb.append("&lt;br/&gt;");        } else {          int ci = 0xffff & c;          if (ci < 160 ) {            // nothing special only 7 Bit            sb.append(c);          } else {            // Not 7 Bit use the unicode system            sb.append("&#");            sb.append(new Integer(ci).toString());            sb.append(';');          }        }      }    }    return sb.toString();  }  private class CodeCellRenderer extends JLabel implements ListCellRenderer {    private int currentIndex;    public CodeCellRenderer(int currentLineNr) {      this.currentIndex = currentLineNr - 1;    }    public void changeCurrentLine(int currentLineNr) {      this.currentIndex = currentLineNr - 1;    }    private String getColoredLabelText(int lineNr, int lineStartPos, Token[] tokens, String code) {      String html = "<html>";      /* Add line number */      html += "<font color=\"333333\">" + lineNr + ":  </font>";      /* Add code */      if (tokens == null || tokens.length == 0 || lineStartPos < 0) {        html += "<font color=\"000000\">" + code + "</font>";      } else {        for (int i=tokens.length-1; i >= 0; i--) {          Token subToken = tokens[i];          String colorString = "000000";          /* Determine code color */          final int type = subToken.symbol.type;          switch (type) {          case TokenTypes.COMMENT:          case TokenTypes.START_COMMENT:          case TokenTypes.MID_COMMENT:          case TokenTypes.END_COMMENT:            colorString = "00AA00";            break;          case TokenTypes.STRING:            colorString = "0000AA";            break;          case TokenTypes.KEYWORD:          case TokenTypes.KEYWORD2:            colorString = "AA0000";            break;          }          /* Extract part of token residing in current line */          int tokenLinePos;          String subCode;          if (subToken.position < lineStartPos) {            subCode = subToken.symbol.name.substring(lineStartPos - subToken.position);            tokenLinePos = 0;          } else if (subToken.position + subToken.symbol.name.length() > lineStartPos + code.length()) {            subCode = subToken.symbol.name.substring(0, code.length() + lineStartPos - subToken.position);            tokenLinePos = subToken.position - lineStartPos;          } else {            subCode = subToken.symbol.name;            tokenLinePos = subToken.position - lineStartPos;          }          subCode = stringToHTMLString(subCode);          String firstPart = code.substring(0, tokenLinePos);          String coloredSubCode = "<font color=\"" + colorString + "\">" + subCode + "</font>";          String lastPart =            tokenLinePos + subToken.symbol.name.length() >= code.length()?                "":code.substring(tokenLinePos + subToken.symbol.name.length());            code = firstPart + coloredSubCode + lastPart;        }        code = code.replace("  ", " &nbsp;");        html += code;      }      html += "</html>";      return html;    }    public Component getListCellRendererComponent(       JList list,       Object value,       int index,       boolean isSelected,       boolean cellHasFocus)     {      int lineNr = index + 1;      if (tokensArray != null && index < tokensArray.length && tokensArray[index] != null) {        setText(getColoredLabelText(lineNr, tokensStartPos[index], tokensArray[index], (String) value));      } else {        setText(getColoredLabelText(lineNr, 0, null, (String) value));      }      if (index == currentIndex) {        setBackground(Color.green);      } else if (isSelected) {        setBackground(list.getSelectionBackground());        setForeground(list.getSelectionForeground());      } else {        setBackground(list.getBackground());        setForeground(list.getForeground());      }      setEnabled(list.isEnabled());      Integer executableAddress = breakpoints.getExecutableAddressOf(currentFile, lineNr);      if (breakpoints.breakpointExists(executableAddress)) {        setFont(list.getFont().deriveFont(Font.BOLD));      } else {        setFont(list.getFont());      }      setOpaque(true);      return this;     }  }}

⌨️ 快捷键说明

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