85
static gboolean _dee_filter_collator_map_notify (DeeModel *orig_model,
86
DeeModelIter *orig_iter,
87
DeeFilterModel *filter_model,
90
static gboolean _dee_filter_collator_desc_map_notify (DeeModel *orig_model,
91
DeeModelIter *orig_iter,
92
DeeFilterModel *filter_model,
96
_dee_filter_collator_map_func (DeeModel *orig_model,
97
DeeFilterModel *filter_model,
100
DeeModelIter *iter, *end;
101
CollatorFilter *filter;
103
g_return_if_fail (user_data != NULL);
105
filter = (CollatorFilter *) user_data;
106
filter->collation_key_tag =
107
dee_model_register_tag (orig_model, (GDestroyNotify) g_free);
109
iter = dee_model_get_first_iter (orig_model);
110
end = dee_model_get_last_iter (orig_model);
113
_dee_filter_collator_map_notify (orig_model, iter, filter_model, filter);
114
iter = dee_model_next (orig_model, iter);
120
_dee_filter_collator_desc_map_func (DeeModel *orig_model,
121
DeeFilterModel *filter_model,
124
DeeModelIter *iter, *end;
125
CollatorFilter *filter;
127
g_return_if_fail (user_data != NULL);
129
filter = (CollatorFilter *) user_data;
130
filter->collation_key_tag =
131
dee_model_register_tag (orig_model, (GDestroyNotify) g_free);
133
iter = dee_model_get_first_iter (orig_model);
134
end = dee_model_get_last_iter (orig_model);
137
_dee_filter_collator_desc_map_notify (orig_model, iter, filter_model, filter);
138
iter = dee_model_next (orig_model, iter);
144
_dee_filter_collator_map_notify (DeeModel *orig_model,
145
DeeModelIter *orig_iter,
146
DeeFilterModel *filter_model,
149
DeeModelIter *iter, *end;
150
CollatorFilter *filter;
151
const gchar *column_value, *test_value;
152
gchar *collation_key;
154
g_return_val_if_fail (user_data != NULL, FALSE);
155
g_return_val_if_fail (orig_iter != NULL, FALSE);
157
filter = (CollatorFilter *) user_data;
159
/* Build and set collation ley for the current row */
160
column_value = dee_model_get_string (orig_model, orig_iter, filter->column);
161
collation_key = g_utf8_collate_key (column_value, -1);
162
dee_model_set_tag (orig_model, orig_iter,
163
filter->collation_key_tag, collation_key); // steal collation_key
165
iter = dee_model_get_first_iter (DEE_MODEL (filter_model));
166
end = dee_model_get_last_iter (DEE_MODEL (filter_model));
169
test_value = dee_model_get_tag (orig_model, iter, filter->collation_key_tag);
170
if (g_strcmp0 (test_value, column_value) < 0)
172
iter = dee_model_next (DEE_MODEL (filter_model), iter);
176
dee_filter_model_insert_iter_before (filter_model, orig_iter, iter);
184
dee_filter_model_append_iter(filter_model, orig_iter);
191
_dee_filter_collator_desc_map_notify (DeeModel *orig_model,
192
DeeModelIter *orig_iter,
193
DeeFilterModel *filter_model,
196
DeeModelIter *iter, *end;
197
CollatorFilter *filter;
198
const gchar *column_value, *test_value;
199
gchar *collation_key;
201
g_return_val_if_fail (user_data != NULL, FALSE);
202
g_return_val_if_fail (orig_iter != NULL, FALSE);
204
filter = (CollatorFilter *) user_data;
206
/* Build and set collation ley for the current row */
207
column_value = dee_model_get_string (orig_model, orig_iter, filter->column);
208
collation_key = g_utf8_collate_key (column_value, -1);
209
dee_model_set_tag (orig_model, orig_iter,
210
filter->collation_key_tag, collation_key); // steal collation_key
212
iter = dee_model_get_first_iter (DEE_MODEL (filter_model));
213
end = dee_model_get_last_iter (DEE_MODEL (filter_model));
216
test_value = dee_model_get_tag (orig_model, iter, filter->collation_key_tag);
217
if (g_strcmp0 (test_value, column_value) > 0)
219
iter = dee_model_next (DEE_MODEL (filter_model), iter);
223
dee_filter_model_insert_iter_before (filter_model, orig_iter, iter);
231
dee_filter_model_append_iter(filter_model, orig_iter);
95
_dee_filter_sort_map_notify (DeeModel *orig_model,
96
DeeModelIter *orig_iter,
97
DeeFilterModel *filter_model,
100
DeeModelIter *pos_iter;
105
g_return_val_if_fail (user_data != NULL, FALSE);
107
filter = (SortFilter *) user_data;
109
dee_model_get_row (orig_model, orig_iter, filter->row_buf);
111
pos_iter = dee_model_find_row_sorted (DEE_MODEL (filter_model),
117
dee_filter_model_insert_iter_before (filter_model, orig_iter, pos_iter);
119
for (i = 0; i < filter->n_cols; i++) g_variant_unref (filter->row_buf[i]);
125
_dee_filter_sort_map_func (DeeModel *orig_model,
126
DeeFilterModel *filter_model,
129
DeeModelIter *iter, *end;
132
g_return_if_fail (user_data != NULL);
134
filter = (SortFilter *) user_data;
135
filter->n_cols = dee_model_get_n_columns (orig_model);
136
filter->row_buf = g_new0(GVariant*, filter->n_cols);
138
iter = dee_model_get_first_iter (orig_model);
139
end = dee_model_get_last_iter (orig_model);
142
_dee_filter_sort_map_notify (orig_model, iter, filter_model, filter);
143
iter = dee_model_next (orig_model, iter);
148
_cmp_collate_asc (GVariant **row1, GVariant **row2, gpointer user_data)
150
guint col = GPOINTER_TO_UINT (user_data);
152
return g_utf8_collate (g_variant_get_string (row1[col], NULL),
153
g_variant_get_string (row2[col], NULL));
157
_cmp_collate_desc (GVariant **row1, GVariant **row2, gpointer user_data)
159
guint col = GPOINTER_TO_UINT (user_data);
161
return - g_utf8_collate (g_variant_get_string (row1[col], NULL),
162
g_variant_get_string (row2[col], NULL));