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 gchar
*CYA_FLT_RANGE
[];
49 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
54 gimp_label_set_attributes (GtkLabel
*label
,
57 PangoAttribute
*attr
= NULL
;
61 g_return_if_fail (GTK_IS_LABEL (label
));
63 attrs
= pango_attr_list_new ();
65 va_start (args
, label
);
69 PangoAttrType attr_type
= va_arg (args
, PangoAttrType
);
72 attr_type
= PANGO_ATTR_INVALID
;
76 case PANGO_ATTR_LANGUAGE
:
77 attr
= pango_attr_language_new (va_arg (args
, PangoLanguage
*));
80 case PANGO_ATTR_FAMILY
:
81 attr
= pango_attr_family_new (va_arg (args
, const gchar
*));
84 case PANGO_ATTR_STYLE
:
85 attr
= pango_attr_style_new (va_arg (args
, PangoStyle
));
88 case PANGO_ATTR_WEIGHT
:
89 attr
= pango_attr_weight_new (va_arg (args
, PangoWeight
));
92 case PANGO_ATTR_VARIANT
:
93 attr
= pango_attr_variant_new (va_arg (args
, PangoVariant
));
96 case PANGO_ATTR_STRETCH
:
97 attr
= pango_attr_stretch_new (va_arg (args
, PangoStretch
));
100 case PANGO_ATTR_SIZE
:
101 attr
= pango_attr_size_new (va_arg (args
, gint
));
104 case PANGO_ATTR_FONT_DESC
:
105 attr
= pango_attr_font_desc_new (va_arg (args
,
106 const PangoFontDescription
*));
109 case PANGO_ATTR_FOREGROUND
:
111 const PangoColor
*color
= va_arg (args
, const PangoColor
*);
113 attr
= pango_attr_foreground_new (color
->red
,
119 case PANGO_ATTR_BACKGROUND
:
121 const PangoColor
*color
= va_arg (args
, const PangoColor
*);
123 attr
= pango_attr_background_new (color
->red
,
129 case PANGO_ATTR_UNDERLINE
:
130 attr
= pango_attr_underline_new (va_arg (args
, PangoUnderline
));
133 case PANGO_ATTR_STRIKETHROUGH
:
134 attr
= pango_attr_strikethrough_new (va_arg (args
, gboolean
));
137 case PANGO_ATTR_RISE
:
138 attr
= pango_attr_rise_new (va_arg (args
, gint
));
141 case PANGO_ATTR_SCALE
:
142 attr
= pango_attr_scale_new (va_arg (args
, gdouble
));
146 //g_warning ("%s: invalid PangoAttribute type %d", G_STRFUNC, attr_type);
147 case PANGO_ATTR_INVALID
:
154 attr
->start_index
= 0;
155 attr
->end_index
= -1;
156 pango_attr_list_insert (attrs
, attr
);
163 gtk_label_set_attributes (label
, attrs
);
164 pango_attr_list_unref (attrs
);
168 void hb_widget_visible(GtkWidget
*widget
, gboolean visible
)
170 if(!GTK_IS_WIDGET(widget
))
175 gtk_widget_show(widget
);
179 gtk_widget_hide(widget
);
184 void ui_label_set_integer(GtkLabel
*label
, gint value
)
188 g_snprintf(buf
, 16, "%d", value
);
189 gtk_label_set_text (label
, buf
);
193 void ui_gtk_entry_tag_name_append(GtkEntry
*entry
, gchar
*tagname
)
195 GtkEntryBuffer
*buffer
;
199 text
= gtk_entry_get_text(entry
);
200 if( g_strstr_len(text
, -1, tagname
) == NULL
)
202 DB( g_print(" gtkentry append tagname '%'\n", tagname
) );
203 buffer
= gtk_entry_get_buffer(GTK_ENTRY(entry
));
206 len
= gtk_entry_buffer_get_length(buffer
);
207 DB( g_print("- add ' %s' %p %d\n", tagname
, buffer
, len
) );
209 gtk_entry_buffer_insert_text(buffer
, len
, " ", 1);
210 gtk_entry_buffer_insert_text(buffer
, len
+1, tagname
, -1);
217 void ui_gtk_entry_set_text(GtkWidget
*widget
, gchar
*text
)
219 DB( g_print(" set text to '%s'\n", text
) );
222 gtk_entry_set_text(GTK_ENTRY(widget
), text
);
224 gtk_entry_set_text(GTK_ENTRY(widget
), "");
227 void ui_gtk_entry_replace_text(GtkWidget
*widget
, gchar
**storage
)
231 DB( g_print(" storage is '%p' at '%p'\n", *storage
, storage
) );
233 /* free any previous string */
234 if( *storage
!= NULL
)
240 text
= gtk_entry_get_text(GTK_ENTRY(widget
));
241 *storage
= g_strdup(text
);
245 GtkWidget
*make_clicklabel(gchar
*id
, gchar
*str
)
250 g_snprintf(buffer
, 254, "<a href=\"%s\">%s</a>", id
, str
);
251 label
= gtk_label_new(buffer
);
252 gtk_label_set_use_markup (GTK_LABEL (label
), TRUE
);
253 gtk_label_set_track_visited_links(GTK_LABEL(label
), FALSE
);
254 gtk_widget_set_halign(label
, GTK_ALIGN_START
);
256 return GTK_WIDGET(label
);
260 GtkWidget
*make_label_group(gchar
*str
)
262 GtkWidget
*label
= gtk_label_new (str
);
264 gtk_widget_set_valign (label
, GTK_ALIGN_CENTER
);
265 gtk_widget_set_halign (label
, GTK_ALIGN_START
);
266 gimp_label_set_attributes(GTK_LABEL(label
), PANGO_ATTR_WEIGHT
, PANGO_WEIGHT_BOLD
, -1);
271 GtkWidget
*make_label_widget(char *str
)
273 GtkWidget
*label
= gtk_label_new_with_mnemonic (str
);
275 gtk_widget_set_valign (label
, GTK_ALIGN_CENTER
);
276 gtk_widget_set_halign (label
, GTK_ALIGN_END
);
281 GtkWidget
*make_label(char *str
, gfloat xalign
, gfloat yalign
)
283 GtkWidget
*label
= gtk_label_new_with_mnemonic (str
);
285 #if GTK_MINOR_VERSION >= 16
286 gtk_label_set_xalign(GTK_LABEL(label
), xalign
);
287 gtk_label_set_yalign(GTK_LABEL(label
), yalign
);
289 gtk_misc_set_alignment (GTK_MISC (label
), xalign
, yalign
);
298 GtkWidget
*make_text(gfloat xalign
)
302 entry
= gtk_entry_new ();
303 gtk_editable_set_editable (GTK_EDITABLE(entry
), FALSE
);
304 g_object_set(entry
, "xalign", xalign
, NULL
);
309 GtkWidget
*make_search(void)
313 search
= gtk_search_entry_new();
314 gtk_entry_set_placeholder_text(GTK_ENTRY(search
), _("Search...") );
324 GtkWidget
*make_string(GtkWidget
*label
)
328 entry
= gtk_entry_new ();
331 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), entry
);
337 GtkWidget
*make_image_button(gchar
*icon_name
, gchar
*tooltip_text
)
339 GtkWidget
*button
, *image
;
341 //todo 3.10 use gtk_button_new_from_icon_name
343 button
= gtk_button_new();
344 image
= gtk_image_new_from_icon_name (icon_name
, GTK_ICON_SIZE_BUTTON
);
345 g_object_set (button
, "image", image
, NULL
);
346 if(tooltip_text
!= NULL
)
347 gtk_widget_set_tooltip_text(button
, tooltip_text
);
357 GtkWidget
*make_memo_entry(GtkWidget
*label
)
361 GtkEntryCompletion
*completion
;
364 store
= gtk_list_store_new (1, G_TYPE_STRING
);
366 completion
= gtk_entry_completion_new ();
367 gtk_entry_completion_set_model (completion
, GTK_TREE_MODEL(store
));
368 gtk_entry_completion_set_text_column (completion
, 0);
370 entry
= gtk_entry_new ();
371 gtk_entry_set_completion (GTK_ENTRY (entry
), completion
);
373 g_object_unref(store
);
376 //gtk_list_store_clear (GTK_LIST_STORE(store));
378 lmem
= list
= g_hash_table_get_keys(GLOBALS
->h_memo
);
383 //gtk_list_store_append (GTK_LIST_STORE(store), &iter);
384 //gtk_list_store_set (GTK_LIST_STORE(store), &iter, 0, list->data, -1);
385 gtk_list_store_insert_with_values(GTK_LIST_STORE(store
), &iter
, -1,
389 list
= g_list_next(list
);
395 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), entry
);
404 GtkWidget
*make_string_maxlength(GtkWidget
*label
, guint max_length
)
408 entry
= make_string(label
);
409 gtk_entry_set_width_chars(GTK_ENTRY(entry
), max_length
+2);
410 gtk_entry_set_max_length(GTK_ENTRY(entry
), max_length
);
417 static void hb_amount_insert_text_handler (GtkEntry
*entry
, const gchar
*text
, gint length
, gint
*position
, gpointer data
)
419 GtkEditable
*editable
= GTK_EDITABLE(entry
);
420 int i
, count
=0, dcpos
=-1;
421 gchar
*result
= g_new0 (gchar
, length
+1);
423 const gchar
*numtext
;
425 //g_message("insert_text-handler: text:%s - pos:%d - length:%d", text, *position, length);
427 digits
= gtk_spin_button_get_digits(GTK_SPIN_BUTTON(entry
));
428 numtext
= gtk_entry_get_text(entry
);
429 for (i
=0 ; numtext
[i
]!='\0' ; i
++)
431 if(numtext
[i
]==',' || numtext
[i
]=='.')
435 //g_message("previous text='%s' dcpos:'%d'", numtext, dcpos);
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 result
[count
++] = '.';
450 result
[count
++] = text
[i
];
454 g_signal_handlers_block_by_func (G_OBJECT (editable
), G_CALLBACK (hb_amount_insert_text_handler
), data
);
455 gtk_editable_insert_text (editable
, result
, count
, position
);
456 g_signal_handlers_unblock_by_func (G_OBJECT (editable
), G_CALLBACK (hb_amount_insert_text_handler
), data
);
458 g_signal_stop_emission_by_name (G_OBJECT (editable
), "insert-text");
466 GtkWidget
*make_amount(GtkWidget
*label
)
471 //adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.01, 1.0, 0.0);
472 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, -8589934588, 8589934588, 0.01, 1.0, 0.0);
473 spinner
= gtk_spin_button_new (adj
, 1.0, 2);
474 g_object_set(spinner
, "xalign", 1.0, NULL
);
477 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
479 g_signal_connect(G_OBJECT(spinner
), "insert-text",
480 G_CALLBACK(hb_amount_insert_text_handler
),
487 GtkWidget
*make_exchange_rate(GtkWidget
*label
)
492 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, 0.0, 99999, 0.01, 1.0, 0.0);
493 spinner
= gtk_spin_button_new (adj
, 1.0, 8);
494 //gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
495 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
496 g_object_set(spinner
, "xalign", 1.0, NULL
);
499 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
507 GtkWidget
*make_numeric(GtkWidget
*label
, gdouble min
, gdouble max
)
512 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, min
, max
, 1.0, 10.0, 0.0);
513 spinner
= gtk_spin_button_new (adj
, 0, 0);
514 //gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
515 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
516 g_object_set(spinner
, "xalign", 1.0, NULL
);
519 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
527 GtkWidget
*make_scale(GtkWidget
*label
)
531 scale
= gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL
, GTK_CHART_MINBARW
, GTK_CHART_SPANBARW
, 1.0);
532 gtk_scale_set_draw_value(GTK_SCALE(scale
), FALSE
);
533 gtk_range_set_value(GTK_RANGE(scale
), GTK_CHART_BARW
);
536 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), scale
);
544 GtkWidget
*make_long(GtkWidget
*label
)
548 spinner
= make_numeric(label
, 0.0, G_MAXINT
);
553 GtkWidget
*make_year(GtkWidget
*label
)
558 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, 1900, 2200, 1.0, 10.0, 0.0);
559 spinner
= gtk_spin_button_new (adj
, 0, 0);
560 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner
), TRUE
);
561 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
562 g_object_set(spinner
, "xalign", 1.0, NULL
);
565 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
572 is_separator (GtkTreeModel
*model
,
580 gtk_tree_model_get (model
, iter
, 0, &txt
, -1);
582 retval
= *txt
== 0 ? TRUE
: FALSE
;
583 //path = gtk_tree_model_get_path (model, iter);
584 //result = gtk_tree_path_get_indices (path)[0] == 4;
585 //gtk_tree_path_free (path);
595 set_sensitive (GtkCellLayout
*cell_layout
,
596 GtkCellRenderer
*cell
,
597 GtkTreeModel
*tree_model
,
605 path
= gtk_tree_model_get_path (tree_model
, iter
);
606 indices
= gtk_tree_path_get_indices (path
);
607 sensitive
= indices
[0] != FLT_RANGE_OTHER
;
608 gtk_tree_path_free (path
);
610 g_object_set (cell
, "sensitive", sensitive
, NULL
);
614 GtkWidget
*make_cycle(GtkWidget
*label
, gchar
**items
)
619 combobox
= gtk_combo_box_text_new ();
621 for (i
= 0; items
[i
] != NULL
; i
++)
624 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), _(items
[i
]));
626 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), "");
628 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
629 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), is_separator
, NULL
, NULL
);
632 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
638 GtkWidget
*make_daterange(GtkWidget
*label
, gboolean custom
)
641 GList
*renderers
, *list
;
642 GtkCellRenderer
*renderer
;
643 gchar
**items
= CYA_FLT_RANGE
;
646 combobox
= gtk_combo_box_text_new ();
648 for (i
= 0; items
[i
] != NULL
; i
++)
651 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), _(items
[i
]));
653 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), "");
655 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
658 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
661 renderers
= gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combobox
));
662 if(g_list_length(renderers
) == 1 && custom
== FALSE
)
664 list
= g_list_first(renderers
);
665 renderer
= list
->data
;
668 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
673 g_list_free(renderers
);
675 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), is_separator
, NULL
, NULL
);
681 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
683 #define HB_KV_BUFFER_MAX_LEN 8
684 #define HB_KV_ITEMS_MAX_LEN 32
686 gchar
*hbtk_get_label(HbKvData
*kvdata
, guint32 key
)
688 gchar
*retval
= NULL
;
691 for(i
=0;i
<HB_KV_ITEMS_MAX_LEN
;i
++)
693 HbKvData
*tmp
= &kvdata
[i
];
694 if( tmp
->name
== NULL
)
696 if( tmp
->key
== key
)
699 retval
= (gchar
*)_(tmp
->name
);
707 static gboolean
hbtk_combo_box_is_separator (GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer data
)
713 gtk_tree_model_get (model
, iter
, 0, &txt
, -1);
714 retval
= *txt
== 0 ? TRUE
: FALSE
;
722 guint32
hbtk_combo_box_get_active_id (GtkComboBoxText
*combobox
)
727 buf
= gtk_combo_box_get_active_id(GTK_COMBO_BOX(combobox
));
728 retval
= buf
!= NULL
? atoi(buf
) : 0;
734 void hbtk_combo_box_set_active_id (GtkComboBoxText
*combobox
, guint32 key
)
736 gchar buf
[HB_KV_BUFFER_MAX_LEN
];
738 g_snprintf(buf
, HB_KV_BUFFER_MAX_LEN
-1, "%d", key
);
739 gtk_combo_box_set_active_id(GTK_COMBO_BOX(combobox
), buf
);
743 void hbtk_combo_box_text_append (GtkComboBoxText
*combobox
, guint32 key
, gchar
*text
)
745 gchar buf
[HB_KV_BUFFER_MAX_LEN
];
747 g_snprintf(buf
, HB_KV_BUFFER_MAX_LEN
-1, "%d", key
);
748 gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), buf
, text
);
752 GtkWidget
*hbtk_combo_box_new (GtkWidget
*label
)
756 combobox
= gtk_combo_box_text_new();
759 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
765 GtkWidget
*hbtk_combo_box_new_with_data (GtkWidget
*label
, HbKvData
*kvdata
)
767 GtkWidget
*combobox
= hbtk_combo_box_new(label
);
773 for(i
=0;i
<HB_KV_ITEMS_MAX_LEN
;i
++)
776 if( tmp
->name
== NULL
)
778 if( *tmp
->name
!= 0 )
780 hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), tmp
->key
, (gchar
*)_(tmp
->name
));
784 hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox
), tmp
->key
, (gchar
*)"");
788 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
791 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), hbtk_combo_box_is_separator
, NULL
, NULL
);
797 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
800 gint
hbtk_radio_get_active (GtkContainer
*container
)
802 GList
*lchild
, *list
;
806 if(!GTK_IS_CONTAINER(container
))
809 lchild
= list
= gtk_container_get_children (container
);
810 for(i
=0;list
!= NULL
;i
++)
813 if(GTK_IS_TOGGLE_BUTTON(radio
))
815 if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio
)) == TRUE
)
821 list
= g_list_next(list
);
829 void hbtk_radio_set_active (GtkContainer
*container
, gint active
)
831 GList
*lchild
, *list
;
834 if(!GTK_IS_CONTAINER(container
))
837 lchild
= list
= gtk_container_get_children (container
);
838 radio
= g_list_nth_data (list
, active
);
839 if(radio
!= NULL
&& GTK_IS_TOGGLE_BUTTON(radio
))
841 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio
), TRUE
);
847 GtkWidget
*hbtk_radio_get_nth (GtkContainer
*container
, gint nth
)
849 GList
*lchild
, *list
;
852 if(!GTK_IS_CONTAINER(container
))
855 lchild
= list
= gtk_container_get_children (container
);
856 radio
= g_list_nth_data (list
, nth
);
858 return radio
; //may return NULL
862 void hbtk_radio_connect(GtkContainer
*container
, const gchar
*detailed_signal
, GCallback c_handler
, gpointer data
)
864 GList
*lchild
, *list
;
868 if(!GTK_IS_CONTAINER(container
))
871 lchild
= list
= gtk_container_get_children (container
);
872 for(i
=0;list
!= NULL
;i
++)
875 if(GTK_IS_TOGGLE_BUTTON(radio
))
877 g_signal_connect (radio
, "toggled", c_handler
, data
);
879 list
= g_list_next(list
);
886 GtkWidget
*hbtk_radio_new (gchar
**items
, gboolean buttonstyle
)
888 GtkWidget
*box
, *button
, *newbutton
;
891 box
= gtk_box_new (GTK_ORIENTATION_HORIZONTAL
, 0);
893 button
= gtk_radio_button_new_with_label (NULL
, _(items
[0]));
894 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button
), !buttonstyle
);
895 gtk_box_pack_start (GTK_BOX (box
), button
, FALSE
, FALSE
, 0);
896 for (i
= 1; items
[i
] != NULL
; i
++)
898 newbutton
= gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button
), _(items
[i
]));
899 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (newbutton
), !buttonstyle
);
900 gtk_box_pack_start (GTK_BOX (box
), newbutton
, FALSE
, FALSE
, 0);
905 gtk_style_context_add_class (gtk_widget_get_style_context (box
), GTK_STYLE_CLASS_LINKED
);
906 gtk_style_context_add_class (gtk_widget_get_style_context (box
), GTK_STYLE_CLASS_RAISED
);
913 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
916 id ofx english french
917 ---------------------------------------------------------------------
918 0 -------- (none) (aucun)
919 1 -------- credit card carte de crédit
920 2 OFX_CHECK Check cheque
921 3 OFX_CASH Cash withdrawal retrait espece
922 4 OFX_XFER Transfer virement
923 5 -------- internal transfer virement compte
924 6 -------- (debit card) (carte de paiement
925 7 OFX_REPEATPMT Repeating payment/standing order Paiement recurrent/Virement auto.
927 8 OFX_PAYMENT Electronic payment télépaiement
928 9 OFX_DEP Deposit dépôt
929 10 OFX_FEE FI fee frais bancaires
932 OFX_DIRECTDEBIT Merchant initiated debit prelevement
933 OFX_OTHER Somer other type of transaction autre
937 OFX_CREDIT Generic credit
938 OFX_DEBIT Generic debit
939 OFX_INT Interest earned or paid (Note: Depends on signage of amount)
941 OFX_SRVCHG Service charge
943 OFX_ATM ATM debit or credit (Note: Depends on signage of amount)
944 OFX_POS Point of sale debit or credit (Note: Depends on signage of amount)
947 -OFX_PAYMENT Electronic payment
948 -OFX_CASH Cash withdrawal
949 OFX_DIRECTDEP Direct deposit
950 OFX_DIRECTDEBIT Merchant initiated debit
951 -OFX_REPEATPMT Repeating payment/standing order
952 OFX_OTHER Somer other type of transaction
957 LST_PAYMODE_ICONNAME
,
962 char *paymode_iconnames
[NUM_PAYMODE_MAX
] =
978 char *paymode_label_names
[NUM_PAYMODE_MAX
] =
985 N_("Internal transfer"),
987 N_("Standing order"),
988 N_("Electronic payment"),
990 //TRANSLATORS: Financial institution fee
995 /* nota: used in ui-filter */
996 gchar
*get_paymode_icon_name(gint index
)
998 if(index
>= NUM_PAYMODE_MAX
)
1001 return paymode_iconnames
[index
];
1006 ** Make a paymode combobox widget
1010 paymode_set_sensitive (GtkCellLayout
*cell_layout
,
1011 GtkCellRenderer
*cell
,
1012 GtkTreeModel
*tree_model
,
1020 path
= gtk_tree_model_get_path (tree_model
, iter
);
1021 indices
= gtk_tree_path_get_indices (path
);
1022 sensitive
= (indices
[0] == PAYMODE_INTXFER
) ? FALSE
: TRUE
;
1023 gtk_tree_path_free (path
);
1026 g_object_set (cell
, "sensitive", sensitive
, NULL
);
1031 static GtkWidget
*make_paymode_internal(GtkWidget
*label
, gboolean intxfer
)
1033 GtkListStore
*store
;
1035 GtkWidget
*combobox
;
1036 GtkCellRenderer
*renderer
, *r1
, *r2
;
1039 store
= gtk_list_store_new (
1045 combobox
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(store
));
1046 g_object_unref(store
);
1048 renderer
= r1
= gtk_cell_renderer_pixbuf_new();
1049 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1050 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "icon-name", LST_PAYMODE_ICONNAME
);
1052 renderer
= r2
= gtk_cell_renderer_text_new();
1053 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1054 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "text", LST_PAYMODE_LABEL
);
1057 if( intxfer
== FALSE
)
1059 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
1061 paymode_set_sensitive
,
1063 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
1065 paymode_set_sensitive
,
1069 //populate our combobox model
1070 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
1072 gtk_list_store_append(store
, &iter
);
1073 gtk_list_store_set(store
, &iter
,
1074 LST_PAYMODE_ICONNAME
, paymode_iconnames
[i
],
1075 LST_PAYMODE_LABEL
, _(paymode_label_names
[i
]),
1079 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
1082 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
1089 GtkWidget
*make_paymode(GtkWidget
*label
)
1091 return make_paymode_internal(label
, TRUE
);
1094 GtkWidget
*make_paymode_nointxfer(GtkWidget
*label
)
1096 return make_paymode_internal(label
, FALSE
);
1100 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
1102 #define NUM_NAINEX_MAX 3
1106 LST_NAINEX_ICONNAME
,
1111 char *nainex_iconnames
[NUM_NAINEX_MAX
] =
1118 extern gchar
*nainex_label_names
[];
1121 ** Make a nainex combobox widget
1123 GtkWidget
*make_nainex(GtkWidget
*label
)
1125 GtkListStore
*store
;
1127 GtkWidget
*combobox
;
1128 GtkCellRenderer
*renderer
;
1132 store
= gtk_list_store_new (
1139 combobox
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(store
));
1142 renderer
= gtk_cell_renderer_pixbuf_new();
1143 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1144 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "icon-name", LST_NAINEX_ICONNAME
);
1146 renderer
= gtk_cell_renderer_text_new();
1147 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
1148 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "text", LST_NAINEX_LABEL
);
1150 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
1152 //populate our combobox model
1153 for(i
=0;i
<NUM_NAINEX_MAX
;i
++)
1155 gtk_list_store_append(store
, &iter
);
1156 gtk_list_store_set(store
, &iter
,
1157 LST_NAINEX_ICONNAME
, nainex_iconnames
[i
],
1158 LST_NAINEX_LABEL
, _(nainex_label_names
[i
]),
1161 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
1164 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);