`switch` with `with` keyword to improve readability

This commit is contained in:
gazer 2015-12-19 11:28:50 +03:00
parent 2184396216
commit 2a53c9b4fd
13 changed files with 345 additions and 327 deletions

View File

@ -1016,25 +1016,26 @@ class ScrollEvent {
/// default update position for actions like PageUp/PageDown, LineUp/LineDown /// default update position for actions like PageUp/PageDown, LineUp/LineDown
int defaultUpdatePosition() { int defaultUpdatePosition() {
int delta = 0; int delta = 0;
switch (_action) { switch (_action) with(ScrollAction)
case ScrollAction.LineUp: {
case LineUp:
delta = _pageSize / 20; delta = _pageSize / 20;
if (delta < 1) if (delta < 1)
delta = 1; delta = 1;
delta = -delta; delta = -delta;
break; break;
case ScrollAction.LineDown: case LineDown:
delta = _pageSize / 20; delta = _pageSize / 20;
if (delta < 1) if (delta < 1)
delta = 1; delta = 1;
break; break;
case ScrollAction.PageUp: case PageUp:
delta = _pageSize * 3 / 4; delta = _pageSize * 3 / 4;
if (delta < 1) if (delta < 1)
delta = 1; delta = 1;
delta = -delta; delta = -delta;
break; break;
case ScrollAction.PageDown: case PageDown:
delta = _pageSize * 3 / 4; delta = _pageSize * 3 / 4;
if (delta < 1) if (delta < 1)
delta = 1; delta = 1;

View File

@ -75,22 +75,23 @@ struct RootEntry {
@property dstring label() { return _display; } @property dstring label() { return _display; }
/// Returns icon resource id /// Returns icon resource id
@property string icon() { @property string icon() {
switch (type) { switch (type) with(RootEntryType)
case RootEntryType.NETWORK: {
case NETWORK:
return "folder-network"; return "folder-network";
case RootEntryType.BOOKMARK: case BOOKMARK:
return "folder-bookmark"; return "folder-bookmark";
case RootEntryType.CDROM: case CDROM:
return "drive-optical"; return "drive-optical";
case RootEntryType.FIXED: case FIXED:
return "drive-harddisk"; return "drive-harddisk";
case RootEntryType.HOME: case HOME:
return "user-home"; return "user-home";
case RootEntryType.ROOT: case ROOT:
return "computer"; return "computer";
case RootEntryType.SDCARD: case SDCARD:
return "media-flash-sd-mmc"; return "media-flash-sd-mmc";
case RootEntryType.REMOVABLE: case REMOVABLE:
return "device-removable-media"; return "device-removable-media";
default: default:
return "folder-blue"; return "folder-blue";

View File

@ -139,8 +139,9 @@ class OutputLineStream {
/// reserve buf space /// reserve buf space
if (_buf.length < _len + s.length * 4 + 4) if (_buf.length < _len + s.length * 4 + 4)
_buf.length = _len + s.length * 4 + 4; _buf.length = _len + s.length * 4 + 4;
switch (_format.encoding) { switch (_format.encoding) with(EncodingType)
case EncodingType.UTF8: {
case UTF8:
default: default:
char[4] d; char[4] d;
for (int i = 0; i < s.length; i++) { for (int i = 0; i < s.length; i++) {
@ -149,7 +150,7 @@ class OutputLineStream {
_buf[_len++] = d[j]; _buf[_len++] = d[j];
} }
break; break;
case EncodingType.UTF16BE: case UTF16BE:
wchar[2] d; wchar[2] d;
for (int i = 0; i < s.length; i++) { for (int i = 0; i < s.length; i++) {
int n = cast(int)encode(d, s[i]); int n = cast(int)encode(d, s[i]);
@ -159,7 +160,7 @@ class OutputLineStream {
} }
} }
break; break;
case EncodingType.UTF16LE: case UTF16LE:
wchar[2] d; wchar[2] d;
for (int i = 0; i < s.length; i++) { for (int i = 0; i < s.length; i++) {
int n = cast(int)encode(d, s[i]); int n = cast(int)encode(d, s[i]);
@ -169,7 +170,7 @@ class OutputLineStream {
} }
} }
break; break;
case EncodingType.UTF32LE: case UTF32LE:
for (int i = 0; i < s.length; i++) { for (int i = 0; i < s.length; i++) {
dchar ch = s[i]; dchar ch = s[i];
_buf[_len++] = cast(char)((ch >> 0) & 0xFF); _buf[_len++] = cast(char)((ch >> 0) & 0xFF);
@ -178,7 +179,7 @@ class OutputLineStream {
_buf[_len++] = cast(char)((ch >> 24) & 0xFF); _buf[_len++] = cast(char)((ch >> 24) & 0xFF);
} }
break; break;
case EncodingType.UTF32BE: case UTF32BE:
for (int i = 0; i < s.length; i++) { for (int i = 0; i < s.length; i++) {
dchar ch = s[i]; dchar ch = s[i];
_buf[_len++] = cast(char)((ch >> 24) & 0xFF); _buf[_len++] = cast(char)((ch >> 24) & 0xFF);

View File

@ -128,13 +128,14 @@ class Log {
/// Log level to name helper function /// Log level to name helper function
static public string logLevelName(LogLevel level) { static public string logLevelName(LogLevel level) {
switch (level) { switch (level) with(LogLevel)
case LogLevel.Fatal: return "F"; {
case LogLevel.Error: return "E"; case Fatal: return "F";
case LogLevel.Warn: return "W"; case Error: return "E";
case LogLevel.Info: return "I"; case Warn: return "W";
case LogLevel.Debug: return "D"; case Info: return "I";
case LogLevel.Trace: return "V"; case Debug: return "D";
case Trace: return "V";
default: return "?"; default: return "?";
} }
} }

View File

@ -59,10 +59,10 @@ immutable int[3] COMPONENT_OFFSET_BGR = [2, 1, 0];
immutable int[3] COMPONENT_OFFSET_RGB = [0, 1, 2]; immutable int[3] COMPONENT_OFFSET_RGB = [0, 1, 2];
immutable int COMPONENT_OFFSET_ALPHA = 3; immutable int COMPONENT_OFFSET_ALPHA = 3;
int subpixelComponentIndex(int x0, SubpixelRenderingMode mode) { int subpixelComponentIndex(int x0, SubpixelRenderingMode mode) {
switch (mode) { switch (mode) with(SubpixelRenderingMode) {
case SubpixelRenderingMode.RGB: case RGB:
return COMPONENT_OFFSET_BGR[x0]; return COMPONENT_OFFSET_BGR[x0];
case SubpixelRenderingMode.BGR: case BGR:
default: default:
return COMPONENT_OFFSET_BGR[x0]; return COMPONENT_OFFSET_BGR[x0];
} }

View File

@ -105,136 +105,137 @@ class DSFMLWindow : dlangui.platforms.common.platform.Window {
} }
private MouseButton translateButton(uint btn) { private MouseButton translateButton(uint btn) {
switch(btn) { switch(btn) with(Mouse.Button) {
default: default:
case Mouse.Button.Left: case Left:
return MouseButton.Left; return MouseButton.Left;
case Mouse.Button.Right: case Right:
return MouseButton.Right; return MouseButton.Right;
case Mouse.Button.Middle: case Middle:
return MouseButton.Middle; return MouseButton.Middle;
case Mouse.Button.XButton1: case XButton1:
return MouseButton.XButton1; return MouseButton.XButton1;
case Mouse.Button.XButton2: case XButton2:
return MouseButton.XButton2; return MouseButton.XButton2;
} }
} }
private uint translateKey(uint key) { private uint translateKey(uint key) {
switch(key) { switch(key) with(Keyboard.Key)
case Keyboard.Key.A: return KeyCode.KEY_A; {
case Keyboard.Key.B: return KeyCode.KEY_B; case A: return KeyCode.KEY_A;
case Keyboard.Key.C: return KeyCode.KEY_C; case B: return KeyCode.KEY_B;
case Keyboard.Key.D: return KeyCode.KEY_D; case C: return KeyCode.KEY_C;
case Keyboard.Key.E: return KeyCode.KEY_E; case D: return KeyCode.KEY_D;
case Keyboard.Key.F: return KeyCode.KEY_F; case E: return KeyCode.KEY_E;
case Keyboard.Key.G: return KeyCode.KEY_G; case F: return KeyCode.KEY_F;
case Keyboard.Key.H: return KeyCode.KEY_H; case G: return KeyCode.KEY_G;
case Keyboard.Key.I: return KeyCode.KEY_I; case H: return KeyCode.KEY_H;
case Keyboard.Key.J: return KeyCode.KEY_J; case I: return KeyCode.KEY_I;
case Keyboard.Key.K: return KeyCode.KEY_K; case J: return KeyCode.KEY_J;
case Keyboard.Key.L: return KeyCode.KEY_L; case K: return KeyCode.KEY_K;
case Keyboard.Key.M: return KeyCode.KEY_M; case L: return KeyCode.KEY_L;
case Keyboard.Key.N: return KeyCode.KEY_N; case M: return KeyCode.KEY_M;
case Keyboard.Key.O: return KeyCode.KEY_O; case N: return KeyCode.KEY_N;
case Keyboard.Key.P: return KeyCode.KEY_P; case O: return KeyCode.KEY_O;
case Keyboard.Key.Q: return KeyCode.KEY_Q; case P: return KeyCode.KEY_P;
case Keyboard.Key.R: return KeyCode.KEY_R; case Q: return KeyCode.KEY_Q;
case Keyboard.Key.S: return KeyCode.KEY_S; case R: return KeyCode.KEY_R;
case Keyboard.Key.T: return KeyCode.KEY_T; case S: return KeyCode.KEY_S;
case Keyboard.Key.U: return KeyCode.KEY_U; case T: return KeyCode.KEY_T;
case Keyboard.Key.V: return KeyCode.KEY_V; case U: return KeyCode.KEY_U;
case Keyboard.Key.W: return KeyCode.KEY_W; case V: return KeyCode.KEY_V;
case Keyboard.Key.X: return KeyCode.KEY_X; case W: return KeyCode.KEY_W;
case Keyboard.Key.Y: return KeyCode.KEY_Y; case X: return KeyCode.KEY_X;
case Keyboard.Key.Z: return KeyCode.KEY_Z; case Y: return KeyCode.KEY_Y;
case Keyboard.Key.Num0: return KeyCode.KEY_0; case Z: return KeyCode.KEY_Z;
case Keyboard.Key.Num1: return KeyCode.KEY_1; case Num0: return KeyCode.KEY_0;
case Keyboard.Key.Num2: return KeyCode.KEY_2; case Num1: return KeyCode.KEY_1;
case Keyboard.Key.Num3: return KeyCode.KEY_3; case Num2: return KeyCode.KEY_2;
case Keyboard.Key.Num4: return KeyCode.KEY_4; case Num3: return KeyCode.KEY_3;
case Keyboard.Key.Num5: return KeyCode.KEY_5; case Num4: return KeyCode.KEY_4;
case Keyboard.Key.Num6: return KeyCode.KEY_6; case Num5: return KeyCode.KEY_5;
case Keyboard.Key.Num7: return KeyCode.KEY_7; case Num6: return KeyCode.KEY_6;
case Keyboard.Key.Num8: return KeyCode.KEY_8; case Num7: return KeyCode.KEY_7;
case Keyboard.Key.Num9: return KeyCode.KEY_9; case Num8: return KeyCode.KEY_8;
case Keyboard.Key.Escape: return KeyCode.ESCAPE; case Num9: return KeyCode.KEY_9;
case Keyboard.Key.LControl: return KeyCode.LCONTROL; case Escape: return KeyCode.ESCAPE;
case Keyboard.Key.LShift: return KeyCode.LSHIFT; case LControl: return KeyCode.LCONTROL;
case Keyboard.Key.LAlt: return KeyCode.LALT; case LShift: return KeyCode.LSHIFT;
case Keyboard.Key.RControl: return KeyCode.RCONTROL; case LAlt: return KeyCode.LALT;
case Keyboard.Key.RShift: return KeyCode.RSHIFT; case RControl: return KeyCode.RCONTROL;
case Keyboard.Key.RAlt: return KeyCode.RALT; case RShift: return KeyCode.RSHIFT;
case RAlt: return KeyCode.RALT;
///The [ key ///The [ key
case Keyboard.Key.LBracket: return KeyCode.KEY_BRACKETOPEN; case LBracket: return KeyCode.KEY_BRACKETOPEN;
///The ] key ///The ] key
case Keyboard.Key.RBracket: return KeyCode.KEY_BRACKETCLOSE; case RBracket: return KeyCode.KEY_BRACKETCLOSE;
///The ; key ///The ; key
case Keyboard.Key.SemiColon: return KeyCode.KEY_BRACKETOPEN; case SemiColon: return KeyCode.KEY_BRACKETOPEN;
///The , key ///The , key
case Keyboard.Key.Comma: return KeyCode.KEY_COMMA; case Comma: return KeyCode.KEY_COMMA;
///The . key ///The . key
case Keyboard.Key.Period: return KeyCode.KEY_PERIOD; case Period: return KeyCode.KEY_PERIOD;
///The ' key ///The ' key
case Keyboard.Key.Quote: return KeyCode.QUOTE; case Quote: return KeyCode.QUOTE;
///The / key ///The / key
case Keyboard.Key.Slash: return KeyCode.KEY_DIVIDE; case Slash: return KeyCode.KEY_DIVIDE;
///The \ key ///The \ key
case Keyboard.Key.BackSlash: return KeyCode.BACKSLASH; case BackSlash: return KeyCode.BACKSLASH;
///The ~ key ///The ~ key
case Keyboard.Key.Tilde: return KeyCode.TILDE; case Tilde: return KeyCode.TILDE;
///The = key ///The = key
case Keyboard.Key.Equal: return KeyCode.EQUAL; case Equal: return KeyCode.EQUAL;
///The - key ///The - key
case Keyboard.Key.Dash: return KeyCode.SUB; case Dash: return KeyCode.SUB;
///The Space key ///The Space key
case Keyboard.Key.Space: return KeyCode.SPACE; case Space: return KeyCode.SPACE;
case Keyboard.Key.Numpad0: return KeyCode.NUM_0; case Numpad0: return KeyCode.NUM_0;
case Keyboard.Key.Numpad1: return KeyCode.NUM_1; case Numpad1: return KeyCode.NUM_1;
case Keyboard.Key.Numpad2: return KeyCode.NUM_2; case Numpad2: return KeyCode.NUM_2;
case Keyboard.Key.Numpad3: return KeyCode.NUM_3; case Numpad3: return KeyCode.NUM_3;
case Keyboard.Key.Numpad4: return KeyCode.NUM_4; case Numpad4: return KeyCode.NUM_4;
case Keyboard.Key.Numpad5: return KeyCode.NUM_5; case Numpad5: return KeyCode.NUM_5;
case Keyboard.Key.Numpad6: return KeyCode.NUM_6; case Numpad6: return KeyCode.NUM_6;
case Keyboard.Key.Numpad7: return KeyCode.NUM_7; case Numpad7: return KeyCode.NUM_7;
case Keyboard.Key.Numpad8: return KeyCode.NUM_8; case Numpad8: return KeyCode.NUM_8;
case Keyboard.Key.Numpad9: return KeyCode.NUM_9; case Numpad9: return KeyCode.NUM_9;
case Keyboard.Key.F1: return KeyCode.F1; case F1: return KeyCode.F1;
case Keyboard.Key.F2: return KeyCode.F2; case F2: return KeyCode.F2;
case Keyboard.Key.F3: return KeyCode.F3; case F3: return KeyCode.F3;
case Keyboard.Key.F4: return KeyCode.F4; case F4: return KeyCode.F4;
case Keyboard.Key.F5: return KeyCode.F5; case F5: return KeyCode.F5;
case Keyboard.Key.F6: return KeyCode.F6; case F6: return KeyCode.F6;
case Keyboard.Key.F7: return KeyCode.F7; case F7: return KeyCode.F7;
case Keyboard.Key.F8: return KeyCode.F8; case F8: return KeyCode.F8;
case Keyboard.Key.F9: return KeyCode.F9; case F9: return KeyCode.F9;
case Keyboard.Key.F10: return KeyCode.F10; case F10: return KeyCode.F10;
case Keyboard.Key.F11: return KeyCode.F11; case F11: return KeyCode.F11;
case Keyboard.Key.F12: return KeyCode.F12; case F12: return KeyCode.F12;
case Keyboard.Key.F13: return KeyCode.F13; case F13: return KeyCode.F13;
case Keyboard.Key.F14: return KeyCode.F14; case F14: return KeyCode.F14;
case Keyboard.Key.F15: return KeyCode.F15; case F15: return KeyCode.F15;
case Keyboard.Key.Return: return KeyCode.RETURN; case Return: return KeyCode.RETURN;
case Keyboard.Key.BackSpace: return KeyCode.BACK; case BackSpace: return KeyCode.BACK;
case Keyboard.Key.Tab: return KeyCode.TAB; case Tab: return KeyCode.TAB;
case Keyboard.Key.PageUp: return KeyCode.PAGEUP; case PageUp: return KeyCode.PAGEUP;
case Keyboard.Key.PageDown: return KeyCode.PAGEDOWN; case PageDown: return KeyCode.PAGEDOWN;
case Keyboard.Key.End: return KeyCode.END; case End: return KeyCode.END;
case Keyboard.Key.Home: return KeyCode.HOME; case Home: return KeyCode.HOME;
case Keyboard.Key.Insert: return KeyCode.INS; case Insert: return KeyCode.INS;
case Keyboard.Key.Delete: return KeyCode.DEL; case Delete: return KeyCode.DEL;
case Keyboard.Key.Add: return KeyCode.ADD; case Add: return KeyCode.ADD;
case Keyboard.Key.Subtract: return KeyCode.SUB; case Subtract: return KeyCode.SUB;
case Keyboard.Key.Multiply: return KeyCode.MUL; case Multiply: return KeyCode.MUL;
case Keyboard.Key.Divide: return KeyCode.DIV; case Divide: return KeyCode.DIV;
case Keyboard.Key.Left: return KeyCode.LEFT; case Left: return KeyCode.LEFT;
case Keyboard.Key.Right: return KeyCode.RIGHT; case Right: return KeyCode.RIGHT;
case Keyboard.Key.Up: return KeyCode.UP; case Up: return KeyCode.UP;
case Keyboard.Key.Down: return KeyCode.DOWN; case Down: return KeyCode.DOWN;
default: return 0x8000_0000 | key; default: return 0x8000_0000 | key;
} }
} }
@ -243,46 +244,46 @@ class DSFMLWindow : dlangui.platforms.common.platform.Window {
private ushort keyFlags; private ushort keyFlags;
bool handleEvent(ref Event event) { bool handleEvent(ref Event event) {
switch (event.type) { switch (event.type) with(event.EventType) {
case(event.EventType.Closed): { case Closed: {
break; break;
} }
case(event.EventType.Resized): { case Resized: {
onResize(event.size.width, event.size.height); onResize(event.size.width, event.size.height);
break; break;
} }
case(event.EventType.MouseButtonPressed): { case MouseButtonPressed: {
auto btn = translateButton(event.mouseButton.button); auto btn = translateButton(event.mouseButton.button);
mouseFlags |= mouseButtonToFlag(btn); mouseFlags |= mouseButtonToFlag(btn);
MouseEvent ev = new MouseEvent(MouseAction.ButtonDown, btn, mouseFlags, cast(short)event.mouseButton.x, cast(short)event.mouseButton.y); MouseEvent ev = new MouseEvent(MouseAction.ButtonDown, btn, mouseFlags, cast(short)event.mouseButton.x, cast(short)event.mouseButton.y);
return dispatchMouseEvent(ev); return dispatchMouseEvent(ev);
} }
case(event.EventType.MouseButtonReleased): { case MouseButtonReleased: {
auto btn = translateButton(event.mouseButton.button); auto btn = translateButton(event.mouseButton.button);
mouseFlags &= ~mouseButtonToFlag(btn); mouseFlags &= ~mouseButtonToFlag(btn);
MouseEvent ev = new MouseEvent(MouseAction.ButtonUp, btn, mouseFlags, cast(short)event.mouseButton.x, cast(short)event.mouseButton.y); MouseEvent ev = new MouseEvent(MouseAction.ButtonUp, btn, mouseFlags, cast(short)event.mouseButton.x, cast(short)event.mouseButton.y);
return dispatchMouseEvent(ev); return dispatchMouseEvent(ev);
} }
case(event.EventType.MouseMoved): { case MouseMoved: {
MouseEvent ev = new MouseEvent(MouseAction.Move, MouseButton.None, mouseFlags, cast(short)event.mouseMove.x, cast(short)event.mouseMove.y); MouseEvent ev = new MouseEvent(MouseAction.Move, MouseButton.None, mouseFlags, cast(short)event.mouseMove.x, cast(short)event.mouseMove.y);
return dispatchMouseEvent(ev); return dispatchMouseEvent(ev);
} }
case(event.EventType.MouseEntered): { case MouseEntered: {
break; break;
} }
case(event.EventType.MouseLeft): { case MouseLeft: {
mouseFlags = 0; mouseFlags = 0;
break; break;
} }
case(event.EventType.MouseWheelMoved): { case MouseWheelMoved: {
break; break;
} }
case(event.EventType.TextEntered): { case TextEntered: {
KeyEvent ev = new KeyEvent(KeyAction.Text, 0, 0, [event.text.unicode]); KeyEvent ev = new KeyEvent(KeyAction.Text, 0, 0, [event.text.unicode]);
return dispatchKeyEvent(ev); return dispatchKeyEvent(ev);
} }
case(event.EventType.KeyReleased): case KeyReleased:
case(event.EventType.KeyPressed): { case KeyPressed: {
keyFlags = 0; keyFlags = 0;
if (event.key.alt) if (event.key.alt)
keyFlags |= KeyFlag.Alt; keyFlags |= KeyFlag.Alt;

View File

@ -346,41 +346,42 @@ class SDLWindow : Window {
return; return;
} }
// create new cursor // create new cursor
switch (cursorType) { switch (cursorType) with(CursorType)
case CursorType.Arrow: {
case Arrow:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
break; break;
case CursorType.IBeam: case IBeam:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
break; break;
case CursorType.Wait: case Wait:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT);
break; break;
case CursorType.WaitArrow: case WaitArrow:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAITARROW); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAITARROW);
break; break;
case CursorType.Crosshair: case Crosshair:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_CROSSHAIR); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_CROSSHAIR);
break; break;
case CursorType.No: case No:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO);
break; break;
case CursorType.Hand: case Hand:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
break; break;
case CursorType.SizeNWSE: case SizeNWSE:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
break; break;
case CursorType.SizeNESW: case SizeNESW:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
break; break;
case CursorType.SizeWE: case SizeWE:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
break; break;
case CursorType.SizeNS: case SizeNS:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
break; break;
case CursorType.SizeAll: case SizeAll:
cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
break; break;
default: default:

View File

@ -443,46 +443,47 @@ class Win32Window : Window {
void onSetCursorType() { void onSetCursorType() {
HANDLE winCursor = null; HANDLE winCursor = null;
switch (_cursorType) { switch (_cursorType) with(CursorType)
case CursorType.None: {
case None:
winCursor = null; winCursor = null;
break; break;
case CursorType.Parent: case Parent:
break; break;
case CursorType.Arrow: case Arrow:
winCursor = loadCursor(IDC_ARROW); winCursor = loadCursor(IDC_ARROW);
break; break;
case CursorType.IBeam: case IBeam:
winCursor = loadCursor(IDC_IBEAM); winCursor = loadCursor(IDC_IBEAM);
break; break;
case CursorType.Wait: case Wait:
winCursor = loadCursor(IDC_WAIT); winCursor = loadCursor(IDC_WAIT);
break; break;
case CursorType.Crosshair: case Crosshair:
winCursor = loadCursor(IDC_CROSS); winCursor = loadCursor(IDC_CROSS);
break; break;
case CursorType.WaitArrow: case WaitArrow:
winCursor = loadCursor(IDC_APPSTARTING); winCursor = loadCursor(IDC_APPSTARTING);
break; break;
case CursorType.SizeNWSE: case SizeNWSE:
winCursor = loadCursor(IDC_SIZENWSE); winCursor = loadCursor(IDC_SIZENWSE);
break; break;
case CursorType.SizeNESW: case SizeNESW:
winCursor = loadCursor(IDC_SIZENESW); winCursor = loadCursor(IDC_SIZENESW);
break; break;
case CursorType.SizeWE: case SizeWE:
winCursor = loadCursor(IDC_SIZEWE); winCursor = loadCursor(IDC_SIZEWE);
break; break;
case CursorType.SizeNS: case SizeNS:
winCursor = loadCursor(IDC_SIZENS); winCursor = loadCursor(IDC_SIZENS);
break; break;
case CursorType.SizeAll: case SizeAll:
winCursor = loadCursor(IDC_SIZEALL); winCursor = loadCursor(IDC_SIZEALL);
break; break;
case CursorType.No: case No:
winCursor = loadCursor(IDC_NO); winCursor = loadCursor(IDC_NO);
break; break;
case CursorType.Hand: case Hand:
winCursor = loadCursor(IDC_HAND); winCursor = loadCursor(IDC_HAND);
break; break;
default: default:

View File

@ -56,17 +56,18 @@ struct DockSpace {
ResizerWidget init(DockHost host, DockAlignment a) { ResizerWidget init(DockHost host, DockAlignment a) {
_host = host; _host = host;
_alignment = a; _alignment = a;
final switch (a) { final switch (a) with(DockAlignment)
case DockAlignment.Top: {
case Top:
_resizer = new ResizerWidget("top_resizer", Orientation.Vertical); _resizer = new ResizerWidget("top_resizer", Orientation.Vertical);
break; break;
case DockAlignment.Bottom: case Bottom:
_resizer = new ResizerWidget("bottom_resizer", Orientation.Vertical); _resizer = new ResizerWidget("bottom_resizer", Orientation.Vertical);
break; break;
case DockAlignment.Left: case Left:
_resizer = new ResizerWidget("left_resizer", Orientation.Horizontal); _resizer = new ResizerWidget("left_resizer", Orientation.Horizontal);
break; break;
case DockAlignment.Right: case Right:
_resizer = new ResizerWidget("right_resizer", Orientation.Horizontal); _resizer = new ResizerWidget("right_resizer", Orientation.Horizontal);
break; break;
} }
@ -104,20 +105,21 @@ struct DockSpace {
int rsWidth = 3; // resizer width int rsWidth = 3; // resizer width
if (_space) { if (_space) {
_rc = rc; _rc = rc;
final switch (_alignment) { final switch (_alignment) with(DockAlignment)
case DockAlignment.Top: {
case Top:
_resizerRect = Rect(rc.left, rc.bottom - rsWidth, rc.right, rc.bottom + rsWidth); _resizerRect = Rect(rc.left, rc.bottom - rsWidth, rc.right, rc.bottom + rsWidth);
_dockRect = Rect(rc.left, rc.top, rc.right, rc.bottom - rsWidth); _dockRect = Rect(rc.left, rc.top, rc.right, rc.bottom - rsWidth);
break; break;
case DockAlignment.Bottom: case Bottom:
_resizerRect = Rect(rc.left, rc.top - rsWidth, rc.right, rc.top + rsWidth); _resizerRect = Rect(rc.left, rc.top - rsWidth, rc.right, rc.top + rsWidth);
_dockRect = Rect(rc.left, rc.top + rsWidth, rc.right, rc.bottom); _dockRect = Rect(rc.left, rc.top + rsWidth, rc.right, rc.bottom);
break; break;
case DockAlignment.Left: case Left:
_resizerRect = Rect(rc.right - rsWidth, rc.top, rc.right + rsWidth, rc.bottom); _resizerRect = Rect(rc.right - rsWidth, rc.top, rc.right + rsWidth, rc.bottom);
_dockRect = Rect(rc.left, rc.top, rc.right - rsWidth, rc.bottom); _dockRect = Rect(rc.left, rc.top, rc.right - rsWidth, rc.bottom);
break; break;
case DockAlignment.Right: case Right:
_resizerRect = Rect(rc.left - rsWidth, rc.top, rc.left + rsWidth, rc.bottom); _resizerRect = Rect(rc.left - rsWidth, rc.top, rc.left + rsWidth, rc.bottom);
_dockRect = Rect(rc.left + rsWidth, rc.top, rc.right, rc.bottom); _dockRect = Rect(rc.left + rsWidth, rc.top, rc.right, rc.bottom);
break; break;

View File

@ -540,27 +540,28 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
/// override to change popup menu items state /// override to change popup menu items state
override bool isActionEnabled(const Action action) { override bool isActionEnabled(const Action action) {
switch (action.id) { switch (action.id) with(EditorActions)
case EditorActions.Tab: {
case EditorActions.BackTab: case Tab:
case EditorActions.Indent: case BackTab:
case EditorActions.Unindent: case Indent:
case Unindent:
return enabled; return enabled;
case EditorActions.Copy: case Copy:
return !_selectionRange.empty; return !_selectionRange.empty;
case EditorActions.Cut: case Cut:
return enabled && !_selectionRange.empty; return enabled && !_selectionRange.empty;
case EditorActions.Paste: case Paste:
return enabled && Platform.instance.getClipboardText().length > 0; return enabled && Platform.instance.getClipboardText().length > 0;
case EditorActions.Undo: case Undo:
return enabled && _content.hasUndo; return enabled && _content.hasUndo;
case EditorActions.Redo: case Redo:
return enabled && _content.hasRedo; return enabled && _content.hasRedo;
case EditorActions.ToggleBookmark: case ToggleBookmark:
return _content.multiline; return _content.multiline;
case EditorActions.GoToNextBookmark: case GoToNextBookmark:
return _content.multiline && _content.lineIcons.hasBookmarks; return _content.multiline && _content.lineIcons.hasBookmarks;
case EditorActions.GoToPreviousBookmark: case GoToPreviousBookmark:
return _content.multiline && _content.lineIcons.hasBookmarks; return _content.multiline && _content.lineIcons.hasBookmarks;
default: default:
return super.isActionEnabled(action); return super.isActionEnabled(action);
@ -1092,8 +1093,9 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
/// override to handle specific actions state (e.g. change enabled state for supported actions) /// override to handle specific actions state (e.g. change enabled state for supported actions)
override bool handleActionStateRequest(const Action a) { override bool handleActionStateRequest(const Action a) {
switch (a.id) { switch (a.id) with(EditorActions)
case EditorActions.ToggleBlockComment: {
case ToggleBlockComment:
if (!_content.syntaxSupport || !_content.syntaxSupport.supportsToggleBlockComment) if (!_content.syntaxSupport || !_content.syntaxSupport.supportsToggleBlockComment)
a.state = ACTION_STATE_INVISIBLE; a.state = ACTION_STATE_INVISIBLE;
else if (enabled && _content.syntaxSupport.canToggleBlockComment(_selectionRange)) else if (enabled && _content.syntaxSupport.canToggleBlockComment(_selectionRange))
@ -1101,7 +1103,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
else else
a.state = ACTION_STATE_DISABLE; a.state = ACTION_STATE_DISABLE;
return true; return true;
case EditorActions.ToggleLineComment: case ToggleLineComment:
if (!_content.syntaxSupport || !_content.syntaxSupport.supportsToggleLineComment) if (!_content.syntaxSupport || !_content.syntaxSupport.supportsToggleLineComment)
a.state = ACTION_STATE_INVISIBLE; a.state = ACTION_STATE_INVISIBLE;
else if (enabled && _content.syntaxSupport.canToggleLineComment(_selectionRange)) else if (enabled && _content.syntaxSupport.canToggleLineComment(_selectionRange))
@ -1109,15 +1111,15 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
else else
a.state = ACTION_STATE_DISABLE; a.state = ACTION_STATE_DISABLE;
return true; return true;
case EditorActions.Copy: case Copy:
case EditorActions.Cut: case Cut:
case EditorActions.Paste: case Paste:
case EditorActions.Undo: case Undo:
case EditorActions.Redo: case Redo:
case EditorActions.Tab: case Tab:
case EditorActions.BackTab: case BackTab:
case EditorActions.Indent: case Indent:
case EditorActions.Unindent: case Unindent:
if (isActionEnabled(a)) if (isActionEnabled(a))
a.state = ACTION_STATE_ENABLED; a.state = ACTION_STATE_ENABLED;
else else
@ -1131,9 +1133,10 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
override protected bool handleAction(const Action a) { override protected bool handleAction(const Action a) {
TextPosition oldCaretPos = _caretPos; TextPosition oldCaretPos = _caretPos;
dstring currentLine = _content[_caretPos.line]; dstring currentLine = _content[_caretPos.line];
switch (a.id) { switch (a.id) with(EditorActions)
case EditorActions.Left: {
case EditorActions.SelectLeft: case Left:
case SelectLeft:
correctCaretPos(); correctCaretPos();
if (_caretPos.pos > 0) { if (_caretPos.pos > 0) {
_caretPos.pos--; _caretPos.pos--;
@ -1145,8 +1148,8 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
ensureCaretVisible(); ensureCaretVisible();
} }
return true; return true;
case EditorActions.Right: case Right:
case EditorActions.SelectRight: case SelectRight:
correctCaretPos(); correctCaretPos();
if (_caretPos.pos < currentLine.length) { if (_caretPos.pos < currentLine.length) {
_caretPos.pos++; _caretPos.pos++;
@ -1159,8 +1162,8 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
ensureCaretVisible(); ensureCaretVisible();
} }
return true; return true;
case EditorActions.WordLeft: case WordLeft:
case EditorActions.SelectWordLeft: case SelectWordLeft:
{ {
TextPosition newpos = _content.moveByWord(_caretPos, -1, _camelCasePartsAsWords); TextPosition newpos = _content.moveByWord(_caretPos, -1, _camelCasePartsAsWords);
if (newpos != _caretPos) { if (newpos != _caretPos) {
@ -1170,8 +1173,8 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
} }
} }
return true; return true;
case EditorActions.WordRight: case WordRight:
case EditorActions.SelectWordRight: case SelectWordRight:
{ {
TextPosition newpos = _content.moveByWord(_caretPos, 1, _camelCasePartsAsWords); TextPosition newpos = _content.moveByWord(_caretPos, 1, _camelCasePartsAsWords);
if (newpos != _caretPos) { if (newpos != _caretPos) {
@ -1181,8 +1184,8 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
} }
} }
return true; return true;
case EditorActions.DocumentBegin: case DocumentBegin:
case EditorActions.SelectDocumentBegin: case SelectDocumentBegin:
if (_caretPos.pos > 0 || _caretPos.line > 0) { if (_caretPos.pos > 0 || _caretPos.line > 0) {
_caretPos.line = 0; _caretPos.line = 0;
_caretPos.pos = 0; _caretPos.pos = 0;
@ -1190,16 +1193,16 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.LineBegin: case LineBegin:
case EditorActions.SelectLineBegin: case SelectLineBegin:
if (_caretPos.pos > 0) { if (_caretPos.pos > 0) {
_caretPos.pos = 0; _caretPos.pos = 0;
ensureCaretVisible(); ensureCaretVisible();
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.DocumentEnd: case DocumentEnd:
case EditorActions.SelectDocumentEnd: case SelectDocumentEnd:
if (_caretPos.line < _content.length - 1 || _caretPos.pos < _content[_content.length - 1].length) { if (_caretPos.line < _content.length - 1 || _caretPos.pos < _content[_content.length - 1].length) {
_caretPos.line = _content.length - 1; _caretPos.line = _content.length - 1;
_caretPos.pos = cast(int)_content[_content.length - 1].length; _caretPos.pos = cast(int)_content[_content.length - 1].length;
@ -1207,15 +1210,15 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.LineEnd: case LineEnd:
case EditorActions.SelectLineEnd: case SelectLineEnd:
if (_caretPos.pos < currentLine.length) { if (_caretPos.pos < currentLine.length) {
_caretPos.pos = cast(int)currentLine.length; _caretPos.pos = cast(int)currentLine.length;
ensureCaretVisible(); ensureCaretVisible();
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.DelPrevWord: case DelPrevWord:
if (readOnly) if (readOnly)
return true; return true;
correctCaretPos(); correctCaretPos();
@ -1225,7 +1228,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
if (newpos < _caretPos) if (newpos < _caretPos)
removeRangeText(TextRange(newpos, _caretPos)); removeRangeText(TextRange(newpos, _caretPos));
return true; return true;
case EditorActions.DelNextWord: case DelNextWord:
if (readOnly) if (readOnly)
return true; return true;
correctCaretPos(); correctCaretPos();
@ -1235,7 +1238,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
if (newpos > _caretPos) if (newpos > _caretPos)
removeRangeText(TextRange(_caretPos, newpos)); removeRangeText(TextRange(_caretPos, newpos));
return true; return true;
case EditorActions.DelPrevChar: case DelPrevChar:
if (readOnly) if (readOnly)
return true; return true;
correctCaretPos(); correctCaretPos();
@ -1253,7 +1256,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
removeRangeText(range); removeRangeText(range);
} }
return true; return true;
case EditorActions.DelNextChar: case DelNextChar:
if (readOnly) if (readOnly)
return true; return true;
correctCaretPos(); correctCaretPos();
@ -1272,13 +1275,13 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
removeRangeText(range); removeRangeText(range);
} }
return true; return true;
case EditorActions.Copy: case Copy:
if (!_selectionRange.empty) { if (!_selectionRange.empty) {
dstring selectionText = concatDStrings(_content.rangeText(_selectionRange)); dstring selectionText = concatDStrings(_content.rangeText(_selectionRange));
platform.setClipboardText(selectionText); platform.setClipboardText(selectionText);
} }
return true; return true;
case EditorActions.Cut: case Cut:
if (!_selectionRange.empty) { if (!_selectionRange.empty) {
dstring selectionText = concatDStrings(_content.rangeText(_selectionRange)); dstring selectionText = concatDStrings(_content.rangeText(_selectionRange));
platform.setClipboardText(selectionText); platform.setClipboardText(selectionText);
@ -1288,7 +1291,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
_content.performOperation(op, this); _content.performOperation(op, this);
} }
return true; return true;
case EditorActions.Paste: case Paste:
{ {
if (readOnly) if (readOnly)
return true; return true;
@ -1303,27 +1306,27 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
_content.performOperation(op, this); _content.performOperation(op, this);
} }
return true; return true;
case EditorActions.Undo: case Undo:
{ {
if (readOnly) if (readOnly)
return true; return true;
_content.undo(this); _content.undo(this);
} }
return true; return true;
case EditorActions.Redo: case Redo:
{ {
if (readOnly) if (readOnly)
return true; return true;
_content.redo(this); _content.redo(this);
} }
return true; return true;
case EditorActions.Indent: case Indent:
indentRange(false); indentRange(false);
return true; return true;
case EditorActions.Unindent: case Unindent:
indentRange(true); indentRange(true);
return true; return true;
case EditorActions.Tab: case Tab:
{ {
if (readOnly) if (readOnly)
return true; return true;
@ -1357,7 +1360,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
} }
} }
return true; return true;
case EditorActions.BackTab: case BackTab:
{ {
if (readOnly) if (readOnly)
return true; return true;
@ -1394,10 +1397,10 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
} }
} }
return true; return true;
case EditorActions.ToggleReplaceMode: case ToggleReplaceMode:
replaceMode = !replaceMode; replaceMode = !replaceMode;
return true; return true;
case EditorActions.SelectAll: case SelectAll:
_selectionRange.start.line = 0; _selectionRange.start.line = 0;
_selectionRange.start.pos = 0; _selectionRange.start.pos = 0;
_selectionRange.end = _content.lineEnd(_content.length - 1); _selectionRange.end = _content.lineEnd(_content.length - 1);
@ -1405,15 +1408,15 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
ensureCaretVisible(); ensureCaretVisible();
requestActionsUpdate(); requestActionsUpdate();
return true; return true;
case EditorActions.ToggleBookmark: case ToggleBookmark:
if (_content.multiline) { if (_content.multiline) {
int line = a.longParam >= 0 ? cast(int)a.longParam : _caretPos.line; int line = a.longParam >= 0 ? cast(int)a.longParam : _caretPos.line;
_content.lineIcons.toggleBookmark(line); _content.lineIcons.toggleBookmark(line);
return true; return true;
} }
return false; return false;
case EditorActions.GoToNextBookmark: case GoToNextBookmark:
case EditorActions.GoToPreviousBookmark: case GoToPreviousBookmark:
if (_content.multiline) { if (_content.multiline) {
LineIcon mark = _content.lineIcons.findNext(LineIconType.bookmark, _selectionRange.end.line, a.id == EditorActions.GoToNextBookmark ? 1 : -1); LineIcon mark = _content.lineIcons.findNext(LineIconType.bookmark, _selectionRange.end.line, a.id == EditorActions.GoToNextBookmark ? 1 : -1);
if (mark) { if (mark) {
@ -1725,21 +1728,22 @@ class EditLine : EditWidgetBase {
} }
override bool handleAction(const Action a) { override bool handleAction(const Action a) {
switch (a.id) { switch (a.id) with(EditorActions)
case EditorActions.InsertNewLine: {
case EditorActions.PrependNewLine: case InsertNewLine:
case EditorActions.AppendNewLine: case PrependNewLine:
case AppendNewLine:
if (editorAction.assigned) { if (editorAction.assigned) {
return editorAction(a); return editorAction(a);
} }
break; break;
case EditorActions.Up: case Up:
break; break;
case EditorActions.Down: case Down:
break; break;
case EditorActions.PageUp: case PageUp:
break; break;
case EditorActions.PageDown: case PageDown:
break; break;
default: default:
break; break;
@ -2111,8 +2115,9 @@ class EditBox : EditWidgetBase {
override protected bool handleAction(const Action a) { override protected bool handleAction(const Action a) {
TextPosition oldCaretPos = _caretPos; TextPosition oldCaretPos = _caretPos;
dstring currentLine = _content[_caretPos.line]; dstring currentLine = _content[_caretPos.line];
switch (a.id) { switch (a.id) with(EditorActions)
case EditorActions.PrependNewLine: {
case PrependNewLine:
if (!readOnly) { if (!readOnly) {
correctCaretPos(); correctCaretPos();
_caretPos.pos = 0; _caretPos.pos = 0;
@ -2120,39 +2125,39 @@ class EditBox : EditWidgetBase {
_content.performOperation(op, this); _content.performOperation(op, this);
} }
return true; return true;
case EditorActions.InsertNewLine: case InsertNewLine:
if (!readOnly) { if (!readOnly) {
correctCaretPos(); correctCaretPos();
EditOperation op = new EditOperation(EditAction.Replace, _selectionRange, [""d, ""d]); EditOperation op = new EditOperation(EditAction.Replace, _selectionRange, [""d, ""d]);
_content.performOperation(op, this); _content.performOperation(op, this);
} }
return true; return true;
case EditorActions.Up: case Up:
case EditorActions.SelectUp: case SelectUp:
if (_caretPos.line > 0) { if (_caretPos.line > 0) {
_caretPos.line--; _caretPos.line--;
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
ensureCaretVisible(); ensureCaretVisible();
} }
return true; return true;
case EditorActions.Down: case Down:
case EditorActions.SelectDown: case SelectDown:
if (_caretPos.line < _content.length - 1) { if (_caretPos.line < _content.length - 1) {
_caretPos.line++; _caretPos.line++;
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
ensureCaretVisible(); ensureCaretVisible();
} }
return true; return true;
case EditorActions.PageBegin: case PageBegin:
case EditorActions.SelectPageBegin: case SelectPageBegin:
{ {
ensureCaretVisible(); ensureCaretVisible();
_caretPos.line = _firstVisibleLine; _caretPos.line = _firstVisibleLine;
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.PageEnd: case PageEnd:
case EditorActions.SelectPageEnd: case SelectPageEnd:
{ {
ensureCaretVisible(); ensureCaretVisible();
int fullLines = _clientRect.height / _lineHeight; int fullLines = _clientRect.height / _lineHeight;
@ -2163,8 +2168,8 @@ class EditBox : EditWidgetBase {
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.PageUp: case PageUp:
case EditorActions.SelectPageUp: case SelectPageUp:
{ {
ensureCaretVisible(); ensureCaretVisible();
int fullLines = _clientRect.height / _lineHeight; int fullLines = _clientRect.height / _lineHeight;
@ -2182,8 +2187,8 @@ class EditBox : EditWidgetBase {
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.PageDown: case PageDown:
case EditorActions.SelectPageDown: case SelectPageDown:
{ {
ensureCaretVisible(); ensureCaretVisible();
int fullLines = _clientRect.height / _lineHeight; int fullLines = _clientRect.height / _lineHeight;
@ -2200,7 +2205,7 @@ class EditBox : EditWidgetBase {
updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0); updateSelectionAfterCursorMovement(oldCaretPos, (a.id & 1) != 0);
} }
return true; return true;
case EditorActions.ScrollLeft: case ScrollLeft:
{ {
if (_scrollPos.x > 0) { if (_scrollPos.x > 0) {
int newpos = _scrollPos.x - _spaceWidth * 4; int newpos = _scrollPos.x - _spaceWidth * 4;
@ -2212,7 +2217,7 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ScrollRight: case ScrollRight:
{ {
if (_scrollPos.x < _maxLineWidth - _clientRect.width) { if (_scrollPos.x < _maxLineWidth - _clientRect.width) {
int newpos = _scrollPos.x + _spaceWidth * 4; int newpos = _scrollPos.x + _spaceWidth * 4;
@ -2224,7 +2229,7 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ScrollLineUp: case ScrollLineUp:
{ {
if (_firstVisibleLine > 0) { if (_firstVisibleLine > 0) {
_firstVisibleLine -= 3; _firstVisibleLine -= 3;
@ -2236,7 +2241,7 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ScrollPageUp: case ScrollPageUp:
{ {
int fullLines = _clientRect.height / _lineHeight; int fullLines = _clientRect.height / _lineHeight;
if (_firstVisibleLine > 0) { if (_firstVisibleLine > 0) {
@ -2249,7 +2254,7 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ScrollLineDown: case ScrollLineDown:
{ {
int fullLines = _clientRect.height / _lineHeight; int fullLines = _clientRect.height / _lineHeight;
if (_firstVisibleLine + fullLines < _content.length) { if (_firstVisibleLine + fullLines < _content.length) {
@ -2264,7 +2269,7 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ScrollPageDown: case ScrollPageDown:
{ {
int fullLines = _clientRect.height / _lineHeight; int fullLines = _clientRect.height / _lineHeight;
if (_firstVisibleLine + fullLines < _content.length) { if (_firstVisibleLine + fullLines < _content.length) {
@ -2279,10 +2284,10 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ZoomOut: case ZoomOut:
case EditorActions.ZoomIn: case ZoomIn:
{ {
int dir = a.id == EditorActions.ZoomIn ? 1 : -1; int dir = a.id == ZoomIn ? 1 : -1;
if (_minFontSize < _maxFontSize && _minFontSize > 0 && _maxFontSize > 0) { if (_minFontSize < _maxFontSize && _minFontSize > 0 && _maxFontSize > 0) {
int currentFontSize = fontSize; int currentFontSize = fontSize;
int increment = currentFontSize >= 30 ? 2 : 1; int increment = currentFontSize >= 30 ? 2 : 1;
@ -2300,15 +2305,15 @@ class EditBox : EditWidgetBase {
} }
} }
return true; return true;
case EditorActions.ToggleBlockComment: case ToggleBlockComment:
if (!readOnly && _content.syntaxSupport && _content.syntaxSupport.supportsToggleBlockComment && _content.syntaxSupport.canToggleBlockComment(_selectionRange)) if (!readOnly && _content.syntaxSupport && _content.syntaxSupport.supportsToggleBlockComment && _content.syntaxSupport.canToggleBlockComment(_selectionRange))
_content.syntaxSupport.toggleBlockComment(_selectionRange, this); _content.syntaxSupport.toggleBlockComment(_selectionRange, this);
return true; return true;
case EditorActions.ToggleLineComment: case ToggleLineComment:
if (!readOnly && _content.syntaxSupport && _content.syntaxSupport.supportsToggleLineComment && _content.syntaxSupport.canToggleLineComment(_selectionRange)) if (!readOnly && _content.syntaxSupport && _content.syntaxSupport.supportsToggleLineComment && _content.syntaxSupport.canToggleLineComment(_selectionRange))
_content.syntaxSupport.toggleLineComment(_selectionRange, this); _content.syntaxSupport.toggleLineComment(_selectionRange, this);
return true; return true;
case EditorActions.AppendNewLine: case AppendNewLine:
if (!readOnly) { if (!readOnly) {
correctCaretPos(); correctCaretPos();
TextPosition p = _content.lineEnd(_caretPos.line); TextPosition p = _content.lineEnd(_caretPos.line);
@ -2318,7 +2323,7 @@ class EditBox : EditWidgetBase {
_caretPos = oldCaretPos; _caretPos = oldCaretPos;
} }
return true; return true;
case EditorActions.DeleteLine: case DeleteLine:
if (!readOnly) { if (!readOnly) {
correctCaretPos(); correctCaretPos();
EditOperation op = new EditOperation(EditAction.Replace, _content.lineRange(_caretPos.line), [""d]); EditOperation op = new EditOperation(EditAction.Replace, _content.lineRange(_caretPos.line), [""d]);

View File

@ -852,17 +852,18 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
calcScrollableAreaPos(); calcScrollableAreaPos();
int actionId = a.id; int actionId = a.id;
if (_rowSelect) { if (_rowSelect) {
switch(actionId) { switch(actionId) with(GridActions)
case GridActions.Left: {
case Left:
actionId = GridActions.ScrollLeft; actionId = GridActions.ScrollLeft;
break; break;
case GridActions.Right: case Right:
actionId = GridActions.ScrollRight; actionId = GridActions.ScrollRight;
break; break;
//case GridActions.LineBegin: //case LineBegin:
// actionId = GridActions.ScrollPageLeft; // actionId = GridActions.ScrollPageLeft;
// break; // break;
//case GridActions.LineEnd: //case LineEnd:
// actionId = GridActions.ScrollPageRight; // actionId = GridActions.ScrollPageRight;
// break; // break;
default: default:
@ -870,39 +871,40 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
} }
} }
switch (actionId) { switch (actionId) with(GridActions)
case GridActions.ActivateCell: {
case ActivateCell:
if (cellActivated.assigned) { if (cellActivated.assigned) {
cellActivated(this, col, row); cellActivated(this, col, row);
return true; return true;
} }
return false; return false;
case GridActions.ScrollLeft: case ScrollLeft:
scrollBy(-1, 0); scrollBy(-1, 0);
return true; return true;
case GridActions.Left: case Left:
selectCell(_col - 1, _row); selectCell(_col - 1, _row);
return true; return true;
case GridActions.ScrollRight: case ScrollRight:
scrollBy(1, 0); scrollBy(1, 0);
return true; return true;
case GridActions.Right: case Right:
selectCell(_col + 1, _row); selectCell(_col + 1, _row);
return true; return true;
case GridActions.ScrollUp: case ScrollUp:
scrollBy(0, -1); scrollBy(0, -1);
return true; return true;
case GridActions.Up: case Up:
selectCell(_col, _row - 1); selectCell(_col, _row - 1);
return true; return true;
case GridActions.ScrollDown: case ScrollDown:
if (_fullyVisibleCells.bottom < _rows - 1) if (_fullyVisibleCells.bottom < _rows - 1)
scrollBy(0, 1); scrollBy(0, 1);
return true; return true;
case GridActions.Down: case Down:
selectCell(_col, _row + 1); selectCell(_col, _row + 1);
return true; return true;
case GridActions.ScrollPageLeft: case ScrollPageLeft:
// scroll left cell by cell // scroll left cell by cell
int prevCol = _headerCols + fixedCols + _scrollCol; int prevCol = _headerCols + fixedCols + _scrollCol;
while (_scrollCol > 0) { while (_scrollCol > 0) {
@ -911,14 +913,14 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
break; break;
} }
return true; return true;
case GridActions.ScrollPageRight: case ScrollPageRight:
int prevCol = _fullyVisibleCells.right; int prevCol = _fullyVisibleCells.right;
while (_headerCols + fixedCols + _scrollCol < prevCol) { while (_headerCols + fixedCols + _scrollCol < prevCol) {
if (!scrollBy(1, 0)) if (!scrollBy(1, 0))
break; break;
} }
return true; return true;
case GridActions.ScrollPageUp: case ScrollPageUp:
// scroll up line by line // scroll up line by line
int prevRow = _headerRows + fixedRows + _scrollRow; int prevRow = _headerRows + fixedRows + _scrollRow;
while (_scrollRow > 0) { while (_scrollRow > 0) {
@ -927,14 +929,14 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
break; break;
} }
return true; return true;
case GridActions.ScrollPageDown: case ScrollPageDown:
int prevRow = _fullyVisibleCells.bottom; int prevRow = _fullyVisibleCells.bottom;
while (_headerRows + fixedRows + _scrollRow < prevRow) { while (_headerRows + fixedRows + _scrollRow < prevRow) {
if (!scrollBy(0, 1)) if (!scrollBy(0, 1))
break; break;
} }
return true; return true;
case GridActions.LineBegin: case LineBegin:
if (_scrollCol > 0 && _col > _headerCols + fixedCols + _scrollCol && !_rowSelect) if (_scrollCol > 0 && _col > _headerCols + fixedCols + _scrollCol && !_rowSelect)
selectCell(_headerCols + fixedCols + _scrollCol, _row); selectCell(_headerCols + fixedCols + _scrollCol, _row);
else { else {
@ -946,10 +948,10 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
selectCell(_headerCols, _row); selectCell(_headerCols, _row);
} }
return true; return true;
case GridActions.LineEnd: case LineEnd:
selectCell(_cols - 1, _row); selectCell(_cols - 1, _row);
return true; return true;
case GridActions.DocumentBegin: case DocumentBegin:
if (_scrollRow > 0) { if (_scrollRow > 0) {
_scrollRow = 0; _scrollRow = 0;
updateScrollBars(); updateScrollBars();
@ -957,16 +959,16 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
} }
selectCell(_col, _headerRows); selectCell(_col, _headerRows);
return true; return true;
case GridActions.DocumentEnd: case DocumentEnd:
selectCell(_col, _rows - 1); selectCell(_col, _rows - 1);
return true; return true;
case GridActions.PageBegin: case PageBegin:
if (_scrollRow > 0) if (_scrollRow > 0)
selectCell(_col, _headerRows + fixedRows + _scrollRow); selectCell(_col, _headerRows + fixedRows + _scrollRow);
else else
selectCell(_col, _headerRows); selectCell(_col, _headerRows);
return true; return true;
case GridActions.PageEnd: case PageEnd:
int found = -1; int found = -1;
for (int i = fixedRows; i < _rows; i++) { for (int i = fixedRows; i < _rows; i++) {
Rect rc = cellRect(_col, i); Rect rc = cellRect(_col, i);
@ -978,7 +980,7 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
if (found >= 0) if (found >= 0)
selectCell(_col, found); selectCell(_col, found);
return true; return true;
case GridActions.PageUp: case PageUp:
if (_row > _fullyVisibleCells.top) { if (_row > _fullyVisibleCells.top) {
// not at top scrollable cell // not at top scrollable cell
selectCell(_col, _fullyVisibleCells.top); selectCell(_col, _fullyVisibleCells.top);
@ -998,7 +1000,7 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter {
} }
} }
return true; return true;
case GridActions.PageDown: case PageDown:
if (_row < _rows) { if (_row < _rows) {
if (_row < _fullyVisibleCells.bottom) { if (_row < _fullyVisibleCells.bottom) {
// not at top scrollable cell // not at top scrollable cell

View File

@ -605,9 +605,9 @@ class TreeItemWidget : HorizontalLayout {
if (event.action != KeyAction.KeyDown) if (event.action != KeyAction.KeyDown)
return false; return false;
int action = 0; int action = 0;
switch (event.keyCode) { switch (event.keyCode) with(KeyCode) {
case KeyCode.SPACE: case SPACE:
case KeyCode.RETURN: case RETURN:
if (_item.hasChildren) if (_item.hasChildren)
_item.toggleExpand(_item); _item.toggleExpand(_item);
else else
@ -859,42 +859,43 @@ class TreeWidgetBase : ScrollWidget, OnTreeContentChangeListener, OnTreeStateCh
override protected bool handleAction(const Action a) { override protected bool handleAction(const Action a) {
Log.d("tree.handleAction ", a.id); Log.d("tree.handleAction ", a.id);
switch (a.id) { switch (a.id) with(TreeActions)
case TreeActions.ScrollLeft: {
case ScrollLeft:
if (_hscrollbar) if (_hscrollbar)
_hscrollbar.sendScrollEvent(ScrollAction.LineUp); _hscrollbar.sendScrollEvent(ScrollAction.LineUp);
break; break;
case TreeActions.ScrollRight: case ScrollRight:
if (_hscrollbar) if (_hscrollbar)
_hscrollbar.sendScrollEvent(ScrollAction.LineDown); _hscrollbar.sendScrollEvent(ScrollAction.LineDown);
break; break;
case TreeActions.ScrollUp: case ScrollUp:
if (_vscrollbar) if (_vscrollbar)
_vscrollbar.sendScrollEvent(ScrollAction.LineUp); _vscrollbar.sendScrollEvent(ScrollAction.LineUp);
break; break;
case TreeActions.ScrollPageUp: case ScrollPageUp:
if (_vscrollbar) if (_vscrollbar)
_vscrollbar.sendScrollEvent(ScrollAction.PageUp); _vscrollbar.sendScrollEvent(ScrollAction.PageUp);
break; break;
case TreeActions.ScrollDown: case ScrollDown:
if (_vscrollbar) if (_vscrollbar)
_vscrollbar.sendScrollEvent(ScrollAction.LineDown); _vscrollbar.sendScrollEvent(ScrollAction.LineDown);
break; break;
case TreeActions.ScrollPageDown: case ScrollPageDown:
if (_vscrollbar) if (_vscrollbar)
_vscrollbar.sendScrollEvent(ScrollAction.PageDown); _vscrollbar.sendScrollEvent(ScrollAction.PageDown);
break; break;
case TreeActions.Up: case Up:
_tree.selectPrevious(); _tree.selectPrevious();
break; break;
case TreeActions.Down: case Down:
_tree.selectNext(); _tree.selectNext();
break; break;
case TreeActions.PageUp: case PageUp:
// TODO: implement page up // TODO: implement page up
_tree.selectPrevious(); _tree.selectPrevious();
break; break;
case TreeActions.PageDown: case PageDown:
// TODO: implement page down // TODO: implement page down
_tree.selectPrevious(); _tree.selectPrevious();
break; break;

View File

@ -946,24 +946,25 @@ class Widget {
return false; return false;
FocusMovement direction = FocusMovement.None; FocusMovement direction = FocusMovement.None;
uint flags = event.flags & (KeyFlag.Shift | KeyFlag.Control | KeyFlag.Alt); uint flags = event.flags & (KeyFlag.Shift | KeyFlag.Control | KeyFlag.Alt);
switch (event.keyCode) { switch (event.keyCode) with(KeyCode)
case KeyCode.LEFT: {
case LEFT:
if (flags == 0) if (flags == 0)
direction = FocusMovement.Left; direction = FocusMovement.Left;
break; break;
case KeyCode.RIGHT: case RIGHT:
if (flags == 0) if (flags == 0)
direction = FocusMovement.Right; direction = FocusMovement.Right;
break; break;
case KeyCode.UP: case UP:
if (flags == 0) if (flags == 0)
direction = FocusMovement.Up; direction = FocusMovement.Up;
break; break;
case KeyCode.DOWN: case DOWN:
if (flags == 0) if (flags == 0)
direction = FocusMovement.Down; direction = FocusMovement.Down;
break; break;
case KeyCode.TAB: case TAB:
if (flags == 0) if (flags == 0)
direction = FocusMovement.Next; direction = FocusMovement.Next;
else if (flags == KeyFlag.Shift) else if (flags == KeyFlag.Shift)