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

📄 console.java

📁 SANCHO
💻 JAVA
字号:
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.console;import java.util.ArrayList;import java.util.List;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.StyleRange;import org.eclipse.swt.custom.StyledText;import org.eclipse.swt.events.KeyAdapter;import org.eclipse.swt.events.KeyEvent;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.MenuItem;import org.eclipse.swt.widgets.Text;import sancho.core.Sancho;import sancho.model.mldonkey.utility.OpCodes;import sancho.view.MainWindow;import sancho.view.preferences.PreferenceLoader;import sancho.view.utility.SResources;import sancho.view.utility.WidgetFactory;public class Console {  protected List commandHistory = new ArrayList();  protected Composite composite;  protected Color highlightColor;  protected int historyMark = 0;  protected StyledText infoDisplay;  protected Text input;  protected final int MAX_LINES = PreferenceLoader.loadInt("consoleMaxLines");  public Console(Composite parent, int style) {    createContents(parent, style);  }  public void addMenuItem(Menu menu, String resString, String imageString, SelectionAdapter selectionAdapter) {    MenuItem menuItem = new MenuItem(menu, SWT.PUSH);    menuItem.setText(SResources.getString(resString));    menuItem.setImage(SResources.getImage(imageString));    menuItem.addSelectionListener(selectionAdapter);  }  public void append(String message) {    int lCount;    if ((lCount = infoDisplay.getLineCount()) > MAX_LINES)      infoDisplay.replaceTextRange(0, infoDisplay.getOffsetAtLine(lCount - MAX_LINES + 5), SResources.S_ES);    infoDisplay.setCaretOffset(infoDisplay.getText().length());    infoDisplay.append(message);    infoDisplay.setCaretOffset(infoDisplay.getCaretOffset() + message.length() + 1);    infoDisplay.showSelection();  }  public void appendInput() {    prefixAppend();    String outText = input.getText();    appendNewLine(outText);    int start = infoDisplay.getCharCount() - outText.length() - getLineDelimiter().length();    infoDisplay.setStyleRange(new StyleRange(start, outText.length(), highlightColor, infoDisplay        .getBackground()));  }  public void appendNewLine(String message) {    this.append(message + infoDisplay.getLineDelimiter());  }  protected void createContents(Composite parent, int style) {    composite = new Composite(parent, SWT.NONE);    composite.setLayout(WidgetFactory.createGridLayout(1, 0, 0, 0, 0, false));    infoDisplay = new StyledText(composite, style | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);    infoDisplay.setLayoutData(new GridData(GridData.FILL_BOTH));    Menu popupMenu = new Menu(infoDisplay);    addMenuItem(popupMenu, "mi.copy", "copy", new SelectionAdapter() {      public void widgetSelected(SelectionEvent e) {        MainWindow.copyToClipboard(infoDisplay.getSelectionText());      }    });    addMenuItem(popupMenu, "mi.selectAll", "plus", new SelectionAdapter() {      public void widgetSelected(SelectionEvent e) {        infoDisplay.selectAll();      }    });    addMenuItem(popupMenu, "mi.clear", "clear", new SelectionAdapter() {      public void widgetSelected(SelectionEvent e) {        infoDisplay.replaceTextRange(0, infoDisplay.getText().length(), SResources.S_ES);      }    });    infoDisplay.setMenu(popupMenu);    input = new Text(composite, SWT.SINGLE | SWT.BORDER);    input.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));    input.addKeyListener(new KeyAdapter() {      public void keyPressed(KeyEvent e) {        int numLinesDisplayed = infoDisplay.getClientArea().height / infoDisplay.getLineHeight();        switch (e.keyCode) {          case SWT.PAGE_UP :            if (infoDisplay.getTopIndex() > numLinesDisplayed)              infoDisplay.setTopIndex(infoDisplay.getTopIndex() - (numLinesDisplayed));            else              infoDisplay.setTopIndex(0);            break;          case SWT.PAGE_DOWN :            infoDisplay.setTopIndex(infoDisplay.getTopIndex() + (numLinesDisplayed));            break;          case SWT.CR :            appendInput();            sendMessage();            if (input.getText().length() > 0) {              if (commandHistory.contains(input.getText()))                commandHistory.remove(input.getText());              commandHistory.add(input.getText());              historyMark = commandHistory.size() - 1;            }            input.setText(SResources.S_ES);            break;          case SWT.ESC :            input.setText(SResources.S_ES);            break;          case SWT.ARROW_UP :            if (commandHistory.size() > 0) {              if (historyMark < 0 || historyMark >= commandHistory.size())                historyMark = commandHistory.size() - 1;              input.setText((String) commandHistory.get(historyMark--));              input.setSelection(input.getText().length());              e.doit = false;            }            break;          case SWT.ARROW_DOWN :            if (commandHistory.size() > 0) {              if (historyMark >= commandHistory.size() || historyMark < 0)                historyMark = 0;              input.setText((String) commandHistory.get(historyMark++));              input.setSelection(input.getText().length());            }            break;        }      }    });    updateDisplay();  }  public void dispose() {    input.dispose();    infoDisplay.dispose();    composite.dispose();  }  public boolean isDisposed() {    return infoDisplay == null || infoDisplay.isDisposed();  }  public Composite getComposite() {    return composite;  }  public String getLineDelimiter() {    return infoDisplay.getLineDelimiter();  }  public void prefixAppend() {  }  public void sendMessage() {    Sancho.send(OpCodes.S_CONSOLE_MESSAGE, input.getText());  }  public void setFocus() {    input.setFocus();  }    public void setActive() {    input.setEnabled(true);    infoDisplay.setEnabled(true);  }    public void setInactive() {    input.setEnabled(false);    infoDisplay.setEnabled(false);  }  public void updateDisplay() {    infoDisplay.setFont(PreferenceLoader.loadFont("consoleFontData"));    input.setFont(PreferenceLoader.loadFont("consoleFontData"));    highlightColor = PreferenceLoader.loadColor("consoleHighlight");    infoDisplay.setBackground(PreferenceLoader.loadColor("consoleBackground"));    infoDisplay.setForeground(PreferenceLoader.loadColor("consoleForeground"));    input.setBackground(PreferenceLoader.loadColor("consoleInputBackground"));    input.setForeground(PreferenceLoader.loadColor("consoleInputForeground"));  }}

⌨️ 快捷键说明

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