示例#1
0
文件: OEditor.cpp 项目: zonbrisad/ore
void OEditor::MoveCursor(int dir) {
  QString x;
  int i;
  LastCursorPos = CursorPos;
  switch (dir) {
    case CUR_UP:
      if (CursorPos==0)       // check if at first char in buf
        break;
      
      if (cury == 0) {        // if at first row scroll up
        ScrollRows(-1);
      }
      
      i = buf.lastIndexOf('\n', CursorPos);
      i = buf.lastIndexOf('\n', i-1);
      if (i==-1)
        i = 0;
      //wprintw(win, "%d", i);
      //printf("i %d\n", i);
      SetPos(i);
      CursorIndent();
      break;
    case CUR_DOWN:
      
      if (cury >= maxy) {
        ScrollRows(1);
      }   
      i = buf.indexOf('\n', CursorPos+1);
      SetPos(i);
      CursorIndent();
      break;
    case CUR_LEFT:
      SetPos(CursorPos-1);
      preferedXPos--;
      break;
    case CUR_RIGHT:
      SetPos(CursorPos+1);
      preferedXPos++;
      break;
    case CUR_NEXT_TOKEN: break;
    case CUR_PREV_TOKEN: break;
    case CUR_END:
      if (buf.at(CursorPos)=='\n') {
        CursorPos = buf.indexOf('\n', CursorPos+1) - 1;
      } else 
        CursorPos = buf.indexOf('\n', CursorPos) - 1;
      break;
    case CUR_BEGIN: 
      CursorPos = buf.lastIndexOf('\n', CursorPos);
      
      break;
  }
  
  this->UpdateCursor();     // calculate new cursor position 
  
  this->NCurPrint();        // update screen
}
示例#2
0
void ProperList::EnsureVisible(size_t n)
{
    if(!IsRowVisible(n))
    {
        size_t ve = GetVisibleRowsEnd();
        if(n > ve)
        {
            ScrollRows(n - ve);
        }
        else
        {
            ScrollToRow(n);
        }
    }
}