Changeset 3309 for trunk/jons-gtk2-gui

Show
Ignore:
Timestamp:
02/26/03 10:18:19 (6 years ago)
Author:
bostjanlah
Message:

Complete revision

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/jons-gtk2-gui/src/search_user_window.cpp

    r3296 r3309  
    2020 
    2121#include "licq_gtk.h" 
     22#include "utilities.h" 
    2223 
    2324#include "licq_icqd.h" 
     
    5556    GtkWidget *list; 
    5657    GtkWidget *clear; 
    57     struct e_tag_data *etag; 
     58    GtkWidget *statusbar; 
     59    unsigned long e_tag; 
    5860}; 
    5961 
    60 struct search_user *su; 
    61 static gint num_found_users; 
     62struct search_user *su = NULL; 
     63static gint num_found_users = 0; 
    6264 
    6365GtkWidget * 
     
    7173const char *genders[] = {"Unspecified", "Female", "Male"}; 
    7274static const int NUM_GENDERS = 3; 
     75const char *ages[] = {"Unspecified", "18 - 22", "23 - 29", "30 - 39", "40 - 49", 
     76        "50 - 59", "60+"}; 
     77static const int NUM_AGES = 7; 
    7378 
    7479GtkWidget * 
     
    8893{ 
    8994    /* Only one search window */ 
    90     if (su != 0) { 
     95    if (su != NULL) { 
    9196        gdk_window_raise(su->window->window); 
    9297        return; 
     
    9499 
    95100    su = g_new0(struct search_user, 1); 
    96     su->etag = g_new0(struct e_tag_data, 1); 
    97101 
    98102    num_found_users = 0; 
     
    101105    su->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    102106    gtk_window_set_title(GTK_WINDOW(su->window), "Licq - User Search"); 
    103  
    104     // gtk_window_set_default_size(GTK_WINDOW(su->window), 550, 350); 
    105107 
    106108    /* destroy event for window */ 
     
    133135    GtkWidget *age_menu = gtk_menu_new(); 
    134136    gtk_option_menu_set_menu(GTK_OPTION_MENU(su->age), age_menu); 
    135     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    136             gtk_menu_item_new_with_label("Unspecified")); 
    137     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    138             gtk_menu_item_new_with_label("18 - 22")); 
    139     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    140             gtk_menu_item_new_with_label("23 - 29")); 
    141     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    142             gtk_menu_item_new_with_label("30 - 39")); 
    143     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    144             gtk_menu_item_new_with_label("40 - 49")); 
    145     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    146             gtk_menu_item_new_with_label("50 - 59")); 
    147     gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
    148             gtk_menu_item_new_with_label("60+")); 
     137    for (int i = 0; i < NUM_AGES; ++i) 
     138        gtk_menu_shell_append(GTK_MENU_SHELL(age_menu),  
     139                gtk_menu_item_new_with_label(ages[i])); 
    149140    gtk_option_menu_set_history(GTK_OPTION_MENU(su->age), 0); 
    150141    gtk_table_attach(GTK_TABLE(whitepages), su->age, 
     
    302293 
    303294    /* The statusbar */ 
    304     GtkWidget *statusbar = gtk_statusbar_new(); 
    305   gtk_box_pack_start(GTK_BOX(main_vbox), statusbar, TRUE, TRUE, 5); 
    306      
    307     guint id = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), 
     295    su->statusbar = gtk_statusbar_new(); 
     296  gtk_box_pack_start(GTK_BOX(main_vbox), su->statusbar, TRUE, TRUE, 5); 
     297     
     298    guint id = gtk_statusbar_get_context_id(GTK_STATUSBAR(su->statusbar), 
    308299            "sta"); 
    309     gtk_statusbar_pop(GTK_STATUSBAR(statusbar), id); 
    310     gtk_statusbar_push(GTK_STATUSBAR(statusbar), id, 
     300    gtk_statusbar_pop(GTK_STATUSBAR(su->statusbar), id); 
     301    gtk_statusbar_push(GTK_STATUSBAR(su->statusbar), id, 
    311302            "Enter Search Parameters"); 
    312  
    313     /* The etag has to know about the statusbar */ 
    314     su->etag->statusbar = statusbar; 
    315303 
    316304    //gtk_widget_set_size_request(GTK_WIDGET(su->window), 435, 465);  
     
    335323    gtk_list_store_clear(store); 
    336324    gtk_widget_set_sensitive(su->clear, FALSE); 
     325    change_status(su->statusbar, "sta", ""); 
    337326} 
    338327 
     
    349338} 
    350339 
    351 void search_callback(GtkWidget *widget, gpointer data) 
    352 { 
    353     change_status(su->etag->statusbar, "sta",  
    354             "Searching, this may take awhile."); 
     340void  
     341search_callback(GtkWidget *widget, gpointer data) 
     342{ 
     343    change_status(su->statusbar, "sta", "Searching, this may take awhile."); 
    355344     
    356345    unsigned short mins[7] = {0, 18, 23, 30, 40, 50, 60}; 
    357346  unsigned short maxs[7] = {0, 22, 29, 39, 49, 59, 120}; 
    358347 
    359     gulong uin = (gulong)(atol(get_text(su->uin))); 
     348    gulong uin = strtoul(get_text(su->uin), 0, 10); 
    360349 
    361350    if(uin >= 10000) 
    362         su->etag->e_tag = icq_daemon->icqSearchByUin(uin); 
     351        su->e_tag = icq_daemon->icqSearchByUin(uin); 
    363352    else 
    364     su->etag->e_tag = icq_daemon->icqSearchWhitePages( 
     353    su->e_tag = icq_daemon->icqSearchWhitePages( 
    365354                get_text(su->first_name), 
    366355                get_text(su->last_name), 
     
    381370} 
    382371 
    383 void search_list_double_click(GtkWidget *widget, 
    384                   GdkEventButton *eb, 
    385                   gpointer data) 
    386 { 
    387     gulong uin; 
    388     ICQUser *user; 
     372void  
     373search_list_double_click(GtkWidget *widget, GdkEventButton *eb, gpointer data) 
     374{ 
     375    // we'll consider left button double click only 
     376  if (eb->type != GDK_2BUTTON_PRESS || eb->button != 1) 
     377        return; 
    389378 
    390379    /* Get which cell was clicked in */ 
    391380    GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(su->list)); 
     381 
    392382    GtkTreeIter iter; 
    393383    GtkTreeModel *model; 
    394      
    395384    if (!gtk_tree_selection_get_selected(sel, &model, &iter)) 
    396385        return; 
    397     if(!(eb->type == GDK_2BUTTON_PRESS && eb->button == 1)) 
    398         return; 
    399386 
    400387    gchar *c_uin; 
    401388    gtk_tree_model_get(model, &iter, 1, &c_uin, -1); 
    402     uin = atol(c_uin); 
     389    gulong uin = strtoul(c_uin, 0, 10); 
    403390    g_free(c_uin); 
    404391 
    405     if((uin == 0) || (user = gUserManager.FetchUser(uin, LOCK_N))) 
     392    // either invalid uin or we have this user already 
     393  if (uin == 0 || gUserManager.FetchUser(uin, LOCK_N) != NULL) 
    406394        return; 
    407395 
     
    409397 
    410398    char *for_statusbar = g_strdup_printf("User (%ld) added", uin); 
    411     change_status(su->etag->statusbar, "sta", for_statusbar); 
     399    change_status(su->statusbar, "sta", for_statusbar); 
    412400    g_free(for_statusbar); 
    413401} 
     
    416404{    
    417405    /* Make sure it's the right event */ 
    418     if(!event->Equals(su->etag->e_tag)) 
     406    if (su == NULL || !event->Equals(su->e_tag)) 
    419407        return; 
    420408 
     
    429417} 
    430418 
    431 void search_done(bool more) 
     419void  
     420search_done(bool more) 
    432421{ 
    433422    if (more) 
    434         change_status(su->etag->statusbar, "sta", 
     423        change_status(su->statusbar, "sta", 
    435424            "More users found, narrow your search and try again."); 
    436425    else 
    437         change_status(su->etag->statusbar, "sta", 
     426        change_status(su->statusbar, "sta", 
    438427            "Search complete, double click user to add her/him."); 
    439428} 
    440429 
    441 std::string 
    442 s_convert_to_utf8(const gchar *input_text, const gchar *input_enc) 
    443 { 
    444     if (input_text == 0 || input_text[0] == '\0') 
    445         return string(""); 
    446     char *p = convert_to_utf8(input_text, input_enc); 
    447     string ret(""); 
    448     if (p != 0) { 
    449         ret = p; 
    450         g_free(p); 
    451     } 
    452     return ret; 
    453 } 
    454  
    455 void search_found(CSearchAck *s) 
    456 { 
    457     cerr << "s_f 1\n"; 
    458     string name( 
    459             s_convert_to_utf8(s->FirstName(), 0) + ' ' +  
    460             s_convert_to_utf8(s->LastName(), 0)); 
     430void  
     431search_found(CSearchAck *s) 
     432{ 
     433    string name(s_convert_to_utf8(s->FirstName()) + ' ' +  
     434        s_convert_to_utf8(s->LastName())); 
    461435 
    462436    char *uin = g_strdup_printf("%ld", s->Uin()); 
    463     string alias(s_convert_to_utf8(s->Alias(), 0)); 
    464     string email(s_convert_to_utf8(s->Email(), 0)); 
    465  
    466     cerr << "s_f 2\n"; 
    467      
     437    string alias(s_convert_to_utf8(s->Alias())); 
     438    string email(s_convert_to_utf8(s->Email())); 
     439 
    468440    GtkListStore *store =  
    469441            GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(su->list))); 
     
    492464    else if (s->Gender() == 2) 
    493465        gender = "M"; 
    494     char *sex_age = 0; 
     466    char *sex_age; 
    495467    if (s->Age()) 
    496468        sex_age = g_strdup_printf("%s/%d", gender, s->Age()); 
     
    498470        sex_age = g_strdup_printf("%s/?", gender); 
    499471    gtk_list_store_set(store, &iter, 5, sex_age, -1); 
     472    g_free(sex_age); 
    500473 
    501474    if (s->Auth()) 
     
    504477        gtk_list_store_set(store, &iter, 6, "Yes", -1); 
    505478     
    506     cerr << "s_f 3\n"; 
    507      
    508479    num_found_users++; 
    509480    gtk_widget_set_sensitive(su->clear, TRUE); 
     
    512483void search_failed() 
    513484{ 
    514     change_status(su->etag->statusbar, "sta", "Search failed."); 
    515 } 
    516  
    517 void search_close(GtkWidget *widget, gpointer data) 
     485    change_status(su->statusbar, "sta", "Search failed."); 
     486} 
     487 
     488void  
     489search_close(GtkWidget *widget, gpointer data) 
    518490{ 
    519491    gtk_widget_destroy(su->window); 
    520     su = 0; 
    521 } 
     492    g_free(su); 
     493    su = NULL; 
     494}