void SliderTestCase::PageUpDown() { #if wxUSE_UIACTIONSIMULATOR EventCounter pageup(m_slider, wxEVT_SCROLL_PAGEUP); EventCounter pagedown(m_slider, wxEVT_SCROLL_PAGEDOWN); wxUIActionSimulator sim; m_slider->SetFocus(); sim.Char(WXK_PAGEUP); sim.Char(WXK_PAGEDOWN); wxYield(); CPPUNIT_ASSERT_EQUAL(1, pageup.GetCount()); CPPUNIT_ASSERT_EQUAL(1, pagedown.GetCount()); #endif }
/** * Edit a stream * @param console_in stream to read console from * @param console_out stream to write console to * @param stream stream to read/write file to */ void muon_edit(handle_t console_in, handle_t console_out, const char *title, handle_t stream) { int rc; int i; editor_t *ed = (editor_t *) neutron_malloc(sizeof(editor_t)); memset(ed, 0, sizeof(editor_t)); ed->console_in = console_in; ed->console_out = console_out; ed->title = title; ed->anchor = -1; rc = load_file(ed, stream); get_console_size(ed); bool done = false; int key; ed->refresh = 1; while (!done) { if (ed->refresh) { draw_screen(ed); draw_full_statusline(ed); ed->refresh = 0; ed->lineupdate = 0; } else if (ed->lineupdate) { update_line(ed); ed->lineupdate = 0; draw_statusline(ed); } else { draw_statusline(ed); } position_cursor(ed); key = getkey(ed); if (key >= ' ' && key <= 0x7F) { insert_char(ed, (char) key); } else { switch (key) { case KEY_F1: help(ed); break; case KEY_F5: redraw_screen(ed); break; case KEY_UP: up(ed, 0); break; case KEY_DOWN: down(ed, 0); break; case KEY_LEFT: left(ed, 0); break; case KEY_RIGHT: right(ed, 0); break; case KEY_HOME: home(ed, 0); break; case KEY_END: end(ed, 0); break; case KEY_PGUP: pageup(ed, 0); break; case KEY_PGDN: pagedown(ed, 0); break; case KEY_CTRL_RIGHT: wordright(ed, 0); break; case KEY_CTRL_LEFT: wordleft(ed, 0); break; case KEY_CTRL_HOME: top(ed, 0); break; case KEY_CTRL_END: bottom(ed, 0); break; case KEY_SHIFT_UP: up(ed, 1); break; case KEY_SHIFT_DOWN: down(ed, 1); break; case KEY_SHIFT_LEFT: left(ed, 1); break; case KEY_SHIFT_RIGHT: right(ed, 1); break; case KEY_SHIFT_PGUP: pageup(ed, 1); break; case KEY_SHIFT_PGDN: pagedown(ed, 1); break; case KEY_SHIFT_HOME: home(ed, 1); break; case KEY_SHIFT_END: end(ed, 1); break; case KEY_SHIFT_CTRL_RIGHT: wordright(ed, 1); break; case KEY_SHIFT_CTRL_LEFT: wordleft(ed, 1); break; case KEY_SHIFT_CTRL_HOME: top(ed, 1); break; case KEY_SHIFT_CTRL_END: bottom(ed, 1); break; case ctrl('a'): select_all(ed); break; case ctrl('c'): copy_selection(ed); break; case ctrl('f'): find_text(ed, 0); break; case ctrl('l'): goto_line(ed); break; case ctrl('g'): find_text(ed, 1); break; case KEY_TAB: indent(ed, INDENT); break; case KEY_SHIFT_TAB: unindent(ed, INDENT); break; case KEY_ENTER: newline(ed); break; case KEY_BACKSPACE: backspace(ed); break; case KEY_DEL: del(ed); break; case ctrl('x'): cut_selection(ed); break; case ctrl('z'): undo(ed); break; case ctrl('r'): redo(ed); break; case ctrl('v'): paste_selection(ed); break; case ctrl('s'): save_editor(ed); break; case ctrl('q'): done = close_editor(ed); break; } } } gotoxy(ed, 0, ed->lines + 1); outstr(ed, RESET_COLOR CLREOL); if (ed->clipboard) neutron_free(ed->clipboard); if (ed->search) neutron_free(ed->search); if (ed->linebuf) neutron_free(ed->linebuf); clear_undo(ed); neutron_free(ed); }
int main(int argc,char *argv[]) { /*+++++++++++++++++Определения переменных функции main()+++++++++++++++++++++++++++++++++++*/ unsigned char c; /*Код клавиши (комбинации клавиш), который вводим.*/ unsigned char func_c; /*Флаг функциональной клавиши*/ unsigned char shift; /*Флаг нажатия shift*/ /*++++++++++++++++++Объявления внешних переменных используемых в main()++++++++++++++++++++*/ extern int line,pos; /*Положение курсора относительно строк редактируемого файла*/ extern int xt,yt,xk,yk; /*Координаты окна экрана(xk, yk) и массива(xt, yt)*/ start(argc,argv); first_frame(); /*Основной цикл*/ while(1) { /*При нажатии функциональных клавиш, в отличии от обычных, возвращается не один код, а два: первый 0 или 224 (0xE0) (зависит от того, на какой клавиатуре нажата функциональная клавиша: основной или дополнительной), а второй - уже непосредственно код функциональной клавиши. Например, при нажатии стрелки влево в буфер клавиатуры попадет два байта: 224 и 74. Все было бы хорошо, но 224 - это код русской буквы "а" (для данного locale), поэтому нужна дополнительная проверка на пустоту буфера. */ c=getch(); /*Считывание нажатой клавиши*/ func_c=0; /*Сброс флага нажатия функциональной клавиши*/ if(kbhit() && (c==0x0 || c==0xE0)) /*Если буфер клавиатуры не пуст и считанный код равен 0 или 224*/ { c=getch(); /*Считывание расширенного кода*/ func_c=1; /*Установка флага нажатия функциональной клавиши*/ } /*------------------------------------------------------------------------------*/ /*Проверка нажатия shift (при пошаговой отладке не работает)*/ shift=(GetKeyState(VK_SHIFT) & PRESS)?1:0; /*------------------------------------------------------------------------------*/ line=yk+yt; /*Cтрока, в которой сейчас находится курсор*/ pos=xk+xt; /*Столбец, в котором сейчас находится курсор*/ /*------------------------------------------------------------------------------*/ if(!func_c) /*Обработка символьных клавиш, и символьных управляющих клавиш*/ switch(c) { case 2: /*Ctrl-B*/ ctrl_b(); break; case 5: /*Ctrl-E*/ ctrl_e(); break; case 14: /*Ctrl-N*/ ctrl_n(); break; case 21: /*Ctrl-U*/ ctrl_u(); break; case 27: /*Esc*/ esc(); case 68: /*shift_D*/ shift_d(shift); break; default: /*Indent*/ if(c>31) /*Исключаем управляющие символы*/ indent(c); break; } else /*Обработка функциональных клавиш*/ switch(c) { case 72: /*Up*/ up(shift); break; case 80: /*Down*/ down(shift); break; case 75: /*Left*/ left(shift); break; case 77: /*Right*/ right(shift); break; case 73: /*PgUp*/ pageup(); break; case 81: /*PgDown*/ pagedown(); break; case 83: /*del*/ del(); break; case 71: /*Home*/ home(); break; case 79: /*End*/ end(); break; case 119: /*Ctrl-Home*/ ctrl_home(); break; case 117: /*Ctrl-End*/ ctrl_end(); break; case 93: /*Shift-F10*/ shift_f10(argv[1]); case 59: /*F1*/ f1(); break; case 60: /*F2*/ f2(argv[1]); break; case 65: /*F7*/ f7(); break; } } }