84
84
DeeFilterModel *filter_model,
85
85
gpointer user_data);
87
static void _dee_filter_collator_desc_map_notify (DeeModel *orig_model,
88
DeeModelIter *orig_iter,
89
DeeFilterModel *filter_model,
88
93
_dee_filter_collator_map_func (DeeModel *orig_model,
89
94
DeeFilterModel *filter_model,
117
_dee_filter_collator_desc_map_func (DeeModel *orig_model,
118
DeeFilterModel *filter_model,
121
DeeModelIter *iter, *end;
122
CollatorFilter *filter;
124
g_return_if_fail (user_data != NULL);
126
filter = (CollatorFilter *) user_data;
127
filter->collation_key_tag =
128
dee_model_register_tag (orig_model, (GDestroyNotify) g_free);
130
iter = dee_model_get_first_iter (orig_model);
131
end = dee_model_get_last_iter (orig_model);
134
_dee_filter_collator_desc_map_notify (orig_model, iter, filter_model, filter);
135
iter = dee_model_next (orig_model, iter);
112
141
_dee_filter_collator_map_notify (DeeModel *orig_model,
113
142
DeeModelIter *orig_iter,
114
143
DeeFilterModel *filter_model,
186
_dee_filter_collator_desc_map_notify (DeeModel *orig_model,
187
DeeModelIter *orig_iter,
188
DeeFilterModel *filter_model,
191
DeeModelIter *iter, *end;
192
CollatorFilter *filter;
193
const gchar *column_value, *test_value;
194
gchar *collation_key;
196
g_return_if_fail (user_data != NULL);
197
g_return_if_fail (orig_iter != NULL);
199
filter = (CollatorFilter *) user_data;
201
/* Build and set collation ley for the current row */
202
column_value = dee_model_get_string (orig_model, orig_iter, filter->column);
203
collation_key = g_utf8_collate_key (column_value, -1);
204
dee_model_set_tag (orig_model, orig_iter,
205
filter->collation_key_tag, collation_key); // steal collation_key
207
iter = dee_model_get_first_iter (DEE_MODEL (filter_model));
208
end = dee_model_get_last_iter (DEE_MODEL (filter_model));
211
test_value = dee_model_get_tag (orig_model, iter, filter->collation_key_tag);
212
if (g_strcmp0 (test_value, column_value) > 0)
214
iter = dee_model_next (DEE_MODEL (filter_model), iter);
218
dee_filter_model_insert_iter_before (filter_model, orig_iter, iter);
226
dee_filter_model_append_iter(filter_model, orig_iter);
157
231
_dee_filter_key_map_func (DeeModel *orig_model,
158
232
DeeFilterModel *filter_model,
159
233
gpointer user_data)
434
* dee_filter_new_collator_desc:
435
* @column: The index of a column containing the strings to sort after
437
* Create a #DeeFilter that takes string values from a column in the model
438
* and builds a #DeeFilterModel with the rows sorted descending according to the
439
* collation rules of the current locale.
441
* Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it.
442
* Free with g_free().
445
dee_filter_new_collator_desc (guint column)
448
CollatorFilter *collator;
450
filter = g_new0 (DeeFilter, 1);
451
filter->map_func = _dee_filter_collator_desc_map_func;
452
filter->map_notify = _dee_filter_collator_desc_map_notify;
454
collator = g_new0 (CollatorFilter, 1);
455
collator->column = column;
457
filter->destroy = (GDestroyNotify) g_free;
458
filter->user_data =collator;
360
465
* dee_filter_new_for_key_column:
361
466
* @column: The index of a column containing the string key to match