toggle line comment support

This commit is contained in:
Vadim Lopatin 2015-02-09 12:33:26 +03:00
parent 183571efa0
commit f99985623c
3 changed files with 28 additions and 11 deletions

View File

@ -683,7 +683,7 @@ class EditableContent {
if (ch == ' ') { if (ch == ' ') {
x++; x++;
} else if (ch == '\t') { } else if (ch == '\t') {
x = (x + _tabSize) % _tabSize; x = (x + _tabSize) / _tabSize * _tabSize;
} else { } else {
if (res.firstNonSpace < 0) { if (res.firstNonSpace < 0) {
res.firstNonSpace = i; res.firstNonSpace = i;

View File

@ -640,8 +640,12 @@ class Win32Window : Window {
_keyFlags &= ~flag; _keyFlags &= ~flag;
} }
bool onKey(KeyAction action, uint keyCode, int repeatCount, dchar character = 0) { bool onKey(KeyAction action, uint keyCode, int repeatCount, dchar character = 0, bool syskey = false) {
KeyEvent event; KeyEvent event;
if (syskey)
_keyFlags |= KeyFlag.Alt;
//else
// _keyFlags &= ~KeyFlag.Alt;
if (action == KeyAction.KeyDown || action == KeyAction.KeyUp) { if (action == KeyAction.KeyDown || action == KeyAction.KeyUp) {
switch(keyCode) { switch(keyCode) {
case KeyCode.SHIFT: case KeyCode.SHIFT:
@ -654,13 +658,29 @@ class Win32Window : Window {
updateKeyFlags(action, KeyFlag.Alt); updateKeyFlags(action, KeyFlag.Alt);
break; break;
default: default:
if (GetKeyState(VK_CONTROL) & 0x8000)
_keyFlags |= KeyFlag.Control;
else
_keyFlags &= ~KeyFlag.Control;
if (GetKeyState(VK_SHIFT) & 0x8000)
_keyFlags |= KeyFlag.Shift;
else
_keyFlags &= ~KeyFlag.Shift;
break; break;
} }
if (keyCode == 0xBF)
keyCode = KeyCode.KEY_DIVIDE;
event = new KeyEvent(action, keyCode, _keyFlags); event = new KeyEvent(action, keyCode, _keyFlags);
} else if (action == KeyAction.Text && character != 0) { } else if (action == KeyAction.Text && character != 0) {
dchar[] text; if (_keyFlags & (KeyFlag.Control | KeyFlag.Alt)) {
text ~= character; if (character >= 1 && character <= 26) {
event = new KeyEvent(action, 0, _keyFlags, cast(dstring)text); event = new KeyEvent(action, KeyCode.KEY_A + character - 1, _keyFlags);
}
} else {
dchar[] text;
text ~= character;
event = new KeyEvent(action, 0, _keyFlags, cast(dstring)text);
}
} }
bool res = false; bool res = false;
if (event !is null) { if (event !is null) {
@ -1091,7 +1111,7 @@ LRESULT WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_SYSKEYUP: case WM_SYSKEYUP:
if (window !is null) { if (window !is null) {
int repeatCount = lParam & 0xFFFF; int repeatCount = lParam & 0xFFFF;
if (window.onKey(message == WM_KEYDOWN || message == WM_SYSKEYDOWN ? KeyAction.KeyDown : KeyAction.KeyUp, wParam, repeatCount)) if (window.onKey(message == WM_KEYDOWN || message == WM_SYSKEYDOWN ? KeyAction.KeyDown : KeyAction.KeyUp, wParam, repeatCount, 0, message == WM_SYSKEYUP || message == WM_SYSKEYDOWN))
return 0; // processed return 0; // processed
} }
break; break;

View File

@ -411,9 +411,6 @@ 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) {
case EditorActions.ToggleBlockComment:
return enabled && !_selectionRange.empty;
case EditorActions.ToggleLineComment:
case EditorActions.Tab: case EditorActions.Tab:
case EditorActions.BackTab: case EditorActions.BackTab:
case EditorActions.Indent: case EditorActions.Indent:
@ -908,7 +905,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
case EditorActions.ToggleBlockComment: case EditorActions.ToggleBlockComment:
if (!_content.syntaxHighlighter || !_content.syntaxHighlighter.supportsToggleBlockComment) if (!_content.syntaxHighlighter || !_content.syntaxHighlighter.supportsToggleBlockComment)
a.state = ACTION_STATE_INVISIBLE; a.state = ACTION_STATE_INVISIBLE;
else if (_content.syntaxHighlighter.canToggleBlockComment(_selectionRange)) else if (enabled && _content.syntaxHighlighter.canToggleBlockComment(_selectionRange))
a.state = ACTION_STATE_ENABLED; a.state = ACTION_STATE_ENABLED;
else else
a.state = ACTION_STATE_DISABLE; a.state = ACTION_STATE_DISABLE;
@ -916,7 +913,7 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
case EditorActions.ToggleLineComment: case EditorActions.ToggleLineComment:
if (!_content.syntaxHighlighter || !_content.syntaxHighlighter.supportsToggleLineComment) if (!_content.syntaxHighlighter || !_content.syntaxHighlighter.supportsToggleLineComment)
a.state = ACTION_STATE_INVISIBLE; a.state = ACTION_STATE_INVISIBLE;
else if (_content.syntaxHighlighter.canToggleLineComment(_selectionRange)) else if (enabled && _content.syntaxHighlighter.canToggleLineComment(_selectionRange))
a.state = ACTION_STATE_ENABLED; a.state = ACTION_STATE_ENABLED;
else else
a.state = ACTION_STATE_DISABLE; a.state = ACTION_STATE_DISABLE;