Ejemplo n.º 1
0
static AddressQF* build_shared_quickfill (QofBook *book, const char * key)
{
    AddressQF *result;
    QofQuery *query = new_query_for_addresss(book);
    GList *entries = qof_query_run(query);

    /*     g_warning("Found %d GncAddress items", g_list_length (entries)); */

    result = g_new0(AddressQF, 1);

    result->qf_addr2 = gnc_quickfill_new();
    result->qf_addr3 = gnc_quickfill_new();
    result->qf_addr4 = gnc_quickfill_new();
    result->qf_sort = QUICKFILL_ALPHA;
    result->book = book;

    g_list_foreach (entries, address_cb, result);

    qof_query_destroy(query);

    result->listener =
        qof_event_register_handler (listen_for_gncaddress_events,
                                    result);

    qof_book_set_data_fin (book, key, result, shared_quickfill_destroy);

    return result;
}
static EntryQF* build_shared_quickfill (QofBook *book, const char * key, gboolean use_invoices)
{
    EntryQF *result;
//    GList *entries = qof_query_run(query);
    // TODO: list GncEntry sorted by DATE_ENTERED, increasing, 
    //  and returning one single item??

    /*     g_warning("Found %d GncEntry items", g_list_length (entries)); */

    result = g_new0(EntryQF, 1);

    result->using_invoices = use_invoices;
    result->qf = gnc_quickfill_new();
    result->qf_sort = QUICKFILL_LIFO;
    result->book = book;

//    g_list_foreach (entries, entry_cb, result);
//
//    qof_query_destroy(query);

    result->listener =
        qof_event_register_handler (listen_for_gncentry_events,
                                    result);

    qof_book_set_data_fin (book, key, result, shared_quickfill_destroy);

    return result;
}
Ejemplo n.º 3
0
static void
quickfill_insert_recursive (QuickFill *qf, const char *text, int len,
                            const char *next_char, QuickFillSort sort)
{
    guint key;
    char *old_text;
    QuickFill *match_qf;
    gunichar key_char_uc;

    if (qf == NULL)
        return;

    if ((text == NULL) || (*next_char == '\0'))
        return;


    key_char_uc = g_utf8_get_char (next_char);
    key = g_unichar_toupper (key_char_uc);

    match_qf = g_hash_table_lookup (qf->matches, GUINT_TO_POINTER (key));
    if (match_qf == NULL)
    {
        match_qf = gnc_quickfill_new ();
        g_hash_table_insert (qf->matches, GUINT_TO_POINTER (key), match_qf);
    }

    old_text = match_qf->text;

    switch (sort)
    {
    case QUICKFILL_ALPHA:
        if (old_text && (g_utf8_collate (text, old_text) >= 0))
            break;
        /* fall through */

    case QUICKFILL_LIFO:
    default:
        /* If there's no string there already, just put the new one in. */
        if (old_text == NULL)
        {
            match_qf->text = g_strdup(text);
            match_qf->len = len;
            break;
        }

        /* Leave prefixes in place */
        if ((len > match_qf->len) &&
                (strncmp(text, old_text, strlen(old_text)) == 0))
            break;

        g_free(old_text);
        match_qf->text = g_strdup(text);
        match_qf->len = len;
        break;
    }

    quickfill_insert_recursive (match_qf, text, len, g_utf8_next_char (next_char), sort);
}
Ejemplo n.º 4
0
static void
quickfill_insert_recursive (QuickFill *qf, const char *text, int depth,
                            QuickFillSort sort)
{
    guint key;
    char *old_text;
    QuickFill *match_qf;
    int len;
    char *key_char;
    gunichar key_char_uc;

    if (qf == NULL)
        return;

    if ((text == NULL) || (g_utf8_strlen (text, -1) <= depth))
        return;

    key_char = g_utf8_offset_to_pointer (text, depth);

    key_char_uc = g_utf8_get_char (key_char);
    key = g_unichar_toupper (key_char_uc);

    match_qf = g_hash_table_lookup (qf->matches, GUINT_TO_POINTER (key));
    if (match_qf == NULL)
    {
        match_qf = gnc_quickfill_new ();
        g_hash_table_insert (qf->matches, GUINT_TO_POINTER (key), match_qf);
    }

    old_text = match_qf->text;

    switch (sort)
    {
    case QUICKFILL_ALPHA:
        if (old_text && (g_utf8_collate (text, old_text) >= 0))
            break;
        /* fall through */

    case QUICKFILL_LIFO:
    default:
        len = g_utf8_strlen (text, -1);

        /* If there's no string there already, just put the new one in. */
        if (old_text == NULL)
        {
            match_qf->text = CACHE_INSERT((gpointer) text);
            match_qf->len = len;
            break;
        }

        /* Leave prefixes in place */
        if ((len > match_qf->len) &&
                (strncmp(text, old_text, strlen(old_text)) == 0))
            break;

        CACHE_REMOVE(old_text);
        match_qf->text = CACHE_INSERT((gpointer) text);
        match_qf->len = len;
        break;
    }

    quickfill_insert_recursive (match_qf, text, ++depth, sort);
}