abstractconsole.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 233 行

JAVA
233
字号
/*
 * $Id: AbstractConsole.java,v 1.11 2004/02/21 14:33:06 vchira_2000 Exp $
 */
package org.jnode.driver.console;

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Iterator;

import org.jnode.driver.input.KeyboardEvent;
import org.jnode.driver.input.KeyboardListener;
import org.jnode.driver.input.PointerEvent;
import org.jnode.system.event.FocusEvent;

/**
 * @author epr
 */
public abstract class AbstractConsole implements Console {
	
	protected Screen screen;

	private final ArrayList keyboardListeners = new ArrayList();
	private final String consoleName;
	private final ConsoleManager mgr;
	private int acceleratorKeyCode = 0;

	protected int curX = 0;
	protected int curY = 0;

	protected int scrWidth;
	protected int scrHeight;

	
	public AbstractConsole(ConsoleManager mgr, String name) throws ConsoleException {
		this.mgr = mgr;
		this.consoleName = name;
		this.screen = Screen.getInstance();
		this.scrWidth = screen.getWidth();
		this.scrHeight = screen.getHeight();
	}

	/**
	 * Does this console has the focus?
	 * 
	 * @return True if this console has the focus, false otherwise
	 */
	public boolean isFocused() {
		return (mgr.getFocus() == this);
	}


	/**
	 * @param l
	 * @see org.jnode.driver.console.Console#addKeyboardListener(org.jnode.driver.input.KeyboardListener)
	 */
	public void addKeyboardListener(KeyboardListener l) {
		synchronized (keyboardListeners) {
			keyboardListeners.add(l);
		}
	}

	/**
	 * @param l
	 * @see org.jnode.driver.console.Console#removeKeyboardListener(org.jnode.driver.input.KeyboardListener)
	 */
	public void removeKeyboardListener(KeyboardListener l) {
		synchronized (keyboardListeners) {
			keyboardListeners.remove(l);
		}
	}

	/**
	 * @param event
	 * @see org.jnode.driver.input.KeyboardListener#keyPressed(org.jnode.driver.input.KeyboardEvent)
	 */
	public void keyPressed(KeyboardEvent event) {
		if ((event.getModifiers() & InputEvent.ALT_DOWN_MASK) != 0) {
			final int keyCode = event.getKeyCode();
			// if the fucus must be given to a userconsole
			if ((keyCode >= KeyEvent.VK_F1) && (keyCode <= KeyEvent.VK_F6) /*&& (keyCode == (KeyEvent.VK_F1 + consoleIndex))*/) 
			{
				// Focus myself
				mgr.focus(mgr.getShellConsole((keyCode - KeyEvent.VK_F1)+1));
			}
			else 
				mgr.focus(mgr.getConsoleWithAccelerator(keyCode));
				
		}

		if (isFocused()) {
			dispatchKeyboardEvent(event);
		}
	}

	/**
	 * @param event
	 * @see org.jnode.driver.input.KeyboardListener#keyReleased(org.jnode.driver.input.KeyboardEvent)
	 */
	public void keyReleased(KeyboardEvent event) {
		if (isFocused()) {
			dispatchKeyboardEvent(event);
		}
	}

	/**
	 * @param event
	 * @see org.jnode.system.event.FocusListener#focusGained(org.jnode.system.event.FocusEvent)
	 */
	public void focusGained(FocusEvent event) {
	}

	/**
	 * @param event
	 * @see org.jnode.system.event.FocusListener#focusLost(org.jnode.system.event.FocusEvent)
	 */
	public void focusLost(FocusEvent event) {
	}

	/**
	 * Dispatch a given keyboard event to all known listeners.
	 * 
	 * @param event
	 */
	protected void dispatchKeyboardEvent(KeyboardEvent event) {
		if (event.isConsumed()) {
			return;
		}

		synchronized (keyboardListeners) {
			for (Iterator i = keyboardListeners.iterator(); i.hasNext();) {
				KeyboardListener l = (KeyboardListener) i.next();
				if (event.isKeyPressed()) {
					l.keyPressed(event);
				} else if (event.isKeyReleased()) {
					l.keyReleased(event);
				}
				if (event.isConsumed()) {
					break;
				}
			}
		}
	}

	/**
	 * Respond to scroll events from the mouse.
	 * 
	 * @param event
	 * @see org.jnode.driver.input.PointerListener#pointerStateChanged(org.jnode.driver.input.PointerEvent)
	 */
	public void pointerStateChanged(PointerEvent event) {
		event.consume();
	}

	/**
	 * Close this console.
	 * 
	 * @see org.jnode.driver.console.Console#close()
	 */
	public void close() {
		mgr.unregisterConsole(this);
	}

	public void setAcceleratorKeyCode(int keyCode)
	{
		this.acceleratorKeyCode = keyCode; 
	}
	public boolean isShellConsole()
	{
		return this.consoleName.startsWith(ConsoleManager.ShellConsoleName); 
	}
	
	public int getAcceleratorKeyCode()
	{
		return acceleratorKeyCode; 
	}


	/**
	 * @return Returns the consoleName.
	 */
	public String getConsoleName() {
		return consoleName;
	}
	/**
	 * @param x
	 * @param y
	 * @see org.jnode.driver.console.Console#setCursor(int, int)
	 */
	public void setCursor(int x, int y) {
		curX = x;
		curY = y;
		screen.setCursor(curX, curY);
	}

	/**
	 * @see org.jnode.driver.console.Console#getCursorX()
	 * @return int
	 */
	public int getCursorX() {
		return curX;
	}

	/**
	 * @see org.jnode.driver.console.Console#getCursorY() 
	 * @return int
	 */
	public int getCursorY() {
		return curY;
	}

	public void setChar(char ch, int bgColor)
	{
		this.setChar(getCursorX(),getCursorY(),ch,bgColor);
	}
	/**
	 * @see org.jnode.driver.console.Console#getHeight()
	 * @return int
	 */
	public int getHeight() {
		return scrHeight;
	}

	/**
	 * @see org.jnode.driver.console.Console#getWidth()
	 * @return int
	 */
	public int getWidth() {
		return scrWidth;
	}

}

⌨️ 快捷键说明

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