X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fhomebank;a=blobdiff_plain;f=src%2Fui-filter.c;h=78714e72a937633ce2f681a7b44d79bcd6504080;hp=6a8664543701f7ef30a19555649fad8a2ee4841b;hb=160a363125e5d06f47eb22b333788097e4f01362;hpb=2ef3e601408ebaeeaf5f40d6967664b012a49979 diff --git a/src/ui-filter.c b/src/ui-filter.c index 6a86645..78714e7 100644 --- a/src/ui-filter.c +++ b/src/ui-filter.c @@ -1,5 +1,5 @@ /* HomeBank -- Free, easy, personal accounting for everyone. - * Copyright (C) 1995-2017 Maxime DOYEN + * Copyright (C) 1995-2019 Maxime DOYEN * * This file is part of HomeBank. * @@ -42,111 +42,337 @@ extern struct HomeBank *GLOBALS; +extern gchar *CYA_FLT_TYPE[]; +extern gchar *CYA_FLT_STATUS[]; +extern gchar *CYA_FLT_RANGE[]; +extern gchar *CYA_SELECT[]; extern char *paymode_label_names[]; +extern gchar *nainex_label_names[]; -gchar *CYA_FLT_TYPE[] = { - N_("Expense"), - N_("Income"), - "", - N_("Any Type"), - NULL -}; - -gchar *CYA_FLT_STATUS[] = { - N_("Uncategorized"), - N_("Unreconciled"), - N_("Uncleared"), - N_("Reconciled"), - N_("Cleared"), - "", - N_("Any Status"), - NULL -}; - -gchar *CYA_FLT_RANGE[] = { - N_("This month"), - N_("Last month"), - N_("This quarter"), - N_("Last quarter"), - N_("This year"), - N_("Last year"), - "", - N_("Last 30 days"), - N_("Last 60 days"), - N_("Last 90 days"), - N_("Last 12 months"), - "", - N_("Other..."), - "", - N_("All date"), - NULL -}; - - -gchar *CYA_SELECT[] = +/* = = = = = = = = = = = = = = = = = = = = */ + + +static void ui_flt_hub_category_expand_all(GtkWidget *widget, gpointer user_data) { - "----", - N_("All month"), - N_("January"), - N_("February"), - N_("March"), - N_("April"), - N_("May"), - N_("June"), - N_("July"), - N_("August"), - N_("September"), - N_("October"), - N_("November"), - N_("December"), - NULL -}; +struct ui_flt_manage_data *data; + data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); + DB( g_print("\n(ui_flt_hub_category) expand all (data=%p)\n", data) ); -/* = = = = = = = = = = = = = = = = = = = = */ + gtk_tree_view_expand_all(GTK_TREE_VIEW(data->LV_cat)); -/* -** -*/ -static void ui_flt_manage_acc_select(GtkWidget *widget, gpointer user_data) +} + + +static void ui_flt_hub_category_collapse_all(GtkWidget *widget, gpointer user_data) +{ +struct ui_flt_manage_data *data; + + data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); + DB( g_print("\n(ui_flt_hub_category) collapse all (data=%p)\n", data) ); + + gtk_tree_view_collapse_all(GTK_TREE_VIEW(data->LV_cat)); + +} + + +static void ui_flt_panel_category_get(struct ui_flt_manage_data *data) +{ +gint i; + + DB( g_print("(ui_flt_panel_category) get\n") ); + + if(data->filter !=NULL) + { + GtkTreeModel *model; + //GtkTreeSelection *selection; + GtkTreeIter iter, child; + gint n_child; + gboolean valid; + gboolean toggled; + + + // category + DB( g_print(" category\n") ); + + model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat)); + //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat)); + i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); + while (valid) + { + Category *catitem; + + gtk_tree_model_get (model, &iter, + LST_DEFCAT_TOGGLE, &toggled, + LST_DEFCAT_DATAS, &catitem, + -1); + + //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &iter); + //data->filter->cat[i] = toggled; + catitem->flt_select = toggled; + + n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter); + gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter); + while(n_child > 0) + { + i++; + + gtk_tree_model_get (model, &child, + LST_DEFCAT_TOGGLE, &toggled, + LST_DEFCAT_DATAS, &catitem, + -1); + + + //data->filter->cat[i] = toggled; + //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &child); + catitem->flt_select = toggled; + + n_child--; + gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child); + } + + /* Make iter point to the next row in the list store */ + i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); + } + + } +} + + +static void ui_flt_panel_category_set(struct ui_flt_manage_data *data) +{ + + DB( g_print("(ui_flt_panel_category) set\n") ); + + if(data->filter != NULL) + { + GtkTreeModel *model; + //GtkTreeSelection *selection; + GtkTreeIter iter, child; + + gint n_child; + gboolean valid; + gint i; + + + // category + DB( g_print(" category\n") ); + + model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat)); + //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat)); + i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); + while (valid) + { + Category *catitem; + + gtk_tree_model_get (model, &iter, + LST_DEFCAT_DATAS, &catitem, + -1); + + if(catitem->flt_select == TRUE) + gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1); + + n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter); + gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter); + while(n_child > 0) + { + i++; + + gtk_tree_model_get (model, &child, + LST_DEFCAT_DATAS, &catitem, + -1); + + if(catitem->flt_select == TRUE) + gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1); + + n_child--; + gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child); + } + + /* Make iter point to the next row in the list store */ + i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); + } + + + } +} + + + +static void ui_flt_manage_cat_select(GtkWidget *widget, gpointer user_data) { struct ui_flt_manage_data *data; gint select = GPOINTER_TO_INT(user_data); GtkTreeModel *model; -GtkTreeIter iter; +GtkTreeIter iter, child; gboolean valid; +gint n_child; gboolean toggle; - DB( g_print("(ui_flt_manage) acc select\n") ); + DB( g_print("(ui_flt_manage) pay select\n") ); data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc)); + model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat)); valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); while (valid) { switch(select) { case BUTTON_ALL: - gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1); + gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1); break; case BUTTON_NONE: - gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, FALSE, -1); + gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, FALSE, -1); break; case BUTTON_INVERT: - gtk_tree_model_get (model, &iter, LST_DEFACC_TOGGLE, &toggle, -1); + gtk_tree_model_get (model, &iter, LST_DEFCAT_TOGGLE, &toggle, -1); toggle ^= 1; - gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, toggle, -1); + gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, toggle, -1); break; } + + n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter); + gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter); + while(n_child > 0) + { + + switch(select) + { + case BUTTON_ALL: + gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1); + break; + case BUTTON_NONE: + gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, FALSE, -1); + break; + case BUTTON_INVERT: + gtk_tree_model_get (model, &child, LST_DEFCAT_TOGGLE, &toggle, -1); + toggle ^= 1; + gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, toggle, -1); + break; + } + + n_child--; + gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child); + } + valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); } + } -/* -** -*/ + + +static gboolean +ui_flt_panel_category_activate_link (GtkWidget *label, + const gchar *uri, + gpointer data) +{ + DB( g_print(" comboboxlink '%s' \n", uri) ); + + if (g_strcmp0 (uri, "all") == 0) + { + ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_ALL) ); + } + else + if (g_strcmp0 (uri, "non") == 0) + { + ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_NONE) ); + } + else + if (g_strcmp0 (uri, "inv") == 0) + { + ui_flt_manage_cat_select(label, GINT_TO_POINTER(BUTTON_INVERT) ); + } + + return TRUE; +} + + +static GtkWidget * +ui_flt_panel_category_new (struct ui_flt_manage_data *data) +{ +GtkWidget *hubbox, *scrollwin, *hbox, *vbox, *widget, *label, *tbar; +GtkToolItem *toolitem; + + hubbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); + + label = make_label (_("Categories"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); + gtk_box_pack_start (GTK_BOX (hubbox), label, FALSE, FALSE, 0); + + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM); + gtk_box_pack_start (GTK_BOX (hubbox), hbox, FALSE, FALSE, 0); + + label = make_label (_("Select:"), 0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + label = make_clicklabel("all", _("All")); + data->BT_cat[BUTTON_ALL] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL); + + label = make_clicklabel("non", _("None")); + data->BT_cat[BUTTON_NONE] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL); + + label = make_clicklabel("inv", _("Invert")); + data->BT_cat[BUTTON_INVERT] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_category_activate_link), NULL); + + //list + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_box_pack_start (GTK_BOX (hubbox), vbox, TRUE, TRUE, 0); + + scrollwin = gtk_scrolled_window_new(NULL,NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + //gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrollwin), HB_MINHEIGHT_LIST); + data->LV_cat = (GtkWidget *)ui_cat_listview_new(TRUE, FALSE); + gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_cat); + gtk_widget_set_hexpand (scrollwin, TRUE); + gtk_widget_set_vexpand (scrollwin, TRUE); + gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0); + + //list toolbar + tbar = gtk_toolbar_new(); + gtk_toolbar_set_icon_size (GTK_TOOLBAR(tbar), GTK_ICON_SIZE_MENU); + gtk_toolbar_set_style(GTK_TOOLBAR(tbar), GTK_TOOLBAR_ICONS); + gtk_style_context_add_class (gtk_widget_get_style_context (tbar), GTK_STYLE_CLASS_INLINE_TOOLBAR); + gtk_box_pack_start (GTK_BOX (vbox), tbar, FALSE, FALSE, 0); + + toolitem = gtk_separator_tool_item_new (); + gtk_tool_item_set_expand (toolitem, TRUE); + gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(toolitem), FALSE); + gtk_toolbar_insert(GTK_TOOLBAR(tbar), GTK_TOOL_ITEM(toolitem), -1); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + toolitem = gtk_tool_item_new(); + gtk_container_add (GTK_CONTAINER(toolitem), hbox); + gtk_toolbar_insert(GTK_TOOLBAR(tbar), GTK_TOOL_ITEM(toolitem), -1); + + widget = make_image_button(ICONNAME_HB_BUTTON_EXPAND, _("Expand all")); + data->BT_expand = widget; + gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); + + widget = make_image_button(ICONNAME_HB_BUTTON_COLLAPSE, _("Collapse all")); + data->BT_collapse = widget; + gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); + + g_signal_connect (G_OBJECT (data->BT_expand), "clicked", G_CALLBACK (ui_flt_hub_category_expand_all), NULL); + g_signal_connect (G_OBJECT (data->BT_collapse), "clicked", G_CALLBACK (ui_flt_hub_category_collapse_all), NULL); + + + return(hubbox); +} + + +/* = = = = = = = = = = = = = = = = */ + + static void ui_flt_manage_pay_select(GtkWidget *widget, gpointer user_data) { struct ui_flt_manage_data *data; @@ -182,71 +408,201 @@ gboolean toggle; } } -/* -** -*/ -static void ui_flt_manage_cat_select(GtkWidget *widget, gpointer user_data) + + +static gboolean +ui_flt_panel_payee_activate_link (GtkWidget *label, + const gchar *uri, + gpointer data) +{ + DB( g_print(" comboboxlink '%s' \n", uri) ); + + if (g_strcmp0 (uri, "all") == 0) + { + ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_ALL) ); + } + else + if (g_strcmp0 (uri, "non") == 0) + { + ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_NONE) ); + } + else + if (g_strcmp0 (uri, "inv") == 0) + { + ui_flt_manage_pay_select(label, GINT_TO_POINTER(BUTTON_INVERT) ); + } + + return TRUE; +} + + +static GtkWidget * +ui_flt_panel_payee_new (struct ui_flt_manage_data *data) +{ +GtkWidget *scrollwin, *hbox, *vbox, *label; + + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); + + label = make_label (_("Payees"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + + label = make_label (_("Select:"), 0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + label = make_clicklabel("all", _("All")); + data->BT_pay[BUTTON_ALL] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL); + + label = make_clicklabel("non", _("None")); + data->BT_pay[BUTTON_NONE] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL); + + label = make_clicklabel("inv", _("Invert")); + data->BT_pay[BUTTON_INVERT] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_payee_activate_link), NULL); + + scrollwin = gtk_scrolled_window_new(NULL,NULL); + gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0); + + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); + //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL); + + data->LV_pay = (GtkWidget *)ui_pay_listview_new(TRUE, FALSE); + gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_pay); + + return(vbox); +} + + + + + + + +/* = = = = = = = = = = = = = = = = */ + +static void ui_flt_manage_acc_select(GtkWidget *widget, gpointer user_data) { struct ui_flt_manage_data *data; gint select = GPOINTER_TO_INT(user_data); GtkTreeModel *model; -GtkTreeIter iter, child; +GtkTreeIter iter; gboolean valid; -gint n_child; gboolean toggle; - DB( g_print("(ui_flt_manage) pay select\n") ); + DB( g_print("(ui_flt_manage) acc select\n") ); data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat)); + model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_acc)); valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); while (valid) { switch(select) { case BUTTON_ALL: - gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1); break; case BUTTON_NONE: - gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, FALSE, -1); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, FALSE, -1); break; case BUTTON_INVERT: - gtk_tree_model_get (model, &iter, LST_DEFCAT_TOGGLE, &toggle, -1); + gtk_tree_model_get (model, &iter, LST_DEFACC_TOGGLE, &toggle, -1); toggle ^= 1; - gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, toggle, -1); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, toggle, -1); break; } + valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); + } +} - n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter); - gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter); - while(n_child > 0) - { - switch(select) - { - case BUTTON_ALL: - gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1); - break; - case BUTTON_NONE: - gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, FALSE, -1); - break; - case BUTTON_INVERT: - gtk_tree_model_get (model, &child, LST_DEFCAT_TOGGLE, &toggle, -1); - toggle ^= 1; - gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, toggle, -1); - break; - } +static gboolean +ui_flt_panel_account_activate_link (GtkWidget *label, + const gchar *uri, + gpointer data) +{ + DB( g_print(" comboboxlink '%s' \n", uri) ); + + if (g_strcmp0 (uri, "all") == 0) + { + ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_ALL) ); + } + else + if (g_strcmp0 (uri, "non") == 0) + { + ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_NONE) ); + } + else + if (g_strcmp0 (uri, "inv") == 0) + { + ui_flt_manage_acc_select(label, GINT_TO_POINTER(BUTTON_INVERT) ); + } + + return TRUE; +} + +static GtkWidget * +ui_flt_panel_account_new (struct ui_flt_manage_data *data) +{ +GtkWidget *scrollwin, *hbox, *vbox, *label; + + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); + + label = make_label (_("Accounts"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_MEDIUM); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + + label = make_label (_("Select:"), 0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + label = make_clicklabel("all", _("All")); + data->BT_acc[BUTTON_ALL] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL); + + label = make_clicklabel("non", _("None")); + data->BT_acc[BUTTON_NONE] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL); + + label = make_clicklabel("inv", _("Invert")); + data->BT_acc[BUTTON_INVERT] = label; + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + g_signal_connect (label, "activate-link", G_CALLBACK (ui_flt_panel_account_activate_link), NULL); + + scrollwin = gtk_scrolled_window_new(NULL,NULL); + gtk_box_pack_start (GTK_BOX (vbox), scrollwin, TRUE, TRUE, 0); - n_child--; - gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child); - } + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); + //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL); - valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); - } + data->LV_acc = (GtkWidget *)ui_acc_listview_new(TRUE); + gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_acc); + return(vbox); } +/* = = = = = = = = = = = = = = = = */ + + + + + + + /* ** */ @@ -284,7 +640,7 @@ gboolean sensitive; active = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_option[FILTER_TEXT])); sensitive = active == 0 ? FALSE : TRUE; gtk_widget_set_sensitive(data->CM_exact, sensitive); - gtk_widget_set_sensitive(data->ST_wording, sensitive); + gtk_widget_set_sensitive(data->ST_memo, sensitive); gtk_widget_set_sensitive(data->ST_info, sensitive); gtk_widget_set_sensitive(data->ST_tag, sensitive); @@ -347,8 +703,8 @@ gchar *txt; { GtkTreeModel *model; //GtkTreeSelection *selection; - GtkTreeIter iter, child; - gint n_child; + GtkTreeIter iter; + gboolean valid; gboolean toggled; @@ -383,19 +739,19 @@ gchar *txt; data->filter->minamount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_minamount)); data->filter->maxamount = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_maxamount)); - //text:wording + //text:memo data->filter->exact = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_exact)); //free any previous string - if( data->filter->wording ) + if( data->filter->memo ) { - g_free(data->filter->wording); - data->filter->wording = NULL; + g_free(data->filter->memo); + data->filter->memo = NULL; } - txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_wording)); + txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_memo)); if (txt && *txt) // ignore if entry is empty { - data->filter->wording = g_strdup(txt); + data->filter->memo = g_strdup(txt); } //text:info @@ -445,7 +801,7 @@ gchar *txt; -1); //data->filter->acc[i] = gtk_tree_selection_iter_is_selected(selection, &iter); - accitem->filter = toggled; + accitem->flt_select = toggled; /* Make iter point to the next row in the list store */ i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); @@ -468,7 +824,7 @@ gchar *txt; -1); //data->filter->pay[i] = gtk_tree_selection_iter_is_selected(selection, &iter); - payitem->filter = toggled; + payitem->flt_select = toggled; /* Make iter point to the next row in the list store */ i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); @@ -477,49 +833,11 @@ gchar *txt; // category DB( g_print(" category\n") ); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat)); - //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat)); - i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); - while (valid) - { - Category *catitem; - - gtk_tree_model_get (model, &iter, - LST_DEFCAT_TOGGLE, &toggled, - LST_DEFCAT_DATAS, &catitem, - -1); - - //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &iter); - //data->filter->cat[i] = toggled; - catitem->filter = toggled; - - n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter); - gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter); - while(n_child > 0) - { - i++; - - gtk_tree_model_get (model, &child, - LST_DEFCAT_TOGGLE, &toggled, - LST_DEFCAT_DATAS, &catitem, - -1); - - - //data->filter->cat[i] = toggled; - //data->filter->cat[i] = gtk_tree_selection_iter_is_selected(selection, &child); - catitem->filter = toggled; - - n_child--; - gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child); - } - - /* Make iter point to the next row in the list store */ - i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); - } + ui_flt_panel_category_get(data); // active tab - data->filter->last_tab = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook)); - DB( g_print(" page is %d\n", data->filter->last_tab) ); + g_strlcpy(data->filter->last_tab, gtk_stack_get_visible_child_name(GTK_STACK(data->stack)), 8); + DB( g_print(" page is '%s'\n", data->filter->last_tab) ); } @@ -538,9 +856,9 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data) { GtkTreeModel *model; //GtkTreeSelection *selection; - GtkTreeIter iter, child; + GtkTreeIter iter; GDate *date; - gint n_child; + gboolean valid; gint i; @@ -586,7 +904,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data) //text gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_exact), data->filter->exact); gtk_entry_set_text(GTK_ENTRY(data->ST_info), (data->filter->info != NULL) ? data->filter->info : ""); - gtk_entry_set_text(GTK_ENTRY(data->ST_wording), (data->filter->wording != NULL) ? data->filter->wording : ""); + gtk_entry_set_text(GTK_ENTRY(data->ST_memo), (data->filter->memo != NULL) ? data->filter->memo : ""); gtk_entry_set_text(GTK_ENTRY(data->ST_tag), (data->filter->tag != NULL) ? data->filter->tag : ""); //account @@ -605,7 +923,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data) LST_DEFACC_DATAS, &accitem, -1); - if(accitem->filter == TRUE) + if(accitem->flt_select == TRUE) //gtk_tree_selection_select_iter(selection, &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFACC_TOGGLE, TRUE, -1); @@ -629,7 +947,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data) LST_DEFPAY_DATAS, &payitem, -1); - if(payitem->filter == TRUE) + if(payitem->flt_select == TRUE) gtk_list_store_set (GTK_LIST_STORE (model), &iter, LST_DEFPAY_TOGGLE, TRUE, -1); /* Make iter point to the next row in the list store */ @@ -639,44 +957,7 @@ static void ui_flt_manage_set(struct ui_flt_manage_data *data) // category DB( g_print(" category\n") ); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_cat)); - //selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_cat)); - i=0; valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); - while (valid) - { - Category *catitem; - - gtk_tree_model_get (model, &iter, - LST_DEFCAT_DATAS, &catitem, - -1); - - if(catitem->filter == TRUE) - gtk_tree_store_set (GTK_TREE_STORE (model), &iter, LST_DEFCAT_TOGGLE, TRUE, -1); - - n_child = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(model), &iter); - gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &iter); - while(n_child > 0) - { - i++; - - gtk_tree_model_get (model, &child, - LST_DEFCAT_DATAS, &catitem, - -1); - - if(catitem->filter == TRUE) - gtk_tree_store_set (GTK_TREE_STORE (model), &child, LST_DEFCAT_TOGGLE, TRUE, -1); - - n_child--; - gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &child); - } - - /* Make iter point to the next row in the list store */ - i++; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); - } - - // active tab - gtk_notebook_set_current_page(GTK_NOTEBOOK(data->notebook), data->filter->last_tab); - DB( g_print(" set page %d\n", data->filter->last_tab) ); + ui_flt_panel_category_set(data); } } @@ -693,7 +974,7 @@ struct ui_flt_manage_data *data; DB( g_print("(ui_flt_manage) clear\n") ); - filter_default_all_set(data->filter); + filter_reset(data->filter); ui_flt_manage_set(data); @@ -720,7 +1001,7 @@ static void ui_flt_manage_setup(struct ui_flt_manage_data *data) { //gtk_tree_selection_set_mode(GTK_TREE_SELECTION(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_pay))), GTK_SELECTION_MULTIPLE); - ui_pay_listview_populate(data->LV_pay); + ui_pay_listview_populate(data->LV_pay, NULL); //populate_view_pay(data->LV_pay, GLOBALS->pay_list, FALSE); } @@ -734,12 +1015,14 @@ static void ui_flt_manage_setup(struct ui_flt_manage_data *data) } } -/* -** -*/ + + + + + static GtkWidget *ui_flt_manage_page_category (struct ui_flt_manage_data *data) { -GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; +GtkWidget *container, *panel, *hbox, *label; container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM); @@ -752,43 +1035,16 @@ GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; data->CY_option[FILTER_CATEGORY] = make_nainex(label); gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_CATEGORY], TRUE, TRUE, 0); - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL); - gtk_box_pack_start (GTK_BOX (container), hbox, TRUE, TRUE, 0); - - scrollwin = gtk_scrolled_window_new(NULL,NULL); - gtk_box_pack_start (GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); - //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL); - - data->LV_cat = (GtkWidget *)ui_cat_listview_new(TRUE, FALSE); - gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_cat); - - vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); - - widget = gtk_button_new_with_label(_("All")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_cat[BUTTON_ALL] = widget; - - widget = gtk_button_new_with_label(_("None")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_cat[BUTTON_NONE] = widget; - - widget = gtk_button_new_with_label(_("Invert")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_cat[BUTTON_INVERT] = widget; + panel = ui_flt_panel_category_new(data); + gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0); return(container); } -/* -** -*/ + static GtkWidget *ui_flt_manage_page_payee (struct ui_flt_manage_data *data) { -GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; +GtkWidget *container, *panel, *hbox, *label; container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM); @@ -801,33 +1057,8 @@ GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; data->CY_option[FILTER_PAYEE] = make_nainex(label); gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_PAYEE], TRUE, TRUE, 0); - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL); - gtk_box_pack_start (GTK_BOX (container), hbox, TRUE, TRUE, 0); - - scrollwin = gtk_scrolled_window_new(NULL,NULL); - gtk_box_pack_start (GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); - //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL); - - data->LV_pay = (GtkWidget *)ui_pay_listview_new(TRUE, FALSE); - gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_pay); - - vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); - - widget = gtk_button_new_with_label(_("All")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_pay[BUTTON_ALL] = widget; - - widget = gtk_button_new_with_label(_("None")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_pay[BUTTON_NONE] = widget; - - widget = gtk_button_new_with_label(_("Invert")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_pay[BUTTON_INVERT] = widget; + panel = ui_flt_panel_payee_new(data); + gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0); return(container); } @@ -837,7 +1068,7 @@ GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; */ static GtkWidget *ui_flt_manage_page_account (struct ui_flt_manage_data *data) { -GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; +GtkWidget *container, *panel, *hbox, *label; container = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); gtk_container_set_border_width (GTK_CONTAINER (container), SPACING_MEDIUM); @@ -850,33 +1081,8 @@ GtkWidget *container, *scrollwin, *hbox, *vbox, *label, *widget; data->CY_option[FILTER_ACCOUNT] = make_nainex(label); gtk_box_pack_start (GTK_BOX (hbox), data->CY_option[FILTER_ACCOUNT], TRUE, TRUE, 0); - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL); - gtk_box_pack_start (GTK_BOX (container), hbox, TRUE, TRUE, 0); - - scrollwin = gtk_scrolled_window_new(NULL,NULL); - gtk_box_pack_start (GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin), GTK_SHADOW_ETCHED_IN); - //gtk_container_set_border_width (GTK_CONTAINER(scrollwin), SPACING_SMALL); - - data->LV_acc = ui_acc_listview_new(TRUE); - gtk_container_add(GTK_CONTAINER(scrollwin), data->LV_acc); - - vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); - - widget = gtk_button_new_with_label(_("All")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_acc[BUTTON_ALL] = widget; - - widget = gtk_button_new_with_label(_("None")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_acc[BUTTON_NONE] = widget; - - widget = gtk_button_new_with_label(_("Invert")); - gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); - data->BT_acc[BUTTON_INVERT] = widget; + panel = ui_flt_panel_account_new(data); + gtk_box_pack_start (GTK_BOX (container), panel, TRUE, TRUE, 0); return(container); } @@ -933,57 +1139,51 @@ gint month, year; } - static GtkWidget *ui_flt_manage_part_date(struct ui_flt_manage_data *data) { GtkWidget *table, *label; gint row; - // filter date table = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL); gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM); gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM); row = 0; - label = make_label_group(_("Filter Date")); + label = make_label_widget(_("_Option:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); + data->CY_option[FILTER_DATE] = make_nainex(label); + gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_DATE], 2, row, 1, 1); + + row++; + label = make_label (_("Dates"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1); - row++; - label = make_label_widget(_("_Option:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->CY_option[FILTER_DATE] = make_nainex(label); - gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_DATE], 2, row, 1, 1); - - row++; - label = make_label_widget(_("_From:")); - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->PO_mindate = gtk_date_entry_new(); - //data->PO_mindate = gtk_entry_new(); - //gtk_grid_attach (GTK_GRID (table), data->PO_mindate, 1, 2, row, row+1); - gtk_grid_attach (GTK_GRID (table), data->PO_mindate, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_To:")); - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->PO_maxdate = gtk_date_entry_new(); - //data->PO_maxdate = gtk_entry_new(); - //gtk_grid_attach (GTK_GRID (table), data->PO_maxdate, 1, 2, row, row+1); - gtk_grid_attach (GTK_GRID (table), data->PO_maxdate, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_Month:")); - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->CY_month = make_cycle(label, CYA_SELECT); - gtk_grid_attach (GTK_GRID (table), data->CY_month, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_Year:")); - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->NB_year = make_year(label); - gtk_grid_attach (GTK_GRID (table), data->NB_year, 2, row, 1, 1); - + row++; + label = make_label_widget(_("_From:")); + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->PO_mindate = gtk_date_entry_new(); + gtk_grid_attach (GTK_GRID (table), data->PO_mindate, 1, row, 2, 1); + + row++; + label = make_label_widget(_("_To:")); + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->PO_maxdate = gtk_date_entry_new(); + gtk_grid_attach (GTK_GRID (table), data->PO_maxdate, 1, row, 2, 1); + + row++; + label = make_label_widget(_("_Month:")); + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->CY_month = make_cycle(label, CYA_SELECT); + gtk_grid_attach (GTK_GRID (table), data->CY_month, 1, row, 2, 1); + + row++; + label = make_label_widget(_("_Year:")); + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->NB_year = make_year(label); + gtk_grid_attach (GTK_GRID (table), data->NB_year, 1, row, 2, 1); return table; } @@ -1000,44 +1200,43 @@ gint row; gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM); row = 0; - label = make_label_group(_("Filter Text")); + label = make_label_widget(_("_Option:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); + data->CY_option[FILTER_TEXT] = make_nainex(label); + gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_TEXT], 2, row, 1, 1); + + row++; + label = make_label (_("Texts"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1); - row++; - label = make_label_widget(_("_Option:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - - //gtk_grid_attach (GTK_GRID (table), label, 0, 1, row, row+1); - data->CY_option[FILTER_TEXT] = make_nainex(label); - gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_TEXT], 2, row, 1, 1); - - row++; - data->CM_exact = gtk_check_button_new_with_mnemonic (_("Case _sensitive")); - gtk_grid_attach (GTK_GRID (table), data->CM_exact, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_Memo:")); - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->ST_wording = make_string(label); - gtk_widget_set_hexpand (data->ST_wording, TRUE); - gtk_grid_attach (GTK_GRID (table), data->ST_wording, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_Info:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->ST_info = make_string(label); - gtk_widget_set_hexpand (data->ST_info, TRUE); - gtk_grid_attach (GTK_GRID (table), data->ST_info, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_Tag:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->ST_tag = make_string(label); - gtk_widget_set_hexpand (data->ST_tag, TRUE); - gtk_grid_attach (GTK_GRID (table), data->ST_tag, 2, row, 1, 1); + row++; + label = make_label_widget(_("_Memo:")); + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->ST_memo = make_string(label); + gtk_widget_set_hexpand (data->ST_memo, TRUE); + gtk_grid_attach (GTK_GRID (table), data->ST_memo, 1, row, 2, 1); + + row++; + label = make_label_widget(_("_Info:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->ST_info = make_string(label); + gtk_widget_set_hexpand (data->ST_info, TRUE); + gtk_grid_attach (GTK_GRID (table), data->ST_info, 1, row, 2, 1); + + row++; + label = make_label_widget(_("_Tag:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->ST_tag = make_string(label); + gtk_widget_set_hexpand (data->ST_tag, TRUE); + gtk_grid_attach (GTK_GRID (table), data->ST_tag, 1, row, 2, 1); + + row++; + data->CM_exact = gtk_check_button_new_with_mnemonic (_("Case _sensitive")); + gtk_grid_attach (GTK_GRID (table), data->CM_exact, 1, row, 2, 1); return table; @@ -1048,41 +1247,35 @@ static GtkWidget *ui_flt_manage_part_amount(struct ui_flt_manage_data *data) GtkWidget *table, *label; gint row; - table = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL); gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM); gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM); - // Amount section row = 0; - - label = make_label_group(_("Filter Amount")); + label = make_label_widget(_("_Option:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); + data->CY_option[FILTER_AMOUNT] = make_nainex(label); + gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_AMOUNT], 2, row, 1, 1); + + row++; + label = make_label (_("Amounts"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1); - row++; - label = make_label_widget(_("_Option:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - - //gtk_grid_attach (GTK_GRID (table), label, 0, 1, row, row+1); - data->CY_option[FILTER_AMOUNT] = make_nainex(label); - gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_AMOUNT], 2, row, 1, 1); - - row++; - label = make_label_widget(_("_From:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->ST_minamount = make_amount(label); - gtk_grid_attach (GTK_GRID (table), data->ST_minamount, 2, row, 1, 1); - - row++; - label = make_label_widget(_("_To:")); - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->ST_maxamount = make_amount(label); - gtk_grid_attach (GTK_GRID (table), data->ST_maxamount, 2, row, 1, 1); - + row++; + label = make_label_widget(_("_From:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->ST_minamount = make_amount(label); + gtk_grid_attach (GTK_GRID (table), data->ST_minamount, 1, row, 2, 1); + row++; + label = make_label_widget(_("_To:")); + gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1); + data->ST_maxamount = make_amount(label); + gtk_grid_attach (GTK_GRID (table), data->ST_maxamount, 1, row, 2, 1); return table; } @@ -1093,26 +1286,23 @@ static GtkWidget *ui_flt_manage_part_status(struct ui_flt_manage_data *data) GtkWidget *table, *label, *vbox, *widget; gint row; - - // column 2 - - // filter status table = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL); gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM); gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM); row = 0; - label = make_label_group (_("Filter Status")); + label = make_label_widget(_("_Option:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); + data->CY_option[FILTER_STATUS] = make_nainex(label); + gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_STATUS], 2, row, 1, 1); + + row++; + label = make_label (_("Statuses"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1); - row++; - label = make_label_widget(_("_Option:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - - data->CY_option[FILTER_STATUS] = make_nainex(label); - gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_STATUS], 2, row, 1, 1); row++; vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); @@ -1128,9 +1318,11 @@ gint row; row++; label = make_label_widget(_("Force:")); + data->LB_force = label; gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + data->GR_force = vbox; gtk_grid_attach (GTK_GRID (table), vbox, 2, row, 1, 1); widget = gtk_check_button_new_with_mnemonic (_("display 'Added'")); @@ -1154,114 +1346,59 @@ static GtkWidget *ui_flt_manage_part_paymode(struct ui_flt_manage_data *data) GtkWidget *table, *label, *table1, *image; gint i, row; - // Filter Payment table = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL); gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM); gtk_container_set_border_width(GTK_CONTAINER(table), SPACING_MEDIUM); - row = 0; - label = make_label_group(_("Filter Payment")); + label = make_label_widget(_("_Option:")); + //----------------------------------------- l, r, t, b + gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); + data->CY_option[FILTER_PAYMODE] = make_nainex(label); + gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_PAYMODE], 2, row, 1, 1); + + row++; + label = make_label (_("Payments"), 0, 0); + gimp_label_set_attributes (GTK_LABEL (label), PANGO_ATTR_SCALE, PANGO_SCALE_LARGE, -1); gtk_grid_attach (GTK_GRID (table), label, 0, row, 3, 1); + row++; + table1 = gtk_grid_new (); + gtk_grid_set_row_spacing (GTK_GRID (table1), SPACING_SMALL); + gtk_grid_set_column_spacing (GTK_GRID (table1), SPACING_SMALL); + gtk_grid_attach (GTK_GRID (table), table1, 1, row, 2, 1); - row++; - label = make_label_widget(_("_Option:")); - //----------------------------------------- l, r, t, b - gtk_grid_attach (GTK_GRID (table), label, 1, row, 1, 1); - data->CY_option[FILTER_PAYMODE] = make_nainex(label); - gtk_grid_attach (GTK_GRID (table), data->CY_option[FILTER_PAYMODE], 2, row, 1, 1); - - table1 = gtk_grid_new (); - gtk_grid_set_row_spacing (GTK_GRID (table1), 0); - gtk_grid_set_column_spacing (GTK_GRID (table1), 2); - - row++; - gtk_grid_attach (GTK_GRID (table), table1, 2, row, 1, 1); - - for(i=0;iCM_paymode[i] = gtk_check_button_new(); - gtk_grid_attach (GTK_GRID (table1), data->CM_paymode[i], 0, row, 1, 1); - - image = gtk_image_new_from_icon_name( get_paymode_icon_name(i), GTK_ICON_SIZE_MENU); - gtk_grid_attach (GTK_GRID (table1), image, 1, row, 1, 1); - - label = make_label(_(paymode_label_names[i]), 0.0, 0.5); - gtk_grid_attach (GTK_GRID (table1), label, 2, row, 1, 1); - - } + for(i=0;iCM_paymode[i] = gtk_check_button_new_with_mnemonic(_(paymode_label_names[i])); + gtk_grid_attach (GTK_GRID (table1), data->CM_paymode[i], 1, row, 1, 1); + } return table; } -/* -** general page: date, amount, status, payment -*/ -/* -static GtkWidget *ui_flt_manage_page_general (struct ui_flt_manage_data *data) -{ -GtkWidget *container, *part; - - //container = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL); - // gtk_alignment_new(xalign, yalign, xscale, yscale) - //gtk_container_set_border_width(GTK_CONTAINER(container), SPACING_SMALL); - - container = gtk_grid_new (2, 3, FALSE); - gtk_grid_set_row_spacing (GTK_GRID (container), SPACING_SMALL*2); - gtk_grid_set_column_spacing (GTK_GRID (container), SPACING_MEDIUM*2); - gtk_container_set_border_width(GTK_CONTAINER(container), SPACING_SMALL); - - // date: r=1, c=1 - part = ui_flt_manage_part_date(data); - gtk_grid_attach(GTK_GRID (container), part, 0, 1, 0, 1); - - // amount: r=2, c=2 - part = ui_flt_manage_part_amount(data); - gtk_grid_attach (GTK_GRID (container), part, 0, 1, 1, 2); - - // paymode: - part = ui_flt_manage_part_paymode(data); - gtk_grid_attach (GTK_GRID (container), part, 1, 2, 0, 2); - - // status: r=2, c=1 - part = ui_flt_manage_part_status(data); - gtk_grid_attach (GTK_GRID (container), part, 2, 3, 0, 1); - - // text: r=2, c=1 - part = ui_flt_manage_part_text(data); - gtk_grid_attach (GTK_GRID (container), part, 2, 3, 1, 2); - - gtk_container_set_border_width(GTK_CONTAINER(container), SPACING_SMALL); - - return(container); -} -*/ - - - /* ** */ -gint ui_flt_manage_dialog_new(GtkWidget *widget, Filter *filter, gboolean show_account) +gint ui_flt_manage_dialog_new(GtkWindow *parentwindow, Filter *filter, gboolean show_account, gboolean txnmode) { struct ui_flt_manage_data data; -GtkWidget *parentwindow, *window, *content, *mainbox, *notebook, *label, *page; +GtkWidget *window, *content, *mainbox, *box, *sidebar, *stack, *page; +//gint w, h; //data = g_malloc0(sizeof(struct ui_flt_manage_data)); //if(!data) return NULL; - memset(&data, 0, sizeof(data)); + memset(&data, 0, sizeof(struct ui_flt_manage_data)); data.filter = filter; - parentwindow = gtk_widget_get_ancestor(GTK_WIDGET(widget), GTK_TYPE_WINDOW); - window = gtk_dialog_new_with_buttons (_("Edit filter"), GTK_WINDOW (parentwindow), 0, @@ -1275,9 +1412,14 @@ GtkWidget *parentwindow, *window, *content, *mainbox, *notebook, *label, *page; gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_FILTER); + //set a nice dialog size + //gtk_window_get_size(GTK_WINDOW(parentwindow), &w, &h); + //gtk_window_set_default_size (GTK_WINDOW(window), -1, 0.8*h); + + //store our window private data g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data); - DB( g_print("(ui_flt_manage) window=%x, inst_data=%x\n", (guint)window, (guint)&data) ); + DB( g_print("(ui_flt_manage) window=%p, inst_data=%p\n", window, &data) ); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); @@ -1285,13 +1427,21 @@ GtkWidget *parentwindow, *window, *content, *mainbox, *notebook, *label, *page; content = gtk_dialog_get_content_area(GTK_DIALOG (window)); mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, SPACING_SMALL); gtk_box_pack_start (GTK_BOX (content), mainbox, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM); + //gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_pack_start (GTK_BOX (mainbox), box, TRUE, TRUE, 0); + + sidebar = gtk_stack_sidebar_new (); + gtk_box_pack_start (GTK_BOX (box), sidebar, FALSE, FALSE, 0); + + + stack = gtk_stack_new (); + gtk_stack_set_transition_type (GTK_STACK (stack), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN); + gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar), GTK_STACK (stack)); + data.stack = stack; + gtk_box_pack_start (GTK_BOX (box), stack, TRUE, TRUE, 0); - notebook = gtk_notebook_new(); - gtk_notebook_set_tab_pos(GTK_NOTEBOOK (notebook), GTK_POS_LEFT); - gtk_box_pack_start (GTK_BOX (mainbox), notebook, TRUE, TRUE, 0); - data.notebook = notebook; //common (date + status + amount) /* label = gtk_label_new(_("General")); @@ -1299,48 +1449,40 @@ GtkWidget *parentwindow, *window, *content, *mainbox, *notebook, *label, *page; gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); */ - label = gtk_label_new(_("Date")); page = ui_flt_manage_part_date(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "dat", _("Dates")); - label = gtk_label_new(_("Status")); page = ui_flt_manage_part_status(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "sta", _("Statuses")); - label = gtk_label_new(_("Payment")); page = ui_flt_manage_part_paymode(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "pmt", _("Payments")); - label = gtk_label_new(_("Amount")); page = ui_flt_manage_part_amount(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "amt", _("Amounts")); - label = gtk_label_new(_("Text")); page = ui_flt_manage_part_text(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "txt", _("Texts")); - label = gtk_label_new(_("Category")); page = ui_flt_manage_page_category(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "cat", _("Categories")); - label = gtk_label_new(_("Payee")); page = ui_flt_manage_page_payee(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "pay", _("Payees")); data.show_account = show_account; if(show_account == TRUE) { - label = gtk_label_new(_("Account")); page = ui_flt_manage_page_account(&data); - gtk_widget_show(GTK_WIDGET(page)); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label); + //gtk_widget_show(GTK_WIDGET(page)); + gtk_stack_add_titled (GTK_STACK (stack), page, "acc", _("Accounts")); } //setup, init and show window @@ -1348,7 +1490,6 @@ GtkWidget *parentwindow, *window, *content, *mainbox, *notebook, *label, *page; ui_flt_manage_set(&data); ui_flt_manage_option_update(window, NULL); - /* signal connect */ g_signal_connect (data.CY_option[FILTER_STATUS] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL); @@ -1364,24 +1505,24 @@ GtkWidget *parentwindow, *window, *content, *mainbox, *notebook, *label, *page; { g_signal_connect (data.CY_option[FILTER_ACCOUNT] , "changed", G_CALLBACK (ui_flt_manage_option_update), NULL); - g_signal_connect (data.BT_acc[BUTTON_ALL] , "clicked", G_CALLBACK (ui_flt_manage_acc_select), GINT_TO_POINTER(BUTTON_ALL)); - g_signal_connect (data.BT_acc[BUTTON_NONE] , "clicked", G_CALLBACK (ui_flt_manage_acc_select), GINT_TO_POINTER(BUTTON_NONE)); - g_signal_connect (data.BT_acc[BUTTON_INVERT], "clicked", G_CALLBACK (ui_flt_manage_acc_select), GINT_TO_POINTER(BUTTON_INVERT)); } g_signal_connect (data.CY_month, "changed", G_CALLBACK (ui_flt_manage_period_change), NULL); g_signal_connect (data.NB_year, "value-changed", G_CALLBACK (ui_flt_manage_period_change), NULL); - g_signal_connect (data.BT_pay[BUTTON_ALL] , "clicked", G_CALLBACK (ui_flt_manage_pay_select), GINT_TO_POINTER(BUTTON_ALL)); - g_signal_connect (data.BT_pay[BUTTON_NONE] , "clicked", G_CALLBACK (ui_flt_manage_pay_select), GINT_TO_POINTER(BUTTON_NONE)); - g_signal_connect (data.BT_pay[BUTTON_INVERT], "clicked", G_CALLBACK (ui_flt_manage_pay_select), GINT_TO_POINTER(BUTTON_INVERT)); - g_signal_connect (data.BT_cat[BUTTON_ALL] , "clicked", G_CALLBACK (ui_flt_manage_cat_select), GINT_TO_POINTER(BUTTON_ALL)); - g_signal_connect (data.BT_cat[BUTTON_NONE] , "clicked", G_CALLBACK (ui_flt_manage_cat_select), GINT_TO_POINTER(BUTTON_NONE)); - g_signal_connect (data.BT_cat[BUTTON_INVERT], "clicked", G_CALLBACK (ui_flt_manage_cat_select), GINT_TO_POINTER(BUTTON_INVERT)); + gtk_widget_show_all (window); + + if(!txnmode) + { + hb_widget_visible (data.LB_force, FALSE); + hb_widget_visible (data.GR_force, FALSE); + } - gtk_widget_show_all (window); + if( *data.filter->last_tab != '\0' ) + gtk_stack_set_visible_child_name (GTK_STACK(data.stack), data.filter->last_tab); + DB( g_print(" set page '%s'\n", data.filter->last_tab) ); //wait for the user