39
39
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
43
container_get_nth(GtkBox *container, gint nth)
48
if(!GTK_IS_CONTAINER(container))
51
lchild = list = gtk_container_get_children (GTK_CONTAINER(container));
52
child = g_list_nth_data (list, nth);
60
ui_pay_entry_popover_get_entry(GtkBox *box)
62
return container_get_nth(box, 0);
67
*ui_pay_entry_popover_get(GtkBox *box)
73
DB( g_print ("ui_pay_entry_popover_get()\n") );
75
entry = container_get_nth(box, 0);
76
if( entry != NULL && GTK_IS_ENTRY(entry) )
78
name = (gchar *)gtk_entry_get_text(GTK_ENTRY (entry));
79
item = da_pay_get_by_name(name);
86
ui_pay_entry_popover_get_key_add_new(GtkBox *box)
88
Payee *item = ui_pay_entry_popover_get(box);
95
//todo: check prefs + ask the user here 1st time
96
entry = container_get_nth(box, 0);
97
if( entry != NULL && GTK_IS_ENTRY(entry) )
99
item = da_pay_malloc();
100
item->name = g_strdup(gtk_entry_get_text(GTK_ENTRY (entry)));
103
store = gtk_entry_completion_get_model(gtk_entry_get_completion(GTK_ENTRY(entry)));
105
gtk_list_store_insert_with_values(GTK_LIST_STORE(store), NULL, -1,
114
ui_pay_entry_popover_get_key(GtkBox *box)
116
Payee *item = ui_pay_entry_popover_get(box);
118
return ((item != NULL) ? item->key : 0);
123
ui_pay_entry_popover_set_active(GtkBox *box, guint32 key)
127
DB( g_print ("ui_pay_comboboxentry_set_active()\n") );
129
entry = container_get_nth(box, 0);
130
if( entry != NULL && GTK_IS_ENTRY(entry) )
132
Payee *item = da_pay_get(key);
134
ui_gtk_entry_set_text(GTK_WIDGET(entry), item != NULL ? item->name : "");
140
ui_pay_entry_popover_cb_row_activated(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
142
GtkTreeSelection *treeselection;
145
GtkEntry *entry = user_data;
147
if( GTK_IS_ENTRY(entry) )
149
treeselection = gtk_tree_view_get_selection(tree_view);
150
if( gtk_tree_selection_get_selected(treeselection, &model, &iter) )
154
gtk_tree_model_get(model, &iter, 0, &item, -1);
155
gtk_entry_set_text(GTK_ENTRY(user_data), item);
163
ui_pay_entry_popover_populate(GtkListStore *store)
165
GHashTableIter hiter;
168
g_hash_table_iter_init (&hiter, GLOBALS->h_pay);
169
while (g_hash_table_iter_next (&hiter, &key, &value))
173
gtk_list_store_insert_with_values(GTK_LIST_STORE(store), NULL, -1,
177
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
183
ui_pay_entry_popover_function (GtkEditable *editable, gpointer user_data)
186
g_print("text changed to %s\n", gtk_entry_get_text(GTK_ENTRY(editable)) );
194
ui_pay_entry_popover_compare_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer userdata)
197
gchar *name1, *name2;
199
gtk_tree_model_get(model, a, 0, &name1, -1);
200
gtk_tree_model_get(model, b, 0, &name2, -1);
202
retval = hb_string_utf8_compare(name1, name2);
212
ui_pay_entry_popover_destroy( GtkWidget *widget, gpointer user_data )
215
g_print ("[pay entry popover] destroy\n");
221
ui_pay_entry_popover_new(GtkWidget *label)
223
GtkWidget *mainbox, *box, *entry, *menubutton, *image, *popover, *scrollwin, *treeview;
225
GtkEntryCompletion *completion;
227
g_print ("[pay entry popover] new\n");
229
mainbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
230
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(mainbox)), GTK_STYLE_CLASS_LINKED);
232
entry = gtk_entry_new();
233
gtk_box_pack_start(GTK_BOX(mainbox), entry, TRUE, TRUE, 0);
235
menubutton = gtk_menu_button_new ();
236
//data->MB_template = menubutton;
237
image = gtk_image_new_from_icon_name ("pan-down-symbolic", GTK_ICON_SIZE_BUTTON);
238
gtk_container_add(GTK_CONTAINER(menubutton), image);
239
//gtk_menu_button_set_direction (GTK_MENU_BUTTON(menubutton), GTK_ARROW_DOWN );
240
//gtk_widget_set_halign (menubutton, GTK_ALIGN_END);
241
gtk_box_pack_start(GTK_BOX(mainbox), menubutton, FALSE, FALSE, 0);
243
completion = gtk_entry_completion_new ();
245
gtk_entry_set_completion (GTK_ENTRY (entry), completion);
246
g_object_unref(completion);
248
store = gtk_list_store_new (1,
252
gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(store), ui_pay_entry_popover_compare_func, NULL, NULL);
254
ui_pay_entry_popover_populate(store);
257
gtk_entry_completion_set_model (completion, GTK_TREE_MODEL(store));
258
g_object_unref(store);
260
gtk_entry_completion_set_text_column (completion, 0);
262
gtk_widget_show_all(mainbox);
265
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_MEDIUM);
266
scrollwin = gtk_scrolled_window_new(NULL,NULL);
267
gtk_box_pack_start(GTK_BOX(box), scrollwin, TRUE, TRUE, 0);
268
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN);
269
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
270
//gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrollwin), HB_MINHEIGHT_LIST);
271
treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
272
gtk_container_add(GTK_CONTAINER(scrollwin), GTK_WIDGET(treeview));
273
gtk_widget_show_all(box);
275
//gtk_widget_set_can_focus(GTK_WIDGET(treeview), FALSE);
277
GtkCellRenderer *renderer;
278
GtkTreeViewColumn *column;
280
renderer = gtk_cell_renderer_text_new ();
281
column = gtk_tree_view_column_new_with_attributes (NULL,
286
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
289
gtk_tree_view_set_hover_selection(GTK_TREE_VIEW(treeview), TRUE);
290
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
291
gtk_tree_view_set_activate_on_single_click(GTK_TREE_VIEW(treeview), TRUE);
294
//gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), GTK_SELECTION_BROWSE);
297
popover = create_popover (menubutton, box, GTK_POS_BOTTOM);
298
gtk_widget_set_size_request (popover, HB_MINWIDTH_LIST, HB_MINHEIGHT_LIST);
300
gtk_menu_button_set_popover(GTK_MENU_BUTTON(menubutton), popover);
302
// connect our dispose function
303
g_signal_connect (entry, "destroy", G_CALLBACK (ui_pay_entry_popover_destroy), NULL);
305
g_signal_connect_after (entry , "changed", G_CALLBACK (ui_pay_entry_popover_function), NULL);
307
g_signal_connect (treeview, "row-activated", G_CALLBACK (ui_pay_entry_popover_cb_row_activated), entry);
308
g_signal_connect_swapped(treeview, "row-activated", G_CALLBACK(gtk_popover_popdown), popover);
309
//g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), "changed", G_CALLBACK (ui_pay_entry_popover_cb_selection), entry);
310
//g_signal_connect_swapped(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), "changed", G_CALLBACK(gtk_popover_popdown), popover);
314
gtk_label_set_mnemonic_widget (GTK_LABEL(label), entry);
316
//gtk_widget_set_size_request(comboboxentry, HB_MINWIDTH_LIST, -1);
322
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
326
* ui_pay_comboboxentry_add:
328
* Add a single element (useful for dynamics add)
334
ui_pay_comboboxentry_add(GtkComboBox *entry_box, Payee *pay)
336
if( pay->name != NULL )
341
model = gtk_combo_box_get_model(GTK_COMBO_BOX(entry_box));
343
gtk_list_store_append (GTK_LIST_STORE(model), &iter);
344
gtk_list_store_set (GTK_LIST_STORE(model), &iter, 0, pay->name, -1);
43
351
* ui_pay_comboboxentry_get_key_add_new: