    001package org.vishia.gral.awt;
    002
    003import java.awt.event.KeyEvent;
    004
    005import org.vishia.util.KeyCode;
    006
    007/**Adaption from AWT-KeyCodes to universal vishia key codes.
    008 * @author Hartmut Schorrig
    009 *
    010 */
    011public class AwtGralKey extends KeyCode
    012{
    013    /**Version, history and license
    014   * <ul>
    015   * <li>2015-30-10 Hartmut created for Key handling from SwtGralkeyin the GRAL.
    016   * </ul>
    017   *
    018   * <b>Copyright/Copyleft</b>:
    019   * For this source the LGPL Lesser General Public License,
    020   * published by the Free Software Foundation is valid.
    021   * It means:
    022   * <ol>
    023   * <li> You can use this source without any restriction for any desired purpose.
    024   * <li> You can redistribute copies of this source to everybody.
    025   * <li> Every user of this source, also the user of redistribute copies
    026   *    with or without payment, must accept this license for further using.
    027   * <li> But the LPGL is not appropriate for a whole software product,
    028   *    if this source is only a part of them. It means, the user
    029   *    must publish this part of source,
    030   *    but don't need to publish the whole source of the own product.
    031   * <li> You can study and modify (improve) this source
    032   *    for own using or for redistribution, but you have to license the
    033   *    modified sources likewise under this LGPL Lesser General Public License.
    034   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
    035   * </ol>
    036   * If you are intent to use this sources without publishing its usage, you can get
    037   * a second license subscribing a special contract with the author.
    038   *
    039   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
    040   *
    041   */
    042  @SuppressWarnings("hiding")
    043  public final static int version = 20131116;
    044
    045  /**This class isn't instantiated. Only the static method and the static definitions of KeyCode
    046   * are used.  */
    047  private AwtGralKey()
    048  { super(0);
    049  }
    050
    051  public static int convertFromAwt(int keyCode, int stateMask, char characterKey)
    052  {
    053    final int stateKeys, key;
    054    if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT){
    055      stateKeys = ctrl + alt + shift;
    056    } else if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_ALT + KeyEvent.VK_CONTROL){
    057      stateKeys = ctrl + alt;
    058    } else if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_CONTROL + KeyEvent.VK_SHIFT){
    059      stateKeys = ctrl + shift;
    060    } else if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_ALT + KeyEvent.VK_SHIFT){
    061      stateKeys = alt + shift;
    062    } else if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_CONTROL){
    063      stateKeys = ctrl;
    064    } else if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_ALT){
    065      stateKeys = alt;
    066    } else if((stateMask & (KeyEvent.VK_CONTROL + KeyEvent.VK_ALT + KeyEvent.VK_SHIFT)) == KeyEvent.VK_SHIFT){
    067      stateKeys = shift;
    068    } else{
    069      stateKeys = 0;
    070    }
    071    switch(keyCode){
    072      case KeyEvent.VK_LEFT:  key = left; break;
    073      case KeyEvent.VK_RIGHT: key = right; break;
    074      case KeyEvent.VK_UP:    key = up; break;
    075      case KeyEvent.VK_DOWN:  key = dn; break;
    076      case KeyEvent.VK_PAGE_UP:     key = pgup; break;
    077      case KeyEvent.VK_PAGE_DOWN:   key = pgdn; break;
    078      case KeyEvent.VK_F1:          key = F1; break;
    079      case KeyEvent.VK_F2:          key = F2; break;
    080      case KeyEvent.VK_F3:          key = F3; break;
    081      case KeyEvent.VK_F4:          key = F4; break;
    082      case KeyEvent.VK_F5:          key = F5; break;
    083      case KeyEvent.VK_F6:          key = F6; break;
    084      case KeyEvent.VK_F7:          key = F7; break;
    085      case KeyEvent.VK_F8:          key = F8; break;
    086      case KeyEvent.VK_F9:          key = F9; break;
    087      case KeyEvent.VK_F10:         key = F10; break;
    088      case KeyEvent.VK_F11:         key = F11; break;
    089      case KeyEvent.VK_F12:         key = F12; break;
    090      case KeyEvent.VK_HOME:        key = home; break;
    091      case KeyEvent.VK_END:         key = end; break;
    092      case KeyEvent.VK_INSERT:      key = ins; break;
    093      case KeyEvent.VK_DELETE:      key = del; break;
    094      case KeyEvent.VK_TAB:         key = tab; break;
    095      case 0x0d:            key = enter; break;
    096      case 0x08:            key = back; break;
    097      case 0x1b:            key = esc; break;
    098      default:{
    099        //if(characterKey == )
    100        key = 0;
    101      }
    102    }
    103    if(key == 0 && characterKey >= ' ' && characterKey != KeyEvent.CHAR_UNDEFINED) {
    104      if(stateKeys == shift ) {
    105        return characterKey;
    106      } else {
    107        return stateKeys + characterKey;
    108      }
    109    } else {
    110      return stateKeys + key;
    111    }
    112  }
    113
    114
    115
    116  public enum MouseAction{
    117    down, up, upMovedOutside, doubleClick
    118  };
    119
    120
    121  public static int convertMouseKey(int button, MouseAction action, int stateMask){
    122    final int keyMouse;
    123    switch(action){
    124      case down:{
    125        switch(button){
    126          case 1: keyMouse = KeyCode.mouse1Down; break;
    127          case 3: keyMouse = KeyCode.mouse2Down; break;
    128          case 2: keyMouse = KeyCode.mouse3Down; break;
    129          default: keyMouse = KeyCode.mouse3Down; break;  //other key
    130        }
    131
    132      } break;
    133      case up:{
    134        switch(button){
    135          case   1: keyMouse = KeyCode.mouse1Up; break;
    136          case   3: keyMouse = KeyCode.mouse2Up; break;
    137          case   2: keyMouse = KeyCode.mouse3Up; break;
    138          default: keyMouse = KeyCode.mouse3Up; break;  //other key
    139        }
    140
    141      } break;
    142      case upMovedOutside:{
    143        switch(button){
    144          case   1: keyMouse = KeyCode.mouse1UpMoved; break;
    145          case   3: keyMouse = KeyCode.mouse2UpMoved; break;
    146          case   2: keyMouse = KeyCode.mouse3Up; break;
    147          default: keyMouse = KeyCode.mouse3Up; break;  //other key
    148        }
    149
    150      } break;
    151      case doubleClick:{
    152        switch(button){
    153          case 1: keyMouse = KeyCode.mouse1Double; break;
    154          case 3: keyMouse = KeyCode.mouse2Double; break;
    155          case 2: keyMouse = KeyCode.mouse3Down; break;
    156          default: keyMouse = KeyCode.mouse3Down; break;  //other key
    157        }
    158
    159      } break;
    160      default: keyMouse = 0;  //unused, only because compiling error
    161    }
    162    final int keyCode = AwtGralKey.convertFromAwt(keyMouse, stateMask, '\0');
    163    return keyCode;
    164  }
    165
    166
    167
    168}