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 }
void ProperList::EnsureVisible(size_t n) { if(!IsRowVisible(n)) { size_t ve = GetVisibleRowsEnd(); if(n > ve) { ScrollRows(n - ve); } else { ScrollToRow(n); } } }