package com.redhat.ceylon.eclipse.code.refactor; import static java.lang.Character.isUpperCase; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.widgets.Text; final class SubwordIterator implements KeyListener { private final Text text; private static final int MOD; static { String platform = SWT.getPlatform(); if ("carbon".equals (platform) || "cocoa".equals (platform)) { MOD = SWT.MOD3; } else { MOD = SWT.MOD1; } } SubwordIterator(Text text) { this.text = text; } @Override public void keyReleased(KeyEvent e) {} @Override public void keyPressed(KeyEvent e) { if (e.keyCode==SWT.ARROW_RIGHT && e.stateMask==MOD) { int len = text.getText().length(); for (int i = text.getSelection().y+1; i<len; i++) { if (isUpperCase(text.getText().charAt(i))) { text.setSelection(i); e.doit = false; break; } } } if (e.keyCode==SWT.ARROW_LEFT && e.stateMask==MOD) { for (int i = text.getSelection().x-1; i>=0; i--) { if (isUpperCase(text.getText().charAt(i))) { text.setSelection(i); e.doit = false; break; } } } if (e.keyCode==SWT.ARROW_RIGHT && e.stateMask==(MOD|SWT.SHIFT)) { int len = text.getText().length(); for (int i = text.getSelection().y+1; i<len; i++) { if (isUpperCase(text.getText().charAt(i))) { text.setSelection(text.getSelection().x, i); e.doit = false; break; } } } if (e.keyCode==SWT.ARROW_LEFT && e.stateMask==(MOD|SWT.SHIFT)) { for (int i = text.getSelection().x-1; i>=0; i--) { if (isUpperCase(text.getText().charAt(i))) { text.setSelection(i, text.getSelection().y); e.doit = false; break; } } } } }