1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 Maxime DOYEN
4 * This file is part of HomeBank.
6 * HomeBank is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * HomeBank is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "gtk-chart.h"
24 #include "ui-widgets.h"
26 /****************************************************************************/
28 /****************************************************************************/
37 /* our global datas */
38 extern struct HomeBank
*GLOBALS
;
41 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
44 extern HbKvData CYA_FLT_RANGE
[];
47 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
49 //TODO: only WEIGHT & SCALE are used for now
51 gimp_label_set_attributes (GtkLabel
*label
,
54 PangoAttribute
*attr
= NULL
;
58 g_return_if_fail (GTK_IS_LABEL (label
));
60 attrs
= pango_attr_list_new ();
62 va_start (args
, label
);
66 PangoAttrType attr_type
= va_arg (args
, PangoAttrType
);
69 attr_type
= PANGO_ATTR_INVALID
;
73 case PANGO_ATTR_LANGUAGE
:
74 attr
= pango_attr_language_new (va_arg (args
, PangoLanguage
*));
77 case PANGO_ATTR_FAMILY
:
78 attr
= pango_attr_family_new (va_arg (args
, const gchar
*));
81 case PANGO_ATTR_STYLE
:
82 attr
= pango_attr_style_new (va_arg (args
, PangoStyle
));
85 case PANGO_ATTR_WEIGHT
:
86 attr
= pango_attr_weight_new (va_arg (args
, PangoWeight
));
89 case PANGO_ATTR_VARIANT
:
90 attr
= pango_attr_variant_new (va_arg (args
, PangoVariant
));
93 case PANGO_ATTR_STRETCH
:
94 attr
= pango_attr_stretch_new (va_arg (args
, PangoStretch
));
98 attr
= pango_attr_size_new (va_arg (args
, gint
));
101 case PANGO_ATTR_FONT_DESC
:
102 attr
= pango_attr_font_desc_new (va_arg (args
,
103 const PangoFontDescription
*));
106 case PANGO_ATTR_FOREGROUND
:
108 const PangoColor
*color
= va_arg (args
, const PangoColor
*);
110 attr
= pango_attr_foreground_new (color
->red
,
116 case PANGO_ATTR_BACKGROUND
:
118 const PangoColor
*color
= va_arg (args
, const PangoColor
*);
120 attr
= pango_attr_background_new (color
->red
,
126 case PANGO_ATTR_UNDERLINE
:
127 attr
= pango_attr_underline_new (va_arg (args
, PangoUnderline
));
130 case PANGO_ATTR_STRIKETHROUGH
:
131 attr
= pango_attr_strikethrough_new (va_arg (args
, gboolean
));
134 case PANGO_ATTR_RISE
:
135 attr
= pango_attr_rise_new (va_arg (args
, gint
));
138 case PANGO_ATTR_SCALE
:
139 attr
= pango_attr_scale_new (va_arg (args
, gdouble
));
143 //g_warning ("%s: invalid PangoAttribute type %d", G_STRFUNC, attr_type);
144 case PANGO_ATTR_INVALID
:
151 attr
->start_index
= 0;
152 attr
->end_index
= -1;
153 pango_attr_list_insert (attrs
, attr
);
160 gtk_label_set_attributes (label
, attrs
);
161 pango_attr_list_unref (attrs
);
165 void hb_widget_visible(GtkWidget
*widget
, gboolean visible
)
167 if(!GTK_IS_WIDGET(widget
))
172 gtk_widget_show(widget
);
176 gtk_widget_hide(widget
);
181 void ui_label_set_integer(GtkLabel
*label
, gint value
)
185 g_snprintf(buf
, 16, "%d", value
);
186 gtk_label_set_text (label
, buf
);
190 void hbtk_entry_tag_name_append(GtkEntry
*entry
, gchar
*tagname
)
192 GtkEntryBuffer
*buffer
;
196 text
= gtk_entry_get_text(entry
);
197 if( g_strstr_len(text
, -1, tagname
) == NULL
)
199 DB( g_print(" gtkentry append tagname '%s'\n", tagname
) );
200 buffer
= gtk_entry_get_buffer(GTK_ENTRY(entry
));
203 len
= gtk_entry_buffer_get_length(buffer
);
204 DB( g_print("- add ' %s' %p %d\n", tagname
, buffer
, len
) );
206 gtk_entry_buffer_insert_text(buffer
, len
, " ", 1);
207 gtk_entry_buffer_insert_text(buffer
, len
+1, tagname
, -1);
214 void ui_gtk_entry_set_text(GtkWidget
*widget
, gchar
*text
)
216 DB( g_print(" set text to '%s'\n", text
) );
219 gtk_entry_set_text(GTK_ENTRY(widget
), text
);
221 gtk_entry_set_text(GTK_ENTRY(widget
), "");
224 void ui_gtk_entry_replace_text(GtkWidget
*widget
, gchar
**storage
)
228 DB( g_print(" storage is '%p' at '%p'\n", *storage
, storage
) );
230 /* free any previous string */
231 if( *storage
!= NULL
)
237 text
= gtk_entry_get_text(GTK_ENTRY(widget
));
238 *storage
= g_strdup(text
);
242 GtkWidget
*make_clicklabel(gchar
*id
, gchar
*str
)
247 g_snprintf(buffer
, 254, "<a href=\"%s\">%s</a>", id
, str
);
248 label
= gtk_label_new(buffer
);
249 gtk_label_set_use_markup (GTK_LABEL (label
), TRUE
);
250 gtk_label_set_track_visited_links(GTK_LABEL(label
), FALSE
);
251 gtk_widget_set_halign(label
, GTK_ALIGN_START
);
253 return GTK_WIDGET(label
);
257 GtkWidget
*make_label_group(gchar
*str
)
259 GtkWidget
*label
= gtk_label_new (str
);
261 gtk_widget_set_valign (label
, GTK_ALIGN_CENTER
);
262 gtk_widget_set_halign (label
, GTK_ALIGN_START
);
263 gimp_label_set_attributes(GTK_LABEL(label
), PANGO_ATTR_WEIGHT
, PANGO_WEIGHT_BOLD
, -1);
268 GtkWidget
*make_label_widget(char *str
)
270 GtkWidget
*label
= gtk_label_new_with_mnemonic (str
);
272 gtk_widget_set_valign (label
, GTK_ALIGN_CENTER
);
273 gtk_widget_set_halign (label
, GTK_ALIGN_END
);
278 GtkWidget
*make_label(char *str
, gfloat xalign
, gfloat yalign
)
280 GtkWidget
*label
= gtk_label_new_with_mnemonic (str
);
282 #if GTK_MINOR_VERSION >= 16
283 gtk_label_set_xalign(GTK_LABEL(label
), xalign
);
284 gtk_label_set_yalign(GTK_LABEL(label
), yalign
);
286 gtk_misc_set_alignment (GTK_MISC (label
), xalign
, yalign
);
295 GtkWidget
*make_text(gfloat xalign
)
299 entry
= gtk_entry_new ();
300 gtk_editable_set_editable (GTK_EDITABLE(entry
), FALSE
);
301 g_object_set(entry
, "xalign", xalign
, NULL
);
306 GtkWidget
*make_search(void)
310 search
= gtk_search_entry_new();
311 gtk_entry_set_placeholder_text(GTK_ENTRY(search
), _("Search...") );
321 GtkWidget
*make_string(GtkWidget
*label
)
325 entry
= gtk_entry_new ();
328 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), entry
);
334 GtkWidget
*make_image_button(gchar
*icon_name
, gchar
*tooltip_text
)
336 GtkWidget
*button
, *image
;
338 //todo 3.10 use gtk_button_new_from_icon_name
340 button
= gtk_button_new();
341 image
= gtk_image_new_from_icon_name (icon_name
, GTK_ICON_SIZE_BUTTON
);
342 g_object_set (button
, "image", image
, NULL
);
343 if(tooltip_text
!= NULL
)
344 gtk_widget_set_tooltip_text(button
, tooltip_text
);
354 GtkWidget
*make_memo_entry(GtkWidget
*label
)
358 GtkEntryCompletion
*completion
;
361 store
= gtk_list_store_new (1, G_TYPE_STRING
);
363 completion
= gtk_entry_completion_new ();
364 gtk_entry_completion_set_model (completion
, GTK_TREE_MODEL(store
));
365 gtk_entry_completion_set_text_column (completion
, 0);
367 entry
= gtk_entry_new ();
368 gtk_entry_set_completion (GTK_ENTRY (entry
), completion
);
370 g_object_unref(store
);
373 //gtk_list_store_clear (GTK_LIST_STORE(store));
375 lmem
= list
= g_hash_table_get_keys(GLOBALS
->h_memo
);
380 //gtk_list_store_append (GTK_LIST_STORE(store), &iter);
381 //gtk_list_store_set (GTK_LIST_STORE(store), &iter, 0, list->data, -1);
382 gtk_list_store_insert_with_values(GTK_LIST_STORE(store
), &iter
, -1,
386 list
= g_list_next(list
);
392 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), entry
);
401 GtkWidget
*make_string_maxlength(GtkWidget
*label
, guint max_length
)
405 entry
= make_string(label
);
406 gtk_entry_set_width_chars(GTK_ENTRY(entry
), max_length
+2);
407 gtk_entry_set_max_length(GTK_ENTRY(entry
), max_length
);
413 static void hb_amount_insert_text_handler (GtkEntry
*entry
, const gchar
*text
, gint length
, gint
*position
, gpointer data
)
415 GtkEditable
*editable
= GTK_EDITABLE(entry
);
416 gint i
, digits
, count
=0, dcpos
=-1;
419 DB( g_print("-----\ninsert_text-handler: instxt:%s pos:%d len:%d\n", text
, *position
, length
) );
421 digits
= gtk_spin_button_get_digits(GTK_SPIN_BUTTON(entry
));
423 // most common : only 1 char to be inserted
426 const gchar
*curtxt
= gtk_entry_get_text(entry
);
428 for (i
=0 ; curtxt
[i
]!='\0' ; i
++)
430 if(curtxt
[i
]==',' || curtxt
[i
]=='.')
433 DB( g_print(" dcpos:'%d'\n", dcpos
) );
435 clntxt
= g_new0 (gchar
, length
+1);
436 for (i
=0 ; i
< length
; i
++)
438 if( g_ascii_isdigit(text
[i
]) && ( (*position
<= dcpos
+ digits
) || dcpos
< 0) )
441 if( text
[i
]=='-' && *position
==0 ) /* minus sign only at position 0 */
444 if( dcpos
< 0 && (text
[i
]=='.' || text
[i
]==',') ) /* decimal separator if not in previous string */
445 clntxt
[count
++] = '.';
450 clntxt
[count
++] = text
[i
];
453 // less common: paste a full text
456 clntxt
= hb_string_dup_raw_amount_clean(text
, digits
);
457 count
= strlen(clntxt
);
462 DB( g_print(" insert %d char '%s' at %d\n", count
, clntxt
, *position
) );
463 g_signal_handlers_block_by_func (G_OBJECT (editable
), G_CALLBACK (hb_amount_insert_text_handler
), data
);
464 gtk_editable_insert_text (editable
, clntxt
, count
, position
);
465 g_signal_handlers_unblock_by_func (G_OBJECT (editable
), G_CALLBACK (hb_amount_insert_text_handler
), data
);
470 g_signal_stop_emission_by_name (G_OBJECT (editable
), "insert-text");
474 GtkWidget
*make_amount(GtkWidget
*label
)
479 //adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.01, 1.0, 0.0);
480 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, -8589934588, 8589934588, 0.01, 1.0, 0.0);
481 spinner
= gtk_spin_button_new (adj
, 1.0, 2);
482 g_object_set(spinner
, "xalign", 1.0, NULL
);
485 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
487 g_signal_connect(G_OBJECT(spinner
), "insert-text",
488 G_CALLBACK(hb_amount_insert_text_handler
),
495 GtkWidget
*make_exchange_rate(GtkWidget
*label
)
500 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, 0.0, 99999, 0.01, 1.0, 0.0);
501 spinner
= gtk_spin_button_new (adj
, 1.0, 8);
502 //gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
503 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
504 g_object_set(spinner
, "xalign", 1.0, NULL
);
507 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
515 GtkWidget
*make_numeric(GtkWidget
*label
, gdouble min
, gdouble max
)
520 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, min
, max
, 1.0, 10.0, 0.0);
521 spinner
= gtk_spin_button_new (adj
, 0, 0);
522 //gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
523 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
524 g_object_set(spinner
, "xalign", 1.0, NULL
);
527 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
535 GtkWidget
*make_scale(GtkWidget
*label
)
539 scale
= gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL
, GTK_CHART_MINBARW
, GTK_CHART_SPANBARW
, 1.0);
540 gtk_scale_set_draw_value(GTK_SCALE(scale
), FALSE
);
541 gtk_range_set_value(GTK_RANGE(scale
), GTK_CHART_BARW
);
544 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), scale
);
552 GtkWidget
*make_long(GtkWidget
*label
)
556 spinner
= make_numeric(label
, 0.0, G_MAXINT
);
561 GtkWidget
*make_year(GtkWidget
*label
)
566 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, 1900, 2200, 1.0, 10.0, 0.0);
567 spinner
= gtk_spin_button_new (adj
, 0, 0);
568 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner
), TRUE
);
569 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
570 g_object_set(spinner
, "xalign", 1.0, NULL
);
573 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
580 create_popover (GtkWidget
*parent
,
586 popover
= gtk_popover_new (parent
);
587 gtk_popover_set_position (GTK_POPOVER (popover
), pos
);
588 gtk_container_add (GTK_CONTAINER (popover
), child
);
589 gtk_widget_show (child
);
591 gtk_widget_set_margin_start (child
, SPACING_POPOVER
);
592 gtk_widget_set_margin_end (child
, SPACING_POPOVER
);
593 gtk_widget_set_margin_top (child
, SPACING_POPOVER
);
594 gtk_widget_set_margin_bottom (child
, SPACING_POPOVER
);
600 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
603 gint
hbtk_radio_button_get_active (GtkContainer
*container
)
605 GList
*lchild
, *list
;
609 if(!GTK_IS_CONTAINER(container
))
612 lchild
= list
= gtk_container_get_children (container
);
613 for(i
=0;list
!= NULL
;i
++)
616 if(GTK_IS_TOGGLE_BUTTON(radio
))
618 if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio
)) == TRUE
)
624 list
= g_list_next(list
);
632 void hbtk_radio_button_set_active (GtkContainer
*container
, gint active
)
634 GList
*lchild
, *list
;
637 if(!GTK_IS_CONTAINER(container
))
640 lchild
= list
= gtk_container_get_children (container
);
641 radio
= g_list_nth_data (list
, active
);
642 if(radio
!= NULL
&& GTK_IS_TOGGLE_BUTTON(radio
))
644 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio
), TRUE
);
650 GtkWidget
*hbtk_radio_button_get_nth (GtkContainer
*container
, gint nth
)
652 GList
*lchild
, *list
;
655 if(!GTK_IS_CONTAINER(container
))
658 lchild
= list
= gtk_container_get_children (container
);
659 radio
= g_list_nth_data (list
, nth
);
661 return radio
; //may return NULL
665 void hbtk_radio_button_unblock_by_func(GtkContainer
*container
, GCallback c_handler
, gpointer data
)
667 GList
*lchild
, *list
;
671 if(!GTK_IS_CONTAINER(container
))
674 lchild
= list
= gtk_container_get_children (container
);
675 for(i
=0;list
!= NULL
;i
++)
678 if(GTK_IS_TOGGLE_BUTTON(radio
))
680 g_signal_handlers_unblock_by_func (radio
, c_handler
, data
);
682 list
= g_list_next(list
);
688 void hbtk_radio_button_block_by_func(GtkContainer
*container
, GCallback c_handler
, gpointer data
)
690 GList
*lchild
, *list
;
694 if(!GTK_IS_CONTAINER(container
))
697 lchild
= list
= gtk_container_get_children (container
);
698 for(i
=0;list
!= NULL
;i
++)
701 if(GTK_IS_TOGGLE_BUTTON(radio
))
703 g_signal_handlers_block_by_func (radio
, c_handler
, data
);
705 list
= g_list_next(list
);
711 void hbtk_radio_button_connect(GtkContainer
*container
, const gchar
*detailed_signal
, GCallback c_handler
, gpointer data
)
713 GList
*lchild
, *list
;
717 if(!GTK_IS_CONTAINER(container
))
720 lchild
= list
= gtk_container_get_children (container
);
721 for(i
=0;list
!= NULL
;i
++)
724 if(GTK_IS_TOGGLE_BUTTON(radio
))
726 g_signal_connect (radio
, "toggled", c_handler
, data
);
728 list
= g_list_next(list
);
735 GtkWidget
*hbtk_radio_button_new (gchar
**items
, gboolean buttonstyle
)
737 GtkWidget
*box
, *button
, *newbutton
;
740 box
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
742 button
= gtk_radio_button_new_with_label (NULL
, _(items
[0]));
743 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button
), !buttonstyle
);
744 gtk_box_pack_start (GTK_BOX (box
), button
, FALSE
, FALSE
, 0);
745 for (i
= 1; items
[i
] != NULL
; i
++)
747 newbutton
= gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button
), _(items
[i
]));
748 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (newbutton
), !buttonstyle
);
749 gtk_box_pack_start (GTK_BOX (box
), newbutton
, FALSE
, FALSE
, 0);
754 gtk_style_context_add_class (gtk_widget_get_style_context (box
), GTK_STYLE_CLASS_LINKED
);
755 gtk_style_context_add_class (gtk_widget_get_style_context (box
), GTK_STYLE_CLASS_RAISED
);
762 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
766 is_separator (GtkTreeModel
*model
,
774 gtk_tree_model_get (model
, iter
, 0, &txt
, -1);
776 retval
= *txt
== 0 ? TRUE
: FALSE
;
777 //path = gtk_tree_model_get_path (model, iter);
778 //result = gtk_tree_path_get_indices (path)[0] == 4;
779 //gtk_tree_path_free (path);
789 GtkWidget
*make_cycle(GtkWidget
*label
, gchar
**items
)
794 combobox
= gtk_combo_box_text_new ();
796 for (i
= 0; items
[i
] != NULL
; i
++)
799 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), _(items
[i
]));
801 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), "");
803 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
804 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), is_separator
, NULL
, NULL
);
807 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
813 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
816 #define HB_KV_BUFFER_MAX_LEN 8
817 #define HB_KV_ITEMS_MAX_LEN 32
819 gchar
*hbtk_get_label(HbKvData
*kvdata
, guint32 key
)
821 gchar
*retval
= NULL
;
824 for(i
=0;i
<HB_KV_ITEMS_MAX_LEN
;i
++)
826 HbKvData
*tmp
= &kvdata
[i
];
827 if( tmp
->name
== NULL
)
829 if( tmp
->key
== key
)
832 retval
= (gchar
*)_(tmp
->name
);
840 static gboolean
hbtk_combo_box_is_separator (GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer data
)
846 gtk_tree_model_get (model
, iter
, 0, &txt
, -1);
847 retval
= *txt
== 0 ? TRUE
: FALSE
;
855 guint32
hbtk_combo_box_get_active_id (GtkComboBoxText
*combobox
)
860 buf
= gtk_combo_box_get_active_id(GTK_COMBO_BOX(combobox
));
861 retval
= buf
!= NULL
? atoi(buf
) : 0;
867 void hbtk_combo_box_set_active_id (GtkComboBoxText
*combobox
, guint32 key
)
869 gchar buf
[HB_KV_BUFFER_MAX_LEN
];
871 g_snprintf(buf
, HB_KV_BUFFER_MAX_LEN
-1, "%d", key
);
872 gtk_combo_box_set_active_id(GTK_COMBO_BOX(combobox
), buf
);
876 void hbtk_combo_box_text_append (GtkComboBoxText
*combobox
, guint32 key
, gchar
*text
)
878 gchar buf
[HB_KV_BUFFER_MAX_LEN
];
880 g_snprintf(buf
, HB_KV_BUFFER_MAX_LEN
-1, "%d", key
);
881 gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), buf
, text
);
885 GtkWidget
*hbtk_combo_box_new (GtkWidget
*label
)
889 combobox
= gtk_combo_box_text_new();
892 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
898 GtkWidget
*hbtk_combo_box_new_with_data (GtkWidget
*label
, HbKvData
*kvdata
)
900 GtkWidget
*combobox
= hbtk_combo_box_new(label
);
906 for(i
=0;i
<HB_KV_ITEMS_MAX_LEN
;i
++)
909 if( tmp
->name
== NULL
)
911 if( *tmp
->name
!= 0 )
913 hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), tmp
->key
, (gchar
*)_(tmp
->name
));
917 hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), tmp
->key
, (gchar
*)"");
921 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
924 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), hbtk_combo_box_is_separator
, NULL
, NULL
);
930 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
933 set_sensitive (GtkCellLayout
*cell_layout
,
934 GtkCellRenderer
*cell
,
935 GtkTreeModel
*tree_model
,
943 path
= gtk_tree_model_get_path (tree_model
, iter
);
944 indices
= gtk_tree_path_get_indices (path
);
945 sensitive
= indices
[0] != FLT_RANGE_OTHER
;
946 gtk_tree_path_free (path
);
948 g_object_set (cell
, "sensitive", sensitive
, NULL
);
953 GtkWidget
*make_daterange(GtkWidget
*label
, guint dspmode
)
955 GtkWidget
*combobox
= hbtk_combo_box_new(label
);
956 GList
*renderers
, *list
;
957 HbKvData
*tmp
, *kvdata
= CYA_FLT_RANGE
;
960 for(i
=0;i
<HB_KV_ITEMS_MAX_LEN
;i
++)
963 if( tmp
->name
== NULL
)
966 if( (tmp
->key
== FLT_RANGE_OTHER
) )
968 if( dspmode
== DATE_RANGE_CUSTOM_DISABLE
)
970 renderers
= gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combobox
));
971 if(g_list_length(renderers
) == 1)
973 list
= g_list_first(renderers
);
974 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
979 g_list_free(renderers
);
982 if( dspmode
== DATE_RANGE_CUSTOM_HIDE
)
984 //if hide, we do not show it
990 hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), tmp
->key
, (*tmp
->name
!= 0) ? (gchar
*)_(tmp
->name
) : (gchar
*)"");
993 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
994 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), hbtk_combo_box_is_separator
, NULL
, NULL
);
1000 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
1003 id ofx english french
1004 ---------------------------------------------------------------------
1005 0 -------- (none) (aucun)
1006 1 -------- credit card carte de crédit
1007 2 OFX_CHECK Check cheque
1008 3 OFX_CASH Cash withdrawal retrait espece
1009 4 OFX_XFER Transfer virement
1010 5 -------- internal transfer virement compte
1011 6 -------- (debit card) (carte de paiement
1012 7 OFX_REPEATPMT Repeating payment/standing order Paiement recurrent/Virement auto.
1014 8 OFX_PAYMENT Electronic payment télépaiement
1015 9 OFX_DEP Deposit dépôt
1016 10 OFX_FEE FI fee frais bancaires
1019 OFX_DIRECTDEBIT Merchant initiated debit prelevement
1020 OFX_OTHER Somer other type of transaction autre
1024 OFX_CREDIT Generic credit
1025 OFX_DEBIT Generic debit
1026 OFX_INT Interest earned or paid (Note: Depends on signage of amount)
1028 OFX_SRVCHG Service charge
1030 OFX_ATM ATM debit or credit (Note: Depends on signage of amount)
1031 OFX_POS Point of sale debit or credit (Note: Depends on signage of amount)
1034 -OFX_PAYMENT Electronic payment
1035 -OFX_CASH Cash withdrawal
1036 OFX_DIRECTDEP Direct deposit
1037 OFX_DIRECTDEBIT Merchant initiated debit
1038 -OFX_REPEATPMT Repeating payment/standing order
1039 OFX_OTHER Somer other type of transaction
1044 LST_PAYMODE_ICONNAME
,
1049 char *paymode_iconnames
[NUM_PAYMODE_MAX
] =
1065 char *paymode_label_names
[NUM_PAYMODE_MAX
] =
1072 N_("Internal transfer"),
1074 N_("Standing order"),
1075 N_("Electronic payment"),
1077 //TRANSLATORS: Financial institution fee
1082 /* nota: used in ui-filter */
1083 gchar
*get_paymode_icon_name(gint index
)
1085 if(index
>= NUM_PAYMODE_MAX
)
1088 return paymode_iconnames
[index
];
1093 ** Make a paymode combobox widget
1097 paymode_set_sensitive (GtkCellLayout
*cell_layout
,
1098 GtkCellRenderer
*cell
,
1099 GtkTreeModel
*tree_model
,
1107 path
= gtk_tree_model_get_path (tree_model
, iter
);
1108 indices
= gtk_tree_path_get_indices (path
);
1109 sensitive
= (indices
[0] == PAYMODE_INTXFER
) ? FALSE
: TRUE
;
1110 gtk_tree_path_free (path
);
1113 g_object_set (cell
, "sensitive", sensitive
, NULL
);
1118 static GtkWidget
*make_paymode_internal(GtkWidget
*label
, gboolean intxfer
)
1120 GtkListStore
*store
;
1122 GtkWidget
*combobox
;
1123 GtkCellRenderer
*renderer
, *r1
, *r2
;
1126 store
= gtk_list_store_new (
1132 combobox
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(store
));
1133 g_object_unref(store
);
1135 renderer
= r1
= gtk_cell_renderer_pixbuf_new();
1136 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1137 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "icon-name", LST_PAYMODE_ICONNAME
);
1139 renderer
= r2
= gtk_cell_renderer_text_new();
1140 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1141 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "text", LST_PAYMODE_LABEL
);
1144 if( intxfer
== FALSE
)
1146 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
1148 paymode_set_sensitive
,
1150 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
1152 paymode_set_sensitive
,
1156 //populate our combobox model
1157 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
1159 gtk_list_store_append(store
, &iter
);
1160 gtk_list_store_set(store
, &iter
,
1161 LST_PAYMODE_ICONNAME
, paymode_iconnames
[i
],
1162 LST_PAYMODE_LABEL
, _(paymode_label_names
[i
]),
1166 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
1169 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
1176 GtkWidget
*make_paymode(GtkWidget
*label
)
1178 return make_paymode_internal(label
, TRUE
);
1181 GtkWidget
*make_paymode_nointxfer(GtkWidget
*label
)
1183 return make_paymode_internal(label
, FALSE
);
1187 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
1189 #define NUM_NAINEX_MAX 3
1193 LST_NAINEX_ICONNAME
,
1198 char *nainex_iconnames
[NUM_NAINEX_MAX
] =
1205 extern gchar
*nainex_label_names
[];
1208 ** Make a nainex combobox widget
1210 GtkWidget
*make_nainex(GtkWidget
*label
)
1212 GtkListStore
*store
;
1214 GtkWidget
*combobox
;
1215 GtkCellRenderer
*renderer
;
1219 store
= gtk_list_store_new (
1226 combobox
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(store
));
1229 renderer
= gtk_cell_renderer_pixbuf_new();
1230 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1231 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "icon-name", LST_NAINEX_ICONNAME
);
1233 renderer
= gtk_cell_renderer_text_new();
1234 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1235 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "text", LST_NAINEX_LABEL
);
1237 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
1239 //populate our combobox model
1240 for(i
=0;i
<NUM_NAINEX_MAX
;i
++)
1242 gtk_list_store_append(store
, &iter
);
1243 gtk_list_store_set(store
, &iter
,
1244 LST_NAINEX_ICONNAME
, nainex_iconnames
[i
],
1245 LST_NAINEX_LABEL
, _(nainex_label_names
[i
]),
1248 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
1251 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);