/***************************************************************************
* 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);
}