/* HomeBank -- Free, easy, personal accounting for everyone.
- * Copyright (C) 1995-2014 Maxime DOYEN
+ * Copyright (C) 1995-2019 Maxime DOYEN
*
* This file is part of HomeBank.
*
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
-extern gchar *CYA_FLT_RANGE[];
+extern HbKvData CYA_FLT_RANGE[];
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
+
+//TODO: only WEIGHT & SCALE are used for now
void
gimp_label_set_attributes (GtkLabel *label,
...)
}
+void ui_label_set_integer(GtkLabel *label, gint value)
+{
+gchar buf[16];
+
+ g_snprintf(buf, 16, "%d", value);
+ gtk_label_set_text (label, buf);
+}
+
+
+void ui_gtk_entry_tag_name_append(GtkEntry *entry, gchar *tagname)
+{
+GtkEntryBuffer *buffer;
+const gchar *text;
+guint len;
+
+ text = gtk_entry_get_text(entry);
+ if( g_strstr_len(text, -1, tagname) == NULL )
+ {
+ DB( g_print(" gtkentry append tagname '%'\n", tagname) );
+ buffer = gtk_entry_get_buffer(GTK_ENTRY(entry));
+ if(buffer)
+ {
+ len = gtk_entry_buffer_get_length(buffer);
+ DB( g_print("- add ' %s' %p %d\n", tagname, buffer, len) );
+ if(len > 0)
+ gtk_entry_buffer_insert_text(buffer, len, " ", 1);
+ gtk_entry_buffer_insert_text(buffer, len+1, tagname, -1);
+ }
+ }
+
+}
+
+
void ui_gtk_entry_set_text(GtkWidget *widget, gchar *text)
{
DB( g_print(" set text to '%s'\n", text) );
gtk_entry_set_text(GTK_ENTRY(widget), "");
}
+void ui_gtk_entry_replace_text(GtkWidget *widget, gchar **storage)
+{
+const gchar *text;
-/*
-**
-*/
-GtkWidget *make_label(char *str, gfloat xalign, gfloat yalign)
+ DB( g_print(" storage is '%p' at '%p'\n", *storage, storage) );
+
+ /* free any previous string */
+ if( *storage != NULL )
+ {
+ g_free(*storage);
+ }
+
+ *storage = NULL;
+ text = gtk_entry_get_text(GTK_ENTRY(widget));
+ *storage = g_strdup(text);
+}
+
+
+GtkWidget *make_clicklabel(gchar *id, gchar *str)
{
GtkWidget *label;
+gchar buffer[255];
+
+ g_snprintf(buffer, 254, "<a href=\"%s\">%s</a>", id, str);
+ label = gtk_label_new(buffer);
+ gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+ gtk_label_set_track_visited_links(GTK_LABEL(label), FALSE);
+ gtk_widget_set_halign(label, GTK_ALIGN_START);
+
+ return GTK_WIDGET(label);
+}
+
+
+GtkWidget *make_label_group(gchar *str)
+{
+GtkWidget *label = gtk_label_new (str);
+
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1);
+ return label;
+}
- label = gtk_label_new_with_mnemonic (str);
- gtk_misc_set_alignment (GTK_MISC (label), xalign, yalign);
+GtkWidget *make_label_widget(char *str)
+{
+GtkWidget *label = gtk_label_new_with_mnemonic (str);
+
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_widget_set_halign (label, GTK_ALIGN_END);
+ return label;
+}
+
+
+GtkWidget *make_label(char *str, gfloat xalign, gfloat yalign)
+{
+GtkWidget *label = gtk_label_new_with_mnemonic (str);
+
+ #if GTK_MINOR_VERSION >= 16
+ gtk_label_set_xalign(GTK_LABEL(label), xalign);
+ gtk_label_set_yalign(GTK_LABEL(label), yalign);
+ #else
+ gtk_misc_set_alignment (GTK_MISC (label), xalign, yalign);
+ #endif
return label;
}
entry = gtk_entry_new ();
gtk_editable_set_editable (GTK_EDITABLE(entry), FALSE);
g_object_set(entry, "xalign", xalign, NULL);
-
- //entry = gtk_label_new(NULL);
- //gtk_misc_set_padding (entry, 4, 2);
- //gtk_misc_set_alignment(entry, xalign, 0.5);
return entry;
}
+GtkWidget *make_search(void)
+{
+GtkWidget *search;
+
+ search = gtk_search_entry_new();
+ gtk_entry_set_placeholder_text(GTK_ENTRY(search), _("Search...") );
+
+ return search;
+}
+
+
+
/*
**
*/
return entry;
}
+
+GtkWidget *make_image_button(gchar *icon_name, gchar *tooltip_text)
+{
+GtkWidget *button, *image;
+
+ //todo 3.10 use gtk_button_new_from_icon_name
+
+ button = gtk_button_new();
+ image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON);
+ g_object_set (button, "image", image, NULL);
+ if(tooltip_text != NULL)
+ gtk_widget_set_tooltip_text(button, tooltip_text);
+
+ return button;
+}
+
+
+
/*
**
*/
{
GtkTreeIter iter;
- gtk_list_store_append (GTK_LIST_STORE(store), &iter);
- gtk_list_store_set (GTK_LIST_STORE(store), &iter, 0, list->data, -1);
+ //gtk_list_store_append (GTK_LIST_STORE(store), &iter);
+ //gtk_list_store_set (GTK_LIST_STORE(store), &iter, 0, list->data, -1);
+ gtk_list_store_insert_with_values(GTK_LIST_STORE(store), &iter, -1,
+ 0, list->data,
+ -1);
list = g_list_next(list);
}
GtkWidget *entry;
entry = make_string(label);
+ gtk_entry_set_width_chars(GTK_ENTRY(entry), max_length+2);
gtk_entry_set_max_length(GTK_ENTRY(entry), max_length);
return entry;
}
-
static void hb_amount_insert_text_handler (GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data)
{
GtkEditable *editable = GTK_EDITABLE(entry);
-int i, count=0, dcpos=-1;
-gchar *result = g_new0 (gchar, length+1);
-const gchar *numtext;
+gint i, digits, count=0, dcpos=-1;
+gchar *clntxt;
+
+ DB( g_print("-----\ninsert_text-handler: instxt:%s pos:%d len:%d\n", text, *position, length) );
- //g_message("insert_text-handler: text:%s - pos:%d - length:%d", text, *position, length);
+ digits = gtk_spin_button_get_digits(GTK_SPIN_BUTTON(entry));
- numtext = gtk_entry_get_text(entry);
- for (i=0 ; numtext[i]!='\0' ; i++)
+ // most common : only 1 char to be inserted
+ if( length == 1 )
{
- if(numtext[i]==',' || numtext[i]=='.')
- dcpos = i;
- }
+ const gchar *curtxt = gtk_entry_get_text(entry);
+ for (i=0 ; curtxt[i]!='\0' ; i++)
+ {
+ if(curtxt[i]==',' || curtxt[i]=='.')
+ dcpos = i;
+ }
+ DB( g_print(" dcpos:'%d'\n", dcpos) );
- //g_message("previous text='%s' dcpos:'%d'", numtext, dcpos);
- for (i=0 ; i < length ; i++)
- {
- if( isdigit(text[i]) && ( (*position <= dcpos+2) || dcpos < 0) )
- goto inserttext;
+ clntxt = g_new0 (gchar, length+1);
+ for (i=0 ; i < length ; i++)
+ {
+ if( g_ascii_isdigit(text[i]) && ( (*position <= dcpos + digits) || dcpos < 0) )
+ goto doinsert;
- if( text[i]=='-' && *position==0 ) /* minus sign only at position 0 */
- goto inserttext;
+ if( text[i]=='-' && *position==0 ) /* minus sign only at position 0 */
+ goto doinsert;
- if( dcpos < 0 && (text[i]=='.' || text[i]==',') ) /* decimal separator if not in previous string */
- result[count++] = '.';
+ if( dcpos < 0 && (text[i]=='.' || text[i]==',') ) /* decimal separator if not in previous string */
+ clntxt[count++] = '.';
- continue;
+ continue;
- inserttext:
- result[count++] = text[i];
+ doinsert:
+ clntxt[count++] = text[i];
+ }
}
-
- if (count > 0) {
+ // less common: paste a full text
+ else
+ {
+ clntxt = hb_string_dup_raw_amount_clean(text, digits);
+ count = strlen(clntxt);
+ }
+
+ if (count > 0)
+ {
+ DB( g_print(" insert %d char '%s' at %d\n", count, clntxt, *position) );
g_signal_handlers_block_by_func (G_OBJECT (editable), G_CALLBACK (hb_amount_insert_text_handler), data);
- gtk_editable_insert_text (editable, result, count, position);
+ gtk_editable_insert_text (editable, clntxt, count, position);
g_signal_handlers_unblock_by_func (G_OBJECT (editable), G_CALLBACK (hb_amount_insert_text_handler), data);
}
- g_signal_stop_emission_by_name (G_OBJECT (editable), "insert_text");
- g_free (result);
+ g_free (clntxt);
+
+ g_signal_stop_emission_by_name (G_OBJECT (editable), "insert-text");
}
-/*
-**
-*/
+
GtkWidget *make_amount(GtkWidget *label)
{
GtkWidget *spinner;
GtkAdjustment *adj;
- adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -G_MAXINT32, G_MAXINT32, 0.01, 1.0, 0.0);
+ //adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.01, 1.0, 0.0);
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -8589934588, 8589934588, 0.01, 1.0, 0.0);
spinner = gtk_spin_button_new (adj, 1.0, 2);
g_object_set(spinner, "xalign", 1.0, NULL);
if(label)
gtk_label_set_mnemonic_widget (GTK_LABEL(label), spinner);
- g_signal_connect(G_OBJECT(spinner), "insert_text",
+ g_signal_connect(G_OBJECT(spinner), "insert-text",
G_CALLBACK(hb_amount_insert_text_handler),
NULL);
}
-GtkWidget *make_euro(GtkWidget *label)
+GtkWidget *make_exchange_rate(GtkWidget *label)
{
GtkWidget *spinner;
GtkAdjustment *adj;
- adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -G_MAXINT32, G_MAXINT32, 0.01, 1.0, 0.0);
- spinner = gtk_spin_button_new (adj, 1.0, 6);
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 99999, 0.01, 1.0, 0.0);
+ spinner = gtk_spin_button_new (adj, 1.0, 8);
//gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner), TRUE);
g_object_set(spinner, "xalign", 1.0, NULL);
{
GtkWidget *scale;
- scale = gtk_hscale_new_with_range(GTK_CHART_MINBARW, GTK_CHART_MAXBARW, 1.0);
+ scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, GTK_CHART_MINBARW, GTK_CHART_SPANBARW, 1.0);
gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE);
gtk_range_set_value(GTK_RANGE(scale), GTK_CHART_BARW);
}
-static gboolean
-is_separator (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
+
+
+gint hbtk_radio_button_get_active (GtkContainer *container)
{
- //GtkTreePath *path;
- gboolean retval;
- gchar *txt;
+GList *lchild, *list;
+GtkWidget *radio;
+gint i, retval = 0;
- gtk_tree_model_get (model, iter, 0, &txt, -1);
+ if(!GTK_IS_CONTAINER(container))
+ return -1;
- retval = *txt == 0 ? TRUE : FALSE;
- //path = gtk_tree_model_get_path (model, iter);
- //result = gtk_tree_path_get_indices (path)[0] == 4;
- //gtk_tree_path_free (path);
+ lchild = list = gtk_container_get_children (container);
+ for(i=0;list != NULL;i++)
+ {
+ radio = list->data;
+ if(GTK_IS_TOGGLE_BUTTON(radio))
+ {
+ if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)) == TRUE )
+ {
+ retval = i;
+ break;
+ }
+ }
+ list = g_list_next(list);
+ }
+ g_list_free(lchild);
+
+ return retval;
+}
- return retval;
+
+void hbtk_radio_button_set_active (GtkContainer *container, gint active)
+{
+GList *lchild, *list;
+GtkWidget *radio;
+
+ if(!GTK_IS_CONTAINER(container))
+ return;
+
+ lchild = list = gtk_container_get_children (container);
+ radio = g_list_nth_data (list, active);
+ if(radio != NULL && GTK_IS_TOGGLE_BUTTON(radio))
+ {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio), TRUE);
+ }
+ g_list_free(lchild);
}
-static void
-set_sensitive (GtkCellLayout *cell_layout,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
+
+GtkWidget *hbtk_radio_button_get_nth (GtkContainer *container, gint nth)
{
- GtkTreePath *path;
- gint *indices;
- gboolean sensitive;
+GList *lchild, *list;
+GtkWidget *radio;
- path = gtk_tree_model_get_path (tree_model, iter);
- indices = gtk_tree_path_get_indices (path);
- sensitive = indices[0] != FLT_RANGE_OTHER;
- gtk_tree_path_free (path);
+ if(!GTK_IS_CONTAINER(container))
+ return NULL;
- g_object_set (cell, "sensitive", sensitive, NULL);
+ lchild = list = gtk_container_get_children (container);
+ radio = g_list_nth_data (list, nth);
+ g_list_free(lchild);
+ return radio; //may return NULL
}
-GtkWidget *make_cycle(GtkWidget *label, gchar **items)
+void hbtk_radio_button_unblock_by_func(GtkContainer *container, GCallback c_handler, gpointer data)
{
-GtkWidget *combobox;
+GList *lchild, *list;
+GtkWidget *radio;
+gint i;
+
+ if(!GTK_IS_CONTAINER(container))
+ return;
+
+ lchild = list = gtk_container_get_children (container);
+ for(i=0;list != NULL;i++)
+ {
+ radio = list->data;
+ if(GTK_IS_TOGGLE_BUTTON(radio))
+ {
+ g_signal_handlers_unblock_by_func (radio, c_handler, data);
+ }
+ list = g_list_next(list);
+ }
+ g_list_free(lchild);
+}
+
+
+void hbtk_radio_button_block_by_func(GtkContainer *container, GCallback c_handler, gpointer data)
+{
+GList *lchild, *list;
+GtkWidget *radio;
+gint i;
+
+ if(!GTK_IS_CONTAINER(container))
+ return;
+
+ lchild = list = gtk_container_get_children (container);
+ for(i=0;list != NULL;i++)
+ {
+ radio = list->data;
+ if(GTK_IS_TOGGLE_BUTTON(radio))
+ {
+ g_signal_handlers_block_by_func (radio, c_handler, data);
+ }
+ list = g_list_next(list);
+ }
+ g_list_free(lchild);
+}
+
+
+void hbtk_radio_button_connect(GtkContainer *container, const gchar *detailed_signal, GCallback c_handler, gpointer data)
+{
+GList *lchild, *list;
+GtkWidget *radio;
+gint i;
+
+ if(!GTK_IS_CONTAINER(container))
+ return;
+
+ lchild = list = gtk_container_get_children (container);
+ for(i=0;list != NULL;i++)
+ {
+ radio = list->data;
+ if(GTK_IS_TOGGLE_BUTTON(radio))
+ {
+ g_signal_connect (radio, "toggled", c_handler, data);
+ }
+ list = g_list_next(list);
+ }
+ g_list_free(lchild);
+
+}
+
+
+GtkWidget *hbtk_radio_button_new (gchar **items, gboolean buttonstyle)
+{
+GtkWidget *box, *button, *newbutton;
guint i;
- combobox = gtk_combo_box_text_new ();
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- for (i = 0; items[i] != NULL; i++)
+ button = gtk_radio_button_new_with_label (NULL, _(items[0]));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), !buttonstyle);
+ gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
+ for (i = 1; items[i] != NULL; i++)
{
- if(*items[i] != 0)
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox), _(items[i]));
- else
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox), "");
+ newbutton = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button), _(items[i]));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (newbutton), !buttonstyle);
+ gtk_box_pack_start (GTK_BOX (box), newbutton, FALSE, FALSE, 0);
}
- gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), is_separator, NULL, NULL);
- if(label)
- gtk_label_set_mnemonic_widget (GTK_LABEL(label), combobox);
+ if(buttonstyle)
+ {
+ gtk_style_context_add_class (gtk_widget_get_style_context (box), GTK_STYLE_CLASS_LINKED);
+ gtk_style_context_add_class (gtk_widget_get_style_context (box), GTK_STYLE_CLASS_RAISED);
+ }
+
+ return box;
+}
- return combobox;
+
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
+
+
+static gboolean
+is_separator (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ //GtkTreePath *path;
+ gboolean retval;
+ gchar *txt;
+
+ gtk_tree_model_get (model, iter, 0, &txt, -1);
+
+ retval = *txt == 0 ? TRUE : FALSE;
+ //path = gtk_tree_model_get_path (model, iter);
+ //result = gtk_tree_path_get_indices (path)[0] == 4;
+ //gtk_tree_path_free (path);
+
+ //leak
+ g_free(txt);
+
+
+ return retval;
}
-GtkWidget *make_daterange(GtkWidget *label, gboolean custom)
+GtkWidget *make_cycle(GtkWidget *label, gchar **items)
{
GtkWidget *combobox;
-GList *renderers, *list;
-GtkCellRenderer *renderer;
-gchar **items = CYA_FLT_RANGE;
guint i;
combobox = gtk_combo_box_text_new ();
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combobox), "");
}
gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), is_separator, NULL, NULL);
if(label)
gtk_label_set_mnemonic_widget (GTK_LABEL(label), combobox);
- // special stuffs
- renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combobox));
- if(g_list_length(renderers) == 1 && custom == FALSE)
- {
- list = g_list_first(renderers);
- renderer = list->data;
-
-
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
- renderer,
- set_sensitive,
- NULL, NULL);
- }
- g_list_free(renderers);
-
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), is_separator, NULL, NULL);
-
return combobox;
}
-/*
-**
-*/
-GtkWidget *make_radio(GtkWidget *label, gchar **items, GtkOrientation orientation)
-{
-GtkWidget *box, *button;
-//GSList *group;
-guint i;
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
- if(orientation == GTK_ORIENTATION_HORIZONTAL)
- box = gtk_hbox_new(FALSE, 0);
- else
- box = gtk_vbox_new (FALSE, 0);
-
- button = gtk_radio_button_new_with_label (NULL, _(items[0]));
- gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
- for (i = 1; items[i] != NULL; i++)
- {
- button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button), _(items[i]));
- gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
- }
- return box;
-}
+#define HB_KV_BUFFER_MAX_LEN 8
+#define HB_KV_ITEMS_MAX_LEN 32
-gint radio_get_active (GtkContainer *container)
+gchar *hbtk_get_label(HbKvData *kvdata, guint32 key)
{
-GList *list;
-GtkWidget *radio;
-gint i, retval = 0;
+gchar *retval = NULL;
+guint32 i;
- list = gtk_container_get_children (container);
- for(i=0;list != NULL;i++)
+ for(i=0;i<HB_KV_ITEMS_MAX_LEN;i++)
{
- radio = list->data;
- if(GTK_IS_TOGGLE_BUTTON(radio))
+ HbKvData *tmp = &kvdata[i];
+ if( tmp->name == NULL )
+ break;
+ if( tmp->key == key )
{
- if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)) == TRUE )
- {
- retval = i;
- break;
- }
+ //#1820372
+ retval = (gchar *)_(tmp->name);
+ break;
}
- list = g_list_next(list);
}
return retval;
}
-void radio_set_active (GtkContainer *container, gint active)
+static gboolean hbtk_combo_box_is_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
-GList *list;
-GtkWidget *radio;
+//GtkTreePath *path;
+gboolean retval;
+gchar *txt;
- if(!GTK_IS_CONTAINER(container))
- return;
+ gtk_tree_model_get (model, iter, 0, &txt, -1);
+ retval = *txt == 0 ? TRUE : FALSE;
+ //leak
+ g_free(txt);
- list = gtk_container_get_children (container);
- radio = g_list_nth_data (list, active);
- if(radio != NULL && GTK_IS_TOGGLE_BUTTON(radio))
- {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(radio), TRUE);
- }
+ return retval;
}
-/*
-**
-*/
-guint make_poparchive_populate(GtkComboBox *combobox, GList *srclist)
+guint32 hbtk_combo_box_get_active_id (GtkComboBoxText *combobox)
{
-GtkTreeModel *model;
-GtkTreeIter iter;
-GList *list;
-gint i;
+const gchar* buf;
+guint32 retval;
+
+ buf = gtk_combo_box_get_active_id(GTK_COMBO_BOX(combobox));
+ retval = buf != NULL ? atoi(buf) : 0;
- //insert all glist item into treeview
- model = gtk_combo_box_get_model(combobox);
- gtk_list_store_clear(GTK_LIST_STORE(model));
+ return retval;
+}
- gtk_list_store_append (GTK_LIST_STORE(model), &iter);
- gtk_list_store_set (GTK_LIST_STORE(model), &iter, 0, "----", -1);
- i=0;
- list = g_list_first(srclist);
- while (list != NULL)
- {
- Archive *entry = list->data;
+void hbtk_combo_box_set_active_id (GtkComboBoxText *combobox, guint32 key)
+{
+gchar buf[HB_KV_BUFFER_MAX_LEN];
- gtk_list_store_append (GTK_LIST_STORE(model), &iter);
- gtk_list_store_set (GTK_LIST_STORE(model), &iter, 0, entry->wording, -1);
+ g_snprintf(buf, HB_KV_BUFFER_MAX_LEN-1, "%d", key);
+ gtk_combo_box_set_active_id(GTK_COMBO_BOX(combobox), buf);
+}
- //DB( g_print(" populate_treeview: %d %08x\n", i, list->data) );
- i++; list = g_list_next(list);
- }
+void hbtk_combo_box_text_append (GtkComboBoxText *combobox, guint32 key, gchar *text)
+{
+gchar buf[HB_KV_BUFFER_MAX_LEN];
- return i;
+ g_snprintf(buf, HB_KV_BUFFER_MAX_LEN-1, "%d", key);
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox), buf, text);
}
-GtkWidget *make_poparchive(GtkWidget *label)
+GtkWidget *hbtk_combo_box_new (GtkWidget *label)
{
-GtkListStore *store;
GtkWidget *combobox;
-GtkCellRenderer *renderer;
-
- //store
- store = gtk_list_store_new (1, G_TYPE_STRING);
- combobox = gtk_combo_box_new_with_model (GTK_TREE_MODEL(store));
- g_object_unref(store);
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL);
+ combobox = gtk_combo_box_text_new();
+
if(label)
gtk_label_set_mnemonic_widget (GTK_LABEL(label), combobox);
return combobox;
}
-/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
-/**
- * free_combobox_icons:
- *
- * generic function to free combobox icons
- *
- */
-static void free_combobox_icons(GdkPixbuf **storage, guint max)
+GtkWidget *hbtk_combo_box_new_with_data (GtkWidget *label, HbKvData *kvdata)
{
-guint i;
+GtkWidget *combobox = hbtk_combo_box_new(label);
+HbKvData *tmp;
+gboolean hassep;
+guint32 i;
- for(i=0;i<max;i++)
+ hassep = FALSE;
+ for(i=0;i<HB_KV_ITEMS_MAX_LEN;i++)
{
- if(storage[i] != NULL)
- g_object_unref(storage[i]);
+ tmp = &kvdata[i];
+ if( tmp->name == NULL )
+ break;
+ if( *tmp->name != 0 )
+ {
+ hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox), tmp->key, (gchar *)_(tmp->name));
+ }
+ else
+ {
+ hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox), tmp->key, (gchar *)"");
+ hassep = TRUE;
+ }
}
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
+
+ if(hassep)
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), hbtk_combo_box_is_separator, NULL, NULL);
+
+ return combobox;
}
-/**
- * load_combobox_icons:
- *
- * generic function to load combobox icons
- *
- */
-static void load_combobox_icons(gchar **filenames, GdkPixbuf **storage, guint max)
-{
-//GError *error = NULL;
-GtkWidget *cellview;
-guint i;
- cellview = gtk_cell_view_new ();
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
- for(i=0;i<max;i++)
- {
- storage[i] = gtk_widget_render_icon (cellview, filenames[i], GTK_ICON_SIZE_BUTTON, NULL);
- #if MYDEBUG == 1
- if( !storage[i] )
- g_print("cannot found a private stock %s\n", filenames[i]);
- #endif
- }
+static void
+set_sensitive (GtkCellLayout *cell_layout,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+GtkTreePath *path;
+gint *indices;
+gboolean sensitive;
+
+ path = gtk_tree_model_get_path (tree_model, iter);
+ indices = gtk_tree_path_get_indices (path);
+ sensitive = indices[0] != FLT_RANGE_OTHER;
+ gtk_tree_path_free (path);
- gtk_widget_destroy (cellview);
+ g_object_set (cell, "sensitive", sensitive, NULL);
}
+GtkWidget *make_daterange(GtkWidget *label, guint dspmode)
+{
+GtkWidget *combobox = hbtk_combo_box_new(label);
+GList *renderers, *list;
+HbKvData *tmp, *kvdata = CYA_FLT_RANGE;
+guint32 i;
+ for(i=0;i<HB_KV_ITEMS_MAX_LEN;i++)
+ {
+ tmp = &kvdata[i];
+ if( tmp->name == NULL )
+ break;
-/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
+ if( (tmp->key == FLT_RANGE_OTHER) )
+ {
+ if( dspmode == DATE_RANGE_CUSTOM_DISABLE )
+ {
+ renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combobox));
+ if(g_list_length(renderers) == 1)
+ {
+ list = g_list_first(renderers);
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
+ list->data,
+ set_sensitive,
+ NULL, NULL);
+ }
+ g_list_free(renderers);
+ }
+ else
+ if( dspmode == DATE_RANGE_CUSTOM_HIDE )
+ {
+ //if hide, we do not show it
+ i++;
+ continue;
+ }
+ }
-enum
-{
- LST_PAYMODE_PIXBUF,
- LST_PAYMODE_LABEL,
- NUM_LST_PAYMODE
-};
+ hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox), tmp->key, (*tmp->name != 0) ? (gchar *)_(tmp->name) : (gchar *)"");
+ }
-GdkPixbuf *paymode_icons[NUM_PAYMODE_MAX];
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), hbtk_combo_box_is_separator, NULL, NULL);
-char *paymode_pixbuf_names[NUM_PAYMODE_MAX] =
-{
- "pm-none",
- "pm-ccard",
- "pm-check",
- "pm-cash" ,
- "pm-transfer",
- "pm-intransfer",
- "pm-dcard",
- "pm-standingorder",
- "pm-epayment",
- "pm-deposit",
- "pm-fifee",
- "pm-directdebit"
-};
+ return combobox;
+}
-char *paymode_label_names[NUM_PAYMODE_MAX] =
-{
- N_("(none)"),
- N_("Credit card"),
- N_("Check"),
- N_("Cash"),
- N_("Transfer"),
- N_("Internal transfer"),
- N_("Debit card"),
- N_("Standing order"),
- N_("Electronic payment"),
- N_("Deposit"),
- N_("FI fee"),
- N_("Direct Debit")
-};
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
/*
id ofx english french
OFX_OTHER Somer other type of transaction
*/
+enum
+{
+ LST_PAYMODE_ICONNAME,
+ LST_PAYMODE_LABEL,
+ NUM_LST_PAYMODE
+};
-void load_paymode_icons(void)
+char *paymode_iconnames[NUM_PAYMODE_MAX] =
{
- load_combobox_icons(paymode_pixbuf_names, paymode_icons, NUM_PAYMODE_MAX);
-}
+ "pm-none",
+ "pm-ccard",
+ "pm-check",
+ "pm-cash" ,
+ "pm-transfer",
+ "pm-intransfer",
+ "pm-dcard",
+ "pm-standingorder",
+ "pm-epayment",
+ "pm-deposit",
+ "pm-fifee",
+ "pm-directdebit"
+};
+char *paymode_label_names[NUM_PAYMODE_MAX] =
+{
+ N_("(none)"),
+ N_("Credit card"),
+ N_("Check"),
+ N_("Cash"),
+ N_("Transfer"),
+ N_("Internal transfer"),
+ N_("Debit card"),
+ N_("Standing order"),
+ N_("Electronic payment"),
+ N_("Deposit"),
+ //TRANSLATORS: Financial institution fee
+ N_("FI fee"),
+ N_("Direct Debit")
+};
-void free_paymode_icons(void)
+/* nota: used in ui-filter */
+gchar *get_paymode_icon_name(gint index)
{
- free_combobox_icons(paymode_icons, NUM_PAYMODE_MAX);
+ if(index >= NUM_PAYMODE_MAX)
+ return NULL;
+
+ return paymode_iconnames[index];
}
/*
** Make a paymode combobox widget
*/
-GtkWidget *make_paymode(GtkWidget *label)
+
+static void
+paymode_set_sensitive (GtkCellLayout *cell_layout,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
{
-GtkListStore *store;
-GtkTreeIter iter;
+ GtkTreePath *path;
+ gint *indices;
+ gboolean sensitive;
+
+ path = gtk_tree_model_get_path (tree_model, iter);
+ indices = gtk_tree_path_get_indices (path);
+ sensitive = (indices[0] == PAYMODE_INTXFER) ? FALSE : TRUE;
+ gtk_tree_path_free (path);
+
+
+ g_object_set (cell, "sensitive", sensitive, NULL);
+}
+
+
+
+static GtkWidget *make_paymode_internal(GtkWidget *label, gboolean intxfer)
+{
+GtkListStore *store;
+GtkTreeIter iter;
GtkWidget *combobox;
-GtkCellRenderer *renderer;
+GtkCellRenderer *renderer, *r1, *r2;
guint i;
- //store
store = gtk_list_store_new (
NUM_LST_PAYMODE,
- GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
G_TYPE_STRING
);
- //combobox
combobox = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
+ g_object_unref(store);
- //column 1
- renderer = gtk_cell_renderer_pixbuf_new();
+ renderer = r1 = gtk_cell_renderer_pixbuf_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, FALSE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox), renderer, "pixbuf", LST_PAYMODE_PIXBUF);
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox), renderer, "icon-name", LST_PAYMODE_ICONNAME);
- renderer = gtk_cell_renderer_text_new();
+ renderer = r2 = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, FALSE);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox), renderer, "text", LST_PAYMODE_LABEL);
- gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
+
+ if( intxfer == FALSE )
+ {
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
+ r1,
+ paymode_set_sensitive,
+ NULL, NULL);
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
+ r2,
+ paymode_set_sensitive,
+ NULL, NULL);
+ }
//populate our combobox model
for(i=0;i<NUM_PAYMODE_MAX;i++)
{
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
- LST_PAYMODE_PIXBUF, paymode_icons[i],
+ LST_PAYMODE_ICONNAME, paymode_iconnames[i],
LST_PAYMODE_LABEL, _(paymode_label_names[i]),
-1);
}
return combobox;
}
+
+
+GtkWidget *make_paymode(GtkWidget *label)
+{
+ return make_paymode_internal(label, TRUE);
+}
+
+GtkWidget *make_paymode_nointxfer(GtkWidget *label)
+{
+ return make_paymode_internal(label, FALSE);
+}
+
+
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
#define NUM_NAINEX_MAX 3
enum
{
- LST_NAINEX_PIXBUF,
+ LST_NAINEX_ICONNAME,
LST_NAINEX_LABEL,
NUM_LST_NAINEX
};
-GdkPixbuf *nainex_icons[NUM_NAINEX_MAX];
-
-char *nainex_pixbuf_names[NUM_NAINEX_MAX] =
+char *nainex_iconnames[NUM_NAINEX_MAX] =
{
"flt-inactive",
"flt-include",
"flt-exclude",
};
-char *nainex_label_names[NUM_NAINEX_MAX] =
-{
- N_("Inactive"),
- N_("Include"),
- N_("Exclude")
-};
-
-void load_nainex_icons(void)
-{
- load_combobox_icons(nainex_pixbuf_names, nainex_icons, NUM_NAINEX_MAX);
-}
-
-
-void free_nainex_icons(void)
-{
- free_combobox_icons(nainex_icons, NUM_NAINEX_MAX);
-}
-
+extern gchar *nainex_label_names[];
/*
** Make a nainex combobox widget
//store
store = gtk_list_store_new (
NUM_LST_NAINEX,
- GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
G_TYPE_STRING
);
//column 1
renderer = gtk_cell_renderer_pixbuf_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, FALSE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox), renderer, "pixbuf", LST_NAINEX_PIXBUF);
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT(combobox), renderer, "icon-name", LST_NAINEX_ICONNAME);
renderer = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, FALSE);
{
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
- LST_NAINEX_PIXBUF, nainex_icons[i],
+ LST_NAINEX_ICONNAME, nainex_iconnames[i],
LST_NAINEX_LABEL, _(nainex_label_names[i]),
-1);
}