void CSourcesListBox::TranslateKeys( wxListEvent& event ) { if ( event.GetKeyCode() == WXK_DELETE || event.GetKeyCode() == WXK_BACK ) DelSel(); else if ( event.GetKeyCode() == WXK_F2 ) RenameSel(); else event.Skip(); }
void sTextControl::OnKey(sU32 key) { sInt len; sU32 ckey; sInt i,j; sChar buffer[2]; // prepare... if(key&sKEYQ_SHIFT) key|=sKEYQ_SHIFT; if(key&sKEYQ_CTRL ) key|=sKEYQ_CTRL ; len = sGetStringLen(Text); if(Cursor>len) Cursor = len; // normal keys switch(key&(0x8001ffff|sKEYQ_SHIFT|sKEYQ_CTRL)) { case sKEY_BACKSPACE: if(SelMode) { DelSel(); } else { if(Cursor==0) break; Cursor--; Engine(Cursor,1,0); Post(DoneCmd); SelMode = 0; OnCalcSize(); ScrollToCursor(); } break; case sKEY_DELETE: if(SelMode) { DelSel(); } else { Engine(Cursor,1,0); OnCalcSize(); Post(DoneCmd); } ScrollToCursor(); break; case sKEY_ENTER: if(SelMode) DelSel(); i = Cursor-GetCursorX(); for(j=0;i<Cursor && Text[i]==' ';i++) j++; if(Cursor>i && Text[Cursor-1]=='{') j+=2; Engine(Cursor,1,"\n"); Cursor++; for(i=0;i<j;i++) { Engine(Cursor,1," "); Cursor++; } OnCalcSize(); ScrollToCursor(); break; case sKEY_PAGEUP: len = RealY/sPainter->GetHeight(sGui->FixedFont)-8; if(len<1) len = 1; for(i=0;i<len;i++) OnKey(sKEY_UP); break; case sKEY_PAGEDOWN: len = RealY/sPainter->GetHeight(sGui->FixedFont)-8; if(len<1) len = 1; for(i=0;i<len;i++) OnKey(sKEY_DOWN); break; case sKEY_INSERT: Overwrite = !Overwrite; ScrollToCursor(); break; case 'x'|sKEYQ_CTRL: OnCommand(sTCC_CUT); OnCalcSize(); ScrollToCursor(); break; case 'c'|sKEYQ_CTRL: OnCommand(sTCC_COPY); ScrollToCursor(); break; case 'v'|sKEYQ_CTRL: OnCommand(sTCC_PASTE); OnCalcSize(); ScrollToCursor(); break; case 'b'|sKEYQ_CTRL: OnCommand(sTCC_BLOCK); ScrollToCursor(); break; } // sDPrintF("key %08x\n",key); ckey = key&~(sKEYQ_SHIFT|sKEYQ_ALTGR|sKEYQ_REPEAT); if((ckey>=0x20 && ckey<=0x7e) || (ckey>=0xa0 && ckey<=0xff)) { DelSel(); buffer[0] = ckey; buffer[1] = 0; if(Overwrite && Cursor<len) { Engine(Cursor,1,0); Engine(Cursor,1,buffer); Cursor++; Post(DoneCmd); } else { Engine(Cursor,1,buffer); Cursor++; Post(DoneCmd); } OnCalcSize(); ScrollToCursor(); } else { Parent->OnKey(key); } // cursor movement and shift-block-marking switch(key&0x8001ffff) { case sKEY_LEFT: case sKEY_RIGHT: case sKEY_UP: case sKEY_DOWN: case sKEY_HOME: case sKEY_END: if(SelMode==0 && (key&sKEYQ_SHIFT)) { SelMode = 1; SelPos = Cursor; } if(SelMode==1 && !(key&sKEYQ_SHIFT)) { SelMode = 0; } break; } switch(key&0x8001ffff) { case sKEY_LEFT: if(Cursor>0) Cursor--; ScrollToCursor(); break; case sKEY_RIGHT: if(Cursor<len) Cursor++; ScrollToCursor(); break; case sKEY_UP: j = i = CursorWish; if(Text[Cursor]=='\n' && Cursor>0) Cursor--; while(Text[Cursor]!='\n' && Cursor>0) Cursor--; while(Text[Cursor-1]!='\n' && Cursor>0) Cursor--; while(i>0 && Text[Cursor]!='\n' && Text[Cursor]!=0) { Cursor++; i--; } ScrollToCursor(); CursorWish = j; break; case sKEY_DOWN: j = i = CursorWish; while(Text[Cursor]!='\n' && Text[Cursor]!=0) Cursor++; if(Text[Cursor]=='\n') { Cursor++; while(i>0 && Text[Cursor]!='\n' && Text[Cursor]!=0) { Cursor++; i--; } } ScrollToCursor(); CursorWish = j; break; case sKEY_HOME: while(Cursor>0 && Text[Cursor-1]!='\n') Cursor--; ScrollToCursor(); break; case sKEY_END: while(Text[Cursor]!='\n' && Text[Cursor]!=0) Cursor++; ScrollToCursor(); break; } }