static gboolean setup_select_names (Dialog *dialog) { ENameSelectorModel *name_selector_model; ENameSelectorDialog *name_selector_dialog; dialog->name_selector = e_name_selector_new (); name_selector_model = e_name_selector_peek_model (dialog->name_selector); e_name_selector_model_add_section (name_selector_model, section_name, section_name, NULL); dialog->malarm_addresses = GTK_WIDGET (e_name_selector_peek_section_entry (dialog->name_selector, section_name)); gtk_widget_show (dialog->malarm_addresses); gtk_box_pack_end_defaults (GTK_BOX (dialog->malarm_address_group), dialog->malarm_addresses); g_signal_connect (G_OBJECT (dialog->malarm_addressbook), "clicked", G_CALLBACK (addressbook_clicked_cb), dialog); name_selector_dialog = e_name_selector_peek_dialog (dialog->name_selector); g_signal_connect (name_selector_dialog, "response", G_CALLBACK (addressbook_response_cb), dialog); return TRUE; }
static void fit_contents_list (OGDObject *obj, gpointer container) { GtkWidget *contents; GtkWidget *link; OGDContent *con; contents = (GtkWidget*) container; if (obj == NULL) { gtk_statusbar_pop (GTK_STATUSBAR (mainStatus), 2); return; } con = OGD_CONTENT (obj); link = gtk_link_button_new_with_label (ogd_content_get_homepage (con), ogd_content_get_name (con)); gtk_box_pack_end_defaults (GTK_BOX (contents), link); gtk_widget_show (link); }
/* create and populate a dialog with a request to scan a finger plus a cancel * button. hook onto the response signal in order to listen for cancellation. */ GtkWidget *create_scan_finger_dialog(void) { GtkWidget *dialog, *label, *progressbar; GtkWidget *vbox; dialog = gtk_dialog_new_with_buttons("Scan finger", GTK_WINDOW(mwin_window), GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); gtk_window_set_deletable(GTK_WINDOW(dialog), FALSE); vbox = GTK_DIALOG(dialog)->vbox; label = gtk_label_new("Scan your finger now"); gtk_box_pack_start_defaults(GTK_BOX(vbox), label); progressbar = gtk_progress_bar_new(); gtk_box_pack_end_defaults(GTK_BOX(vbox), progressbar); g_object_set_data(G_OBJECT(dialog), "progressbar", progressbar); return dialog; }
GtkWidget *gui_build_dialog_gtk_table(GSList * list, gint cols, gboolean use_progress) { GSList *listtmp = list; GtkWidget *adv_vbox = NULL; GtkWidget *adv_expander = NULL; gint ielements = g_slist_position(list, g_slist_last(list)); gint rows = ((ielements + 1) / cols) + use_progress; GtkWidget *tab = gtk_table_new(rows, cols, FALSE); gint actC = 0, actR = 0; GtkWidget *to_grab_focus = NULL; gboolean need_advanced = FALSE; gtk_container_set_border_width(GTK_CONTAINER(tab), 15); /* remember to free adv_expander */ adv_vbox = gtk_vbox_new(FALSE, 5); while (listtmp) { GGaduKeyValue *kv = (GGaduKeyValue *) listtmp->data; GtkWidget *entry = NULL; gboolean need_label = TRUE; gboolean is_advanced = FALSE; switch (kv->type) { case VAR_STR: entry = gtk_entry_new(); if (kv->value) gtk_entry_set_text(GTK_ENTRY(entry), g_strdup(kv->value)); gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); break; case VAR_INT: { entry = gtk_spin_button_new_with_range(0, 999999999, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), (gint) kv->value); gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); } break; case VAR_INT_WITH_NEGATIVE: { entry = gtk_spin_button_new_with_range(-999999999, 999999999, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), (gint) kv->value); gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); } break; case VAR_BOOL: need_label = FALSE; entry = gtk_check_button_new_with_mnemonic(kv->description); if (kv->value) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(entry), TRUE); break; case VAR_FILE_CHOOSER: { GtkWidget *txt_entry = NULL; GtkWidget *button_entry = NULL; entry = gtk_hbox_new(FALSE, 2); txt_entry = gtk_entry_new(); if (kv->value) gtk_entry_set_text(GTK_ENTRY(txt_entry), g_strdup(kv->value)); g_object_set_data(G_OBJECT(txt_entry), "kv", kv); g_object_set_data(G_OBJECT(entry), "txt_entry", txt_entry); button_entry = gtk_button_new_from_stock("gtk-open"); gtk_box_pack_start_defaults(GTK_BOX(entry), txt_entry); gtk_box_pack_start_defaults(GTK_BOX(entry), button_entry); g_signal_connect_swapped(button_entry, "clicked", G_CALLBACK(gui_dialog_show_filename), txt_entry); } break; case VAR_FONT_CHOOSER: { GtkWidget *txt_entry = NULL; GtkWidget *button_entry = NULL; entry = gtk_hbox_new(FALSE, 2); txt_entry = gtk_entry_new(); if (kv->value) gtk_entry_set_text(GTK_ENTRY(txt_entry), g_strdup(kv->value)); g_object_set_data(G_OBJECT(txt_entry), "kv", kv); g_object_set_data(G_OBJECT(entry), "txt_entry", txt_entry); button_entry = gtk_button_new_from_stock("gtk-select-font"); gtk_box_pack_start_defaults(GTK_BOX(entry), txt_entry); gtk_box_pack_start_defaults(GTK_BOX(entry), button_entry); g_signal_connect_swapped(button_entry, "clicked", G_CALLBACK(gui_dialog_show_fontchooser), txt_entry); } break; case VAR_COLOUR_CHOOSER: { GtkWidget *txt_entry = NULL; GtkWidget *button_entry = NULL; GdkColor color; entry = gtk_hbox_new(FALSE, 2); txt_entry = gtk_entry_new(); if (kv->value) gtk_entry_set_text(GTK_ENTRY(txt_entry), g_strdup(kv->value)); gdk_color_parse(gtk_entry_get_text(GTK_ENTRY(txt_entry)), &color); g_object_set_data(G_OBJECT(txt_entry), "kv", kv); g_object_set_data(G_OBJECT(entry), "txt_entry", txt_entry); button_entry = gtk_color_button_new_with_color(&color); gtk_box_pack_start_defaults(GTK_BOX(entry), txt_entry); gtk_box_pack_start_defaults(GTK_BOX(entry), button_entry); g_signal_connect(G_OBJECT(button_entry), "color-set", G_CALLBACK(gui_dialog_show_colorchooser), txt_entry); } break; case VAR_IMG: need_label = FALSE; entry = gtk_image_new_from_file(kv->value); gtk_table_set_homogeneous(GTK_TABLE(tab), FALSE); break; case VAR_LIST: { GSList *selected = g_slist_nth((GSList *) kv->value, 0); GSList *restlist = g_slist_nth((GSList *) kv->value, 1); gint selected_index = 0; gint i = -1; entry = gtk_combo_box_new_text(); g_object_set_data(G_OBJECT(entry), "options-list", restlist); while (restlist) { i++; if (!g_strcasecmp(selected->data, restlist->data)) { selected_index = i; print_debug("############# %d %s", selected_index, selected->data); } gtk_combo_box_append_text(GTK_COMBO_BOX(entry), g_strdup(restlist->data)); restlist = restlist->next; } gtk_combo_box_set_active(GTK_COMBO_BOX(entry), selected_index); } break; default: break; } if ((kv->flag & VAR_FLAG_SENSITIVE) != 0) { gtk_widget_set_sensitive(GTK_WIDGET(entry), TRUE); gtk_editable_set_editable(GTK_EDITABLE(entry), TRUE); } if ((kv->flag & VAR_FLAG_INSENSITIVE) != 0) { gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE); gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE); } if ((kv->flag & VAR_FLAG_PASSWORD) != 0) gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); if ((kv->flag & VAR_FLAG_FOCUS) != 0) to_grab_focus = entry; kv->user_data = (gpointer) entry; if ((kv->flag & VAR_FLAG_ADVANCED) != 0) { GtkWidget *hbox = gtk_hbox_new(FALSE, 5); GtkWidget *align; GtkWidget *label; need_advanced = TRUE; is_advanced = TRUE; gtk_box_pack_end_defaults(GTK_BOX(hbox), entry); if (need_label) { align = gtk_alignment_new(0, 0.5, 0, 0); label = gtk_label_new_with_mnemonic(kv->description); gtk_container_add(GTK_CONTAINER(align), label); gtk_box_pack_end_defaults(GTK_BOX(hbox), align); } gtk_box_pack_start_defaults(GTK_BOX(adv_vbox), hbox); } if (need_label && !is_advanced) { GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0); GtkWidget *label = gtk_label_new_with_mnemonic(kv->description); gtk_container_add(GTK_CONTAINER(align), label); gtk_table_attach_defaults(GTK_TABLE(tab), align, 0, 1, actR, actR + 1); if (entry) gtk_table_attach_defaults(GTK_TABLE(tab), entry, 1, 2, actR, actR + 1); } else if (!is_advanced) { gtk_table_attach(GTK_TABLE(tab), entry, actC, actC + 2, actR, actR + 1, GTK_FILL, GTK_SHRINK, 0, 0); } if (!is_advanced) { if ((actC + 1) < cols) actC++; else { actC = 0; actR++; } } listtmp = listtmp->next; } if (need_advanced) { adv_expander = gtk_expander_new_with_mnemonic(_("_More options")); gtk_container_add(GTK_CONTAINER(adv_expander), adv_vbox); gtk_table_attach_defaults(GTK_TABLE(tab), adv_expander, 0, rows, actR, actR + 1); } else { gtk_widget_destroy(adv_vbox); } /* progress stuff */ if (use_progress) { GtkWidget *progress = gtk_progress_bar_new(); gtk_table_attach_defaults(GTK_TABLE(tab), progress, 0, rows, actR, actR + 1); } if (to_grab_focus) gtk_widget_grab_focus(GTK_WIDGET(to_grab_focus)); return tab; }
static GtkWidget *vwin_create(void) { GtkCellRenderer *renderer; GtkWidget *ui_vbox; GtkWidget *label, *vfy_vbox, *vfy_frame, *scan_frame, *img_vbox; GtkWidget *vwin_ctrl_vbox; GtkWidget *vwin_main_hbox; vwin_main_hbox = gtk_hbox_new(FALSE, 1); /* Image frame */ scan_frame = gtk_frame_new("Scanned Image"); gtk_box_pack_start(GTK_BOX(vwin_main_hbox), scan_frame, TRUE, TRUE, 0); /* Image vbox */ img_vbox = gtk_vbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(scan_frame), img_vbox); /* Image */ vwin_verify_img = gtk_image_new(); gtk_box_pack_start(GTK_BOX(img_vbox), vwin_verify_img, TRUE, FALSE, 0); /* Non-imaging device */ vwin_non_img_label = gtk_label_new("This device does not have imaging " "capabilities, no images will be displayed."); gtk_box_pack_start_defaults(GTK_BOX(img_vbox), vwin_non_img_label); /* vbox for verification status and image control frames */ ui_vbox = gtk_vbox_new(FALSE, 1); gtk_box_pack_end(GTK_BOX(vwin_main_hbox), ui_vbox, FALSE, FALSE, 0); /* Verification status */ vfy_frame = gtk_frame_new("Verification"); gtk_box_pack_start_defaults(GTK_BOX(ui_vbox), vfy_frame); vfy_vbox = gtk_vbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(vfy_frame), vfy_vbox); /* Discovered prints list */ label = gtk_label_new("Select a finger to verify:"); gtk_box_pack_start(GTK_BOX(vfy_vbox), label, FALSE, FALSE, 0); vwin_fingmodel = gtk_list_store_new(3, G_TYPE_POINTER, G_TYPE_INT, G_TYPE_STRING); vwin_fingcombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(vwin_fingmodel)); g_signal_connect(G_OBJECT(vwin_fingcombo), "changed", G_CALLBACK(vwin_cb_fing_changed), NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(vwin_fingmodel), 0, fing_sort, NULL, NULL); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(vwin_fingmodel), 0, GTK_SORT_ASCENDING); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(vwin_fingcombo), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(vwin_fingcombo), renderer, "text", FC_COL_FINGSTR, NULL); gtk_box_pack_start(GTK_BOX(vfy_vbox), vwin_fingcombo, FALSE, FALSE, 0); /* Verify button */ vwin_vfy_button = gtk_button_new_with_label("Verify"); g_signal_connect(G_OBJECT(vwin_vfy_button), "clicked", G_CALLBACK(vwin_cb_verify), NULL); gtk_box_pack_start(GTK_BOX(vfy_vbox), vwin_vfy_button, FALSE, FALSE, 0); /* Verify status */ vwin_vfy_status = gtk_label_new(NULL); gtk_box_pack_start(GTK_BOX(vfy_vbox), vwin_vfy_status, FALSE, FALSE, 0); /* Minutiae count */ vwin_minutiae_cnt = gtk_label_new(NULL); gtk_box_pack_start(GTK_BOX(vfy_vbox), vwin_minutiae_cnt, FALSE, FALSE, 0); /* Image controls frame */ vwin_ctrl_frame = gtk_frame_new("Image control"); gtk_box_pack_end_defaults(GTK_BOX(ui_vbox), vwin_ctrl_frame); vwin_ctrl_vbox = gtk_vbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(vwin_ctrl_frame), vwin_ctrl_vbox); /* Image format radio buttons */ vwin_radio_normal = gtk_radio_button_new_with_label(NULL, "Normal"); g_signal_connect(G_OBJECT(vwin_radio_normal), "toggled", G_CALLBACK(vwin_cb_imgfmt_toggled), NULL); gtk_box_pack_start(GTK_BOX(vwin_ctrl_vbox), vwin_radio_normal, FALSE, FALSE, 0); vwin_radio_bin = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON(vwin_radio_normal), "Binarized"); gtk_box_pack_start(GTK_BOX(vwin_ctrl_vbox), vwin_radio_bin, FALSE, FALSE, 0); /* Minutiae plotting */ vwin_show_minutiae = gtk_check_button_new_with_label("Show minutiae"); g_signal_connect(GTK_OBJECT(vwin_show_minutiae), "toggled", G_CALLBACK(vwin_cb_imgfmt_toggled), NULL); gtk_box_pack_start(GTK_BOX(vwin_ctrl_vbox), vwin_show_minutiae, FALSE, FALSE, 0); /* Save image */ vwin_img_save_btn = gtk_button_new_from_stock(GTK_STOCK_SAVE); g_signal_connect(G_OBJECT(vwin_img_save_btn), "clicked", G_CALLBACK(vwin_cb_img_save), NULL); gtk_box_pack_end(GTK_BOX(vwin_ctrl_vbox), vwin_img_save_btn, FALSE, FALSE, 0); return vwin_main_hbox; }
/* searches in the mpd database for a given string and outputs the result (data contains a GtkEntry and a GtkWindow)*/ static void mpd_search(GtkWidget *widget, gpointer data) { GList *args,*vbox_content,*argument_list; gpointer list_data; GtkWidget *vbox, *entry, *label, *result_tree_view, *add_button, *scrolled_window, *window; GtkBox *box; GtkBoxChild *child; const gchar *entry_string; gchar *search_string; GtkListStore *list_store; GtkTreeSelection *tree_selection; GtkObject *h_adjustment, *v_adjustment; MpdData *result, *res_ptr; int result_count = 0; int i = 0; GList *song_handle_list; MpdPlContainer *result_list; args = (GList *)data; /* remove old results, if any */ vbox = g_list_nth_data(args, 1); box = GTK_BOX(vbox); vbox_content = box->children; list_data = g_list_nth_data(vbox_content, 4); if(list_data != NULL) { child = list_data; gtk_widget_destroy(child->widget); } list_data = g_list_nth_data(vbox_content, 3); if(list_data != NULL) { child = list_data; gtk_widget_destroy(child->widget); } if(debug) { fprintf(log_file, "[%s:%3i] %s(): Type = %i\n", __FILE__, __LINE__, __FUNCTION__, search_type); fflush(log_file); } /* search for the typed string */ entry = g_list_nth_data(args, 0); entry_string = gtk_entry_get_text(GTK_ENTRY(entry)); search_string = g_strdup(entry_string); /* table ^= search_type */ if(!mpd_check_connected(mpd_info.obj)) { if(mpd_connect(mpd_info.obj)!=MPD_OK) { msi_clear(&mpd_info); mpd_info.msi.connected = FALSE; return; } msi_fill(&mpd_info); mpd_info.msi.connected = TRUE; } /* * Last argument: TRUE -> only exact matches * FALSE -> more matches */ result = mpd_database_find(mpd_info.obj, search_type, search_string, FALSE); /* Iterate through the found songs, using * the function mpd_data_get_next_keep(md), which * calls mpd_data_get_next_real(md,FALSE) which * prevents the list being killed when reaching * the end. */ for( res_ptr = mpd_data_get_first(result); res_ptr != NULL; res_ptr = mpd_data_get_next_keep(res_ptr) ) { /* count only songs ... */ if(res_ptr->type == MPD_DATA_TYPE_SONG) ++result_count; } /* no matches */ if(result_count == 0) { label = gtk_label_new("No songs found!"); gtk_box_pack_end_defaults(GTK_BOX(vbox), label); gtk_widget_show(label); } /* output found songs */ else { song_handle_list = NULL; result_list = mpd_pl_container_new_alloc(result_count); //mpd_Song *result_list[result_count]; /* as above: the song info is still needed, as * the mpd_Song objects are *not* copied into the * result list */ for( res_ptr = mpd_data_get_first(result); res_ptr != NULL; res_ptr = mpd_data_get_next_keep(res_ptr) ) { /* only songs */ if(res_ptr->type == MPD_DATA_TYPE_SONG) { result_list->list[i++] = mpd_songDup(res_ptr->song); song_handle_list = g_list_append(song_handle_list, strdup(res_ptr->song->file)); } } list_store = pl_create_list_store(result_list); mpd_pl_container_free(result_list); result_tree_view = pl_create_tree_view(GTK_TREE_MODEL(list_store)); /* create a facility to select only some of the found songs for adding...*/ tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(result_tree_view)); gtk_tree_selection_set_mode(tree_selection, GTK_SELECTION_MULTIPLE); /**********/ argument_list = NULL; argument_list = g_list_append(argument_list, song_handle_list); argument_list = g_list_append(argument_list, tree_selection); add_button = gtk_button_new_with_label("add selected songs"); g_signal_connect(GTK_BUTTON(add_button), "clicked", G_CALLBACK(mpd_add_song_list), argument_list); /* g_signal_connect_swapped(GTK_BUTTON(add_button), "clicked", G_CALLBACK(gtk_widget_destroy), g_list_nth_data(data, 2)); */ gtk_box_pack_end(GTK_BOX(vbox), add_button,FALSE,FALSE,0); /* put a scrolled window in between the treeview and the window... */ /* I just don't know how this works exactly, but the result is acceptable, so why bother */ h_adjustment = gtk_adjustment_new(0, 0, 4, 1, 4, 4); v_adjustment = gtk_adjustment_new(0, 0, 20, 1, 20, 20); scrolled_window = gtk_scrolled_window_new(GTK_ADJUSTMENT(h_adjustment), GTK_ADJUSTMENT(v_adjustment)); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE); /* display scrollbars only when needed */ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scrolled_window), result_tree_view); gtk_box_pack_end_defaults(GTK_BOX(vbox), scrolled_window); gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE); gtk_widget_show_all(scrolled_window); gtk_widget_show_all(add_button); window = g_list_nth_data(args, 2); gtk_window_resize(GTK_WINDOW(window), 700, 500); } /* delete search result, have to do this ourselves * because we needed the song data until now */ mpd_data_free(result); return; }