/*************************************************************************** * searchdialog.cpp * * Mon Jun 6 00:31:20 2005 * Copyright 2005 User * Email ****************************************************************************/ #include "searchdialog.h" struct _customListEntries { gchar *szName; } ageRanges[7] = {{tr_NOOP("Not specified")}, {"18 - 22"}, {"23 - 29"}, {"30 - 39"}, {"40 - 49"}, {"50 - 59"}, {"60+"}}; _customListEntries gender[3] = {{tr_NOOP("Not specified")}, {"weiblich"}, {"männlich"} }; searchForUserDialog::searchForUserDialog() { wType = UE_WHITEPAGES; } searchForUserDialog::~searchForUserDialog() { } GtkWidget* searchForUserDialog::createWindowContent() { GtkWidget *mainVBox, *vbox1, *alignment1, *alignment2, *alignment3, *alignment4, *talignment2, *talignment3, *label, *table1, *table2, *table3; GtkSizeGroup *sizes; gchar *fstr; sizes = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); // create the first notebook with the main fields // the user-by-id section findByIDButton = gtk_radio_button_new_with_label(NULL, tr("Find a user by his account name")); g_signal_connect_swapped(findByIDButton, "toggled", G_CALLBACK(this->cb_searchModeToggled), this); uinEntry = gtk_entry_new(); gtk_entry_set_activates_default(GTK_ENTRY(uinEntry), TRUE); alignment1 = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment1), 0, 10, 20, 0); gtk_container_add(GTK_CONTAINER(alignment1), uinEntry); // the users-by-info section findByInfoButton = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(findByIDButton)), tr("Find users by their personal information")); g_signal_connect_swapped(findByInfoButton, "toggled", G_CALLBACK(this->cb_searchModeToggled), this); fstr = g_strdup_printf("%s", tr("For searching a user you can fill one or more of the fields in the tabs. All filled fields will be taken into account when searching.")); infoLabel = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(infoLabel), TRUE); gtk_label_set_line_wrap(GTK_LABEL(infoLabel), TRUE); gtk_misc_set_alignment(GTK_MISC(infoLabel), 0.0, 0.0); alignment2 = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment2), 0, 0, 20, 0); gtk_container_add(GTK_CONTAINER(alignment2), infoLabel); // create the tables // 1. General table1 = gtk_table_new(5, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table1), 2); gtk_container_set_border_width(GTK_CONTAINER(table1), 5); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("First name:"), fNameEntry, "", 0, 2, 0); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Last name:"), lNameEntry, "", 2, 4, 0); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Alias:"), aliasEntry, "", 0, 2, 1); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Email:"), emailEntry, "", 2, 4, 1); UIT_MAKE_LIST_BOX(ageList, 0, 7, ageRanges); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Age range:"), ageList, 0, 2, 2); UIT_MAKE_LIST_BOX(genderList, 0, 3, gender); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Gender:"), genderList, 2, 4, 2); UIT_MAKE_LIST_BOX(langList, 0, NUM_LANGUAGES, gLanguages); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Language:"), langList, 0, 4, 3); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Key word"), keywordEntry, "", 0, 4, 4); // 2. Address table2 = gtk_table_new(3, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table2), 2); gtk_container_set_border_width(GTK_CONTAINER(table2), 5); UIT_MAKE_TABLE_ROW_ENTRY(table2, label, tr("City:"), cityEntry, "", 0, 2, 0); UIT_MAKE_TABLE_ROW_ENTRY(table2, label, tr("State:"), stateEntry, "", 0, 2, 1); UIT_MAKE_LIST_BOX(countryList, 0, NUM_COUNTRIES, gCountries); UIT_MAKE_TABLE_ROW_CUSTOM(table2, label, tr("Country:"), countryList, 0, 2, 2); talignment2 = gtk_alignment_new(0, 0, 1, 0); gtk_container_add(GTK_CONTAINER(talignment2), table2); // 3. Work table3 = gtk_table_new(3, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table3), 2); gtk_container_set_border_width(GTK_CONTAINER(table3), 5); UIT_MAKE_TABLE_ROW_ENTRY(table3, label, tr("Name:"), companyNameEntry, "",0, 2, 0); UIT_MAKE_TABLE_ROW_ENTRY(table3, label, tr("Department:"), companyDepEntry, "",0, 2, 1); UIT_MAKE_TABLE_ROW_ENTRY(table3, label, tr("Position:"), companyPosEntry, "",0, 2, 2); talignment3 = gtk_alignment_new(0, 0, 1, 0); gtk_container_add(GTK_CONTAINER(talignment3), table3); infoNotebook = gtk_notebook_new(); gtk_notebook_append_page(GTK_NOTEBOOK(infoNotebook), table1, gtk_label_new(tr("General"))); gtk_notebook_append_page(GTK_NOTEBOOK(infoNotebook), talignment2, gtk_label_new(tr("Location"))); gtk_notebook_append_page(GTK_NOTEBOOK(infoNotebook), talignment3, gtk_label_new(tr("Work / Company"))); alignment3 = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment3), 0, 0, 20, 0); gtk_container_add(GTK_CONTAINER(alignment3), infoNotebook); // the return online only button onlineCheckbox = gtk_check_button_new_with_mnemonic(tr("Return _online users only")); alignment4 = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment4), 0, 0, 20, 0); gtk_container_add(GTK_CONTAINER(alignment4), onlineCheckbox); // add everything into a vbox vbox1 = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox1), 5); gtk_box_pack_start(GTK_BOX(vbox1), findByIDButton, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), alignment1, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), findByInfoButton, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), alignment2, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), alignment3, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), alignment4, FALSE, TRUE, 0); // create a nice notebook border around it notebook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox1, NULL); // create the main vbox mainVBox = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(mainVBox), 10); gtk_box_pack_start(GTK_BOX(mainVBox), notebook, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(mainVBox), createResultsList(), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(mainVBox), createButtonbar(), FALSE, TRUE, 0); setWindowSize(530, 400); setWindowTitle("Find Users"); cb_searchModeToggled(this); updateUserButtons(); return mainVBox; /* GtkWidget *table1, *label, *hbox1, *vbox1; GtkSizeGroup *sizes; sizes = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); // *** create the white pages entry *** table1 = gtk_table_new(9, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table1), 2); // left column UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Alias:"), aliasEntry, "", 0, 2, 0); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("First name:"), fNameEntry, "", 0, 2, 1); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Last name:"), lNameEntry, "", 0, 2, 2); UIT_MAKE_LIST_BOX(ageList, 0, 7, ageRanges); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Age range:"), ageList, 0, 2, 3); UIT_MAKE_LIST_BOX(genderList, 0, 3, gender); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Gender:"), genderList, 0, 2, 4); UIT_MAKE_LIST_BOX(langList, 0, NUM_LANGUAGES, gLanguages); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Language:"), langList, 0, 2, 5); // right column UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("City:"), cityEntry, "", 2, 4, 0); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("State:"), stateEntry, "", 2, 4, 1); UIT_MAKE_LIST_BOX(countryList, 0, NUM_COUNTRIES, gCountries); UIT_MAKE_TABLE_ROW_CUSTOM(table1, label, tr("Country:"), countryList, 2, 4, 2); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Comp. name:"), companyNameEntry, "",2, 4, 3); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Comp. dep:"), companyDepEntry, "",2, 4, 4); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Comp. pos:"), companyPosEntry, "",2, 4, 5); // bottom column UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Email:"), emailEntry, "", 0, 4, 6); UIT_MAKE_TABLE_ROW_ENTRY(table1, label, tr("Key word"), keywordEntry, "", 0, 4, 7); // online checkbox onlineCheckbox = gtk_check_button_new_with_mnemonic(tr("Return _online users only")); gtk_table_attach_defaults(GTK_TABLE(table1), onlineCheckbox, 0, 4, 8, 9); // *** create the uin search tab *** hbox1 = gtk_hbox_new(FALSE, 2); uinEntry = gtk_entry_new(); label = gtk_label_new(tr("ICQ Number:")); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), uinEntry, TRUE, TRUE, 0); // *** create the notebook *** notebook = gtk_notebook_new(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table1, gtk_label_new_with_mnemonic("_Whitepages")); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox1, gtk_label_new_with_mnemonic("_ICQ Number")); // *** add everything into a vbox vbox1 = gtk_vbox_new(FALSE, 7); gtk_container_set_border_width(GTK_CONTAINER(vbox1), 4); gtk_box_pack_start(GTK_BOX(vbox1), notebook, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), createResultsList(), TRUE, TRUE, 0); // gtk_box_pack_start(GTK_BOX(vbox1), hbox2, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), gtk_hseparator_new(), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), createButtonbar(), FALSE, TRUE, 0); updateUserButtons(); */ return vbox1; } void searchForUserDialog::windowActivated() { // we can only do it here, because window is not yet created when calling createWindowContent GTK_WIDGET_SET_FLAGS(searchButton, GTK_CAN_DEFAULT); gtk_widget_grab_default(searchButton); } GtkWidget* searchForUserDialog::createResultsList() { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *scrolled, *hbox2, *vbox, *frame1; gchar *fstr; resultsStore = gtk_list_store_new(7, G_TYPE_STRING, // alias G_TYPE_STRING, // uin G_TYPE_STRING, // name G_TYPE_STRING, // email GDK_TYPE_PIXBUF, // status G_TYPE_STRING, // sex & age G_TYPE_BOOLEAN); // authorize resultsView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(resultsStore)); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(resultsView)), GTK_SELECTION_MULTIPLE); g_signal_connect_swapped(gtk_tree_view_get_selection(GTK_TREE_VIEW(resultsView)), "changed", G_CALLBACK(this->cb_moveResultsFocus), this); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(resultsView), TRUE); // make the alias column renderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new_with_attributes(tr("Alias"), renderer, "pixbuf", SFU_STATUS, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_set_attributes(column, renderer, "text", SFU_ALIAS, NULL); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(resultsView), column); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), SFU_ALIAS); // make the uin column renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(tr("Id"), renderer, "text", SFU_UIN, NULL); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(resultsView), column); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), SFU_UIN); // make the name column renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(tr("Name"), renderer, "text", SFU_NAME, NULL); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(resultsView), column); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), SFU_NAME); // make the email column renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(tr("Email"), renderer, "text", SFU_EMAIL, NULL); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(resultsView), column); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), SFU_EMAIL); // make the sex and age column renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(tr("Gender / Age"), renderer, "text", SFU_SEXAGE, NULL); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(resultsView), column); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), SFU_SEXAGE); // make the sex and age column renderer = gtk_cell_renderer_toggle_new(); column = gtk_tree_view_column_new_with_attributes(tr("Need authorization"), renderer, "active", SFU_AUTHORIZE, NULL); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(resultsView), column); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), SFU_AUTHORIZE); scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(scrolled), resultsView); // create the tool buttons infoButton = u_createStockImageButton(ICON_INFO); g_object_set_data(G_OBJECT(infoButton), "icqnd-searchev", GUINT_TO_POINTER(UE_USERINFO)); g_signal_connect(infoButton, "clicked", G_CALLBACK(this->cb_userButtonClicked), this); messageButton = u_createStockImageButton(ICON_MESSAGE); g_object_set_data(G_OBJECT(messageButton), "icqnd-searchev", GUINT_TO_POINTER(UE_MESSAGE)); g_signal_connect(messageButton, "clicked", G_CALLBACK(this->cb_userButtonClicked), this); chatButton = u_createStockImageButton(ICON_CHAT); g_object_set_data(G_OBJECT(chatButton), "icqnd-searchev", GUINT_TO_POINTER(UE_CHATREQUEST)); g_signal_connect(chatButton, "clicked", G_CALLBACK(this->cb_userButtonClicked), this); filetransferButton = u_createStockImageButton(ICON_FILE); g_object_set_data(G_OBJECT(filetransferButton), "icqnd-searchev", GUINT_TO_POINTER(UE_FILETRANSFERREQUEST)); g_signal_connect(filetransferButton, "clicked", G_CALLBACK(this->cb_userButtonClicked), this); // create the add user buttons addUserButton = gtk_button_new_with_mnemonic(""); gtk_button_set_relief(GTK_BUTTON(addUserButton), GTK_RELIEF_HALF); g_signal_connect_swapped(addUserButton, "clicked", G_CALLBACK(this->cb_addUsersButtonClicked), this); alertUserCheckbox = gtk_check_button_new_with_mnemonic(tr("_Alert user")); hbox2 = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(hbox2), infoButton, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), messageButton, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), chatButton, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), filetransferButton, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox2), addUserButton, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox2), alertUserCheckbox, FALSE, FALSE, 5); // create the status label fstr = g_strdup_printf("%s", tr("Ready ...")); statusLabel = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(statusLabel), TRUE); gtk_misc_set_alignment(GTK_MISC(statusLabel), 0.0f, 0.5f); // add everything into a vbox vbox = gtk_vbox_new(FALSE, 2); gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), statusLabel, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, TRUE, 0); // add a frame around it frame1 = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_OUT); gtk_container_add(GTK_CONTAINER(frame1), vbox); return frame1; } GtkWidget* searchForUserDialog::createButtonbar() { GtkWidget *hbox; searchAni = new processingAni(); searchAni->setupAnimation(i_getIcons()->images.searchingAni, 22, 22); searchButton = gtk_button_new_from_stock(GTK_STOCK_FIND); g_signal_connect_swapped(searchButton, "clicked", G_CALLBACK(this->cb_searchButtonClicked), this); resetButton = gtk_button_new_from_stock(GTK_STOCK_CLEAR); g_signal_connect_swapped(resetButton, "clicked", G_CALLBACK(this->cb_resetButtonClicked), this); closeButton = gtk_button_new_from_stock(GTK_STOCK_CLOSE); g_signal_connect_swapped(closeButton, "clicked", G_CALLBACK(this->cb_closeButtonClicked), this); hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(hbox), searchAni->widget, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), resetButton, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), searchButton, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), closeButton, FALSE, FALSE, 0); return hbox; } void searchForUserDialog::destroyWindowContent() { searchAni->stop(); delete searchAni; delete manager; } void searchForUserDialog::updateUserButtons() { GtkTreePath* path; GtkTreeSelection *sel; gint rows; gchar buf[1000]; gtk_tree_view_get_cursor(GTK_TREE_VIEW(resultsView), &path, NULL); if (!path) { gtk_widget_set_sensitive(infoButton, FALSE); gtk_widget_set_sensitive(messageButton, FALSE); gtk_widget_set_sensitive(chatButton, FALSE); gtk_widget_set_sensitive(filetransferButton, FALSE); } else { gtk_widget_set_sensitive(infoButton, TRUE); gtk_widget_set_sensitive(messageButton, TRUE); gtk_widget_set_sensitive(chatButton, TRUE); gtk_widget_set_sensitive(filetransferButton, TRUE); gtk_tree_path_free(path); } sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(resultsView)); rows = gtk_tree_selection_count_selected_rows(sel); sprintf(buf, tr("Add %d users"), rows); gtk_button_set_label(GTK_BUTTON(addUserButton), buf); gtk_button_set_use_underline(GTK_BUTTON(addUserButton), TRUE); if (!rows) gtk_widget_set_sensitive(addUserButton, FALSE); else gtk_widget_set_sensitive(addUserButton, TRUE); } void searchForUserDialog::addSearchResult(searchEventInfo *searchInfo) { GtkTreeIter iter; GString *name, *sex; GdkPixbuf *status; gchar buf[1000], buf2[1000]; gchar *fstr, *txt, *txt2; name = g_string_new(searchInfo->firstName); if (strlen(name->str)>0 && strlen(searchInfo->lastName)>0) name = g_string_append(name, " "); name = g_string_append(name, searchInfo->lastName); sex = g_string_new(""); switch(searchInfo->gender) { case 1: sex = g_string_append(sex, tr("f ")); break; case 2: sex = g_string_append(sex, tr("m ")); break; default: sex = g_string_append(sex, "? "); break; } switch(searchInfo->status) { case 0: status = i_getIcons()->getStatusPixbuf("icq", BUDDY_STATUS_OFFLINE, FALSE); break; case 1: status = i_getIcons()->getStatusPixbuf("icq", BUDDY_STATUS_ONLINE, FALSE); break; default: status = i_getIcons()->getStatusPixbuf("icq", BUDDY_STATUS_OFFLINE, TRUE); break; } g_string_append_printf(sex, " %d", searchInfo->age); gtk_list_store_append(resultsStore, &iter); gtk_list_store_set(resultsStore, &iter, SFU_ALIAS, searchInfo->alias, SFU_UIN, searchInfo->id, SFU_NAME, name->str, SFU_EMAIL, searchInfo->email, SFU_STATUS, status, SFU_SEXAGE, sex->str, SFU_AUTHORIZE, searchInfo->requireAuthorization, -1); g_string_free(name, TRUE); g_string_free(sex, TRUE); if (searchInfo->lastEntry) { if (searchInfo->more == 0) txt = g_strdup(""); else if (searchInfo->more < 0) txt = g_strdup(tr(", many more results")); else txt = g_strdup_printf(tr(", %d more not displayed results"), searchInfo->more); txt2 = g_strdup_printf(tr("Search finished (%d Results%s)"), gtk_tree_model_iter_n_children(GTK_TREE_MODEL(resultsStore), NULL), txt); fstr = g_strdup_printf("%s", txt2); g_free(txt2); g_free(txt); } else { txt = g_strdup_printf(tr("Searching (%d Hits) ..."), gtk_tree_model_iter_n_children(GTK_TREE_MODEL(resultsStore), NULL)); fstr = g_strdup_printf("%s", txt); g_free(txt); } gtk_label_set_markup(GTK_LABEL(statusLabel), fstr); g_free(fstr); } gboolean searchForUserDialog::eventCallback(gint command, gint lastResult, gpointer info) { gchar *fstr; if (command != UC_EVENT_FINISHED) return TRUE; if (lastResult != EVENT_RESULT_ACKED && lastResult != EVENT_RESULT_SUCCESS) { uu_showSendErrorMessage(tr("Error while searching"), tr("Could not search for users"), lastResult, manager->info->status); stopSearch(); fstr = g_strdup_printf("%s", tr("Error ...")); gtk_label_set_markup(GTK_LABEL(statusLabel), fstr); g_free(fstr); } else { if (info) { addSearchResult((searchEventInfo*)info); if (((searchEventInfo*)info)->lastEntry) stopSearch(); } else { if (!gtk_tree_model_iter_n_children(GTK_TREE_MODEL(resultsStore), NULL)) gtk_label_set_markup(GTK_LABEL(statusLabel), tr("Search finished (no results)")); stopSearch(); } } return TRUE; } void searchForUserDialog::startSearch() { gushort ageMin[7] = {0, 18, 23, 30, 40, 50, 60}; gushort ageMax[7] = {0, 22, 29, 39, 49, 59, 120}; gchar *fstr; gtk_widget_set_sensitive(notebook, FALSE); gtk_widget_set_sensitive(searchButton, FALSE); gtk_button_set_label(GTK_BUTTON(closeButton), GTK_STOCK_CANCEL); gtk_button_set_use_stock(GTK_BUTTON(closeButton), TRUE); searchAni->play(); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(findByIDButton))) ((IMUserSearchManager*)manager)->searchByID((gchar*)gtk_entry_get_text(GTK_ENTRY(uinEntry))); else ((IMUserSearchManager*)manager)->searchWhitePages((gchar*)gtk_entry_get_text(GTK_ENTRY(fNameEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(lNameEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(aliasEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(emailEntry)), ageMin[gtk_combo_box_get_active(GTK_COMBO_BOX(ageList))], ageMax[gtk_combo_box_get_active(GTK_COMBO_BOX(ageList))], gtk_combo_box_get_active(GTK_COMBO_BOX(genderList)), GetLanguageByIndex(gtk_combo_box_get_active(GTK_COMBO_BOX(langList)))->nCode, (gchar*)gtk_entry_get_text(GTK_ENTRY(cityEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(stateEntry)), GetCountryByIndex(gtk_combo_box_get_active(GTK_COMBO_BOX(countryList)))->nCode, (gchar*)gtk_entry_get_text(GTK_ENTRY(companyNameEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(companyDepEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(companyPosEntry)), (gchar*)gtk_entry_get_text(GTK_ENTRY(keywordEntry)), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(onlineCheckbox))); gtk_list_store_clear(resultsStore); // updateUserButtons(); fstr = g_strdup_printf("%s", tr("Searching ...")); gtk_label_set_markup(GTK_LABEL(statusLabel), fstr); g_free(fstr); } void searchForUserDialog::stopSearch() { gchar *fstr; gtk_widget_set_sensitive(notebook, TRUE); gtk_widget_set_sensitive(searchButton, TRUE); gtk_button_set_label(GTK_BUTTON(closeButton), GTK_STOCK_CLOSE); gtk_button_set_use_stock(GTK_BUTTON(closeButton), TRUE); searchAni->stop(); if (manager->isProcessing) { fstr = g_strdup_printf("%s", tr("Cancelled!")); gtk_label_set_markup(GTK_LABEL(statusLabel), fstr); g_free(fstr); manager->cancelInitatedEvent(); } } void searchForUserDialog::resetSearch() { gchar *fstr; gtk_list_store_clear(resultsStore); // updateUserButtons(); gtk_entry_set_text(GTK_ENTRY(aliasEntry), ""); gtk_entry_set_text(GTK_ENTRY(fNameEntry), ""); gtk_entry_set_text(GTK_ENTRY(lNameEntry), ""); gtk_entry_set_text(GTK_ENTRY(cityEntry), ""); gtk_entry_set_text(GTK_ENTRY(stateEntry), ""); gtk_entry_set_text(GTK_ENTRY(companyNameEntry), ""); gtk_entry_set_text(GTK_ENTRY(companyDepEntry), ""); gtk_entry_set_text(GTK_ENTRY(companyPosEntry), ""); gtk_entry_set_text(GTK_ENTRY(emailEntry), ""); gtk_entry_set_text(GTK_ENTRY(keywordEntry), ""); gtk_entry_set_text(GTK_ENTRY(uinEntry), ""); gtk_combo_box_set_active(GTK_COMBO_BOX(ageList), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(genderList), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(langList), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(countryList), 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(onlineCheckbox), FALSE); if (!manager->isProcessing) { fstr = g_strdup_printf("%s", tr("Ready ...")); gtk_label_set_markup(GTK_LABEL(statusLabel), fstr); g_free(fstr); } } void searchForUserDialog::cb_searchButtonClicked(searchForUserDialog* self) { self->startSearch(); } void searchForUserDialog::cb_resetButtonClicked(searchForUserDialog* self) { self->resetSearch(); } void searchForUserDialog::cb_closeButtonClicked(searchForUserDialog* self) { if (self->manager->isProcessing) self->stopSearch(); else { self->destroyWindow(); delete self; } } void searchForUserDialog::cb_moveResultsFocus(searchForUserDialog* self) { self->updateUserButtons(); } void searchForUserDialog::cb_userButtonClicked(GtkWidget* w, searchForUserDialog* self) { IMUserDaemon *user; IMBuddy *buddy; guint toCall; GtkTreePath* path; GtkTreeIter iter; gchar *id, *alias; gtk_tree_view_get_cursor(GTK_TREE_VIEW(self->resultsView), &path, NULL); if (path) { gtk_tree_model_get_iter(GTK_TREE_MODEL(self->resultsStore), &iter, path); gtk_tree_model_get(GTK_TREE_MODEL(self->resultsStore), &iter, SFU_ALIAS, &alias, SFU_UIN, &id, -1); if (!(user = ((IMOwnerDaemon*)self->manager->parentUser)->findUserByID(id))) { user = ((IMOwnerDaemon*)self->manager->parentUser)->addUserTemporally(id); user->info->alias = g_strdup(alias); } if (!user->dowry) buddy = new IMBuddy(user); else buddy = (IMBuddy*)user->dowry; toCall = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(w), "icqnd-searchev")); buddy->openEvent((userEventType)toCall, FALSE); gtk_tree_path_free(path); } } void searchForUserDialog::cb_addUsersButtonClicked(searchForUserDialog* self) { GList *sel, *search; gchar *id; GtkTreeIter iter; gboolean doAlert; sel = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(self->resultsView)), NULL); doAlert = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self->alertUserCheckbox)); if (sel) { search = sel; while(search) { gtk_tree_model_get_iter(GTK_TREE_MODEL(self->resultsStore), &iter, (GtkTreePath*)search->data); gtk_tree_model_get(GTK_TREE_MODEL(self->resultsStore), &iter, SFU_UIN, &id, -1); ((IMOwnerDaemon*)self->manager->parentUser)->addUserToList(id, doAlert); search = search->next; } g_list_foreach(sel, (GFunc)gtk_tree_path_free, NULL); g_list_free(sel); } } void searchForUserDialog::cb_searchModeToggled(searchForUserDialog* self) { gboolean sortMode; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self->findByIDButton))) sortMode = TRUE; else sortMode = FALSE; gtk_widget_set_sensitive(self->infoNotebook, !sortMode); gtk_widget_set_sensitive(self->infoLabel, !sortMode); gtk_widget_set_sensitive(self->onlineCheckbox, !sortMode); gtk_widget_set_sensitive(self->uinEntry, sortMode); }