int click_help_handler(window_info *win, int mx, int my, Uint32 flags) { _Text *t=Page[helppage].T.Next; if(flags&ELW_WHEEL_UP) { vscrollbar_scroll_up(help_win, help_menu_scroll_id); } else if(flags&ELW_WHEEL_DOWN) { vscrollbar_scroll_down(help_win, help_menu_scroll_id); } else { int j = vscrollbar_get_pos(help_win, help_menu_scroll_id); while(t) { int xlen=strlen(t->text)*((t->size)?11:8),ylen=(t->size)?18:15; if(t->ref && mx>(t->x) && mx<(t->x+xlen) && my>(t->y-j) && my<(t->y+ylen-j)) { //changing page int i; for(i=0; i<numpage+1; i++) { if(!xmlStrcasecmp((xmlChar*)Page[i].Name,(xmlChar*)t->ref)) { helppage=i; vscrollbar_set_pos(help_win, help_menu_scroll_id, 0); vscrollbar_set_bar_len(help_win, help_menu_scroll_id, Page[helppage].max_y); break; } } break; } t=t->Next; } } return 1; }
int click_knowledge_handler(window_info *win, int mx, int my, Uint32 flags) { int x,y,idx; Uint8 str[3]; x= mx; y= my; if(x > win->len_x-win->box_size) return 0; if(y > booklist_y_len) return 0; if(flags&ELW_WHEEL_UP) { vscrollbar_scroll_up(win->window_id, knowledge_scroll_id); return 1; } else if(flags&ELW_WHEEL_DOWN) { vscrollbar_scroll_down(win->window_id, knowledge_scroll_id); return 1; } else { selected_book = -1; x = (x < (win->len_x-win->box_size)/2) ?0 :1; y/=booklist_y_step; idx = x + 2 *(y + vscrollbar_get_pos (win->window_id, knowledge_scroll_id)); if(idx < knowledge_count) { str[0] = GET_KNOWLEDGE_INFO; *(Uint16 *)(str+1) = SDL_SwapLE16((short)idx); my_tcp_send(my_socket,str,3); raw_knowledge_string[0] = '\0'; // Check if we display the book image and label knowledge_book_id = idx; if (knowledge_list[idx].present && knowledge_list[idx].has_book) { widget_unset_flags (win->window_id, knowledge_book_image_id, WIDGET_DISABLED); widget_unset_flags (win->window_id, knowledge_book_label_id, WIDGET_DISABLED); } else { widget_set_flags(win->window_id, knowledge_book_image_id, WIDGET_DISABLED); widget_set_flags(win->window_id, knowledge_book_label_id, WIDGET_DISABLED); } selected_book = idx; } do_click_sound(); } return 1; }
static int click_buttonwin_handler(window_info* UNUSED(win), int UNUSED(mx), int UNUSED(my), Uint32 flags) { widget_list *w = widget_find(main_note_tab_id, note_button_scroll_id); if ((w == NULL) || (w->Flags & WIDGET_INVISIBLE)) return 0; if (flags&ELW_WHEEL_UP) { vscrollbar_scroll_up(main_note_tab_id, note_button_scroll_id); note_button_scroll_handler(); } else if(flags&ELW_WHEEL_DOWN) { vscrollbar_scroll_down(main_note_tab_id, note_button_scroll_id); note_button_scroll_handler(); } return 1; }
int click_emotes_handler(window_info *win, int mx, int my, Uint32 flags){ static int last_clicked=0; static int last_pos=-1; //scroll if wheel on selectables if(flags&ELW_WHEEL_UP) { if(mx>20&&mx<20+emotes_rect_x2&&my>30+emotes_rect_y+20&&my<30+emotes_rect_y+20+emotes_rect_y2) vscrollbar_scroll_up(emotes_win, EMOTES_SCROLLBAR_ITEMS); update_selectables(); last_pos=-1; return 0; } else if(flags&ELW_WHEEL_DOWN) { if(mx>20&&mx<20+emotes_rect_x2&&my>30+emotes_rect_y+20&&my<30+emotes_rect_y+20+emotes_rect_y2) vscrollbar_scroll_down(emotes_win, EMOTES_SCROLLBAR_ITEMS); update_selectables(); last_pos=-1; return 0; } else if ( (flags & ELW_MOUSE_BUTTON) == 0) { last_pos=-1; return 0; } if(mx>20&&mx<20+emotes_rect_x&&my>30&&my<30+emotes_rect_y){ //click on a cat cur_cat=(my-30)/13; if(cur_cat>=EMOTES_CATEGORIES) cur_cat=0; if(cur_cat>EMOTE_STANDING) cur_cat=EMOTE_STANDING+1; update_selectables(); last_pos=-1; } else if(mx>20&&mx<20+emotes_rect_x2&&my>30+20+emotes_rect_y&&my<30+emotes_rect_y+20+emotes_rect_y2) { //click on selectables int w=(my-30-emotes_rect_y-20)/13; emote_sel[cur_cat]=selectables[(w>=EMOTES_SHOWN)?(EMOTES_SHOWN-1):(w)]; update_selectables(); if ( ((SDL_GetTicks() - last_clicked) < 300)&&last_pos==w) do_handler(); last_pos=w; } last_clicked = SDL_GetTicks(); return 0; }
/* 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; }
int click_encyclopedia_handler(window_info *win, int mx, int my, Uint32 flags) { _Text *t=Page[currentpage].T.Next; if(flags&ELW_WHEEL_UP) { vscrollbar_scroll_up(encyclopedia_win, encyclopedia_scroll_id); } else if(flags&ELW_WHEEL_DOWN) { vscrollbar_scroll_down(encyclopedia_win, encyclopedia_scroll_id); } else { int j = vscrollbar_get_pos(encyclopedia_win, encyclopedia_scroll_id); while(t){ int xlen=strlen(t->text)*((t->size)?11:8),ylen=(t->size)?18:15; if(t->ref && mx>(t->x) && mx<(t->x+xlen) && my>(t->y-j) && my<(t->y+ylen-j)){ // check if its a webpage if (!strncasecmp(t->ref, "http://", 7)) { open_web_link(t->ref); } else { //changing page int i; for(i=0;i<numpage+1;i++){ if(!xmlStrcasecmp((xmlChar*)Page[i].Name,(xmlChar*)t->ref)){ currentpage=i; vscrollbar_set_pos(encyclopedia_win, encyclopedia_scroll_id, 0); vscrollbar_set_bar_len(encyclopedia_win, encyclopedia_scroll_id, Page[currentpage].max_y); break; } } } break; } t=t->Next; } } return 1; }
int click_storage_handler(window_info * win, int mx, int my, Uint32 flags) { if(flags&ELW_WHEEL_UP) { if(mx>10 && mx<130) { vscrollbar_scroll_up(storage_win, STORAGE_SCROLLBAR_CATEGORIES); } else if(mx>150 && mx<352){ vscrollbar_scroll_up(storage_win, STORAGE_SCROLLBAR_ITEMS); } } else if(flags&ELW_WHEEL_DOWN) { if(mx>10 && mx<130) { vscrollbar_scroll_down(storage_win, STORAGE_SCROLLBAR_CATEGORIES); } else if(mx>150 && mx<352){ vscrollbar_scroll_down(storage_win, STORAGE_SCROLLBAR_ITEMS); } } else if ( (flags & ELW_MOUSE_BUTTON) == 0) { return 0; } else { if(my>10 && my<202){ if(mx>10 && mx<130){ int cat=-1; cat=(my-20)/13 + vscrollbar_get_pos(storage_win, STORAGE_SCROLLBAR_CATEGORIES); move_to_category(cat); do_click_sound(); } else if(mx>150 && mx<352){ if(view_only_storage && item_dragged!=-1 && left_click){ drop_fail_time = SDL_GetTicks(); do_alert1_sound(); } else if(!view_only_storage && item_dragged!=-1 && left_click){ Uint8 str[6]; str[0]=DEPOSITE_ITEM; str[1]=item_list[item_dragged].pos; *((Uint32*)(str+2))=SDL_SwapLE32(item_quantity); my_tcp_send(my_socket, str, 6); do_drop_item_sound(); if(item_list[item_dragged].quantity<=item_quantity) item_dragged=-1;//Stop dragging this item... } else if(right_click || (view_only_storage && left_click)){ storage_item_dragged=-1; item_dragged=-1; if(cur_item_over!=-1) { Uint8 str[3]; str[0]=LOOK_AT_STORAGE_ITEM; *((Uint16*)(str+1))=SDL_SwapLE16(storage_items[cur_item_over].pos); my_tcp_send(my_socket, str, 3); active_storage_item=storage_items[cur_item_over].pos; do_click_sound(); } } else if(!view_only_storage && cur_item_over!=-1){ storage_item_dragged=cur_item_over; active_storage_item=storage_items[cur_item_over].pos; do_drag_item_sound(); } } } } return 1; }
static int click_buddy_handler (window_info *win, int mx, int my, Uint32 flags) { int x = mx; int y = my - buddy_border_space; char str[50]; // scroll the winow with the mouse wheel if(flags & ELW_WHEEL_UP) { vscrollbar_scroll_up(buddy_win,buddy_scroll_id); return 1; } else if(flags & ELW_WHEEL_DOWN) { vscrollbar_scroll_down(buddy_win,buddy_scroll_id); return 1; } // only handle mouse button clicks, not scroll wheels moves if ( (flags & ELW_MOUSE_BUTTON) == 0) return 0; if(x > (win->len_x - win->box_size)) { //Clicked on the scrollbar. Let it fall through. return 0; } else if(!queue_isempty(buddy_request_queue) && mx > (request_box_start_x - win->small_font_len_x) && y < (win->small_font_len_y + 1)) { //Clicked on the requests button while(!queue_isempty(buddy_request_queue)) { char *name = queue_pop(buddy_request_queue); select_window(display_accept_buddy(name)); free(name); } return 1; } // clicked on a buddy's name y /= buddy_name_step_y; if (y >= num_displayed_buddies) return 0; y += vscrollbar_get_pos(buddy_win,buddy_scroll_id); if((strlen(buddy_list[y].name) == 0)||(buddy_list[y].type > 0xFE)) { //There's no name. Fall through. return 0; } if(flags&ELW_RIGHT_MOUSE) { if(flags&ELW_CTRL) { //CTRL + right click, delete buddy. safe_snprintf(str, sizeof(str), "%c#del_buddy %s", RAW_TEXT, buddy_list[y].name); my_tcp_send(my_socket, (Uint8*)str, strlen(str+1)+1); } else { //Right click, open edit window display_buddy_change(&buddy_list[y]); } } else if (buddy_list[y].type < 0xFE) { //start a pm to them // clear the buffer clear_input_line(); // insert the person's name safe_snprintf (str, sizeof(str),"/%s ", buddy_list[y].name); //put_string_in_buffer (&input_text_line, str, 0); //We'll just reuse the paste function here paste_in_input_field((unsigned char*)str); } return 1; }
// Handle mouse clicks in the window // int List_Window::click(window_info *win, int mx, int my, Uint32 flags) { if (my < 0) // don't respond here to title bar being clicked return 0; if (flags & ELW_LEFT_MOUSE) clicked = true; if (!Vars::lists()->valid_active_list()) return 1; // hide and clear any quantity input widow Vars::quantity_input()->close(); size_t last_selected = selected_item_number; size_t num_items = Vars::lists()->get_list().get_num_items(); bool was_dragging = ((storage_item_dragged != -1) || (item_dragged != -1)); size_t over_item_number = Vars::win()->get_item_number(mx, my); // If dragging item and ctrl+left-click on window, add item to list if ((flags & ELW_LEFT_MOUSE) && (flags & ELW_CTRL) && was_dragging) { if (storage_item_dragged != -1) Vars::lists()->add_item(over_item_number, storage_items[storage_item_dragged].image_id, storage_items[storage_item_dragged].id, item_quantity); else if (item_dragged != -1) Vars::lists()->add_item(over_item_number, item_list[item_dragged].image_id, item_list[item_dragged].id, item_quantity); return 1; } // ctrl+right-click on a selected item opens the edit menu if ((flags & ELW_RIGHT_MOUSE) && (flags & ELW_CTRL) && (over_item_number<num_items)) { cm_show_direct(Vars::win()->get_grid_cm(), win->window_id, -1); storage_item_dragged = item_dragged = -1; return 1; } restore_inventory_quantity(); // wheel mouse up/down scrolls if ((flags & ELW_WHEEL_UP ) || (flags & ELW_WHEEL_DOWN )) { // change the active list if (my<get_grid_size()*num_grid_rows) { if (flags & ELW_WHEEL_UP) Vars::lists()->change_active(-1); else if (flags & ELW_WHEEL_DOWN) Vars::lists()->change_active(1); make_active_visable(); } // scroll the names else { if (flags&ELW_WHEEL_UP) vscrollbar_scroll_up(win->window_id, names_scroll_id); else if(flags&ELW_WHEEL_DOWN) vscrollbar_scroll_down(win->window_id, names_scroll_id); } return 1; } // see if we can use the item quantity or take items from storage if ((flags & ELW_RIGHT_MOUSE) || (flags & ELW_LEFT_MOUSE)) { if ((over_item_number!=last_selected) && (over_item_number < num_items)) { selected_item_number = over_item_number; last_quantity_selected = quantities.selected; quantities.selected = ITEM_EDIT_QUANT; item_quantity = quantities.quantity[ITEM_EDIT_QUANT].val = Vars::lists()->get_list().get_quantity(selected_item_number); if (flags & ELW_RIGHT_MOUSE) do_click_sound(); if (flags & ELW_LEFT_MOUSE) { // randomly close the window if (!(SDL_GetTicks() & 63)) { hide_window(Vars::win()->get_id()); set_shown_string(c_red2, item_list_magic_str); return 0; } storage_item_dragged = item_dragged = -1; int image_id = Vars::lists()->get_list().get_image_id(selected_item_number); Uint16 item_id = Vars::lists()->get_list().get_item_id(selected_item_number); int cat_id = Vars::cat_maps()->get_cat(image_id, item_id); if (cat_id != -1) pickup_storage_item(image_id, item_id, cat_id); else { do_alert1_sound(); il_pickup_fail_time = SDL_GetTicks(); static bool first_fail = true; if (first_fail) { first_fail = false; LOG_TO_CONSOLE(c_red1, item_list_learn_cat_str); } } } } else storage_item_dragged = item_dragged = -1; } return 1; }