void xaccQueryAddClosingTransMatch(QofQuery *q, gboolean value, QofQueryOp op) { GSList *param_list; param_list = qof_query_build_param_list(SPLIT_TRANS, TRANS_IS_CLOSING, NULL); qof_query_add_boolean_match(q, param_list, value, op); }
static void create_children (GNCGeneralSearch *gsl, const char *label, gboolean text_editable, QofIdTypeConst type, QofBook *book) { GtkListStore * list_store; QofQuery * q; GtkTreeIter iter; GList * list, * it; GtkEntryCompletion *completion; /* Add a text entry box */ gsl->entry = gtk_entry_new (); if (!text_editable) gtk_editable_set_editable (GTK_EDITABLE (gsl->entry), FALSE); gtk_box_pack_start (GTK_BOX (gsl), gsl->entry, TRUE, TRUE, 0); /* Setup a GtkEntryCompletion auxiliary widget for our Entry box * This requires an internal table ("model") with the possible * auto-completion text entries */ /* Query for the requested object type */ q = qof_query_create_for (type); qof_query_add_boolean_match(q, g_slist_prepend (NULL, QOF_PARAM_ACTIVE), TRUE, QOF_QUERY_AND); qof_query_set_book (q, book); list = qof_query_run(q); /* Setup the internal model */ list_store = gtk_list_store_new (GSL_N_COLUMNS, G_TYPE_STRING, G_TYPE_OBJECT); for (it = list; it != NULL ; it = it->next) { char * name; name = g_strdup(qof_object_printable(type, it->data)); /* Add a new row to the model */ if (name) { gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, GSL_COLUMN_TEXT, name, GSL_COLUMN_QOFOBJECT, G_OBJECT(it->data), -1); g_free(name); } } qof_query_destroy(q); /* Add the GtkEntryCompletion widget */ completion = gtk_entry_completion_new(); gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(list_store)); gtk_entry_completion_set_text_column(completion, 0); gtk_entry_completion_set_inline_completion(completion, TRUE); gtk_entry_set_completion(GTK_ENTRY(gsl->entry), completion); g_signal_connect (G_OBJECT (completion), "match_selected", G_CALLBACK (gnc_gsl_match_selected_cb), gsl); g_signal_connect (G_OBJECT (gsl->entry), "focus-out-event", G_CALLBACK (gnc_gsl_focus_out_cb), gsl); g_object_unref(completion); gtk_widget_show (gsl->entry); /* Add the search button */ gsl->button = gtk_button_new_with_label (label); gtk_box_pack_start (GTK_BOX (gsl), gsl->button, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (gsl->button), "clicked", G_CALLBACK (search_cb), gsl); gtk_widget_show (gsl->button); }
static void search_update_query (GNCSearchWindow *sw) { static GSList *active_params = NULL; QofQuery *q, *q2, *new_q; GList *node; QofQueryOp op; QofQueryPredData* pdata; if (sw->grouping == GNC_SEARCH_MATCH_ANY) op = QOF_QUERY_OR; else op = QOF_QUERY_AND; if (active_params == NULL) active_params = g_slist_prepend (NULL, QOF_PARAM_ACTIVE); /* Make sure we supply a book! */ if (sw->start_q == NULL) { sw->start_q = qof_query_create_for (sw->search_for); qof_query_set_book (sw->start_q, gnc_get_current_book ()); } else { /* We've got a query -- purge it of any "active" parameters */ qof_query_purge_terms (sw->start_q, active_params); } /* Now create a new query to work from */ q = qof_query_create_for (sw->search_for); /* Walk the list of criteria */ for (node = sw->crit_list; node; node = node->next) { struct _crit_data *data = node->data; pdata = gnc_search_core_type_get_predicate (data->element); if (pdata) qof_query_add_term (q, gnc_search_param_get_param_path (data->param), pdata, op); } /* Now combine this query with the existing query, depending on * what we want to do... We can assume that cases 1, 2, and 3 * already have sw->q being valid! */ switch (sw->search_type) { case 0: /* New */ new_q = qof_query_merge (sw->start_q, q, QOF_QUERY_AND); qof_query_destroy (q); break; case 1: /* Refine */ new_q = qof_query_merge (sw->q, q, QOF_QUERY_AND); qof_query_destroy (q); break; case 2: /* Add */ new_q = qof_query_merge (sw->q, q, QOF_QUERY_OR); qof_query_destroy (q); break; case 3: /* Delete */ q2 = qof_query_invert (q); new_q = qof_query_merge (sw->q, q2, QOF_QUERY_AND); qof_query_destroy (q2); qof_query_destroy (q); break; default: g_warning ("bad search type: %d", sw->search_type); new_q = q; break; } if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sw->active_only_check))) { qof_query_add_boolean_match (new_q, active_params, TRUE, QOF_QUERY_AND); active_params = NULL; } /* Destroy the old query */ if (sw->q) qof_query_destroy (sw->q); /* And save the new one */ sw->q = new_q; }