38
38
extern struct HomeBank *GLOBALS;
41
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
44
extern HbKvData CYA_FLT_RANGE[];
47
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
41
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
44
extern HbKvData CYA_FLT_RANGE_DWF[];
45
extern HbKvData CYA_FLT_RANGE_MQY[];
46
extern HbKvData CYA_FLT_RANGE_NORMAL[];
47
extern HbKvData CYA_FLT_RANGE_BUDGET[];
48
extern HbKvData CYA_FLT_RANGE_CUSTOM[];
50
extern gchar *CYA_ABMONTHS[];
53
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
54
/* GTK4 transitional anticipation */
55
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
57
#if( (GTK_MAJOR_VERSION < 4) )
59
void gtk_window_set_child (GtkWindow* window, GtkWidget* child)
60
{ gtk_container_add (GTK_CONTAINER(window), child); }
62
void gtk_popover_set_child (GtkPopover* popover, GtkWidget* child)
63
{ gtk_container_add (GTK_CONTAINER(popover), child); }
65
void gtk_frame_set_child (GtkFrame* frame, GtkWidget* child)
66
{ gtk_container_add (GTK_CONTAINER(frame), child); }
68
void gtk_overlay_set_child (GtkOverlay* overlay, GtkWidget* child)
69
{ gtk_container_add (GTK_CONTAINER(overlay), child); }
71
void gtk_scrolled_window_set_child (GtkScrolledWindow* scrolled_window, GtkWidget* child)
72
{ gtk_container_add (GTK_CONTAINER(scrolled_window), child); }
74
void gtk_revealer_set_child (GtkRevealer* revealer, GtkWidget* child)
75
{ gtk_container_add (GTK_CONTAINER(revealer), child); }
77
void gtk_expander_set_child (GtkExpander* expander, GtkWidget* child)
78
{ gtk_container_add (GTK_CONTAINER(expander), child); }
81
void gtk_window_destroy (GtkWindow* window)
82
{ gtk_widget_destroy(GTK_WIDGET(window)); }
86
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
49
89
//TODO: only WEIGHT & SCALE are used for now
228
void hb_widget_set_margins(GtkWidget *widget, gint top, gint right, gint bottom, gint left)
230
gtk_widget_set_margin_top (widget, top);
231
gtk_widget_set_margin_end (widget, right);
232
gtk_widget_set_margin_bottom (widget, bottom);
233
gtk_widget_set_margin_start (widget, left);
188
237
void hb_widget_set_margin(GtkWidget *widget, gint margin)
190
gtk_widget_set_margin_start (widget, margin);
191
gtk_widget_set_margin_end (widget, margin);
192
gtk_widget_set_margin_top (widget, margin);
193
gtk_widget_set_margin_bottom (widget, margin);
239
hb_widget_set_margins (widget, margin, margin, margin, margin);
337
hbtk_tree_store_get_top_level(GtkTreeModel *model, gint column_id, guint32 key, GtkTreeIter *return_iter)
343
if( model != NULL && key > 0 )
345
valid = gtk_tree_model_get_iter_first(model, &iter);
348
gtk_tree_model_get (model, &iter, column_id, &tmpkey, -1);
355
valid = gtk_tree_model_iter_next(model, &iter);
363
hbtk_tree_store_remove_iter_with_child(GtkTreeModel *model, GtkTreeIter *iter)
368
valid = gtk_tree_model_iter_children(model, &child, iter);
371
valid = gtk_tree_store_remove(GTK_TREE_STORE(model), &child);
373
valid = gtk_tree_model_iter_next(model, &child);
376
gtk_tree_store_remove(GTK_TREE_STORE(model), iter);
290
380
GtkTreeViewColumn *
291
381
hbtk_treeview_get_column_by_id(GtkTreeView *treeview, gint search_id)
837
hbtk_monthyear_spin_input (GtkSpinButton *spin_button,
842
gboolean found = FALSE;
849
text = gtk_entry_get_text (GTK_ENTRY (spin_button));
850
str = g_strsplit (text, " ", 2);
852
if (g_strv_length (str) == 2)
854
//month = strtol (str[0], &endh, 10);
855
for (i = 0; i < 12; i++)
857
tmp1 = g_ascii_strup (CYA_ABMONTHS[i+1], -1);
858
tmp2 = g_ascii_strup (str[0], -1);
859
if (strstr (tmp1, tmp2) == tmp1)
871
year = strtol (str[1], &endm, 10) - 1900;
873
//g_print(" input: m=%d y=%d => %d\n", month, year, month + year * 12);
875
if (found && !*endm && 0 <= month && month < 12 )
877
*new_val = month + (year * 12);
879
//g_print(" affect newval %f\n", *new_val);
888
return GTK_INPUT_ERROR;
896
hbtk_monthyear_spin_output (GtkSpinButton *spin_button)
898
GtkAdjustment *adjustment;
904
adjustment = gtk_spin_button_get_adjustment (spin_button);
905
month = ((gint)gtk_adjustment_get_value (adjustment) % 12);
906
year = (gint)gtk_adjustment_get_value (adjustment) / 12.0;
908
//g_print(" output: %d => m:%d y:%d\n", (gint)gtk_adjustment_get_value (adjustment), month, year);
910
buf = g_strdup_printf ("%s %04d", CYA_ABMONTHS[month+1], year+1900);
912
//g_signal_handlers_block_by_func(spin_button, time_spin_input, NULL);
914
if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
916
//g_print(" update text '%s'\n", buf);
917
gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
921
//g_signal_handlers_unblock_by_func(spin_button, time_spin_input, NULL);
929
static guint32 hbtk_monthyear_get_internal(GtkSpinButton *spin, guint type)
935
if(!GTK_IS_SPIN_BUTTON(spin))
936
return GLOBALS->today;
938
val = gtk_spin_button_get_value_as_int(spin);
939
year = 1900 + (val / 12);
940
month = (val % 12) + 1;
942
g_date_clear(&date, 1);
943
g_date_set_year(&date, year);
944
g_date_set_month(&date, month);
946
g_date_set_day(&date, 1);
948
g_date_set_day(&date, g_date_get_days_in_month(month, year));
950
return g_date_get_julian(&date);
954
guint32 hbtk_monthyear_getmin(GtkSpinButton *spin)
956
return hbtk_monthyear_get_internal(spin, 0);
959
guint32 hbtk_monthyear_getmax(GtkSpinButton *spin)
961
return hbtk_monthyear_get_internal(spin, 1);
965
void hbtk_monthyear_set(GtkSpinButton *spin, guint32 julian)
970
if(!GTK_IS_SPIN_BUTTON(spin))
973
g_date_set_julian(&date, julian);
974
newval = (g_date_get_month(&date)-1) + (g_date_get_year(&date) - 1900) * 12;
975
gtk_spin_button_set_value(spin, newval);
979
GtkWidget *make_monthyear(GtkWidget *label)
984
adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, (2200-1900)*12, 1, 12, 0);
985
//adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 14010, 30, 60, 0);
986
spinner = gtk_spin_button_new (adj, 0, 0);
987
//gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
988
//gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner), TRUE);
989
//g_object_set(spinner, "xalign", 1.0, NULL);
991
//gtk_entry_set_width_chars(spinner, 10);
994
gtk_label_set_mnemonic_widget (GTK_LABEL(label), spinner);
996
g_signal_connect (spinner, "output", G_CALLBACK (hbtk_monthyear_spin_output), NULL);
997
g_signal_connect (spinner, "input", G_CALLBACK (hbtk_monthyear_spin_input), NULL);
743
1004
GtkWidget *make_year(GtkWidget *label)
745
1006
GtkWidget *spinner;
1211
1472
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
1214
set_sensitive (GtkCellLayout *cell_layout,
1475
make_daterange_set_sensitive (GtkCellLayout *cell_layout,
1215
1476
GtkCellRenderer *cell,
1216
1477
GtkTreeModel *tree_model,
1217
1478
GtkTreeIter *iter,
1481
gint id_column = GPOINTER_TO_INT(data);
1222
1482
gboolean sensitive;
1224
path = gtk_tree_model_get_path (tree_model, iter);
1225
indices = gtk_tree_path_get_indices (path);
1226
sensitive = indices[0] != FLT_RANGE_MISC_CUSTOM;
1227
gtk_tree_path_free (path);
1486
g_return_if_fail (id_column >= 0);
1487
gtk_tree_model_get (tree_model, iter, id_column, &textid, -1);
1489
sensitive = (id != FLT_RANGE_MISC_CUSTOM);
1229
1490
g_object_set (cell, "sensitive", sensitive, NULL);
1234
GtkWidget *make_daterange(GtkWidget *label, guint dspmode)
1236
GtkWidget *combobox = hbtk_combo_box_new(label);
1495
static void make_daterange_fill_items(GtkComboBoxText *combo_box, HbKvData *kvdata)
1500
for(i=0;i<HB_KV_ITEMS_MAX_LEN;i++)
1503
if( tmp->name == NULL )
1505
hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo_box), tmp->key, (*tmp->name != 0) ? (gchar *)_(tmp->name) : (gchar *)"");
1510
GtkWidget *make_daterange(GtkWidget *label, HbDateRangeFlags flags)
1512
GtkWidget *combo_box;
1237
1513
GList *renderers, *list;
1238
HbKvData *tmp, *kvdata = CYA_FLT_RANGE;
1241
for(i=0;i<HB_KV_ITEMS_MAX_LEN;i++)
1515
combo_box = hbtk_combo_box_new(label);
1517
if( !(flags & DATE_RANGE_BUDGET_MODE) )
1518
make_daterange_fill_items(GTK_COMBO_BOX_TEXT(combo_box), CYA_FLT_RANGE_DWF);
1520
make_daterange_fill_items(GTK_COMBO_BOX_TEXT(combo_box), CYA_FLT_RANGE_MQY);
1522
if( flags & DATE_RANGE_BUDGET_MODE )
1523
make_daterange_fill_items(GTK_COMBO_BOX_TEXT(combo_box), CYA_FLT_RANGE_BUDGET);
1525
make_daterange_fill_items(GTK_COMBO_BOX_TEXT(combo_box), CYA_FLT_RANGE_NORMAL);
1527
if( !(flags & DATE_RANGE_CUSTOM_HIDDEN) )
1528
make_daterange_fill_items(GTK_COMBO_BOX_TEXT(combo_box), CYA_FLT_RANGE_CUSTOM);
1530
if( flags & DATE_RANGE_CUSTOM_DISABLE )
1244
if( tmp->name == NULL )
1247
if( (tmp->key == FLT_RANGE_MISC_CUSTOM) )
1532
renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combo_box));
1533
if(g_list_length(renderers) == 1)
1249
if( dspmode == DATE_RANGE_CUSTOM_DISABLE )
1251
renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT(combobox));
1252
if(g_list_length(renderers) == 1)
1254
list = g_list_first(renderers);
1255
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1260
g_list_free(renderers);
1263
if( dspmode == DATE_RANGE_CUSTOM_HIDE )
1265
//if hide, we do not show it
1271
hbtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox), tmp->key, (*tmp->name != 0) ? (gchar *)_(tmp->name) : (gchar *)"");
1535
gint id_column = gtk_combo_box_get_id_column (GTK_COMBO_BOX (combo_box));
1537
list = g_list_first(renderers);
1538
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo_box),
1540
make_daterange_set_sensitive,
1541
GINT_TO_POINTER(id_column),
1544
g_list_free(renderers);
1274
1547
//TODO: option removed into GTK4 ??
1275
gtk_combo_box_set_wrap_width (GTK_COMBO_BOX(combobox), 3);
1277
gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
1278
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), hbtk_combo_box_is_separator, NULL, NULL);
1548
gtk_combo_box_set_wrap_width (GTK_COMBO_BOX(combo_box), 3);
1550
//gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), FLT_RANGE_MISC_ALLDATE);
1551
hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(combo_box), FLT_RANGE_MISC_ALLDATE);
1552
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo_box), hbtk_combo_box_is_separator, NULL, NULL);