int view_text(const char *title, const char *text) { struct view_info info; const struct button_mapping *view_contexts[] = { pla_main_ctx, }; int button; init_view(&info, title, text); draw_text(&info); /* wait for keypress */ while(1) { button = pluginlib_getaction(TIMEOUT_BLOCK, view_contexts, ARRAYLEN(view_contexts)); switch (button) { case PLA_UP: case PLA_UP_REPEAT: #ifdef HAVE_SCROLLWHEEL case PLA_SCROLL_BACK: case PLA_SCROLL_BACK_REPEAT: #endif scroll_up(&info, 1); break; case PLA_DOWN: case PLA_DOWN_REPEAT: #ifdef HAVE_SCROLLWHEEL case PLA_SCROLL_FWD: case PLA_SCROLL_FWD_REPEAT: #endif scroll_down(&info, 1); break; case PLA_LEFT: scroll_up(&info, info.display_lines); break; case PLA_RIGHT: scroll_down(&info, info.display_lines); break; case PLA_LEFT_REPEAT: scroll_to_top(&info); break; case PLA_RIGHT_REPEAT: scroll_to_bottom(&info); break; case PLA_EXIT: case PLA_CANCEL: return PLUGIN_OK; default: if (rb->default_event_handler(button) == SYS_USB_CONNECTED) return PLUGIN_USB_CONNECTED; break; } } return PLUGIN_OK; }
void terminal_put_char(Terminal *term, char c) { vga_put_char_at((vga_t*)term, c, term->color, term->column, term->row); if (++term->column > TERMINAL_END_X) { scroll_down(term); } else if(c == '\n') { vga_put_char_at((vga_t*)term, ' ', term->color, term->column - 1, term->row); scroll_down(term); term->command_column = 0; term->command_row = term->row; } }
void Editor::update_keyboard() { if (!enabled){ return; } auto controller = InputManager::current()->get_controller(); if (controller->pressed(Controller::ESCAPE)) { esc_press(); return; } if (controller->hold(Controller::LEFT)) { scroll_left(); } if (controller->hold(Controller::RIGHT)) { scroll_right(); } if (controller->hold(Controller::UP)) { scroll_up(); } if (controller->hold(Controller::DOWN)) { scroll_down(); } }
static void down_single_click_handler(ClickRecognizerRef recognizer, void *context) { if(selected_event) { scroll_down(); } else { auto_select_event(); } }
void move_curitem(int direction) { list_item tmp; if(curitem < 0 || curitem > last_item()) return; tmp = item_create(); item_copy(tmp, db_item_get(curitem)); switch(direction) { case MOVE_ITEM_UP: if( curitem < 1 ) goto out_move; item_copy(db_item_get(curitem), db_item_get(curitem - 1)); item_copy(db_item_get(curitem-1), tmp); scroll_up(); break; case MOVE_ITEM_DOWN: if(curitem >= last_item()) goto out_move; item_copy(db_item_get(curitem), db_item_get(curitem + 1)); item_copy(db_item_get(curitem + 1), tmp); scroll_down(); break; } out_move: item_free(&tmp); }
void menu_main(){ switch(current_function)//get current function and make decision based on it { case 0: //function 0 log if(!isShowingLog) show_log(); //if the log isnt showing show it if(nNxtButtonPressed == 2){ //if we are pressing left while(nNxtButtonPressed == 2); //must click and release to scroll another line scroll_down(); } if(nNxtButtonPressed == 1){ //if we are pressing right while(nNxtButtonPressed==1); //must click and release to scroll another line scroll_up(); } break; case 1: //function 1 menu display_menu(); break; } if(nNxtButtonPressed==3 && current_function!=1){ //if we press enter and are not on menu while(nNxtButtonPressed==3); //dont allow double reads. you have to release before anything happens hide_log(); //hide the menu. cant hurt previous_function=current_function; //save the old function number current_function=1; //set the current function to menu } }
WORD mon_disassembly_scroll(struct mon_disassembly_private *pmdp, MON_SCROLL_TYPE ScrollType) { switch (ScrollType) { case MON_SCROLL_NOTHING: break; case MON_SCROLL_DOWN: pmdp->StartAddress = scroll_down(pmdp, pmdp->StartAddress); break; case MON_SCROLL_UP: pmdp->StartAddress = scroll_up(pmdp, pmdp->StartAddress); break; case MON_SCROLL_PAGE_DOWN: pmdp->StartAddress = scroll_down_page(pmdp, pmdp->StartAddress); break; case MON_SCROLL_PAGE_UP: pmdp->StartAddress = scroll_up_page(pmdp, pmdp->StartAddress); break; } return pmdp->StartAddress; }
void screen_prev_line(struct te_buffer *buf) { if (buf == NULL) return; if (buf->y > 0) { buf->y--; buf->x = screen_line_length(buf->contents, buf->point); } else { if (bstrrchrp(buf->contents, '\n', buf->point) == BSTR_ERR) /* is it the first line of the file ? */ return; scroll_down(buffer_win); bstring s = current_line_as_bstring(buf->contents, buf->point - 1); draw_line(s, 0); bdestroy(s); /* update buf->top_char */ s = current_line_as_bstring(buf->contents, buf->top_char); buf->top_char -= blength(s); buf->top_char = max(buf->top_char, 0); bdestroy(s); } }
void scrollbar::process_event() { if (uparrow_.pressed()) scroll_up(); if (downarrow_.pressed()) scroll_down(); }
void palette_manager::scroll_bottom() { unsigned int old_start = active_palette().num_items(); unsigned int items_start = active_palette().start_num(); while (old_start != items_start) { old_start = items_start; scroll_down(); } }
static void cmd_ctrl_e(key_info_t key_info, keys_info_t *keys_info) { if(fpos_has_hidden_top(view)) { int new_pos = get_corrected_list_pos_down(view, view->column_count); scroll_down(view, view->column_count); goto_pos_force_update(new_pos); } }
static int escout(unsigned char c) { if (c == 'A') { if (cursory) cursory--; return 0; } if (c == 'B') { if (cursory < VT_BOTTOM) cursory++; return 0; } if (c == 'C') { if (cursorx < VT_RIGHT) cursorx++; return 0; } if (c == 'D') { if (cursorx) cursorx--; return 0; } if (c == 'E') { clear_lines(0, VT_HEIGHT); return 0; } if (c == 'H') { cursorx = 0; cursory = 0; return 0; } if (c == 'I') { if (cursory) cursory--; else { scroll_down(); clear_lines(0, 1); } return 0; } if (c == 'J') { clear_across(cursory, cursorx, VT_RIGHT - cursorx); clear_lines(cursory + 1, VT_BOTTOM - cursory); return 0; } if (c == 'K') { clear_across(cursory, cursorx, VT_RIGHT - cursorx); return 0; } if (c == 'Y') return 2; if (c == 'a') return 4; return 0; }
static void control_escape(char ch) { switch (ch) { case '[': for (int i = 0; i < CONSOLE_MAX_PARAMS; i++) console->params[i] = 0; console->param_count = 0; console->private_mode = 0; console->processor = control_escape_csi; break; case ']': console->params[0] = 0; console->string_len = -1; console->processor = control_escape_osc; break; case 'D': /* IND */ nl(); console->processor = NULL; break; case 'E': /* NEL */ crnl(); console->processor = NULL; break; case 'M': /* RI */ if (console->y == console->scroll_top) scroll_down(1); else set_pos(console->x, console->y - 1); console->processor = NULL; break; case '(': console->processor = control_escape_set_default_character_set; break; case ')': console->processor = control_escape_set_alternate_character_set; break; case '#': console->processor = control_escape_sharp; break; default: log_error("control_escape(): Unhandled character %c\n", ch); console->processor = NULL; } }
void kbd_handler() { char scancode = 0; if(inb(0x64) & 1) scancode = inb(0x60); // kprintf("%X ", scancode); // return; if(scancode & 0x80) { // when key release // if(scancode == 0x2A || scancode == 0x36) { shift_pressed = false; return; } } else { scancode = scancode & 0x7F; // 0x0E -> backspace // 0x49 -> page up // 0x48 -> a up // 0x4B -> a left // 0x4D -> a right // 0x50 -> a down // 0x51 -> page down // 0x47 -> home // 0x4F -> end serial_debug("%X ", scancode); if(scancode == 0x48) { scroll_up(); return; } if(scancode == 0x50) { scroll_down(); return; } if (scancode == 0x1) { kprintf("Shut down\n"); char *c = "Shutdown"; while (*c) { outb(0x8900, *c++); } } // kprintf("%c", scancode); // when key pressed // if(scancode == 0x2A || scancode == 0x36) { shift_pressed = true; return; } if(shift_pressed) { kprintf("%c", kbd_map_shift[scancode]); } else { kprintf("%c", kbd_map[scancode]); } } return; }
void table_scroll_handler(GtkTable *table, GdkEvent *ev, StackWidget *sw) { (void) table; GdkEventScroll *e = (GdkEventScroll *) ev; if(e->direction == GDK_SCROLL_UP) scroll_up(sw); if(e->direction == GDK_SCROLL_DOWN) scroll_down(sw); }
void add_message_to_chat(gpointer data, gchar *str, gchar type) { //pthread_mutex_lock(&mutex_guichange); GtkTextBuffer *text_view_buffer = GTK_TEXT_BUFFER(data); GtkTextIter textiter; INFO("debug","GUI: Adding Message: \"%s\" to chat\n", (char*) str); gtk_text_buffer_get_end_iter(text_view_buffer, &textiter); switch(type) { case 'j': //user join gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_join_fg", "bold", NULL); break; case 'l': //user leave gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_leave_fg", "bold", NULL); break; case 'm': //message received gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_msg_fg", NULL); break; case 'M': //message sent gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_msg_fg", "bold", NULL); break; case 'w': //whisp received gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_whisp_fg", NULL); break; case 'W': //whisp sent gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_whisp_fg", "bold", NULL); break; case 'e': // server communication type 1 gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_sys_msg_fg", "bold", NULL); break; case 's': //server communication type 2 gtk_text_buffer_insert_with_tags_by_name (text_view_buffer, &textiter, str, -1, "lmarg", "chat_sys_msg_fg", "bold", NULL); break; default: return; break; } scroll_down(gres.scrolledwindow_chat); //pthread_mutex_unlock(&mutex_guichange); }
void special_key(unsigned int key) { if(key == KEY_PAGE_DOWN && shift) { scroll_down(current_pty, 10); } else if(key == KEY_PAGE_UP && shift) { scroll_up(current_pty, 10); } else if(key == KEY_ARROW_UP) { sendescstr("[A"); } else if(key == KEY_ARROW_DOWN) { sendescstr("[B"); } else if(key == KEY_ARROW_LEFT) { sendescstr("[D"); } else if(key == KEY_ARROW_RIGHT) { sendescstr("[C"); } else if(key >= KEY_F1 && key <= KEY_F9 && ctrl) { int console = key - KEY_F1; switch_console(console); } else if(key >= KEY_F1 && key < KEY_F10) { char str[5]; str[0] = '['; str[1] = '1' + (key - KEY_F1); str[2] = 'F'; str[3] = 0; sendescstr(str); } else if(key == KEY_DEL) { if(shift) sendescstr("[^4~"); else sendescstr("[4~"); } else if(key == KEY_INSERT) { if(shift) sendescstr("[^1~"); else sendescstr("[1~"); } else if(key == KEY_HOME) { if(shift) sendescstr("[^2~"); else sendescstr("[2~"); } else if(key == KEY_END) { if(shift) sendescstr("[^5~"); else sendescstr("[5~"); } else if(key == KEY_PAGE_DOWN) { sendescstr("[6~"); } else if(key == KEY_PAGE_UP) { sendescstr("[3~"); } else if(key == KEY_BACKTAB) { sendescstr("[Z"); } }
void auto_select_event() { static time_t now; time(&now); get_upcoming_events(&selected_event,1,&now); if(!selected_event) { selected_event=get_last(); } APP_LOG(APP_LOG_LEVEL_INFO, "auto selected event %s. location=%d %s" ,selected_event?selected_event->description:"NULL", selected_location_id,get_location(selected_location_id)); scroll_up(); scroll_down(); APP_LOG(APP_LOG_LEVEL_INFO, "scrolled up to event %s",selected_event?selected_event->description:"NULL"); //selected_event = get_nearest_event_at(selected_location_id,&now); //APP_LOG(APP_LOG_LEVEL_INFO, "auto selected event %s",selected_event?selected_event->description:"NULL"); //show_event(); }
void EditorScroller::update(float elapsed_time) { if (!rendered) return; if (!can_scroll()) return; float horiz_scroll = scrolling_vec.x * elapsed_time; float vert_scroll = scrolling_vec.y * elapsed_time; auto editor = Editor::current(); if (horiz_scroll < 0) editor->scroll_left(-horiz_scroll); else if (horiz_scroll > 0) editor->scroll_right(horiz_scroll); if (vert_scroll < 0) editor->scroll_up(-vert_scroll); else if (vert_scroll > 0) editor->scroll_down(vert_scroll); }
void palette_manager::handle_event(const SDL_Event& event) { gui::widget::handle_event(event); if (event.type == SDL_MOUSEMOTION) { // If the mouse is inside the palette, give it focus. if (sdl::point_in_rect(event.button.x, event.button.y, location())) { if (!focus(&event)) set_focus(true); } // If the mouse is outside, remove focus. else if (focus(&event)) set_focus(false); } if (!focus(&event)) { return; } const SDL_MouseButtonEvent &mouse_button_event = event.button; if (event.type == SDL_MOUSEWHEEL) { if (event.wheel.y > 0) { scroll_up(); } else if (event.wheel.y < 0) { scroll_down(); } if (event.wheel.x < 0) { active_palette().prev_group(); scroll_top(); } else if (event.wheel.x > 0) { active_palette().next_group(); scroll_top(); } } if (mouse_button_event.type == SDL_MOUSEBUTTONUP) { //set_dirty(true); // draw(true); // set_dirty(active_palette().mouse_click()); // gui_.invalidate_game_status(); } }
void update_scr(int i) { int r, c; r = add_mod(i, -cur_top)/C; c = add_mod(i, -cur_top)%C; while(r >= R) { scroll_down(); r--; } if(pend) { p_x1 = min(c, p_x1); p_y1 = min(r, p_y1); p_x2 = max(c, p_x2); p_y2 = max(r, p_y2); } else { p_x1 = p_x2 = c; p_y1 = p_y2 = r; pend = 1; } }
void screen_insert_char(struct te_buffer *buf, char c) { if (buf == NULL) return; if (buf->dirty < 1) buf->dirty = 1; insert_char(buf, c); if (c == '\n') { clrtoeol(); clear_nfirst_lines(buffer_win, max(buf->y - 1, 0)); scroll_down(buffer_win); paint_buffer_nlines(buf, buf->y + 1); paint_nthline(buf, buf->y + 2, buf->y + 1); screen_move_right(buf); } else { bstring s = current_line_as_bstring(buf->contents, buf->point); draw_line(s, buf->y); screen_move_right(buf); } }
/* * Prepare frame * * This function loops forever: use 'return' when a frame is ready. * When returning, game_rects must contain every parts of the buffer * that have been modified. */ static void frame(void) { while (1) { switch (game_state) { #ifdef ENABLE_DEVTOOLS case DEVTOOLS: switch (devtools_run()) { case SCREEN_RUNNING: return; case SCREEN_DONE: game_state = INIT_GAME; break; case SCREEN_EXIT: game_state = EXIT; return; } break; #endif case XRICK: switch(screen_xrick()) { case SCREEN_RUNNING: return; case SCREEN_DONE: #ifdef ENABLE_DEVTOOLS game_state = DEVTOOLS; #else game_state = INIT_GAME; #endif break; case SCREEN_EXIT: game_state = EXIT; return; } break; case INIT_GAME: init(); game_state = INTRO_MAIN; break; case INTRO_MAIN: switch (screen_introMain()) { case SCREEN_RUNNING: return; case SCREEN_DONE: game_state = INTRO_MAP; break; case SCREEN_EXIT: game_state = EXIT; return; } break; case INTRO_MAP: switch (screen_introMap()) { case SCREEN_RUNNING: return; case SCREEN_DONE: game_waitevt = FALSE; game_state = INIT_BUFFER; break; case SCREEN_EXIT: game_state = EXIT; return; } break; case INIT_BUFFER: sysvid_clear(); /* clear buffer */ draw_map(); /* draw the map onto the buffer */ draw_drawStatus(); /* draw the status bar onto the buffer */ #ifdef ENABLE_CHEATS draw_infos(); /* draw the info bar onto the buffer */ #endif game_rects = &draw_SCREENRECT; /* request full buffer refresh */ game_state = PLAY0; return; case PAUSE_PRESSED1: screen_pause(TRUE); game_state = PAUSE_PRESSED1B; break; case PAUSE_PRESSED1B: if (control_status & CONTROL_PAUSE) return; game_state = PAUSED; break; case PAUSED: if (control_status & CONTROL_PAUSE) game_state = PAUSE_PRESSED2; if (control_status & CONTROL_EXIT) game_state = EXIT; return; case PAUSE_PRESSED2: if (!(control_status & CONTROL_PAUSE)) { game_waitevt = FALSE; screen_pause(FALSE); #ifdef ENABLE_SOUND syssnd_pause(FALSE, FALSE); #endif game_state = PLAY2; } return; case PLAY0: play0(); break; case PLAY1: if (control_status & CONTROL_PAUSE) { #ifdef ENABLE_SOUND syssnd_pause(TRUE, FALSE); #endif game_waitevt = TRUE; game_state = PAUSE_PRESSED1; } else if (control_active == FALSE) { #ifdef ENABLE_SOUND syssnd_pause(TRUE, FALSE); #endif game_waitevt = TRUE; screen_pause(TRUE); game_state = PAUSED; } else game_state = PLAY2; break; case PLAY2: if E_RICK_STTST(E_RICK_STDEAD) { /* rick is dead */ if (game_cheat1 || --game_lives) { game_state = RESTART; } else { game_state = GAMEOVER; } } else if (game_chsm) /* request to chain to next submap */ game_state = CHAIN_SUBMAP; else game_state = PLAY3; break; case PLAY3: play3(); return; case CHAIN_SUBMAP: if (map_chain()) game_state = CHAIN_END; else { game_bullets = 0x06; game_bombs = 0x06; game_map++; if (game_map == 0x04) { /* reached end of game */ /* FIXME @292?*/ } game_state = CHAIN_MAP; } break; case CHAIN_MAP: /* CHAIN MAP */ switch (screen_introMap()) { case SCREEN_RUNNING: return; case SCREEN_DONE: if (game_map >= 0x04) { /* reached end of game */ sysarg_args_map = 0; sysarg_args_submap = 0; game_state = GAMEOVER; } else { /* initialize game */ ent_ents[1].x = map_maps[game_map].x; ent_ents[1].y = map_maps[game_map].y; map_frow = (U8)map_maps[game_map].row; game_submap = map_maps[game_map].submap; game_state = CHAIN_END; } break; case SCREEN_EXIT: game_state = EXIT; return; } break; case CHAIN_END: map_init(); /* initialize the map */ isave(); /* save data in case of a restart */ ent_clprev(); /* cleanup entities */ draw_map(); /* draw the map onto the buffer */ draw_drawStatus(); /* draw the status bar onto the buffer */ game_rects = &draw_SCREENRECT; /* request full screen refresh */ game_state = PLAY3; return; case SCROLL_UP: switch (scroll_up()) { case SCROLL_RUNNING: return; case SCROLL_DONE: game_state = PLAY0; break; } break; case SCROLL_DOWN: switch (scroll_down()) { case SCROLL_RUNNING: return; case SCROLL_DONE: game_state = PLAY0; break; } break; case RESTART: restart(); game_state = PLAY0; return; case GAMEOVER: switch (screen_gameover()) { case SCREEN_RUNNING: return; case SCREEN_DONE: game_state = GETNAME; break; case SCREEN_EXIT: game_state = EXIT; break; } break; case GETNAME: switch (screen_getname()) { case SCREEN_RUNNING: return; case SCREEN_DONE: game_state = INIT_GAME; return; case SCREEN_EXIT: game_state = EXIT; break; } break; case EXIT: return; } }
void do_normalmode(struct block * buf) { int bs = get_bufsize(buf); struct ent * e; switch (buf->value) { // Movement commands case 'j': case OKEY_DOWN: currow = forw_row(1)->row; unselect_ranges(); update(TRUE); break; case 'k': case OKEY_UP: currow = back_row(1)->row; unselect_ranges(); update(TRUE); break; case 'h': case OKEY_LEFT: curcol = back_col(1)->col; unselect_ranges(); update(TRUE); break; case 'l': case OKEY_RIGHT: curcol = forw_col(1)->col; unselect_ranges(); update(TRUE); break; case '0': case OKEY_HOME: curcol = left_limit()->col; unselect_ranges(); update(TRUE); break; case '$': case OKEY_END: curcol = right_limit()->col; unselect_ranges(); update(TRUE); break; case '^': currow = goto_top()->row; unselect_ranges(); update(TRUE); break; case '#': currow = goto_bottom()->row; unselect_ranges(); update(TRUE); break; // Tick case '\'': if (bs != 2) break; unselect_ranges(); e = tick(buf->pnext->value); if (row_hidden[e->row]) { scerror("Cell row is hidden"); break; } if (col_hidden[e->col]) { scerror("Cell column is hidden"); break; } currow = e->row; curcol = e->col; update(TRUE); break; // CTRL j case ctl('j'): { int p, c = curcol, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); c = sr->tlcol; cf = sr->brcol; } auto_justify(c, cf, DEFWIDTH); // auto justificado de columnas update(TRUE); break; } // CTRL d case ctl('d'): // set date format using current locate D_FMT format { #ifdef USELOCALE #include <locale.h> #include <langinfo.h> char * loc = NULL; char * f = NULL; loc = setlocale(LC_TIME, ""); if (loc != NULL) { f = nl_langinfo(D_FMT); } else { scerror("No locale set. Nothing changed"); } int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (any_locked_cells(r, c, rf, cf)) { scerror("Locked cells encountered. Nothing changed"); return; } dateformat(lookat(r, c), lookat(rf, cf), f); update(TRUE); break; #else scinfo("Build made without USELOCALE enabled"); #endif } // CTRL f case ctl('f'): case OKEY_PGDOWN: { int n = LINES - RESROW - 1; if (atoi(get_conf_value("half_page_scroll"))) n = n / 2; struct ent * e = forw_row(n); currow = e->row; unselect_ranges(); scroll_down(n); update(TRUE); break; } // CTRL b case ctl('b'): case OKEY_PGUP: { int n = LINES - RESROW - 1; if (atoi(get_conf_value("half_page_scroll"))) n = n / 2; currow = back_row(n)->row; unselect_ranges(); scroll_up(n); update(TRUE); break; } case 'w': e = go_forward(); currow = e->row; curcol = e->col; unselect_ranges(); update(TRUE); break; case 'b': e = go_backward(); currow = e->row; curcol = e->col; unselect_ranges(); update(TRUE); break; case '/': { char cadena[] = ":int goto "; int i; for (i=0; i<strlen(cadena); i++) { flush_buf(buf); addto_buf(buf, cadena[i]); exec_single_cmd(buf); } break; } case 'H': currow = vert_top()->row; unselect_ranges(); update(TRUE); break; case 'M': currow = vert_middle()->row; unselect_ranges(); update(TRUE); break; case 'L': currow = vert_bottom()->row; unselect_ranges(); update(TRUE); break; case 'G': // goto end e = go_end(); currow = e->row; curcol = e->col; unselect_ranges(); update(TRUE); break; // GOTO goto case ctl('a'): e = go_home(); curcol = e->col; currow = e->row; unselect_ranges(); update(TRUE); break; case 'g': if (buf->pnext->value == '0') { // g0 curcol = go_bol()->col; } else if (buf->pnext->value == '$') { // g$ curcol = go_eol()->col; } else if (buf->pnext->value == 'g') { // gg e = go_home(); curcol = e->col; currow = e->row; } else if (buf->pnext->value == 'G') { // gG e = go_end(); currow = e->row; curcol = e->col; } else if (buf->pnext->value == 'M') { // gM curcol = horiz_middle()->col; } else { // gA4 (goto cell) (void) sprintf(interp_line, "goto %s", parse_cell_name(1, buf)); send_to_interp(interp_line); } unselect_ranges(); update(TRUE); break; // repeat last command case '.': copybuffer(lastcmd_buffer, buf); // nose graba en lastcmd_buffer!! cmd_multiplier = 1; exec_mult(buf, COMPLETECMDTIMEOUT); break; // enter command mode case ':': clr_header(input_win, 0); chg_mode(':'); #ifdef HISTORY_FILE add(commandline_history, ""); #endif print_mode(input_win); wrefresh(input_win); handle_cursor(); inputline_pos = 0; break; // enter visual mode case 'v': chg_mode('v'); handle_cursor(); clr_header(input_win, 0); print_mode(input_win); wrefresh(input_win); start_visualmode(currow, curcol, currow, curcol); break; // INPUT COMMANDS case '=': case '\\': case '<': case '>': if (locked_cell(currow, curcol)) return; insert_edit_submode = buf->value; chg_mode(insert_edit_submode); clr_header(input_win, 0); print_mode(input_win); wrefresh(input_win); inputline_pos = 0; break; // EDITION COMMANDS // edit cell (v) case 'e': if (locked_cell(currow, curcol)) return; clr_header(input_win, 0); inputline_pos = 0; if (start_edit_mode(buf, 'v')) show_header(input_win); break; // edit cell (s) case 'E': if (locked_cell(currow, curcol)) return; clr_header(input_win, 0); inputline_pos = 0; if (start_edit_mode(buf, 's')) show_header(input_win); else { scinfo("No string value to edit"); chg_mode('.'); show_celldetails(input_win); print_mode(input_win); wrefresh(input_win); } break; // del current cell or range case 'x': del_selected_cells(); update(TRUE); break; // format col case 'f': if (bs != 2) return; formatcol(buf->pnext->value); break; // mark cell or range case 'm': if (bs != 2) break; int p = is_range_selected(); if (p != -1) { // mark range struct srange * sr = get_range_by_pos(p); set_range_mark(buf->pnext->value, sr); } else // mark cell set_cell_mark(buf->pnext->value, currow, curcol); modflg++; break; // copy case 'c': { if (bs != 2) break; struct mark * m = get_mark(buf->pnext->value); if ( m == NULL) return; // if m represents a range if ( m->row == -1 && m->col == -1) { srange * r = m->rng; yank_area(r->tlrow, r->tlcol, r->brrow, r->brcol, 'a', cmd_multiplier); if (paste_yanked_ents(0, 'c') == -1) { scerror("Locked cells encountered. Nothing changed"); break; } // if m represents just one cell } else { struct ent * p = *ATBL(tbl, get_mark(buf->pnext->value)->row, get_mark(buf->pnext->value)->col); struct ent * n; int c1; #ifdef UNDO create_undo_action(); #endif for (c1 = curcol; cmd_multiplier-- && c1 < maxcols; c1++) { if ((n = * ATBL(tbl, currow, c1))) { if (n->flags & is_locked) continue; if (! p) { clearent(n); continue; } } else { if (! p) break; n = lookat(currow, c1); } #ifdef UNDO copy_to_undostruct(currow, c1, currow, c1, 'd'); #endif copyent(n, p, currow - get_mark(buf->pnext->value)->row, c1 - get_mark(buf->pnext->value)->col, 0, 0, maxrow, maxcol, 0); n->row += currow - get_mark(buf->pnext->value)->row; n->col += c1 - get_mark(buf->pnext->value)->col; n->flags |= is_changed; #ifdef UNDO copy_to_undostruct(currow, c1, currow, c1, 'a'); #endif } #ifdef UNDO end_undo_action(); #endif } if (atoi(get_conf_value("autocalc"))) EvalAll(); update(TRUE); break; } // repeat last goto command case 'n': go_last(); update(TRUE); break; // range lock / unlock / valueize case 'r': { int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (buf->pnext->value == 'l') { lock_cells(lookat(r, c), lookat(rf, cf)); } else if (buf->pnext->value == 'u') { unlock_cells(lookat(r, c), lookat(rf, cf)); } else if (buf->pnext->value == 'v') { valueize_area(r, c, rf, cf); } update(TRUE); break; } // create range with two marks case 'R': if (bs == 3) { create_range(buf->pnext->value, buf->pnext->pnext->value, NULL, NULL); update(TRUE); } break; // Zr Zc - Zap col or row - Show col or row - Sr Sc case 'Z': case 'S': { int rs, r = currow, c = curcol, arg = cmd_multiplier; struct srange * sr; if ( (rs = is_range_selected()) != -1) { sr = get_range_by_pos(rs); cmd_multiplier = 1; r = sr->tlrow; c = sr->tlcol; arg = buf->pnext->value == 'r' ? sr->brrow - sr->tlrow + 1 : sr->brcol - sr->tlcol + 1; } if (buf->value == 'Z' && buf->pnext->value == 'r') { hide_row(r, arg); } else if (buf->value == 'Z' && buf->pnext->value == 'c') { hide_col(c, arg); } else if (buf->value == 'S' && buf->pnext->value == 'r') { show_row(r, arg); } else if (buf->value == 'S' && buf->pnext->value == 'c') { show_col(c, arg); } cmd_multiplier = 0; update(TRUE); break; } // shift range or cell case 's': { int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if ( any_locked_cells(r, c, rf, cf) && (buf->pnext->value == 'h' || buf->pnext->value == 'k') ) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); #endif int ic = cmd_multiplier + 1; switch (buf->pnext->value) { case 'j': fix_marks( (rf - r + 1) * cmd_multiplier, 0, r, maxrow, c, cf); #ifdef UNDO save_undo_range_shift(cmd_multiplier, 0, r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf); #endif while (ic--) shift_range(ic, 0, r, c, rf, cf); break; case 'k': fix_marks( -(rf - r + 1) * cmd_multiplier, 0, r, maxrow, c, cf); yank_area(r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf, 'a', cmd_multiplier); // keep ents in yanklist for sk #ifdef UNDO copy_to_undostruct(r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf, 'd'); save_undo_range_shift(-cmd_multiplier, 0, r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf); #endif while (ic--) shift_range(-ic, 0, r, c, rf, cf); #ifdef UNDO copy_to_undostruct(r, c, rf + (rf-r+1) * (cmd_multiplier - 1), cf, 'a'); #endif break; case 'h': fix_marks(0, -(cf - c + 1) * cmd_multiplier, r, rf, c, maxcol); yank_area(r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1), 'a', cmd_multiplier); // keep ents in yanklist for sk #ifdef UNDO copy_to_undostruct(r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1), 'd'); save_undo_range_shift(0, -cmd_multiplier, r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1)); #endif while (ic--) shift_range(0, -ic, r, c, rf, cf); #ifdef UNDO copy_to_undostruct(r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1), 'a'); #endif break; case 'l': fix_marks(0, (cf - c + 1) * cmd_multiplier, r, rf, c, maxcol); #ifdef UNDO save_undo_range_shift(0, cmd_multiplier, r, c, rf, cf + (cf-c+1) * (cmd_multiplier - 1)); #endif while (ic--) shift_range(0, ic, r, c, rf, cf); break; } #ifdef UNDO end_undo_action(); #endif cmd_multiplier = 0; unselect_ranges(); update(TRUE); break; } // delete row or column, or selected cell or range case 'd': { if (bs != 2) return; int ic = cmd_multiplier; // orig if (buf->pnext->value == 'r') { if (any_locked_cells(currow, 0, currow + cmd_multiplier, maxcol)) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); copy_to_undostruct(currow, 0, currow + ic - 1, maxcol, 'd'); save_undo_range_shift(-ic, 0, currow, 0, currow - 1 + ic, maxcol); #endif fix_marks(-ic, 0, currow + ic - 1, maxrow, 0, maxcol); yank_area(currow, 0, currow - 1 + cmd_multiplier, maxcol, 'r', ic); while (ic--) deleterow(); #ifdef UNDO copy_to_undostruct(currow, 0, currow - 1 + cmd_multiplier, maxcol, 'a'); end_undo_action(); #endif if (cmd_multiplier > 0) cmd_multiplier = 0; } else if (buf->pnext->value == 'c') { if (any_locked_cells(0, curcol, maxrow, curcol + cmd_multiplier)) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); copy_to_undostruct(0, curcol, maxrow, curcol - 1 + ic, 'd'); save_undo_range_shift(0, -ic, 0, curcol, maxrow, curcol - 1 + ic); #endif fix_marks(0, -ic, 0, maxrow, curcol - 1 + ic, maxcol); yank_area(0, curcol, maxrow, curcol + cmd_multiplier - 1, 'c', ic); while (ic--) deletecol(); #ifdef UNDO copy_to_undostruct(0, curcol, maxrow, curcol + cmd_multiplier - 1, 'a'); end_undo_action(); #endif if (cmd_multiplier > 0) cmd_multiplier = 0; } else if (buf->pnext->value == 'd') { del_selected_cells(); } update(TRUE); break; } // insert row or column case 'i': { if (bs != 2) return; #ifdef UNDO create_undo_action(); #endif if (buf->pnext->value == 'r') { #ifdef UNDO save_undo_range_shift(1, 0, currow, 0, currow, maxcol); #endif fix_marks(1, 0, currow, maxrow, 0, maxcol); insert_row(0); } else if (buf->pnext->value == 'c') { #ifdef UNDO save_undo_range_shift(0, 1, 0, curcol, maxrow, curcol); #endif fix_marks(0, 1, 0, maxrow, curcol, maxcol); insert_col(0); } #ifdef UNDO end_undo_action(); #endif update(TRUE); break; } case 'y': // yank row if ( bs == 2 && buf->pnext->value == 'r') { yank_area(currow, 0, currow + cmd_multiplier - 1, maxcol, 'r', cmd_multiplier); if (cmd_multiplier > 0) cmd_multiplier = 0; // yank col } else if ( bs == 2 && buf->pnext->value == 'c') { yank_area(0, curcol, maxrow, curcol + cmd_multiplier - 1, 'c', cmd_multiplier); if (cmd_multiplier > 0) cmd_multiplier = 0; // yank cell } else if ( bs == 2 && buf->pnext->value == 'y' && is_range_selected() == -1) { yank_area(currow, curcol, currow, curcol, 'e', cmd_multiplier); // yank range } else if ( bs == 1 && is_range_selected() != -1) { srange * r = get_selected_range(); yank_area(r->tlrow, r->tlcol, r->brrow, r->brcol, 'a', cmd_multiplier); } break; // paste cell below or left case 'p': if (paste_yanked_ents(0, 'a') == -1) { scerror("Locked cells encountered. Nothing changed"); break; } update(TRUE); break; case 'P': case 'T': if (bs != 2) break; if (buf->pnext->value == 'v' || buf->pnext->value == 'f' || buf->pnext->value == 'c') { int res = buf->value == 'P' ? paste_yanked_ents(0, buf->pnext->value) : paste_yanked_ents(1, buf->pnext->value); // paste cell above or right if (res == -1) { scerror("Locked cells encountered. Nothing changed"); break; } update(TRUE); } break; // paste cell above or right case 't': if (paste_yanked_ents(1, 'a') == -1) { scerror("Locked cells encountered. Nothing changed"); break; } update(TRUE); break; // select inner range - Vir case 'V': if (buf->value == 'V' && bs == 3 && buf->pnext->value == 'i' && buf->pnext->pnext->value == 'r') { int tlrow = currow; int brrow = currow; int tlcol = curcol; int brcol = curcol; int * tlr = &tlrow; int * brr = &brrow; int * tlc = &tlcol; int * brc = &brcol; select_inner_range(tlr, tlc, brr, brc); start_visualmode(*tlr, *tlc, *brr, *brc); } break; // autojus case 'a': if ( bs != 2 ) break; if (buf->pnext->value == 'a') { int p, r = currow, c = curcol, rf = currow, cf = curcol; if ( (p = is_range_selected()) != -1) { struct srange * sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (any_locked_cells(r, c, rf, cf)) { scerror("Locked cells encountered. Nothing changed"); return; } char cline [BUFFERSIZE]; sprintf(cline, "autojus %s:", coltoa(c)); sprintf(cline + strlen(cline), "%s", coltoa(cf)); send_to_interp(cline); update(TRUE); } break; // scroll case 'z': if ( bs != 2 ) break; int scroll = 0; switch (buf->pnext->value) { case 'l': scroll_right(1); //unselect_ranges(); break; case 'h': scroll_left(1); //unselect_ranges(); break; case 'H': scroll = calc_offscr_sc_cols(); if (atoi(get_conf_value("half_page_scroll"))) scroll /= 2; scroll_left(scroll); //unselect_ranges(); break; case 'L': scroll = calc_offscr_sc_cols(); if (atoi(get_conf_value("half_page_scroll"))) scroll /= 2; scroll_right(scroll); //unselect_ranges(); break; case 'm': ; int i = 0, c = 0, ancho = rescol; offscr_sc_cols = 0; for (i = 0; i < curcol; i++) { for (c = i; c < curcol; c++) { if (!col_hidden[c]) ancho += fwidth[c]; if (ancho >= (COLS - rescol)/ 2) { ancho = rescol; break; } } if (c == curcol) break; } offscr_sc_cols = i; break; case 'z': case '.': case 't': case 'b': if (buf->pnext->value == 'z' || buf->pnext->value == '.') scroll = currow - offscr_sc_rows + LINES - RESROW - 2 - (LINES - RESROW - 2)/2; // zz else if (buf->pnext->value == 't') scroll = currow - offscr_sc_rows + 1; else if (buf->pnext->value == 'b') scroll = currow - offscr_sc_rows - LINES + RESROW + 2; if (scroll > 0) scroll_down(scroll); // else if (scroll > offscr_sc_rows) // scroll_up(-scroll); else if (scroll < 0) scroll_up(-scroll); // else if (offscr_sc_rows > 0) // scroll_up(offscr_sc_rows); break; } update(TRUE); break; // scroll up a line case ctl('y'): scroll_up(1); update(TRUE); break; // scroll down a line case ctl('e'): scroll_down(1); update(TRUE); break; // undo case 'u': #ifdef UNDO do_undo(); // sync_refs(); EvalAll(); update(TRUE); break; #else scerror("Build was done without UNDO support"); #endif // redo case ctl('r'): #ifdef UNDO do_redo(); // sync_refs(); EvalAll(); update(TRUE); break; #else scerror("Build was done without UNDO support"); #endif case '{': // left align case '}': // right align case '|': // center align { int p, r = currow, c = curcol, rf = currow, cf = curcol; struct srange * sr; if ( (p = is_range_selected()) != -1) { sr = get_range_by_pos(p); r = sr->tlrow; c = sr->tlcol; rf = sr->brrow; cf = sr->brcol; } if (any_locked_cells(r, c, rf, cf)) { scerror("Locked cells encountered. Nothing changed"); return; } #ifdef UNDO create_undo_action(); #endif if (buf->value == '{') sprintf(interp_line, "leftjustify %s", v_name(r, c)); else if (buf->value == '}') sprintf(interp_line, "rightjustify %s", v_name(r, c)); else if (buf->value == '|') sprintf(interp_line, "center %s", v_name(r, c)); if (p != -1) sprintf(interp_line + strlen(interp_line), ":%s", v_name(rf, cf)); #ifdef UNDO copy_to_undostruct(r, c, rf, cf, 'd'); #endif send_to_interp(interp_line); #ifdef UNDO copy_to_undostruct(r, c, rf, cf, 'a'); end_undo_action(); #endif cmd_multiplier = 0; update(TRUE); break; } case ctl('l'): /* endwin(); start_screen(); clearok(stdscr, TRUE); update(TRUE); flushinp(); show_header(input_win); show_celldetails(input_win); wrefresh(input_win); update(TRUE); */ winchg(); break; case '@': EvalAll(); update(TRUE); break; // increase or decrease numeric value of cell or range case '-': case '+': { int r, c, tlrow = currow, tlcol = curcol, brrow = currow, brcol = curcol; if ( is_range_selected() != -1 ) { struct srange * sr = get_selected_range(); tlrow = sr->tlrow; tlcol = sr->tlcol; brrow = sr->brrow; brcol = sr->brcol; } if (any_locked_cells(tlrow, tlcol, brrow, brcol)) { scerror("Locked cells encountered. Nothing changed"); return; } if (atoi(get_conf_value("numeric")) == 1) goto numeric; struct ent * p; #ifdef UNDO create_undo_action(); #endif int arg = cmd_multiplier; int mf = modflg; // keep original modflg for (r = tlrow; r <= brrow; r++) { for (c = tlcol; c <= brcol; c++) { p = *ATBL(tbl, r, c); if ( ! p ) { continue; } else if (p->expr && !(p->flags & is_strexpr)) { //scerror("Can't increment / decrement a formula"); continue; } else if (p->flags & is_valid) { #ifdef UNDO copy_to_undostruct(r, c, r, c, 'd'); #endif p->v += buf->value == '+' ? (double) arg : - 1 * (double) arg; #ifdef UNDO copy_to_undostruct(r, c, r, c, 'a'); #endif if (mf == modflg) modflg++; // increase just one time } } } #ifdef UNDO end_undo_action(); #endif if (atoi(get_conf_value("autocalc"))) EvalAll(); cmd_multiplier = 0; update(TRUE); } break; // input of numbers default: numeric: if ( (isdigit(buf->value) || buf->value == '-' || buf->value == '+') && atoi(get_conf_value("numeric")) ) { insert_edit_submode='='; chg_mode(insert_edit_submode); inputline_pos = 0; ins_in_line(buf->value); show_header(input_win); } } return; }
bool command_executor::execute_command(const hotkey_command& cmd, int /*index*/, bool press) { // hotkey release handling if (!press) { switch(cmd.id) { // release a scroll key, un-apply scrolling in the given direction case HOTKEY_SCROLL_UP: scroll_up(false); break; case HOTKEY_SCROLL_DOWN: scroll_down(false); break; case HOTKEY_SCROLL_LEFT: scroll_left(false); break; case HOTKEY_SCROLL_RIGHT: scroll_right(false); break; default: return false; // nothing else handles a hotkey release } return true; } // hotkey press handling switch(cmd.id) { case HOTKEY_SCROLL_UP: scroll_up(true); break; case HOTKEY_SCROLL_DOWN: scroll_down(true); break; case HOTKEY_SCROLL_LEFT: scroll_left(true); break; case HOTKEY_SCROLL_RIGHT: scroll_right(true); break; case HOTKEY_CYCLE_UNITS: cycle_units(); break; case HOTKEY_CYCLE_BACK_UNITS: cycle_back_units(); break; case HOTKEY_ENDTURN: end_turn(); break; case HOTKEY_UNIT_HOLD_POSITION: unit_hold_position(); break; case HOTKEY_END_UNIT_TURN: end_unit_turn(); break; case HOTKEY_LEADER: goto_leader(); break; case HOTKEY_UNDO: undo(); break; case HOTKEY_REDO: redo(); break; case HOTKEY_TERRAIN_DESCRIPTION: terrain_description(); break; case HOTKEY_UNIT_DESCRIPTION: unit_description(); break; case HOTKEY_RENAME_UNIT: rename_unit(); break; case HOTKEY_SAVE_GAME: save_game(); break; case HOTKEY_SAVE_REPLAY: save_replay(); break; case HOTKEY_SAVE_MAP: save_map(); break; case HOTKEY_LOAD_GAME: load_game(); break; case HOTKEY_TOGGLE_ELLIPSES: toggle_ellipses(); break; case HOTKEY_TOGGLE_GRID: toggle_grid(); break; case HOTKEY_STATUS_TABLE: status_table(); break; case HOTKEY_RECALL: recall(); break; case HOTKEY_LABEL_SETTINGS: label_settings(); break; case HOTKEY_RECRUIT: recruit(); break; case hotkey::HOTKEY_REPEAT_RECRUIT: repeat_recruit(); break; case HOTKEY_SPEAK: speak(); break; case HOTKEY_SPEAK_ALLY: whisper(); break; case HOTKEY_SPEAK_ALL: shout(); break; case HOTKEY_CREATE_UNIT: create_unit(); break; case HOTKEY_CHANGE_SIDE: change_side(); break; case HOTKEY_KILL_UNIT: kill_unit(); break; case HOTKEY_PREFERENCES: preferences(); break; case HOTKEY_OBJECTIVES: objectives(); break; case HOTKEY_UNIT_LIST: unit_list(); break; case HOTKEY_STATISTICS: show_statistics(); break; case HOTKEY_STOP_NETWORK: stop_network(); break; case HOTKEY_START_NETWORK: start_network(); break; case HOTKEY_LABEL_TEAM_TERRAIN: label_terrain(true); break; case HOTKEY_LABEL_TERRAIN: label_terrain(false); break; case HOTKEY_CLEAR_LABELS: clear_labels(); break; case HOTKEY_SHOW_ENEMY_MOVES: show_enemy_moves(false); break; case HOTKEY_BEST_ENEMY_MOVES: show_enemy_moves(true); break; case HOTKEY_DELAY_SHROUD: toggle_shroud_updates(); break; case HOTKEY_UPDATE_SHROUD: update_shroud_now(); break; case HOTKEY_CONTINUE_MOVE: continue_move(); break; case HOTKEY_SEARCH: search(); break; case HOTKEY_HELP: show_help(); break; case HOTKEY_CHAT_LOG: show_chat_log(); break; case HOTKEY_USER_CMD: user_command(); break; case HOTKEY_CUSTOM_CMD: custom_command(); break; case HOTKEY_AI_FORMULA: ai_formula(); break; case HOTKEY_CLEAR_MSG: clear_messages(); break; case HOTKEY_LANGUAGE: change_language(); break; case HOTKEY_REPLAY_PLAY: play_replay(); break; case HOTKEY_REPLAY_RESET: reset_replay(); break; case HOTKEY_REPLAY_STOP: stop_replay(); break; case HOTKEY_REPLAY_NEXT_TURN: replay_next_turn(); break; case HOTKEY_REPLAY_NEXT_SIDE: replay_next_side(); break; case HOTKEY_REPLAY_NEXT_MOVE: replay_next_move(); break; case HOTKEY_REPLAY_SHOW_EVERYTHING: replay_show_everything(); break; case HOTKEY_REPLAY_SHOW_EACH: replay_show_each(); break; case HOTKEY_REPLAY_SHOW_TEAM1: replay_show_team1(); break; case HOTKEY_REPLAY_SKIP_ANIMATION: replay_skip_animation(); break; case HOTKEY_REPLAY_EXIT: replay_exit(); break; case HOTKEY_WB_TOGGLE: whiteboard_toggle(); break; case HOTKEY_WB_EXECUTE_ACTION: whiteboard_execute_action(); break; case HOTKEY_WB_EXECUTE_ALL_ACTIONS: whiteboard_execute_all_actions(); break; case HOTKEY_WB_DELETE_ACTION: whiteboard_delete_action(); break; case HOTKEY_WB_BUMP_UP_ACTION: whiteboard_bump_up_action(); break; case HOTKEY_WB_BUMP_DOWN_ACTION: whiteboard_bump_down_action(); break; case HOTKEY_WB_SUPPOSE_DEAD: whiteboard_suppose_dead(); break; case HOTKEY_SELECT_HEX: select_hex(); break; case HOTKEY_DESELECT_HEX: deselect_hex(); break; case HOTKEY_MOVE_ACTION: move_action(); break; case HOTKEY_SELECT_AND_ACTION: select_and_action(); break; case HOTKEY_ACCELERATED: toggle_accelerated_speed(); break; case LUA_CONSOLE: lua_console(); break; case HOTKEY_ZOOM_IN: zoom_in(); break; case HOTKEY_ZOOM_OUT: zoom_out(); break; case HOTKEY_ZOOM_DEFAULT: zoom_default(); break; case HOTKEY_MAP_SCREENSHOT: map_screenshot(); break; case HOTKEY_QUIT_TO_DESKTOP: quit_confirmation::quit_to_desktop(); break; case HOTKEY_QUIT_GAME: quit_confirmation::quit_to_title(); break; default: return false; } return true; }
int CMessageBox::exec(int timeout) { neutrino_msg_t msg; neutrino_msg_data_t data; int res = menu_return::RETURN_REPAINT; CHintBoxExt::paint(0); if (m_window == NULL) { return res; /* out of memory */ } paintButtons(); if ( timeout == -1 ) timeout = g_settings.timing[SNeutrinoSettings::TIMING_EPG]; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); bool loop=true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); if (msg == CRCInput::RC_timeout && returnDefaultOnTimeout) { // return default loop = false; } else if (((msg == CRCInput::RC_timeout) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) && (showbuttons & (mbCancel | mbBack))) { result = (showbuttons & mbCancel) ? mbrCancel : mbrBack; loop = false; } else if ((msg == CRCInput::RC_green) && (showbuttons & mbNo)) { result = mbrNo; loop = false; } else if ((msg == CRCInput::RC_red) && (showbuttons & mbYes)) { result = mbrYes; loop = false; } else if(msg==CRCInput::RC_right) { bool ok = false; while (!ok) { result = (CMessageBox::result_)((result + 1) & 3); ok = showbuttons & (1 << result); } paintButtons(); } else if (has_scrollbar() && ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down))) { if (msg == CRCInput::RC_up) scroll_up(); else scroll_down(); } else if(msg==CRCInput::RC_left) { bool ok = false; while (!ok) { result = (CMessageBox::result_)((result - 1) & 3); ok = showbuttons & (1 << result); } paintButtons(); } else if(msg == CRCInput::RC_ok) { loop = false; } else if((msg == CRCInput::RC_sat) || (msg == CRCInput::RC_favorites)) { } else if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) { res = menu_return::RETURN_EXIT_ALL; loop = false; } } hide(); return res; }
static void update_display_char(char c) { static int cur_row, cur_col; static bool at_sr_bottom; static int esc_size; static char esc[ESC_MAX]; void display_esc_seq(FILE *out) { for (int i = 1; i < esc_size; i++) { if (isgraph(esc[i])) fprintf(out, " %c", esc[i]); else fprintf(out, " \\%o", esc[i]); } } if (sr_end == 0) sr_end = screen_height-1; // ESC if (c == '\33') { if (esc_size) { // An ESC aborts any seqs which are partial fprintf(logff, "warning: Escape sequence [\\33"); display_esc_seq(logff); fprintf(logff, "] aborted by an ESC\n"); } esc[0] = c; esc_size = 1; return; } if (esc_size) { // An escape sequence in progress esc[esc_size++] = c; if ((esc[1] == '(' || esc[1] == ')') && esc_size == 3) { // designate charset -- ignore trace("ignoring: %.*s\n", esc_size, esc); esc_size = 0; return; } if ((esc[1] == '>' || esc[1] == '=') && esc_size == 2) { // keypad -- ignore trace("ignoring: %.*s\n", esc_size, esc); esc_size = 0; return; } if (esc[1] == 'D' && esc_size == 2) { trace("index: %.*s\n", esc_size, esc); if (cur_row == sr_end) scroll_up(); else if (cur_row < screen_height-1) cur_row++; esc_size = 0; return; } if (esc[1] == 'M' && esc_size == 2) { trace("reverse index: %.*s\n", esc_size, esc); if (cur_row == sr_start) scroll_down(); else if (cur_row > 0) cur_row--; esc_size = 0; return; } if (esc[1] == '7' && esc_size == 2) { saved_row = cur_row; saved_col = cur_col; esc_size = 0; return; } if (esc[1] == '8' && esc_size == 2) { cur_row = saved_row; cur_col = saved_col; esc_size = 0; return; } if (esc[1] == 'H' && esc_size == 2) { fprintf(logff, "Warning: Ignoring request to set tab-stop.\n"); esc_size = 0; return; } if (esc[1] == '[' && isalpha(c)) { // control sequence int rv; switch (c) { default: fprintf(logff, "warning: Unknown escape sequence [\\33"); display_esc_seq(logff); fprintf(logff, "], ignoring.\n"); break; case 'm': // display attributes (inverse, bold, etc.) -- ignore case 'h': // terminal mode -- ignore case 'l': // terminal mode reset -- ignore case 'i': // print (as in, to a line printer) -- ignore case 'J': case 'K': // erase -- ignore trace("ignoring: %.*s\n", esc_size, esc); break; case 'g': // clear tab-stop fprintf(logff, "Warning: Ignoring request to clear " "tab-stop.\n"); break; case 'r': // scrolling region if (esc_size == 3) { trace("setting default scroll region " "(entire display)\n"); sr_start = 0; sr_end = screen_height-1; cur_row = cur_col = 0; at_sr_bottom = false; break; } rv = sscanf(esc+2, "%d;%d", &sr_start, &sr_end); if (rv != 2) { cleanup(); fprintf(stderr, "Invalid scroll region sequence [\\33"); display_esc_seq(stderr); fprintf(stderr, "]\n"); exit('r'); } // VT100 positions are 1-origin, not 0-origin. sr_start--; sr_end--; cur_row = cur_col = 0; at_sr_bottom = false; trace("setting scroll region to %d-%d: %.*s\n", sr_start, sr_end, esc_size, esc); break; case 'H': // cursor position if (esc_size == 3) { trace("going to (0, 0): %.*s\n", esc_size, esc); cur_row = cur_col = 0; at_sr_bottom = false; break; } rv = sscanf(esc+2, "%d;%d", &cur_row, &cur_col); if (rv != 2) { cleanup(); fprintf(stderr, "Invalid cursor position sequence [\\33"); display_esc_seq(stderr); fprintf(stderr, "]\n"); exit('H'); } // VT100 positions are 1-origin, not 0-origin. cur_row--; cur_col--; trace("going to (%d, %d): %.*s\n", cur_row, cur_col, esc_size, esc); at_sr_bottom = false; break; case 'A': // move cursor up case 'B': // move cursor down case 'C': // move cursor right case 'D':; // move cursor left int drow[4] = { -1, 1, 0, 0 }; int dcol[4] = { 0, 0, 1, -1 }; rv = 1; sscanf(esc+2, "%d", &rv); cur_row += rv * drow[c-'A']; cur_col += rv * dcol[c-'A']; if (cur_row >= screen_height) cur_row = screen_height-1; if (cur_row < 0) cur_row = 0; if (cur_col >= screen_width) cur_col = screen_width-1; if (cur_col < 0) cur_col = 0; trace("going to (%d, %d): %.*s\n", cur_row, cur_col, esc_size, esc); at_sr_bottom = false; break; } esc_size = 0; return; } if (esc_size == ESC_MAX) { cleanup(); fprintf(stderr, "Unknown escape sequence \\33"); display_esc_seq(stderr); fprintf(stderr, "\n"); exit('\33'); } if (esc_size == 2 && esc[1] != '[' && esc[1] != '(' && esc[1] != ')') { fprintf(logff, "Warning: Ignoring unknown escape sequence " "[\\33 \\%o]\n", esc[1]); esc_size = 0; } return; } switch (c) { // swallow beeps & SI/SO (^N/^O) case '\a': case 016: case 017: trace("ignoring: \\%o\n", c); return; // CR case '\r': cur_col = 0; trace("carriage return: going to (%d, %d)\n", cur_row, cur_col); at_sr_bottom = false; return; // tab case '\t': cur_col = (cur_col+8) & ~7; if (cur_col < screen_width) return; // wrap-around cur_col = 0; // fallthrough to LF // LF case '\n': if (cur_row == sr_end) scroll_up(); else if (cur_row+1 < screen_height) cur_row++; at_sr_bottom = false; trace("line feed: going to (%d, %d)\n", cur_row, cur_col); return; // BS case '\b': cur_col--; if (cur_col < 0) cur_col = 0; trace("going to (%d, %d): %c\n", cur_row, cur_col, c); at_sr_bottom = false; return; // normal text default: if (!isprint(c)) { fprintf(logff, "Warning: Got unhandled non-printable " "character \\%o\n", c); } if (at_sr_bottom) { scroll_up(); at_sr_bottom = false; } D(cur_row, cur_col) = c; trace("setting (%d, %d) to '%c' and ", cur_row, cur_col, c); if (cur_col+1 < screen_width) { cur_col++; trace("going to (%d, %d)\n", cur_row, cur_col); return; } // ... else wrap to next line cur_col = 0; if (cur_row == sr_end) at_sr_bottom = true; else if (cur_row+1 < screen_height) cur_row++; trace("going to (%d, %d)\n", cur_row, cur_col); return; } }
int main( int argc, char *argv[] ) { /* (x,y) position of edit window. x column, y line -> (0,0) at upper left on screen */ unsigned int xCursorPos = 0; unsigned int yCursorPos = 0; unsigned int curmenu = 0x1100; int i; cwsetup( argc, argv ); writestatus( 0 ); writetab( ); splashscreen( ); /* Main program loop */ do { dispstrhgc( " ", wind.col, 2, NORMALATTR ); i = pulled_down_menu( &curmenu, &xCursorPos, &yCursorPos ); if ( filename[0] != '\0' ) { switch ( i ) { case RETKEY: keymain = menu_to_key( curmenu ); break; case ESCKEY: waitkbd( wind.col + xCursorPos, wind.row + yCursorPos ); /* Show blinking cursor */ keymain = readkbd( ); /* If keypressed Get it */ break; default: keymain = i; break; } while ( keymain != ESCKEY ) { if ( ( keymain & 0xff ) >= 32 ) { keymain = changekey( keymain ); if ( insertmode ) { if ( !insert_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } else { if ( !ovrwrite_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } refreshline( xCursorPos, yCursorPos ); } else { /* Function Key */ switch ( keymain ) { case PGUPKEY: case CNTRL_R: page_up( ); break; case PGDNKEY: case CNTRL_C: page_down( ); break; case UPKEY: case CNTRL_E: cursor_up( ); break; case DNKEY: case CNTRL_X: cursor_down( yCursorPos ); break; case LEKEY: case CNTRL_S: cursor_left( &xCursorPos ); break; case 0x2301: gobeginblk( &xCursorPos ); break; case 0x2401: goendblk( &xCursorPos ); break; case RIKEY: case CNTRL_D: cursor_right( &xCursorPos, yCursorPos ); break; case CNTRL_W: scroll_up( ); break; case CNTRL_Z: scroll_down( ); break; case CHOMEKEY: top_of_page( ); break; case CPGUPKEY: topfile( &xCursorPos ); break; case CENDKEY: bottom_of_page( ); break; case CPGDNKEY: endfile( &xCursorPos ); break; case DELKEY: case CNTRL_G: delete_char( xCursorPos ); refreshline( xCursorPos, yCursorPos ); changeflag = YES; break; case CNTRL_T: delete_word( xCursorPos ); refreshline( xCursorPos, yCursorPos ); changeflag = YES; break; case CNTRL_Y: delete_line( ); changeflag = YES; break; case CNTRL_M: case RETKEY: if ( insertmode == NO ) { returnkey( &xCursorPos, yCursorPos ); } else { ret_with_ins( &xCursorPos, yCursorPos ); changeflag = YES; } break; case BSKEY: case CNTRL_H: backspace( &xCursorPos ); yCursorPos = findrow( ); refreshline( 0, yCursorPos ); changeflag = YES; break; case INSKEY: case CNTRL_V: insertmode = !insertmode; writeinsmode( ); break; case CNTRL_N: insert_ret( &xCursorPos ); break; case F10KEY: thaimode = !thaimode; writelanguage( ); break; case F1KEY: fontused = 0x00; writeattr( ); break; case F2KEY: fontused = fontused | ITALICATTR; writeattr( ); break; case F3KEY: fontused = fontused | ONELINEATTR; fontused = fontused & 0x7f; writeattr( ); break; case F4KEY: fontused = fontused | TWOLINEATTR; fontused = fontused & 0xfe; writeattr( ); break; case F5KEY: fontused = fontused | BOLDATTR; writeattr( ); break; case F6KEY: fontused = fontused | ENLARGEATTR; writeattr( ); break; case F7KEY: fontused = fontused | SUPERATTR; if ( ( fontused & SUBATTR ) == SUBATTR ) { fontused = fontused ^ SUBATTR; } writeattr( ); break; case F8KEY: fontused = fontused | SUBATTR; if ( ( fontused & SUPERATTR ) == SUPERATTR ) { fontused = fontused ^ SUPERATTR; } writeattr( ); break; case F9KEY: manualwrap( &xCursorPos, &yCursorPos ); break; case ALTM: editmacro( ); break; case TABKEY: case CNTRL_I: movetotab( &xCursorPos, yCursorPos ); break; case CNTRL_K: blockcommand( &xCursorPos ); break; case 0x1401: blkcmd( 'p', &xCursorPos ); break; case 0x6101: blkcmd( 'b', &xCursorPos ); break; case 0x6201: blkcmd( 'k', &xCursorPos ); break; case 0x6301: blkcmd( 'c', &xCursorPos ); break; case 0x6401: blkcmd( 'y', &xCursorPos ); break; case 0x6501: blkcmd( 'v', &xCursorPos ); break; case 0x6601: blkcmd( 'r', &xCursorPos ); break; case 0x6701: blkcmd( 'w', &xCursorPos ); break; case 0x6801: blkcmd( 'h', &xCursorPos ); break; case CNTRL_O: onscreen( xCursorPos, yCursorPos ); break; case 0x7101: doonscrn( 'l', xCursorPos, yCursorPos ); break; case 0x7201: doonscrn( 'r', xCursorPos, yCursorPos ); break; case 0x7301: doonscrn( 'i', xCursorPos, yCursorPos ); break; case 0x7401: doonscrn( 'n', xCursorPos, yCursorPos ); break; case 0x7501: doonscrn( 'c', xCursorPos, yCursorPos ); break; case 0x7601: doonscrn( 'p', xCursorPos, yCursorPos ); break; case 0x7701: doonscrn( 'x', xCursorPos, yCursorPos ); break; case CNTRL_Q: quick( &xCursorPos, &yCursorPos ); break; case 0x3501: deltoendline( xCursorPos, yCursorPos ); break; case 0x8111: inscntrl( CNTRL_W, xCursorPos, yCursorPos ); break; case 0x8211: inscntrl( CNTRL_S, xCursorPos, yCursorPos ); break; case 0x8311: inscntrl( CNTRL_R, xCursorPos, yCursorPos ); break; case 0x8411: inscntrl( CNTRL_B, xCursorPos, yCursorPos ); break; case 0x8511: inscntrl( CNTRL_E, xCursorPos, yCursorPos ); break; case 0x8611: inscntrl( CNTRL_T, xCursorPos, yCursorPos ); break; case 0x8711: inscntrl( CNTRL_V, xCursorPos, yCursorPos ); break; case CNTRL_P: printcntrl( xCursorPos, yCursorPos ); break; case HOMEKEY: home( &xCursorPos ); break; case ENDKEY: endline( &xCursorPos ); break; case CLEKEY: case CNTRL_A: backword( &xCursorPos ); break; case CRIKEY: case CNTRL_F: nextword( &xCursorPos, yCursorPos ); break; case CNTRL_L: if ( source[0] != '\0' ) { if ( replaceflag == NO ) { if ( searchfwd( &xCursorPos, &yCursorPos ) == NO ) { wordnotfound( ); } } else { if ( searchreplace( &xCursorPos, &yCursorPos ) == NO ) { wordnotfound( ); } } } break; case CNTRL_B: reform( ); break; case ALTP: gotopage( ); break; case CNTRL_J: case ALTL: gotoline( ); break; case 0x5101: searching( &xCursorPos, &yCursorPos ); break; case 0x5201: replacing( &xCursorPos, &yCursorPos ); break; case 0x8501: loadtoline( curline->text ); refreshline( 0, yCursorPos ); break; case CF1KEY: insertmacro( ¯o[0][0], &xCursorPos, &yCursorPos ); break; case CF2KEY: insertmacro( ¯o[1][0], &xCursorPos, &yCursorPos ); break; case CF3KEY: insertmacro( ¯o[2][0], &xCursorPos, &yCursorPos ); break; case CF4KEY: insertmacro( ¯o[3][0], &xCursorPos, &yCursorPos ); break; case CF5KEY: insertmacro( ¯o[4][0], &xCursorPos, &yCursorPos ); break; case CF6KEY: insertmacro( ¯o[5][0], &xCursorPos, &yCursorPos ); break; case CF7KEY: insertmacro( ¯o[6][0], &xCursorPos, &yCursorPos ); break; case CF8KEY: insertmacro( ¯o[7][0], &xCursorPos, &yCursorPos ); break; case CF9KEY: insertmacro( ¯o[8][0], &xCursorPos, &yCursorPos ); break; case CF10KEY: insertmacro( ¯o[9][0], &xCursorPos, &yCursorPos ); break; case AF2KEY: inscntrl( ITALICCODE, xCursorPos, yCursorPos ); break; case AF3KEY: inscntrl( ONELINECODE, xCursorPos, yCursorPos ); break; case AF4KEY: inscntrl( TWOLINECODE, xCursorPos, yCursorPos ); break; case AF5KEY: inscntrl( BOLDCODE, xCursorPos, yCursorPos ); break; case AF6KEY: inscntrl( ENLARGECODE, xCursorPos, yCursorPos ); break; case AF7KEY: inscntrl( SUPERCODE, xCursorPos, yCursorPos ); break; case AF8KEY: inscntrl( SUBCODE, xCursorPos, yCursorPos ); break; #ifdef WANT_TO_USE_GRAPH case ALTG: insertgraph( ); break; case ALTD: deletegraph( ); break; #endif case ALTX: quitprog = YES; keymain = ESCKEY; break; default: if ( ( alt_char_map( keymain ) ) != -1 ) { keymain = alt_char_map( keymain ); if ( insertmode ) { if ( !insert_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } else { if ( !ovrwrite_char( keymain, &xCursorPos, &yCursorPos ) ) { linetoolong( ); } } refreshline( xCursorPos, yCursorPos ); } break; } /* switch ( keymain ) */ } adjustcol( &xCursorPos ); while ( ( yCursorPos = findrow( ) ) > ( wind.width - 1 ) ) { storeline( curline ); curline = curline->previous; loadtoline( curline->text ); lineno--; } if ( !keypressed( ) ) { if ( !pagecomplete ) { showpage( ); } if ( !keypressed( ) ) { writecolno( firstcol + xCursorPos ); dispstrhgc( " ", wind.col, 2, NORMALATTR ); if ( !keypressed( ) ) { writepageline( ); } } } if ( quitprog != YES ) { waitkbd( wind.col + xCursorPos, wind.row + yCursorPos ); keymain = readkbd( ); dispkey( keymain ); } } /* while */ } else { /* if filename[0] != '\0' */ errorsound( ); } } while ( !quitprog ); if ( changeflag ) { blockmsg( 5 ); dispstrhgc( "ÂѧäÁèä´é¨Ñ´à¡çºá¿éÁ¢éÍÁÙÅ µéͧ¡ÒèѴà¡çºËÃ×ÍäÁè (Y/N)?", ( 16 + center_factor ) + 7, 5, REVERSEATTR ); keymain = 0; while ( ( keymain != 'n' ) && ( keymain != 'N' ) && ( keymain != 'y' ) && ( keymain != 'Y' ) ) { keymain = ebioskey( 0 ) & 0xff; if ( ( keymain == 'y' ) || ( keymain == 'Y' ) ) { writeblk( filename, sentinel->next, 0, sentinel->previous, MAXCOL ); } } } settext( ); return 0; }
/* Many execution paths may lead to this code so it needs to take appropriate * precausions to stuff like doc_view and doc_view->vs being NULL. */ enum frame_event_status do_action(struct session *ses, enum main_action action_id, int verbose) { enum frame_event_status status = FRAME_EVENT_OK; struct terminal *term = ses->tab->term; struct document_view *doc_view = current_frame(ses); struct link *link = NULL; if (action_id == -1) goto unknown_action; if (doc_view && doc_view->vs) { if (action_prefix_is_link_number(KEYMAP_MAIN, action_id) && !try_jump_to_link_number(ses, doc_view)) goto ignore_action; link = get_current_link(doc_view); } else if (action_requires_view_state(KEYMAP_MAIN, action_id)) { goto ignore_action; } if (action_requires_location(KEYMAP_MAIN, action_id) && !have_location(ses)) return FRAME_EVENT_OK; if (action_requires_link(KEYMAP_MAIN, action_id) && !link) goto ignore_action; if (action_requires_form(KEYMAP_MAIN, action_id) && (!link || !link_is_form(link))) goto ignore_action; if (!action_is_anonymous_safe(KEYMAP_MAIN, action_id) && get_cmd_opt_bool("anonymous")) goto ignore_action; /* Please keep in alphabetical order for now. Later we can sort by most * used or something. */ switch (action_id) { case ACT_MAIN_ABORT_CONNECTION: abort_loading(ses, 1); print_screen_status(ses); break; case ACT_MAIN_ADD_BOOKMARK: #ifdef CONFIG_BOOKMARKS launch_bm_add_doc_dialog(term, NULL, ses); #endif break; case ACT_MAIN_ADD_BOOKMARK_LINK: #ifdef CONFIG_BOOKMARKS launch_bm_add_link_dialog(term, NULL, ses); #endif break; case ACT_MAIN_ADD_BOOKMARK_TABS: #ifdef CONFIG_BOOKMARKS bookmark_terminal_tabs_dialog(term); #endif break; case ACT_MAIN_AUTH_MANAGER: auth_manager(ses); break; case ACT_MAIN_BACKSPACE_PREFIX: if (!ses->kbdprefix.repeat_count) break; set_kbd_repeat_count(ses, ses->kbdprefix.repeat_count / 10); /* Keep send_event from resetting repeat_count. */ status = FRAME_EVENT_SESSION_DESTROYED; break; case ACT_MAIN_BOOKMARK_MANAGER: #ifdef CONFIG_BOOKMARKS bookmark_manager(ses); #endif break; case ACT_MAIN_CACHE_MANAGER: cache_manager(ses); break; case ACT_MAIN_CACHE_MINIMIZE: shrink_memory(1); break; case ACT_MAIN_COOKIES_LOAD: #ifdef CONFIG_COOKIES if (!get_opt_bool("cookies.save", NULL)) break; load_cookies(); #endif break; case ACT_MAIN_COOKIE_MANAGER: #ifdef CONFIG_COOKIES cookie_manager(ses); #endif break; case ACT_MAIN_COPY_CLIPBOARD: status = copy_current_link_to_clipboard(ses, doc_view, 0); break; case ACT_MAIN_DOCUMENT_INFO: document_info_dialog(ses); break; case ACT_MAIN_DOWNLOAD_MANAGER: download_manager(ses); break; case ACT_MAIN_EXMODE: #ifdef CONFIG_EXMODE exmode_start(ses); #endif break; case ACT_MAIN_FILE_MENU: activate_bfu_technology(ses, 0); break; case ACT_MAIN_FIND_NEXT: status = find_next(ses, doc_view, 1); break; case ACT_MAIN_FIND_NEXT_BACK: status = find_next(ses, doc_view, -1); break; case ACT_MAIN_FORGET_CREDENTIALS: free_auth(); shrink_memory(1); /* flush caches */ break; case ACT_MAIN_FORMHIST_MANAGER: #ifdef CONFIG_FORMHIST formhist_manager(ses); #endif break; case ACT_MAIN_FRAME_EXTERNAL_COMMAND: status = pass_uri_to_command(ses, doc_view, PASS_URI_FRAME); break; case ACT_MAIN_FRAME_NEXT: next_frame(ses, 1); draw_formatted(ses, 0); break; case ACT_MAIN_FRAME_MAXIMIZE: status = set_frame(ses, doc_view, 0); break; case ACT_MAIN_FRAME_PREV: next_frame(ses, -1); draw_formatted(ses, 0); break; case ACT_MAIN_GOTO_URL: goto_url_action(ses, NULL); break; case ACT_MAIN_GOTO_URL_CURRENT: goto_url_action(ses, get_current_url); break; case ACT_MAIN_GOTO_URL_CURRENT_LINK: goto_url_action(ses, get_current_link_url); break; case ACT_MAIN_GOTO_URL_HOME: goto_url_home(ses); break; case ACT_MAIN_HEADER_INFO: protocol_header_dialog(ses); break; case ACT_MAIN_HISTORY_MANAGER: #ifdef CONFIG_GLOBHIST history_manager(ses); #endif break; case ACT_MAIN_HISTORY_MOVE_BACK: { int count = int_max(1, eat_kbd_repeat_count(ses)); go_history_by_n(ses, -count); break; } case ACT_MAIN_HISTORY_MOVE_FORWARD: { int count = int_max(1, eat_kbd_repeat_count(ses)); go_history_by_n(ses, count); break; } case ACT_MAIN_JUMP_TO_LINK: break; case ACT_MAIN_KEYBINDING_MANAGER: keybinding_manager(ses); break; case ACT_MAIN_KILL_BACKGROUNDED_CONNECTIONS: abort_background_connections(); break; case ACT_MAIN_LINK_DIALOG: open_link_dialog(ses); break; case ACT_MAIN_LINK_DOWNLOAD: case ACT_MAIN_LINK_DOWNLOAD_IMAGE: case ACT_MAIN_LINK_DOWNLOAD_RESUME: status = download_link(ses, doc_view, action_id); break; case ACT_MAIN_LINK_EXTERNAL_COMMAND: status = pass_uri_to_command(ses, doc_view, PASS_URI_LINK); break; case ACT_MAIN_LINK_FOLLOW: status = enter(ses, doc_view, 0); break; case ACT_MAIN_LINK_FOLLOW_RELOAD: status = enter(ses, doc_view, 1); break; case ACT_MAIN_LINK_INFO: link_info_dialog(ses); break; case ACT_MAIN_LINK_MENU: link_menu(term, NULL, ses); break; case ACT_MAIN_LINK_FORM_MENU: link_form_menu(ses); break; case ACT_MAIN_LUA_CONSOLE: #ifdef CONFIG_SCRIPTING_LUA trigger_event_name("dialog-lua-console", ses); #endif break; case ACT_MAIN_MARK_SET: #ifdef CONFIG_MARKS ses->kbdprefix.mark = KP_MARK_SET; status = FRAME_EVENT_REFRESH; #endif break; case ACT_MAIN_MARK_GOTO: #ifdef CONFIG_MARKS /* TODO: Show promptly a menu (or even listbox?) * with all the marks. But the next letter must * still choose a mark directly! --pasky */ ses->kbdprefix.mark = KP_MARK_GOTO; status = FRAME_EVENT_REFRESH; #endif break; case ACT_MAIN_MENU: activate_bfu_technology(ses, -1); break; case ACT_MAIN_MOVE_CURRENT_TOP: status = move_current_top(ses, doc_view); break; case ACT_MAIN_MOVE_CURSOR_UP: status = move_cursor_up(ses, doc_view); break; case ACT_MAIN_MOVE_CURSOR_DOWN: status = move_cursor_down(ses, doc_view); break; case ACT_MAIN_MOVE_CURSOR_LEFT: status = move_cursor_left(ses, doc_view); break; case ACT_MAIN_MOVE_CURSOR_RIGHT: status = move_cursor_right(ses, doc_view); break; case ACT_MAIN_MOVE_CURSOR_LINE_START: status = move_cursor_line_start(ses, doc_view); break; case ACT_MAIN_MOVE_HALF_PAGE_DOWN: status = move_half_page_down(ses, doc_view); break; case ACT_MAIN_MOVE_HALF_PAGE_UP: status = move_half_page_up(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_DOWN: status = move_link_down(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_DOWN_LINE: status = move_link_down_line(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_LEFT: status = move_link_left(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_LEFT_LINE: status = move_link_prev_line(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_NEXT: status = move_link_next(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_PREV: status = move_link_prev(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_RIGHT: status = move_link_right(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_RIGHT_LINE: status = move_link_next_line(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_UP: status = move_link_up(ses, doc_view); break; case ACT_MAIN_MOVE_LINK_UP_LINE: status = move_link_up_line(ses, doc_view); break; case ACT_MAIN_MOVE_PAGE_DOWN: status = move_page_down(ses, doc_view); break; case ACT_MAIN_MOVE_PAGE_UP: status = move_page_up(ses, doc_view); break; case ACT_MAIN_MOVE_DOCUMENT_START: status = move_document_start(ses, doc_view); break; case ACT_MAIN_MOVE_DOCUMENT_END: status = move_document_end(ses, doc_view); break; case ACT_MAIN_OPEN_LINK_IN_NEW_TAB: open_current_link_in_new_tab(ses, 0); break; case ACT_MAIN_OPEN_LINK_IN_NEW_TAB_IN_BACKGROUND: open_current_link_in_new_tab(ses, 1); break; case ACT_MAIN_OPEN_LINK_IN_NEW_WINDOW: open_in_new_window(term, send_open_in_new_window, ses); break; case ACT_MAIN_OPEN_NEW_TAB: open_uri_in_new_tab(ses, NULL, 0, 1); break; case ACT_MAIN_OPEN_NEW_TAB_IN_BACKGROUND: open_uri_in_new_tab(ses, NULL, 1, 1); break; case ACT_MAIN_OPEN_NEW_WINDOW: open_in_new_window(term, send_open_new_window, ses); break; case ACT_MAIN_OPEN_OS_SHELL: exec_shell(term); break; case ACT_MAIN_OPTIONS_MANAGER: options_manager(ses); break; case ACT_MAIN_QUIT: exit_prog(ses, 1); break; case ACT_MAIN_REALLY_QUIT: exit_prog(ses, 0); break; case ACT_MAIN_REDRAW: redraw_terminal_cls(term); break; case ACT_MAIN_RELOAD: reload(ses, CACHE_MODE_INCREMENT); break; case ACT_MAIN_RERENDER: draw_formatted(ses, 2); break; case ACT_MAIN_RESET_FORM: status = reset_form(ses, doc_view, 0); break; case ACT_MAIN_RESOURCE_INFO: resource_info(term); break; case ACT_MAIN_SAVE_AS: status = save_as(ses, doc_view, 0); break; case ACT_MAIN_SAVE_FORMATTED: status = save_formatted_dlg(ses, doc_view, 0); break; case ACT_MAIN_SAVE_OPTIONS: write_config(term); break; case ACT_MAIN_SAVE_URL_AS: save_url_as(ses); break; case ACT_MAIN_SCROLL_DOWN: status = scroll_down(ses, doc_view); break; case ACT_MAIN_SCROLL_LEFT: status = scroll_left(ses, doc_view); break; case ACT_MAIN_SCROLL_RIGHT: status = scroll_right(ses, doc_view); break; case ACT_MAIN_SCROLL_UP: status = scroll_up(ses, doc_view); break; case ACT_MAIN_SEARCH: status = search_dlg(ses, doc_view, 1); break; case ACT_MAIN_SEARCH_BACK: status = search_dlg(ses, doc_view, -1); break; case ACT_MAIN_SEARCH_TYPEAHEAD: case ACT_MAIN_SEARCH_TYPEAHEAD_LINK: case ACT_MAIN_SEARCH_TYPEAHEAD_TEXT: case ACT_MAIN_SEARCH_TYPEAHEAD_TEXT_BACK: status = search_typeahead(ses, doc_view, action_id); break; case ACT_MAIN_SHOW_TERM_OPTIONS: terminal_options(term, NULL, ses); break; case ACT_MAIN_SUBMIT_FORM: status = submit_form(ses, doc_view, 0); break; case ACT_MAIN_SUBMIT_FORM_RELOAD: status = submit_form(ses, doc_view, 1); break; case ACT_MAIN_TAB_CLOSE: close_tab(term, ses); status = FRAME_EVENT_SESSION_DESTROYED; break; case ACT_MAIN_TAB_CLOSE_ALL_BUT_CURRENT: close_all_tabs_but_current(ses); break; case ACT_MAIN_TAB_EXTERNAL_COMMAND: status = pass_uri_to_command(ses, doc_view, PASS_URI_TAB); break; case ACT_MAIN_TAB_MOVE_LEFT: move_current_tab(ses, -1); break; case ACT_MAIN_TAB_MOVE_RIGHT: move_current_tab(ses, 1); break; case ACT_MAIN_TAB_MENU: assert(ses->tab == get_current_tab(term)); if (ses->status.show_tabs_bar) tab_menu(ses, ses->tab->xpos, term->height - 1 - ses->status.show_status_bar, 1); else tab_menu(ses, 0, 0, 0); break; case ACT_MAIN_TAB_NEXT: switch_current_tab(ses, 1); break; case ACT_MAIN_TAB_PREV: switch_current_tab(ses, -1); break; case ACT_MAIN_TERMINAL_RESIZE: resize_terminal_dialog(term); break; case ACT_MAIN_TOGGLE_CSS: #ifdef CONFIG_CSS toggle_document_option(ses, "document.css.enable"); #endif break; case ACT_MAIN_TOGGLE_DISPLAY_IMAGES: toggle_document_option(ses, "document.browse.images.show_as_links"); break; case ACT_MAIN_TOGGLE_DISPLAY_TABLES: toggle_document_option(ses, "document.html.display_tables"); break; case ACT_MAIN_TOGGLE_DOCUMENT_COLORS: toggle_document_option(ses, "document.colors.use_document_colors"); break; case ACT_MAIN_TOGGLE_HTML_PLAIN: toggle_plain_html(ses, ses->doc_view, 0); break; case ACT_MAIN_TOGGLE_MOUSE: #ifdef CONFIG_MOUSE toggle_mouse(); #endif break; case ACT_MAIN_TOGGLE_NUMBERED_LINKS: toggle_document_option(ses, "document.browse.links.numbering"); break; case ACT_MAIN_TOGGLE_PLAIN_COMPRESS_EMPTY_LINES: toggle_document_option(ses, "document.plain.compress_empty_lines"); break; case ACT_MAIN_TOGGLE_WRAP_TEXT: toggle_wrap_text(ses, ses->doc_view, 0); break; case ACT_MAIN_VIEW_IMAGE: status = view_image(ses, doc_view, 0); break; case ACT_MAIN_SCRIPTING_FUNCTION: case ACT_MAIN_NONE: case MAIN_ACTIONS: default: unknown_action: if (verbose) { INTERNAL("No action handling defined for '%s'.", get_action_name(KEYMAP_MAIN, action_id)); } status = FRAME_EVENT_IGNORED; } ignore_action: /* XXX: At this point the session may have been destroyed */ if (status != FRAME_EVENT_SESSION_DESTROYED && ses->insert_mode == INSERT_MODE_ON && link != get_current_link(doc_view)) ses->insert_mode = INSERT_MODE_OFF; if (status == FRAME_EVENT_REFRESH && doc_view) refresh_view(ses, doc_view, 0); return status; }
void selector_next(struct selector_t *sel) { scroll_down(&sel->crates, 1); sel->toggled = false; crate_has_changed(sel); }