Package org.javatari.pc.screen

Source Code of org.javatari.pc.screen.MonitorControls

// Copyright 2011-2012 Paulo Augusto Peccin. See licence.txt distributed with this file.

package org.javatari.pc.screen;

import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.javatari.pc.screen.Monitor.Control;


public final class MonitorControls implements KeyListener {
 
  public MonitorControls(Monitor monitor) {
    this.monitor = monitor;
    init();
  }

  public void addInputComponents(List<Component> inputs) {
    for (Component component : inputs)
      component.addKeyListener(this);
  }
 
  private void init() {
    keyCodeMap.put(KEY_CART_FILE,       Control.LOAD_CARTRIDGE_FILE);
    keyCodeMap.put(KEY_CART_URL,        Control.LOAD_CARTRIDGE_URL);
    keyCodeMap.put(KEY_CART_EMPTY,      Control.LOAD_CARTRIDGE_EMPTY);
    keyCodeMap.put(KEY_CART_SAVESTATE,  Control.SAVE_STATE_CARTRIDGE);

    keyAltCodeMap.put(KEY_CRT_FILTER,   Control.CRT_FILTER);
    keyAltCodeMap.put(KEY_DEBUG,       Control.DEBUG);
    keyAltCodeMap.put(KEY_STATS,      Control.STATS);
    keyAltCodeMap.put(KEY_CRT_MODES,   Control.CRT_MODES);
    keyAltCodeMap.put(KEY_CART_FILE,   Control.LOAD_CARTRIDGE_FILE_NO_AUTO_POWER);
    keyAltCodeMap.put(KEY_CART_URL,    Control.LOAD_CARTRIDGE_URL_NO_AUTO_POWER);

    keyShiftCodeMap.put(KEY_UP,    Control.SIZE_MINUS);
    keyShiftCodeMap.put(KEY_DOWN,  Control.SIZE_PLUS);
    keyShiftCodeMap.put(KEY_LEFT,  Control.SIZE_MINUS);
    keyShiftCodeMap.put(KEY_RIGHT, Control.SIZE_PLUS);
   
    keyShiftAltCodeMap.put(KEY_UP,    Control.SCALE_Y_MINUS);
    keyShiftAltCodeMap.put(KEY_DOWN,  Control.SCALE_Y_PLUS);
    keyShiftAltCodeMap.put(KEY_LEFT,  Control.SCALE_X_MINUS);
    keyShiftAltCodeMap.put(KEY_RIGHT, Control.SCALE_X_PLUS);

    keyControlAltCodeMap.put(KEY_UP,    Control.ORIGIN_Y_MINUS);
    keyControlAltCodeMap.put(KEY_DOWN,  Control.ORIGIN_Y_PLUS);
    keyControlAltCodeMap.put(KEY_LEFT,  Control.ORIGIN_X_MINUS);
    keyControlAltCodeMap.put(KEY_RIGHT, Control.ORIGIN_X_PLUS);

    keyShiftControlCodeMap.put(KEY_UP,    Control.HEIGHT_MINUS);
    keyShiftControlCodeMap.put(KEY_DOWN,  Control.HEIGHT_PLUS);
    keyShiftControlCodeMap.put(KEY_LEFT,  Control.WIDTH_MINUS);
    keyShiftControlCodeMap.put(KEY_RIGHT, Control.WIDTH_PLUS);

    keyShiftCodeMap.put(KEY_CART_PASTE_INS, Control.LOAD_CARTRIDGE_PASTE);
    keyControlCodeMap.put(KEY_CART_PASTE_V, Control.LOAD_CARTRIDGE_PASTE);

    keyCodeMap.put(KEY_SIZE_DEFAULT, Control.SIZE_DEFAULT);
  }

  @Override
  public void keyPressed(KeyEvent e) {
    Control control = controlForEvent(e);
    if (control == null) return;
    monitor.controlActivated(control);
  }


  @Override
  public void keyTyped(KeyEvent e) {
    // Do nothing
  }

  @Override
  public void keyReleased(KeyEvent e) {
    // Do nothing
  }

  private Control controlForEvent(KeyEvent e) {
    switch (e.getModifiersEx()) {
      case 0:
        return keyCodeMap.get(e.getKeyCode());
      case KeyEvent.ALT_DOWN_MASK:
        return keyAltCodeMap.get(e.getKeyCode());
      case KeyEvent.SHIFT_DOWN_MASK:
        return keyShiftCodeMap.get(e.getKeyCode());
      case KeyEvent.CTRL_DOWN_MASK:
        return keyControlCodeMap.get(e.getKeyCode());
      case KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK:
        return keyControlAltCodeMap.get(e.getKeyCode());
      case KeyEvent.SHIFT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK:
        return keyShiftControlCodeMap.get(e.getKeyCode());
      case KeyEvent.SHIFT_DOWN_MASK | KeyEvent.ALT_DOWN_MASK:
        return keyShiftAltCodeMap.get(e.getKeyCode());
    }
    return null;
  }


  private Monitor monitor;
 
  private final Map<Integer, Control> keyCodeMap = new HashMap<Integer, Control>();
  private final Map<Integer, Control> keyShiftCodeMap = new HashMap<Integer, Control>();
  private final Map<Integer, Control> keyAltCodeMap = new HashMap<Integer, Control>();
  private final Map<Integer, Control> keyShiftControlCodeMap = new HashMap<Integer, Control>();
  private final Map<Integer, Control> keyShiftAltCodeMap = new HashMap<Integer, Control>();
  private final Map<Integer, Control> keyControlCodeMap = new HashMap<Integer, Control>();
  private final Map<Integer, Control> keyControlAltCodeMap = new HashMap<Integer, Control>();

  public static final int KEY_UP    = KeyEvent.VK_UP;    
  public static final int KEY_DOWN  = KeyEvent.VK_DOWN;  
  public static final int KEY_LEFT  = KeyEvent.VK_LEFT;  
  public static final int KEY_RIGHT = KeyEvent.VK_RIGHT; 

  public static final int KEY_SIZE_DEFAULT = KeyEvent.VK_BACK_SPACE; 
 
  public static final int KEY_CART_FILE      = KeyEvent.VK_F5;
  public static final int KEY_CART_URL       = KeyEvent.VK_F6;
  public static final int KEY_CART_PASTE_V   = KeyEvent.VK_V;
  public static final int KEY_CART_PASTE_INS = KeyEvent.VK_INSERT;
  public static final int KEY_CART_EMPTY     = KeyEvent.VK_F7;
  public static final int KEY_CART_SAVESTATE = KeyEvent.VK_F8;

  public static final int KEY_CRT_FILTER     = KeyEvent.VK_T;
  public static final int KEY_CRT_MODES      = KeyEvent.VK_R;
  public static final int KEY_VIDEO_STAND    = KeyEvent.VK_V;
 
  public static final int KEY_DEBUG = KeyEvent.VK_D; 
  public static final int KEY_STATS = KeyEvent.VK_G; 

}
TOP

Related Classes of org.javatari.pc.screen.MonitorControls

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.