Пример #1
0
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();
}
Пример #2
0
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;
  }

}