void fill_encyclopedia_win () { set_window_handler (encyclopedia_win, ELW_HANDLER_DISPLAY, &display_encyclopedia_handler); set_window_handler (encyclopedia_win, ELW_HANDLER_CLICK, &click_encyclopedia_handler); encyclopedia_scroll_id = vscrollbar_add_extended(encyclopedia_win, encyclopedia_scroll_id, NULL, encyclopedia_menu_x_len-20, 0, 20, encyclopedia_menu_y_len, 0, 1.0, newcol_r, newcol_g, newcol_b, 0, 30, Page[currentpage].max_y); if (numpage<=0) { LOG_TO_CONSOLE(c_red1, cant_load_encycl); return; } #ifdef ENCYCL_NAVIGATION set_window_handler(encyclopedia_win, ELW_HANDLER_MOUSEOVER, &mouseover_encyclopedia_handler); set_window_handler(encyclopedia_win, ELW_HANDLER_KEYPRESS, &keypress_encyclopedia_handler); if (!cm_valid(cm_encycl)) { cm_encycl = cm_create(cm_encycl_base_str, cm_encycl_handler); cm_set_pre_show_handler(cm_encycl, cm_encycl_pre_show_handler); cm_add_window(cm_encycl, encyclopedia_win); init_ipu(&ipu_encycl, -1, -1, -1, 1, 1, NULL, NULL); find_base_pages(); process_encycl_links(); } #endif }
void init_misc_display(void) { //create the misc window if(misc_win < 0) { misc_win= create_window("Misc", -1, 0, 0, 0, 0, 0, ELW_USE_UISCALE|ELW_TITLE_NONE|ELW_SHOW_LAST); if (misc_win < 0 || misc_win >= windows_list.num_windows) return; set_window_handler(misc_win, ELW_HANDLER_DISPLAY, &display_misc_handler); set_window_handler(misc_win, ELW_HANDLER_CLICK, &click_misc_handler); set_window_handler(misc_win, ELW_HANDLER_MOUSEOVER, &mouseover_misc_handler ); set_window_handler(misc_win, ELW_HANDLER_UI_SCALE, &ui_scale_misc_handler ); set_window_handler(misc_win, ELW_HANDLER_DESTROY, &destroy_misc_handler ); cm_hud_id = cm_create(cm_hud_menu_str, context_hud_handler); cm_bool_line(cm_hud_id, CMH_STATS, &show_stats_in_hud, "show_stats_in_hud"); cm_bool_line(cm_hud_id, CMH_STATBARS, &show_statbars_in_hud, "show_statbars_in_hud"); cm_bool_line(cm_hud_id, CMH_KNOWBAR, &view_knowledge_bar, "view_knowledge_bar"); cm_bool_line(cm_hud_id, CMH_TIMER, &view_hud_timer, "view_hud_timer"); cm_bool_line(cm_hud_id, CMH_DIGCLOCK, &view_digital_clock, "view_digital_clock"); cm_bool_line(cm_hud_id, CMH_ANACLOCK, &view_analog_clock, "view_analog_clock"); cm_bool_line(cm_hud_id, CMH_SECONDS, &show_game_seconds, "show_game_seconds"); cm_bool_line(cm_hud_id, CMH_FPS, &show_fps, "show_fps"); cm_bool_line(cm_hud_id, CMH_INDICATORS, &show_hud_indicators, "show_indicators"); cm_bool_line(cm_hud_id, CMH_MINIMAP, &cm_minimap_shown, NULL); cm_bool_line(cm_hud_id, CMH_RANGSTATS, &cm_rangstats_shown, NULL); cm_bool_line(cm_hud_id, CMH_QUICKBM, &cm_quickbar_enabled, NULL); cm_bool_line(cm_hud_id, CMH_SOUND, &cm_sound_enabled, NULL); cm_bool_line(cm_hud_id, CMH_MUSIC, &cm_music_enabled, NULL); cm_add_window(cm_hud_id, misc_win); cm_set_pre_show_handler(cm_hud_id, context_hud_pre_show_handler); } ui_scale_misc_handler(&windows_list.window[misc_win]); }
/* Search the list of link title for a match */ static void find_page(const char *search_title, void *data) { size_t i; /* find matches where the search string is a substring of the title */ num_found_links = 0; for (i=0; i<num_page_links && num_found_links<MAX_FOUND_LINKS; ++i) if(xmlStrcasestr((xmlChar*)page_links[i].title,(xmlChar*)search_title)!=NULL) found_links[num_found_links++] = i; /* ignore if no matches, open if one match, or display a list of the first few matches */ if (num_found_links < 1) return; else if (num_found_links == 1) open_page(found_links[0]); else { if (cm_valid(cm_encycl_res)) cm_destroy(cm_encycl_res); cm_encycl_res = cm_create(page_links[found_links[0]].title, cm_encycl_res_handler); cm_set_pre_show_handler(cm_encycl_res, cm_encycl_res_pre_show_handler); for (i=1; i<num_found_links; i++) cm_add(cm_encycl_res, page_links[found_links[i]].title, NULL); cm_show_direct(cm_encycl_res, -1, -1); } }
// create or destroy the timer context menu depending on if the timer is shown // void Hud_Timer::check_cm_menu(window_info *win, int base_y_start) { if (cm_valid(cm_id) && (!view_hud_timer || (last_base_y_start != base_y_start))) destroy_cm(); if (view_hud_timer && !cm_valid(cm_id)) { cm_id = cm_create(hud_timer_cm_str, cm_timer_handler); cm_add_region(cm_id, win->window_id, 0, base_y_start - height, win->len_x, height); cm_set_pre_show_handler(cm_id, cm_timer_pre_show_handler); cm_bool_line(cm_id, CMHT_KEEPSTATE, &hud_timer_keep_state, NULL); } last_base_y_start = base_y_start; }
/* act on scroll wheel in the main window or clicking a URL */ static int click_url_handler(window_info *win, int mx, int my, Uint32 flags) { static size_t cm_id = CM_INIT_VALUE; if (flags & ELW_WHEEL_UP) vscrollbar_scroll_up(url_win, url_scroll_id); else if (flags & ELW_WHEEL_DOWN) vscrollbar_scroll_down(url_win, url_scroll_id); else if (have_url_count && url_win_hover_url != NULL) { if (flags & ELW_CTRL) { delete_current_url(url_win_hover_url); do_window_close_sound(); } else if (flags & ELW_RIGHT_MOUSE) { cm_url = url_win_hover_url; /* create first time needed */ if (!cm_valid(cm_id)) { cm_id = cm_create(cm_url_menu_str, context_url_handler); cm_set_pre_show_handler(cm_id, context_url_pre_show_handler); } cm_show_direct(cm_id, -1, -1); } else { /* open the URL but block double clicks */ Uint32 currentclicktime = SDL_GetTicks(); if (currentclicktime < url_win_clicktime) url_win_clicktime = 0; /* just in case we're running for 49 days :) */ if ((currentclicktime - url_win_clicktime > 1000) || (url_win_clicked_url != url_win_hover_url)) { do_click_sound(); open_current_url(url_win_hover_url); } } } url_win_top_line = vscrollbar_get_pos(url_win, url_scroll_id); return 0; }
// Create the window or just toggle its open/closed state. // void List_Window::show(window_info *win) { if (win_id < 0 ) { ItemLists::Vars::lists()->load(); ItemLists::Vars::cat_maps()->load(); filter[0] = '\0'; calc_num_show_names(get_grid_size()*6+110); add_button_x = static_cast<int>(get_size_x() - DEFAULT_FONT_X_LEN*2); add_button_y = get_grid_size(); win_id = create_window(item_list_preview_title, win->window_id, 0, get_window_pos_x(win), 0, get_size_x(), get_size_y(), ELW_WIN_DEFAULT|ELW_RESIZEABLE); set_window_handler(win_id, ELW_HANDLER_DISPLAY, (int (*)())&display_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_CLICK, (int (*)())&click_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_MOUSEOVER, (int (*)())&mouseover_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_HIDE, (int (*)())&hide_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_KEYPRESS, (int (*)())&keypress_itemlist_handler ); set_window_handler(win_id, ELW_HANDLER_RESIZE, (int (*)())&resize_itemlist_handler ); set_window_min_size(win_id, get_size_x(), get_size_y()); cm_selected_item_menu = cm_create(cm_item_list_selected_str, cm_selected_item_handler); cm_names_menu = cm_create(cm_item_list_names_str, cm_names_handler); cm_set_pre_show_handler(cm_names_menu, cm_names_pre_show_handler); cm_add_region(cm_names_menu, win_id, 0, get_size_y()-get_names_size_y(), get_size_y(), get_names_size_y()); names_scroll_id = vscrollbar_add_extended(win_id, 1, NULL, get_size_x()-ELW_BOX_SIZE, get_grid_size()*num_grid_rows, ELW_BOX_SIZE, get_names_size_y()-ELW_BOX_SIZE, 0, 1.0, newcol_r, newcol_g, newcol_b, 0, 1, Vars::lists()->size()-num_show_names_list); init_ipu(&ipu_item_list_name, -1, -1, -1, 1, 1, NULL, NULL); make_active_visable(); } else { toggle_window(win_id); make_active_visable(); close_ipu(&ipu_item_list_name); Vars::quantity_input()->close(); } }
void display_manufacture_menu() { if(manufacture_win < 0){ int our_root_win = -1; if (!windows_on_top) { our_root_win = game_root_win; } manufacture_win= create_window(win_manufacture, our_root_win, 0, manufacture_menu_x, manufacture_menu_y, 0, 0, ELW_USE_UISCALE|ELW_WIN_DEFAULT); set_window_handler(manufacture_win, ELW_HANDLER_DISPLAY, &display_manufacture_handler ); set_window_handler(manufacture_win, ELW_HANDLER_CLICK, &click_manufacture_handler ); set_window_handler(manufacture_win, ELW_HANDLER_MOUSEOVER, &mouseover_manufacture_slot_handler ); set_window_handler(manufacture_win, ELW_HANDLER_KEYPRESS, &keypress_manufacture_handler ); set_window_handler(manufacture_win, ELW_HANDLER_UI_SCALE, &ui_scale_manufacture_handler ); mixone_button_id=button_add_extended(manufacture_win, mixone_button_id, NULL, 0, 0, 0, 0, 0, 1.0f, 0.77f, 0.57f, 0.39f, ">"); widget_set_OnClick(manufacture_win, mixone_button_id, mixone_handler); widget_set_OnMouseover(manufacture_win, mixone_button_id, mouseover_mixone_handler); mixall_button_id=button_add_extended(manufacture_win, mixall_button_id, NULL, 0, 0, 0, 0, 0, 1.0f, 0.77f, 0.57f, 0.39f, ">>"); widget_set_OnClick(manufacture_win, mixall_button_id, mixall_handler); widget_set_OnMouseover(manufacture_win, mixall_button_id, mouseover_mixall_handler); clear_button_id=button_add_extended(manufacture_win, clear_button_id, NULL, 0, 0, 0, 0, 0, 1.0f, 0.77f, 0.57f, 0.39f, clear_str); widget_set_OnClick(manufacture_win, clear_button_id, clear_handler); if ((manufacture_win > -1) && (manufacture_win < windows_list.num_windows)) { cm_add(windows_list.window[manufacture_win].cm_id, cm_manuwin_menu_str, NULL); cm_bool_line(windows_list.window[manufacture_win].cm_id, ELW_CM_MENU_LEN+1, &disable_manuwin_keypress, NULL); } //Create a child window to show recipes in a dropdown panel recipe_win= create_window("w_recipe", manufacture_win, 0, 0, 0, 0, 0, ELW_USE_UISCALE|ELW_TITLE_NONE|ELW_SHOW|ELW_USE_BACKGROUND|ELW_ALPHA_BORDER|ELW_SWITCHABLE_OPAQUE|ELW_USE_BORDER|ELW_RESIZEABLE); set_window_handler(recipe_win, ELW_HANDLER_DISPLAY, &recipe_dropdown_draw); set_window_handler(recipe_win, ELW_HANDLER_CLICK, &recipe_dropdown_click_handler ); set_window_handler(recipe_win, ELW_HANDLER_MOUSEOVER, &mouseover_recipe_handler ); set_window_handler(recipe_win, ELW_HANDLER_RESIZE, &resize_recipe_handler ); set_window_handler(recipe_win, ELW_HANDLER_KEYPRESS, keypress_recipe_handler ); recipe_win_scroll_id = vscrollbar_add_extended(recipe_win, 1, NULL, 0, 0, 0, 0, 0, 1.0, 0.77f, 0.57f, 0.39f, 0, 1, num_recipe_entries-num_displayed_recipes); if ((manufacture_win > -1) && (manufacture_win < windows_list.num_windows)) ui_scale_manufacture_handler(&windows_list.window[manufacture_win]); // context menu cm_recipewin = cm_create(cm_recipe_menu_str, context_recipe_handler); cm_add_window(cm_recipewin, recipe_win); cm_set_pre_show_handler(cm_recipewin, context_recipe_pre_show_handler); hide_window(recipe_win); //start hidden build_manufacture_list(); } else { show_window(manufacture_win); if (!recipes_shown) hide_window(recipe_win); else show_window(recipe_win); select_window(manufacture_win); } }
// the stats display static int ui_scale_stats_bar_handler(window_info *win) { int i; int num_exp = get_num_statsbar_exp(); int actual_num_exp = 0; int stats_height = 0; int stats_width = window_width - HUD_MARGIN_X; int stats_y_pos = window_height - (HUD_MARGIN_Y - player_statsbar_y_offset); player_statsbar_bar_height = (int)(0.5 + win->current_scale * 8); stats_height = get_player_statsbar_active_height(); init_window(stats_bar_win, -1, 0, 0, stats_y_pos, stats_width, stats_height); /* use a fixed width for user attrib stat bar text */ stats_bar_text_len = 4.5 * win->small_font_len_x; // calculate the statsbar len given curent config stats_bar_len = calc_stats_bar_len(win, num_exp); // calculate the maximum number of exp bars we can have max_disp_stats = calc_max_disp_stats(stats_bar_len); // if we need to reduce the number of bars, recalculate the optimum stats bar len if (num_exp > max_disp_stats) stats_bar_len = calc_stats_bar_len(win, max_disp_stats); // all the bars are at the top of the window mana_bar_start_y = food_bar_start_y = health_bar_start_y = load_bar_start_y = action_bar_start_y = exp_bar_start_y = 0; // calculate the stats bar x position mana_bar_start_x = stats_bar_text_len; food_bar_start_x = stats_bar_len + 2 * stats_bar_text_len; health_bar_start_x = 2 * stats_bar_len + 3 * stats_bar_text_len; load_bar_start_x = 3 * stats_bar_len + 4 * stats_bar_text_len; if (show_action_bar) action_bar_start_x = 4 * stats_bar_len + 5 * stats_bar_text_len; // clear any unused slots in the watch list and recalc how many are being displayed if (max_disp_stats < MAX_WATCH_STATS) { size_t i; for (i=max_disp_stats;i<MAX_WATCH_STATS;i++) if (watch_this_stats[i] > 0) { statsinfo[watch_this_stats[i]-1].is_selected=0; watch_this_stats[i]=0; } } actual_num_exp = get_num_statsbar_exp(); // the x position of the first exp bar, keep right aligned exp_bar_start_x = window_width + exp_bar_text_len - HUD_MARGIN_X - 2 - actual_num_exp * (exp_bar_text_len + stats_bar_len); // apologise if we had to reduce the number of exp bars if (num_exp > actual_num_exp) LOG_TO_CONSOLE(c_red2, remove_bar_message_str); // create the exp bars context menu, used by all ative exp bars if (!cm_valid(cm_id)) { int thestat; cm_id = cm_create(NULL, cm_statsbar_handler); for (thestat=0; thestat<NUM_WATCH_STAT-1; thestat++) cm_add(cm_id, (char *)statsinfo[thestat].skillnames->name, NULL); cm_add(cm_id, cm_stats_bar_base_str, NULL); cm_set_pre_show_handler(cm_id,cm_statsbar_pre_show_handler); } reset_statsbar_exp_cm_regions(); for (i=0; i<MAX_WATCH_STATS; i++) { if (watch_this_stats[i] > 0) statsinfo[watch_this_stats[i]-1].is_selected = 1; } return 1; }