void ofxGLEditor::keyPressed(int key) { bool alt = kmap.isAltDown(); bool shift = kmap.isShiftDown(); bool ctrl = kmap.isControlDown(); int mod = 0; if (shift) { mod = 1; }else if (ctrl) { mod = 2; }else if (alt) { mod = 4; } int special = 0; if ( key == OF_KEY_LEFT || key == OF_KEY_UP || key == OF_KEY_RIGHT || key == OF_KEY_DOWN || key == OF_KEY_PAGE_UP || key == OF_KEY_PAGE_DOWN || key == OF_KEY_HOME || key == OF_KEY_END || key == OF_KEY_INSERT ) { special = key - 256; key = 0; } if (alt && key == 'r') { int i = 0; string script; for (int i = 0; i < glEditor.size(); i++) { script += wstring_to_string(glEditor[i]->GetAllText()); script += "\n"; glEditor[i]->m_haveError = false; glEditor[i]->m_errorLine = 0; } ofNotifyEvent(doCompileEvent, script); }else if (alt && key == 'b') { glEditor[currentEditor]->BlowupCursor(); }else if (alt && key == 'a') { glEditor[currentEditor]->ClearAllText(); glEditor[currentEditor]->m_haveError = false; glEditor[currentEditor]->m_errorLine = 0; }else if (alt && key == 'c') { copyToClipBoard(); }else if (alt && key == 'v') { pasteFromClipBoard(); }else if (alt && key == 's') { saveToFile(); }/*else if (alt && key == '1') { currentEditor = 1; }else if (alt && key == '2') { currentEditor = 2; }else if (alt && key == '3') { currentEditor = 3; }else if (alt && key == '4') { currentEditor = 4; }else if (alt && key == '5') { currentEditor = 5; }else if (alt && key == '6') { currentEditor = 6; }else if (alt && key == '7') { currentEditor = 7; }else if (alt && key == '8') { currentEditor = 8; }else if (alt && key == '9') { currentEditor = 9; }*/ glEditor[currentEditor]->Handle(-1, key, special, 0, ofGetMouseX(), ofGetMouseY(), mod); }
void ATOM_Edit::onKeyDown(ATOM_WidgetKeyDownEvent *event) { ATOM_STACK_TRACE(ATOM_Edit::onKeyDown); // 只读情况,不允许输入 if(EDITTYPE_READONLY & _editType) { return; } switch(event->key) { case KEY_LEFT: moveCursor(-1); break; case KEY_RIGHT: moveCursor(1); break; case KEY_DELETE: deleteChar(); break; case KEY_HOME: moveCursor(-getStringLength()); break; case KEY_END: moveCursor(getStringLength()); break; case KEY_UP: case KEY_DOWN: case KEY_RETURN: case KEY_KP_ENTER: case KEY_TAB: case KEY_ESCAPE: case KEY_SPACE: case KEY_COLON: { ATOM_EditSysKeyEvent keyevent(getId(), event->key); _parent->handleEvent(&keyevent); } break; case KEY_v: if(GetAsyncKeyState(VK_LCONTROL) &0x8000 || GetAsyncKeyState(VK_RCONTROL) &0x8000) { pasteFromClipBoard(); } break; case KEY_a: if(GetAsyncKeyState(VK_LCONTROL) &0x8000 || GetAsyncKeyState(VK_RCONTROL) &0x8000) { setCursor(_startPosition+_string.size()); _cusorOldPosition.x = _offsetX; _cusorOldPosition.y = 0; _cusorNewPosition = _cursorPosition; } break; case KEY_c: if(GetAsyncKeyState(VK_LCONTROL) &0x8000|| GetAsyncKeyState(VK_RCONTROL)&0x8000) { size_t s = 0,t = 0; _selectString = getSelectString(s,t); if(_selectString.empty()) return; if(OpenClipboard(NULL)) { HGLOBAL hmem=GlobalAlloc(GHND,_selectString.size()+1); char *pmem=(char*)GlobalLock(hmem); EmptyClipboard(); memcpy(pmem,_selectString.c_str(),_selectString.size()); SetClipboardData(CF_TEXT,hmem); CloseClipboard(); GlobalFree(hmem); } } break; case KEY_x: if(GetAsyncKeyState(VK_LCONTROL)&0x8000 || GetAsyncKeyState(VK_RCONTROL)&0x8000) { size_t s = 0,t = 0; _selectString = getSelectString(s,t); deleteString(s,t); if(_selectString.empty()) return; if(OpenClipboard(NULL)) { HGLOBAL hmem=GlobalAlloc(GHND,_selectString.size()+1); char *pmem=(char*)GlobalLock(hmem); EmptyClipboard(); memcpy(pmem,_selectString.c_str(),_selectString.size()); SetClipboardData(CF_TEXT,hmem); CloseClipboard(); GlobalFree(hmem); } } break; } if(_parent) { _parent->queueEvent (ATOM_NEW(ATOM_WidgetKeyDownEvent, getId(),event->key,event->keymod), ATOM_APP); } }