struct acct_features_dialog * create_acct_features_dialog() { struct acct_features_dialog *f_diag = g_malloc(sizeof(struct acct_features_dialog)); memset(f_diag, 0, sizeof(struct acct_features_dialog)); /* widgets that can possibly be modified along dialog lifetime */ f_diag->window = pidgin_create_dialog(_("Account features"), PIDGIN_HIG_BORDER, "acct-features", TRUE); f_diag->list_store = gtk_list_store_new(N_COLUMN, GDK_TYPE_PIXBUF, /* ACCTICON */ G_TYPE_STRING, /* ACCT */ GDK_TYPE_PIXBUF, /* NICKNAME */ GDK_TYPE_PIXBUF, /* PM */ GDK_TYPE_PIXBUF, /* ICON */ GDK_TYPE_PIXBUF, /* MOOD */ GDK_TYPE_PIXBUF, /* MOODMSG */ GDK_TYPE_PIXBUF, /* TUNE */ GDK_TYPE_PIXBUF, /* GAME */ GDK_TYPE_PIXBUF /* APP */ ); /* add main widgets */ gtk_add_main_widget(PBAR_WIDGET(f_diag), f_diag->window); /* widgets that are not modified */ GtkWidget *pbox = gtk_pidgin_dialog_box_new(_("Available features..."), _("The following list shows the" " available features for each" " activated account. The last" " line summarizes features" " that have an impact on at" " least one account."), PIDGIN_STOCK_DIALOG_INFO); GtkWidget *vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(f_diag->window), FALSE, PIDGIN_HIG_BORDER); GtkWidget *hbox = pidgin_dialog_get_action_area(GTK_DIALOG(f_diag->window)); GtkWidget *view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(f_diag->list_store)); GtkWidget *refresh_button = gtk_button_new_from_stock(GTK_STOCK_REFRESH); GtkWidget *close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); /* create view and model */ GtkTreeViewColumn *p_col = gtk_tree_view_column_new(); GtkCellRenderer *p_renderer; gtk_tree_view_column_set_title(p_col, _("Account")); gtk_tree_view_append_column(GTK_TREE_VIEW(view), p_col); p_renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(p_col, p_renderer, FALSE); gtk_tree_view_column_add_attribute(p_col, p_renderer, "pixbuf", ACCTICON_COLUMN); p_renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(p_col, p_renderer, TRUE); gtk_tree_view_column_add_attribute(p_col, p_renderer, "text", ACCT_COLUMN); const struct g_column { const gchar *title; /* column title */ const gchar *attr_type; /* column type attribute */ GtkCellRenderer *(*gtk_cell_renderer_new)(); /* gtk cell renderer creation */ guint position; /* column position */ } columns[] = { { N_("Nickname"), "pixbuf", gtk_cell_renderer_pixbuf_new, NICKNAME_COLUMN }, { N_("Status message"), "pixbuf", gtk_cell_renderer_pixbuf_new, PM_COLUMN }, { N_("Buddy icon"), "pixbuf", gtk_cell_renderer_pixbuf_new, ICON_COLUMN }, { N_("Mood"), "pixbuf", gtk_cell_renderer_pixbuf_new, MOOD_COLUMN }, { N_("Mood message"), "pixbuf", gtk_cell_renderer_pixbuf_new, MOODMSG_COLUMN }, { N_("Tune"), "pixbuf", gtk_cell_renderer_pixbuf_new, TUNE_COLUMN }, { N_("Game"), "pixbuf", gtk_cell_renderer_pixbuf_new, GAME_COLUMN }, { N_("App."), "pixbuf", gtk_cell_renderer_pixbuf_new, APP_COLUMN }, { NULL, NULL, NULL, 0 } }; const struct g_column *col = columns; /* create columns */ for(; col->title ; col++) { GtkCellRenderer *renderer = col->gtk_cell_renderer_new(); GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(_(col->title), renderer, col->attr_type, col->position, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); } /* pack widgets */ gtk_box_pack_start(GTK_BOX(hbox), refresh_button, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), close_button, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), pbox, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), view, TRUE, TRUE, 0); /* gtk signals and callback */ const struct pbar_gtk_signal g_signal_connections[] = { { f_diag->window, "destroy", cb_destroy_win }, { refresh_button, "clicked", cb_refresh_button }, { close_button, "clicked", cb_close_button }, { NULL, NULL, NULL } }; /* connect signals and save handlers and instance when needed to disconnect those signals when the widget is destroyed */ gtk_connect_signals(PBAR_WIDGET(f_diag), g_signal_connections, f_diag); /* show everything */ gtk_widget_show_all(f_diag->window); gtk_window_present(GTK_WINDOW(f_diag->window)); return f_diag; }
struct mood_dialog * create_mood_dialog() { struct mood_dialog *s_diag = g_malloc(sizeof(struct mood_dialog)); memset(s_diag, 0, sizeof(struct mood_dialog)); /* widgets that can be modifier along dialog lifetime */ s_diag->window = pidgin_create_dialog(_("Mood selection"), PIDGIN_HIG_BORDER, "mood-select", TRUE); s_diag->list_store = gtk_list_store_new(N_COLUMN, GDK_TYPE_PIXBUF, /* MOODICON */ G_TYPE_STRING /* MOOD */ ); s_diag->list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL( s_diag->list_store)); /* add main widgets */ gtk_add_main_widget(PBAR_WIDGET(s_diag), s_diag->window); /* widgets that are not modified */ GtkWidget *pbox = gtk_pidgin_dialog_box_new(_("Select your mood..."), _("This will change your mood for" " every account which supports" " it."), PIDGIN_STOCK_DIALOG_QUESTION); GtkWidget *vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG( s_diag->window), FALSE, PIDGIN_HIG_BORDER); GtkWidget *hbox = pidgin_dialog_get_action_area(GTK_DIALOG(s_diag->window)); GtkWidget *refresh_button = gtk_button_new_from_stock(GTK_STOCK_REFRESH); GtkWidget *close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); GtkWidget *apply_button = gtk_button_new_from_stock(GTK_STOCK_APPLY); /* create view and model */ GtkTreeViewColumn *p_col = gtk_tree_view_column_new(); GtkCellRenderer *p_renderer; gtk_tree_view_column_set_title(p_col, _("Mood")); gtk_tree_view_append_column(GTK_TREE_VIEW(s_diag->list_view), p_col); p_renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(p_col, p_renderer, FALSE); gtk_tree_view_column_add_attribute(p_col, p_renderer, "pixbuf", MOODICON_COLUMN); p_renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(p_col, p_renderer, TRUE); gtk_tree_view_column_add_attribute(p_col, p_renderer, "text", MOOD_COLUMN); /* pack widgets */ gtk_box_pack_start(GTK_BOX(hbox), refresh_button, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), close_button, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), apply_button, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), pbox, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), s_diag->list_view, TRUE, TRUE, 0); /* gtk signals and callback */ const struct pbar_gtk_signal g_signal_connections[] = { { s_diag->window, "destroy", cb_destroy_win }, { s_diag->list_view, "row-activated", PBAR_GTK_CALLBACK(cb_row_activated) }, { refresh_button, "clicked", cb_refresh_button }, { apply_button, "clicked", cb_apply_button }, { close_button, "clicked", cb_close_button }, { NULL, NULL, NULL } }; /* connect signals and save handlers and instance when needed to disconnect those signals when the widget is destroyed */ gtk_connect_signals(PBAR_WIDGET(s_diag), g_signal_connections, s_diag); /* show everything */ gtk_widget_show_all(s_diag->window); gtk_window_present(GTK_WINDOW(s_diag->window)); return s_diag; }
void pidgin_icon_theme_edit(PurplePluginAction *unused) { GtkWidget *dialog; GtkWidget *box, *vbox; GtkWidget *notebook; GtkSizeGroup *sizegroup; int s, i, j; dialog = pidgin_create_dialog(_("Pidgin Icon Theme Editor"), 0, "theme-editor-icon", FALSE); box = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(dialog), FALSE, PIDGIN_HIG_BOX_SPACE); notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(box), notebook, TRUE, TRUE, PIDGIN_HIG_BOX_SPACE); sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); for (s = 0; sections[s].heading; s++) { const char *heading = sections[s].heading; box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, gtk_label_new(heading)); vbox = pidgin_make_frame(box, heading); g_object_set_data(G_OBJECT(dialog), heading, vbox); for (i = 0; sections[s].options[i].stockid; i++) { const char *id = sections[s].options[i].stockid; const char *text = _(sections[s].options[i].text); GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_CAT_SPACE); GtkWidget *label = gtk_label_new(text); GtkWidget *image = gtk_image_new_from_stock(id, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)); GtkWidget *ebox = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(ebox), image); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); g_signal_connect(G_OBJECT(ebox), "button-press-event", G_CALLBACK(change_stock_image), image); g_object_set_data(G_OBJECT(image), "property-name", (gpointer)id); g_object_set_data(G_OBJECT(image), "localized-name", (gpointer)text); gtk_size_group_add_widget(sizegroup, label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), ebox, FALSE, FALSE, 0); for (j = 0; stocksizes[j]; j++) { GtkWidget *sh; if (!(sections[s].flags & (1 << j))) continue; sh = gtk_image_new_from_stock(id, gtk_icon_size_from_name(stocksizes[j])); gtk_box_pack_start(GTK_BOX(hbox), sh, FALSE, FALSE, 0); g_object_set_data(G_OBJECT(image), stocksizes[j], sh); } gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); g_object_set_data(G_OBJECT(vbox), id, image); } } #ifdef NOT_SADRUL pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_SAVE, G_CALLBACK(save_icon_theme), dialog); #endif pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_APPLY, G_CALLBACK(use_icon_theme), dialog); pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, G_CALLBACK(close_icon_theme), dialog); gtk_widget_show_all(dialog); g_object_unref(sizegroup); }
PidginXferDialog * pidgin_xfer_dialog_new(void) { PidginXferDialog *dialog; GtkWidget *window; GtkWidget *vbox1, *vbox2; GtkWidget *sw; GtkWidget *button; GtkWidget *expander; GtkWidget *table; GtkWidget *checkbox; dialog = g_new0(PidginXferDialog, 1); dialog->keep_open = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/filetransfer/keep_open"); dialog->auto_clear = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/filetransfer/clear_finished"); /* Create the window. */ dialog->window = window = pidgin_create_dialog(_("File Transfers"), PIDGIN_HIG_BORDER, "file transfer", TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_win_cb), dialog); /* Create the parent vbox for everything. */ vbox1 = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(window), FALSE, PIDGIN_HIG_BORDER); /* Create the main vbox for top half of the window. */ vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); gtk_box_pack_start(GTK_BOX(vbox1), vbox2, TRUE, TRUE, 0); gtk_widget_show(vbox2); /* Setup the listbox */ sw = setup_tree(dialog); gtk_box_pack_start(GTK_BOX(vbox2), sw, TRUE, TRUE, 0); gtk_widget_set_size_request(sw,-1, 140); /* "Close this window when all transfers finish" */ checkbox = gtk_check_button_new_with_mnemonic( _("Close this window when all transfers _finish")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), !dialog->keep_open); g_signal_connect(G_OBJECT(checkbox), "toggled", G_CALLBACK(toggle_keep_open_cb), dialog); gtk_box_pack_start(GTK_BOX(vbox2), checkbox, FALSE, FALSE, 0); gtk_widget_show(checkbox); /* "Clear finished transfers" */ checkbox = gtk_check_button_new_with_mnemonic( _("C_lear finished transfers")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), dialog->auto_clear); g_signal_connect(G_OBJECT(checkbox), "toggled", G_CALLBACK(toggle_clear_finished_cb), dialog); gtk_box_pack_start(GTK_BOX(vbox2), checkbox, FALSE, FALSE, 0); gtk_widget_show(checkbox); /* "Download Details" arrow */ expander = gtk_expander_new_with_mnemonic(_("File transfer _details")); dialog->expander = expander; gtk_box_pack_start(GTK_BOX(vbox2), expander, FALSE, FALSE, 0); gtk_widget_show(expander); gtk_widget_set_sensitive(expander, FALSE); /* The table of information. */ table = make_info_table(dialog); gtk_container_add(GTK_CONTAINER(expander), table); gtk_widget_show(table); /* Open button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_OPEN, G_CALLBACK(open_button_cb), dialog); gtk_widget_set_sensitive(button, FALSE); dialog->open_button = button; /* Pause button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), _("_Pause"), G_CALLBACK(pause_button_cb), dialog); gtk_widget_set_sensitive(button, FALSE); dialog->pause_button = button; /* Resume button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), _("_Resume"), G_CALLBACK(resume_button_cb), dialog); gtk_widget_set_sensitive(button, FALSE); dialog->resume_button = button; /* Remove button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_REMOVE, G_CALLBACK(remove_button_cb), dialog); gtk_widget_hide(button); dialog->remove_button = button; /* Stop button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_STOP, G_CALLBACK(stop_button_cb), dialog); gtk_widget_set_sensitive(button, FALSE); dialog->stop_button = button; /* Close button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, G_CALLBACK(close_button_cb), dialog); dialog->close_button = button; #ifdef _WIN32 g_signal_connect(G_OBJECT(dialog->window), "show", G_CALLBACK(winpidgin_ensure_onscreen), dialog->window); #endif return dialog; }