示例#1
0
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;
}
示例#2
0
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);
}
示例#3
0
/* 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;
}
示例#4
0
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;
}
示例#6
0
/* 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;
}