static gboolean list_find_attribute(const gchar *attr)
{
	GtkCMCList *clist = GTK_CMCLIST(personEditDlg->clist_attrib);
	UserAttribute *attrib;
	gint row = 0;
	while((attrib = gtk_cmclist_get_row_data(clist, row))) {
		if (!g_ascii_strcasecmp(attrib->name, attr)) {
			gtk_cmclist_select_row(clist, row, 0);
			return TRUE;
		}
		row++;
	}
	return FALSE;
}
static void edit_person_attrib_add(gpointer data) {
	GtkCMCList *clist = GTK_CMCLIST(personEditDlg->clist_attrib);
	gboolean errFlg = FALSE;
	UserAttribute *attrib = NULL;
	gint row = personEditDlg->rowIndAttrib;
	if (gtk_cmclist_get_row_data(clist, row) == NULL) row = 0;

	attrib = edit_person_attrib_edit(&errFlg, NULL);
	if (!errFlg) {
		gchar *text[EMAIL_N_COLS];
		text[ATTRIB_COL_NAME] = attrib->name;
		text[ATTRIB_COL_VALUE] = attrib->value;

		row = gtk_cmclist_insert(clist, 1 + row, text);
		gtk_cmclist_set_row_data(clist, row, attrib);
		gtk_cmclist_select_row(clist, row, 0);
		edit_person_attrib_clear(NULL);
	}
}
Exemplo n.º 3
0
/**
 * Callback function to update LDIF field data from input fields.
 * \param widget Widget (button).
 * \param data   User data.
 */
static void imp_ldif_modify_pressed( GtkWidget *widget, gpointer data ) {
	GtkCMCList *clist = GTK_CMCLIST(impldif_dlg.clist_field);
	Ldif_FieldRec *rec;
	gint row;

	if( impldif_dlg.rowIndSelect < 0 ) return;
	row = impldif_dlg.rowIndSelect;
	rec = gtk_cmclist_get_row_data( clist, impldif_dlg.rowIndSelect );

	ldif_field_set_name( rec, gtk_editable_get_chars(
		GTK_EDITABLE(impldif_dlg.entryAttrib), 0, -1 ) );
	ldif_field_set_selected( rec, gtk_toggle_button_get_active(
		GTK_TOGGLE_BUTTON( impldif_dlg.checkSelect) ) );
	imp_ldif_update_row( clist );
	gtk_cmclist_select_row( clist, row, 0 );
	gtk_label_set_text( GTK_LABEL(impldif_dlg.entryField), "" );
	gtk_entry_set_text( GTK_ENTRY(impldif_dlg.entryAttrib), "" );
	gtk_toggle_button_set_active(
		GTK_TOGGLE_BUTTON( impldif_dlg.checkSelect), FALSE );
}
Exemplo n.º 4
0
/* clist/ctree clear old selection on click (gtk2 only)
 * - intercept all button clicks (always return TRUE)
 * - only allow left button single click
 * - handle click on expander
 * - update "subscribed" list and un-/select row
 */
static gboolean button_press_cb(GtkCMCTree *ctree, GdkEventButton *button,
				gpointer data)
{
	gint row, col;
	GtkCMCTreeNode *node;
	NewsGroupInfo *ginfo;
	GSList *list;

	if (button->type != GDK_BUTTON_PRESS) return TRUE;
	if (button->button != 1) return TRUE;
	if (button->window != GTK_CMCLIST(ctree)->clist_window) return TRUE;

	if (!gtk_cmclist_get_selection_info(GTK_CMCLIST(ctree), 
				     button->x, button->y, &row, &col))
		return TRUE;
	node = gtk_cmctree_node_nth(ctree, row);
	if (!node) return TRUE;

	if (gtk_cmctree_is_hot_spot(ctree, button->x, button->y)) {
		gtk_cmctree_toggle_expansion(ctree, node);
		return TRUE;
	}

	ginfo = gtk_cmctree_node_get_row_data(ctree, node);
	if (!ginfo) return TRUE;

	list = g_slist_find_custom(subscribed, ginfo->name,
				   (GCompareFunc)g_ascii_strcasecmp);
	if (list) {
		g_free(list->data);
		subscribed = g_slist_remove(subscribed, list->data);
		gtk_cmclist_unselect_row(GTK_CMCLIST(ctree), row, 0);
	} else {
		subscribed = g_slist_append(subscribed, g_strdup(ginfo->name));
		gtk_cmclist_select_row(GTK_CMCLIST(ctree), row, 0);
	}

	return TRUE;
}
Exemplo n.º 5
0
gboolean addressbook_foldersel_selection( AddressIndex *addrIndex,
					AddressBookFile **book, ItemFolder **folder, 
					const gchar* path)
{
	FolderPathMatch folder_path_match = { NULL, FALSE, 0, NULL };
	gboolean retVal = FALSE;
	addressbook_foldersel_cancelled = FALSE;

	if ( ! addressbook_foldersel_dlg.window )
		addressbook_foldersel_create();
	gtk_widget_grab_focus(addressbook_foldersel_dlg.ok_btn);
	gtk_widget_show(addressbook_foldersel_dlg.window);
	manage_window_set_transient(GTK_WINDOW(addressbook_foldersel_dlg.window));
	gtk_window_set_modal(GTK_WINDOW(addressbook_foldersel_dlg.window), TRUE);
	
	addressbook_foldersel_dlg.fiSelected = NULL;

	/* split the folder path we've received, we'll try to match this path, subpath by
	   subpath against the book/folder structure in order to select the folder that
       corresponds to what we received */

	if ( path != NULL ) {
		if ( g_utf8_collate(path, _("Any")) == 0 || strcasecmp(path, "Any") ==0 || *path == '\0' )
			/* consider "Any" (both translated or untranslated forms) and ""
			   as valid addressbook roots */
			folder_path_match.matched = TRUE;
		else
			folder_path_match.folder_path = g_strsplit( path, "/", 256 );
	}

	addressbook_foldersel_load_data( addrIndex, &folder_path_match );

	if ( folder_path_match.folder_path != NULL && folder_path_match.matched == FALSE)
		g_warning("addressbook_foldersel_load_data: couldn't match book/folder path '%s'", path);

	g_strfreev( folder_path_match.folder_path );

	if ( folder_path_match.node != NULL)
		gtk_cmctree_select( GTK_CMCTREE( addressbook_foldersel_dlg.tree_folder ),
							GTK_CMCTREE_NODE( folder_path_match.node ) );
	else
		gtk_cmclist_select_row( GTK_CMCLIST( addressbook_foldersel_dlg.tree_folder ), 0, 0 );
	gtk_widget_show(addressbook_foldersel_dlg.window);

	gtk_main();
	gtk_widget_hide( addressbook_foldersel_dlg.window );
	gtk_window_set_modal(GTK_WINDOW(addressbook_foldersel_dlg.window), FALSE);
	if ( ! addressbook_foldersel_cancelled ) {

		*book = NULL;
		*folder = NULL;

		if ( addressbook_foldersel_dlg.fiSelected ) {
			*book = addressbook_foldersel_dlg.fiSelected->book;
			*folder = addressbook_foldersel_dlg.fiSelected->folder;
			retVal = TRUE;
		}
	}

	gtk_cmclist_clear( GTK_CMCLIST( addressbook_foldersel_dlg.tree_folder ) );

	return retVal;
}