1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2016 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_set_text(GtkWidget
*widget
, gchar
*text
)
195 DB( g_print(" set text to '%s'\n", text
) );
198 gtk_entry_set_text(GTK_ENTRY(widget
), text
);
200 gtk_entry_set_text(GTK_ENTRY(widget
), "");
203 void ui_gtk_entry_replace_text(GtkWidget
*widget
, gchar
**storage
)
207 DB( g_print(" storage is '%p' at '%p'\n", *storage
, storage
) );
209 /* free any previous string */
210 if( *storage
!= NULL
)
216 text
= gtk_entry_get_text(GTK_ENTRY(widget
));
217 *storage
= g_strdup(text
);
221 GtkWidget
*make_label_group(gchar
*str
)
223 GtkWidget
*label
= gtk_label_new (str
);
225 gtk_widget_set_valign (label
, GTK_ALIGN_CENTER
);
226 gtk_widget_set_halign (label
, GTK_ALIGN_START
);
227 gimp_label_set_attributes(GTK_LABEL(label
), PANGO_ATTR_WEIGHT
, PANGO_WEIGHT_BOLD
, -1);
232 GtkWidget
*make_label_widget(char *str
)
234 GtkWidget
*label
= gtk_label_new_with_mnemonic (str
);
236 gtk_widget_set_valign (label
, GTK_ALIGN_CENTER
);
237 gtk_widget_set_halign (label
, GTK_ALIGN_END
);
242 GtkWidget
*make_label(char *str
, gfloat xalign
, gfloat yalign
)
244 GtkWidget
*label
= gtk_label_new_with_mnemonic (str
);
246 //todo: deprecated in 3.14
247 gtk_misc_set_alignment (GTK_MISC (label
), xalign
, yalign
);
248 //gtk_label_set_xalign(GTK_LABEL(label), xalign);
249 //gtk_label_set_yalign(GTK_LABEL(label), yalign);
257 GtkWidget
*make_text(gfloat xalign
)
261 entry
= gtk_entry_new ();
262 gtk_editable_set_editable (GTK_EDITABLE(entry
), FALSE
);
263 g_object_set(entry
, "xalign", xalign
, NULL
);
268 GtkWidget
*make_search(GtkWidget
*label
)
272 search
= gtk_search_entry_new();
273 gtk_entry_set_placeholder_text(GTK_ENTRY(search
), _("Search...") );
276 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), search
);
286 GtkWidget
*make_string(GtkWidget
*label
)
290 entry
= gtk_entry_new ();
293 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), entry
);
299 GtkWidget
*make_image_button(gchar
*icon_name
, gchar
*tooltip_text
)
301 GtkWidget
*button
, *image
;
303 //todo 3.10 use gtk_button_new_from_icon_name
305 button
= gtk_button_new();
306 image
= gtk_image_new_from_icon_name (icon_name
, GTK_ICON_SIZE_MENU
);
307 g_object_set (button
, "image", image
, NULL
);
308 if(tooltip_text
!= NULL
)
309 gtk_widget_set_tooltip_text(button
, tooltip_text
);
319 GtkWidget
*make_memo_entry(GtkWidget
*label
)
323 GtkEntryCompletion
*completion
;
326 store
= gtk_list_store_new (1, G_TYPE_STRING
);
328 completion
= gtk_entry_completion_new ();
329 gtk_entry_completion_set_model (completion
, GTK_TREE_MODEL(store
));
330 gtk_entry_completion_set_text_column (completion
, 0);
332 entry
= gtk_entry_new ();
333 gtk_entry_set_completion (GTK_ENTRY (entry
), completion
);
335 g_object_unref(store
);
338 //gtk_list_store_clear (GTK_LIST_STORE(store));
340 lmem
= list
= g_hash_table_get_keys(GLOBALS
->h_memo
);
345 gtk_list_store_append (GTK_LIST_STORE(store
), &iter
);
346 gtk_list_store_set (GTK_LIST_STORE(store
), &iter
, 0, list
->data
, -1);
348 list
= g_list_next(list
);
354 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), entry
);
363 GtkWidget
*make_string_maxlength(GtkWidget
*label
, guint max_length
)
367 entry
= make_string(label
);
368 gtk_entry_set_max_length(GTK_ENTRY(entry
), max_length
);
375 static void hb_amount_insert_text_handler (GtkEntry
*entry
, const gchar
*text
, gint length
, gint
*position
, gpointer data
)
377 GtkEditable
*editable
= GTK_EDITABLE(entry
);
378 int i
, count
=0, dcpos
=-1;
379 gchar
*result
= g_new0 (gchar
, length
+1);
380 const gchar
*numtext
;
382 //g_message("insert_text-handler: text:%s - pos:%d - length:%d", text, *position, length);
384 numtext
= gtk_entry_get_text(entry
);
385 for (i
=0 ; numtext
[i
]!='\0' ; i
++)
387 if(numtext
[i
]==',' || numtext
[i
]=='.')
392 //g_message("previous text='%s' dcpos:'%d'", numtext, dcpos);
393 for (i
=0 ; i
< length
; i
++)
395 if( isdigit(text
[i
]) && ( (*position
<= dcpos
+2) || dcpos
< 0) )
398 if( text
[i
]=='-' && *position
==0 ) /* minus sign only at position 0 */
401 if( dcpos
< 0 && (text
[i
]=='.' || text
[i
]==',') ) /* decimal separator if not in previous string */
402 result
[count
++] = '.';
407 result
[count
++] = text
[i
];
411 g_signal_handlers_block_by_func (G_OBJECT (editable
), G_CALLBACK (hb_amount_insert_text_handler
), data
);
412 gtk_editable_insert_text (editable
, result
, count
, position
);
413 g_signal_handlers_unblock_by_func (G_OBJECT (editable
), G_CALLBACK (hb_amount_insert_text_handler
), data
);
415 g_signal_stop_emission_by_name (G_OBJECT (editable
), "insert-text");
423 GtkWidget
*make_amount(GtkWidget
*label
)
428 //adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.01, 1.0, 0.0);
429 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, -8589934588, 8589934588, 0.01, 1.0, 0.0);
430 spinner
= gtk_spin_button_new (adj
, 1.0, 2);
431 g_object_set(spinner
, "xalign", 1.0, NULL
);
434 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
436 g_signal_connect(G_OBJECT(spinner
), "insert-text",
437 G_CALLBACK(hb_amount_insert_text_handler
),
444 GtkWidget
*make_exchange_rate(GtkWidget
*label
)
449 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, 0.0, 99999, 0.01, 1.0, 0.0);
450 spinner
= gtk_spin_button_new (adj
, 1.0, 6);
451 //gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
452 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
453 g_object_set(spinner
, "xalign", 1.0, NULL
);
456 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
464 GtkWidget
*make_numeric(GtkWidget
*label
, gdouble min
, gdouble max
)
469 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, min
, max
, 1.0, 10.0, 0.0);
470 spinner
= gtk_spin_button_new (adj
, 0, 0);
471 //gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
472 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
473 g_object_set(spinner
, "xalign", 1.0, NULL
);
476 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
484 GtkWidget
*make_scale(GtkWidget
*label
)
488 scale
= gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL
, GTK_CHART_MINBARW
, GTK_CHART_MAXBARW
, 1.0);
489 gtk_scale_set_draw_value(GTK_SCALE(scale
), FALSE
);
490 gtk_range_set_value(GTK_RANGE(scale
), GTK_CHART_BARW
);
493 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), scale
);
501 GtkWidget
*make_long(GtkWidget
*label
)
505 spinner
= make_numeric(label
, 0.0, G_MAXINT
);
510 GtkWidget
*make_year(GtkWidget
*label
)
515 adj
= (GtkAdjustment
*) gtk_adjustment_new (0.0, 1900, 2200, 1.0, 10.0, 0.0);
516 spinner
= gtk_spin_button_new (adj
, 0, 0);
517 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner
), TRUE
);
518 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner
), TRUE
);
519 g_object_set(spinner
, "xalign", 1.0, NULL
);
522 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), spinner
);
529 is_separator (GtkTreeModel
*model
,
537 gtk_tree_model_get (model
, iter
, 0, &txt
, -1);
539 retval
= *txt
== 0 ? TRUE
: FALSE
;
540 //path = gtk_tree_model_get_path (model, iter);
541 //result = gtk_tree_path_get_indices (path)[0] == 4;
542 //gtk_tree_path_free (path);
548 set_sensitive (GtkCellLayout
*cell_layout
,
549 GtkCellRenderer
*cell
,
550 GtkTreeModel
*tree_model
,
558 path
= gtk_tree_model_get_path (tree_model
, iter
);
559 indices
= gtk_tree_path_get_indices (path
);
560 sensitive
= indices
[0] != FLT_RANGE_OTHER
;
561 gtk_tree_path_free (path
);
563 g_object_set (cell
, "sensitive", sensitive
, NULL
);
567 GtkWidget
*make_cycle(GtkWidget
*label
, gchar
**items
)
572 combobox
= gtk_combo_box_text_new ();
574 for (i
= 0; items
[i
] != NULL
; i
++)
577 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), _(items
[i
]));
579 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), "");
581 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
582 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), is_separator
, NULL
, NULL
);
585 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
591 GtkWidget
*make_daterange(GtkWidget
*label
, gboolean custom
)
594 GList
*renderers
, *list
;
595 GtkCellRenderer
*renderer
;
596 gchar
**items
= CYA_FLT_RANGE
;
599 combobox
= gtk_combo_box_text_new ();
601 for (i
= 0; items
[i
] != NULL
; i
++)
604 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), _(items
[i
]));
606 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox
), "");
608 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
611 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
614 renderers
= gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combobox
));
615 if(g_list_length(renderers
) == 1 && custom
== FALSE
)
617 list
= g_list_first(renderers
);
618 renderer
= list
->data
;
621 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
626 g_list_free(renderers
);
628 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox
), is_separator
, NULL
, NULL
);
633 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
638 GtkWidget
*make_radio(gchar
**items
, gboolean buttonstyle
, GtkOrientation orientation
)
640 GtkWidget
*box
, *button
;
643 box
= gtk_box_new (orientation
, 0);
645 button
= gtk_radio_button_new_with_label (NULL
, _(items
[0]));
646 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button
), !buttonstyle
);
647 gtk_box_pack_start (GTK_BOX (box
), button
, FALSE
, FALSE
, 0);
648 for (i
= 1; items
[i
] != NULL
; i
++)
650 button
= gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button
), _(items
[i
]));
651 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button
), !buttonstyle
);
652 gtk_box_pack_start (GTK_BOX (box
), button
, FALSE
, FALSE
, 0);
657 gtk_style_context_add_class (gtk_widget_get_style_context (box
), GTK_STYLE_CLASS_LINKED
);
658 gtk_style_context_add_class (gtk_widget_get_style_context (box
), GTK_STYLE_CLASS_RAISED
);
665 gint
radio_get_active (GtkContainer
*container
)
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 if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio
)) == TRUE
)
686 list
= g_list_next(list
);
693 GtkWidget
*radio_get_nth_widget (GtkContainer
*container
, gint nth
)
695 GList
*lchild
, *list
;
698 if(!GTK_IS_CONTAINER(container
))
701 lchild
= list
= gtk_container_get_children (container
);
702 radio
= g_list_nth_data (list
, nth
);
704 return radio
; //may return NULL
709 void radio_set_active (GtkContainer
*container
, gint active
)
711 GList
*lchild
, *list
;
714 if(!GTK_IS_CONTAINER(container
))
717 lchild
= list
= gtk_container_get_children (container
);
718 radio
= g_list_nth_data (list
, active
);
719 if(radio
!= NULL
&& GTK_IS_TOGGLE_BUTTON(radio
))
721 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio
), TRUE
);
727 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
730 id ofx english french
731 ---------------------------------------------------------------------
732 0 -------- (none) (aucun)
733 1 -------- credit card carte de crédit
734 2 OFX_CHECK Check cheque
735 3 OFX_CASH Cash withdrawal retrait espece
736 4 OFX_XFER Transfer virement
737 5 -------- internal transfer virement compte
738 6 -------- (debit card) (carte de paiement
739 7 OFX_REPEATPMT Repeating payment/standing order Paiement recurrent/Virement auto.
741 8 OFX_PAYMENT Electronic payment télépaiement
742 9 OFX_DEP Deposit dépôt
743 10 OFX_FEE FI fee frais bancaires
746 OFX_DIRECTDEBIT Merchant initiated debit prelevement
747 OFX_OTHER Somer other type of transaction autre
751 OFX_CREDIT Generic credit
752 OFX_DEBIT Generic debit
753 OFX_INT Interest earned or paid (Note: Depends on signage of amount)
755 OFX_SRVCHG Service charge
757 OFX_ATM ATM debit or credit (Note: Depends on signage of amount)
758 OFX_POS Point of sale debit or credit (Note: Depends on signage of amount)
761 -OFX_PAYMENT Electronic payment
762 -OFX_CASH Cash withdrawal
763 OFX_DIRECTDEP Direct deposit
764 OFX_DIRECTDEBIT Merchant initiated debit
765 -OFX_REPEATPMT Repeating payment/standing order
766 OFX_OTHER Somer other type of transaction
771 LST_PAYMODE_ICONNAME
,
776 char *paymode_iconnames
[NUM_PAYMODE_MAX
] =
792 char *paymode_label_names
[NUM_PAYMODE_MAX
] =
799 N_("Internal transfer"),
801 N_("Standing order"),
802 N_("Electronic payment"),
804 //TRANSLATORS: Financial institution fee
809 /* nota: used in ui-filter */
810 gchar
*get_paymode_icon_name(gint index
)
812 if(index
>= NUM_PAYMODE_MAX
)
815 return paymode_iconnames
[index
];
820 ** Make a paymode combobox widget
824 paymode_set_sensitive (GtkCellLayout
*cell_layout
,
825 GtkCellRenderer
*cell
,
826 GtkTreeModel
*tree_model
,
834 path
= gtk_tree_model_get_path (tree_model
, iter
);
835 indices
= gtk_tree_path_get_indices (path
);
836 sensitive
= (indices
[0] == PAYMODE_INTXFER
) ? FALSE
: TRUE
;
837 gtk_tree_path_free (path
);
840 g_object_set (cell
, "sensitive", sensitive
, NULL
);
845 static GtkWidget
*make_paymode_internal(GtkWidget
*label
, gboolean intxfer
)
850 GtkCellRenderer
*renderer
, *r1
, *r2
;
853 store
= gtk_list_store_new (
859 combobox
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(store
));
861 renderer
= r1
= gtk_cell_renderer_pixbuf_new();
862 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
863 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "icon-name", LST_PAYMODE_ICONNAME
);
865 renderer
= r2
= gtk_cell_renderer_text_new();
866 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
867 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "text", LST_PAYMODE_LABEL
);
870 if( intxfer
== FALSE
)
872 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
874 paymode_set_sensitive
,
876 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox
),
878 paymode_set_sensitive
,
882 //populate our combobox model
883 for(i
=0;i
<NUM_PAYMODE_MAX
;i
++)
885 gtk_list_store_append(store
, &iter
);
886 gtk_list_store_set(store
, &iter
,
887 LST_PAYMODE_ICONNAME
, paymode_iconnames
[i
],
888 LST_PAYMODE_LABEL
, _(paymode_label_names
[i
]),
892 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
895 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);
903 GtkWidget
*make_paymode(GtkWidget
*label
)
905 return make_paymode_internal(label
, TRUE
);
908 GtkWidget
*make_paymode_nointxfer(GtkWidget
*label
)
910 return make_paymode_internal(label
, FALSE
);
914 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
916 #define NUM_NAINEX_MAX 3
925 char *nainex_iconnames
[NUM_NAINEX_MAX
] =
932 char *nainex_label_names
[NUM_NAINEX_MAX
] =
941 ** Make a nainex combobox widget
943 GtkWidget
*make_nainex(GtkWidget
*label
)
948 GtkCellRenderer
*renderer
;
952 store
= gtk_list_store_new (
959 combobox
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(store
));
962 renderer
= gtk_cell_renderer_pixbuf_new();
963 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
964 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "icon-name", LST_NAINEX_ICONNAME
);
966 renderer
= gtk_cell_renderer_text_new();
967 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox
), renderer
, FALSE
);
968 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox
), renderer
, "text", LST_NAINEX_LABEL
);
970 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
972 //populate our combobox model
973 for(i
=0;i
<NUM_NAINEX_MAX
;i
++)
975 gtk_list_store_append(store
, &iter
);
976 gtk_list_store_set(store
, &iter
,
977 LST_NAINEX_ICONNAME
, nainex_iconnames
[i
],
978 LST_NAINEX_LABEL
, _(nainex_label_names
[i
]),
981 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox
), 0);
984 gtk_label_set_mnemonic_widget (GTK_LABEL(label
), combobox
);