X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fhomebank;a=blobdiff_plain;f=src%2Fui-assign.c;fp=src%2Fui-assign.c;h=d592c295af46bebc32139f074f148e865a23dc3d;hp=d462d88e00ab8694415d3a6831300fa35fb3733b;hb=59c5e08a64798d4303ae7eb3a2713bc93d98fa7b;hpb=8988b3bef0760b4cab8144715cc3d8f55688861c diff --git a/src/ui-assign.c b/src/ui-assign.c index d462d88..d592c29 100644 --- a/src/ui-assign.c +++ b/src/ui-assign.c @@ -1,5 +1,5 @@ /* HomeBank -- Free, easy, personal ruleing for everyone. - * Copyright (C) 1995-2014 Maxime DOYEN + * Copyright (C) 1995-2016 Maxime DOYEN * * This file is part of HomeBank. * @@ -79,7 +79,7 @@ Assign *entry1, *entry2; gtk_tree_model_get(model, a, LST_DEFASG_DATAS, &entry1, -1); gtk_tree_model_get(model, b, LST_DEFASG_DATAS, &entry2, -1); - return hb_string_utf8_compare(entry1->name, entry2->name); + return hb_string_utf8_compare(entry1->text, entry2->text); } static void @@ -96,10 +96,10 @@ gchar *string; #endif gtk_tree_model_get(model, iter, LST_DEFASG_DATAS, &entry, -1); - if(entry->name == NULL) + if(entry->text == NULL) name = _("(none)"); // can never occurs also else - name = entry->name; + name = entry->text; #if MYDEBUG string = g_strdup_printf ("[%d] %s", entry->key, name ); @@ -126,7 +126,7 @@ gchar *string; void ui_asg_listview_add(GtkTreeView *treeview, Assign *item) { - if( item->name != NULL ) + if( item->text != NULL ) { GtkTreeModel *model; GtkTreeIter iter; @@ -242,8 +242,6 @@ GtkTreeViewColumn *column; treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); g_object_unref(store); - //gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE); - // column 1: toggle if( withtoggle == TRUE ) { @@ -261,13 +259,21 @@ GtkTreeViewColumn *column; // column 2: name renderer = gtk_cell_renderer_text_new (); + g_object_set(renderer, + "ellipsize", PANGO_ELLIPSIZE_END, + "ellipsize-set", TRUE, + NULL); + column = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(column, _("Text")); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func(column, renderer, ui_asg_listview_name_cell_data_function, GINT_TO_POINTER(LST_DEFASG_DATAS), NULL); + gtk_tree_view_column_set_alignment (column, 0.5); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); // treeviewattribute - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(treeview), FALSE); + //gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(treeview), FALSE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW(treeview), TRUE); gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(store), ui_asg_listview_compare_func, NULL, NULL); @@ -281,13 +287,13 @@ GtkTreeViewColumn *column; static gboolean assign_rename(Assign *item, gchar *newname) { -Account *existitem; +Assign *existitem; - existitem = da_acc_get_by_name(newname); + existitem = da_asg_get_by_name(newname); if( existitem == NULL ) { - g_free(item->name); - item->name = g_strdup(newname); + g_free(item->text); + item->text = g_strdup(newname); return TRUE; } @@ -298,8 +304,6 @@ Account *existitem; static void ui_asg_manage_getlast(struct ui_asg_manage_data *data) { -gchar *txt; -gboolean bool; Assign *item; gint active; @@ -314,7 +318,7 @@ gint active; item->field = radio_get_active(GTK_CONTAINER(data->CY_field)); - txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_text)); + /*txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_text)); if (txt && *txt) { bool = assign_rename(item, txt); @@ -324,23 +328,36 @@ gint active; } else { - gtk_entry_set_text(GTK_ENTRY(data->ST_text), item->name); + gtk_entry_set_text(GTK_ENTRY(data->ST_text), item->text); } - } + }*/ item->flags = 0; - - active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_exact)); + + active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_exact)); if(active == 1) item->flags |= ASGF_EXACT; - active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_pay)); - if(active == 1) item->flags |= ASGF_DOPAY; + active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_re)); + if(active == 1) item->flags |= ASGF_REGEX; - active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cat)); + active = radio_get_active (GTK_CONTAINER(data->RA_pay)); + if(active == 1) item->flags |= ASGF_DOPAY; + else + if(active == 2) item->flags |= ASGF_OVWPAY; + + active = radio_get_active (GTK_CONTAINER(data->RA_cat)); if(active == 1) item->flags |= ASGF_DOCAT; + else + if(active == 2) item->flags |= ASGF_OVWCAT; + + active = radio_get_active (GTK_CONTAINER(data->RA_mod)); + if(active == 1) item->flags |= ASGF_DOMOD; + else + if(active == 2) item->flags |= ASGF_OVWMOD; item->kcat = ui_cat_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data->PO_cat)); item->kpay = ui_pay_comboboxentry_get_key_add_new(GTK_COMBO_BOX(data->PO_pay)); + item->paymode = gtk_combo_box_get_active(GTK_COMBO_BOX(data->NU_mod)); } @@ -358,6 +375,7 @@ GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; Assign *item; +gint active; DB( g_print("\n(ui_asg_manage_set)\n") ); @@ -373,16 +391,28 @@ Assign *item; radio_set_active(GTK_CONTAINER(data->CY_field), item->field); - gtk_entry_set_text(GTK_ENTRY(data->ST_text), item->name); + gtk_entry_set_text(GTK_ENTRY(data->ST_text), item->text); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_exact), (item->flags & ASGF_EXACT) ? 1 : 0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_re), (item->flags & ASGF_REGEX) ? 1 : 0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_cat), (item->flags & ASGF_DOCAT) ? 1 : 0); - ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_cat), item->kcat); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_pay), (item->flags & ASGF_DOPAY) ? 1 : 0); + active = 0; + if(item->flags & ASGF_DOPAY) active = 1; + else if(item->flags & ASGF_OVWPAY) active = 2; + radio_set_active(GTK_CONTAINER(data->RA_pay), active); ui_pay_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_pay), item->kpay); + active = 0; + if(item->flags & ASGF_DOCAT) active = 1; + else if(item->flags & ASGF_OVWCAT) active = 2; + radio_set_active(GTK_CONTAINER(data->RA_cat), active); + ui_cat_comboboxentry_set_active(GTK_COMBO_BOX(data->PO_cat), item->kcat); + + active = 0; + if(item->flags & ASGF_DOMOD) active = 1; + else if(item->flags & ASGF_OVWMOD) active = 2; + radio_set_active(GTK_CONTAINER(data->RA_mod), active); + gtk_combo_box_set_active(GTK_COMBO_BOX(data->NU_mod), item->paymode); } @@ -399,20 +429,23 @@ static gboolean ui_asg_manage_focus_out(GtkWidget *widget, GdkEventFocus *event, static void ui_asg_manage_update_assignments(GtkWidget *widget, gpointer user_data) { struct ui_asg_manage_data *data; -gboolean active; +gboolean sensitive; DB( g_print("\n(ui_asg_manage_update_assignments)\n") ); data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); - active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_pay)); - gtk_widget_set_sensitive(data->PO_pay, active); + sensitive = (radio_get_active (GTK_CONTAINER(data->RA_pay)) > 0) ? TRUE : FALSE; + gtk_widget_set_sensitive(data->LB_pay, sensitive); + gtk_widget_set_sensitive(data->PO_pay, sensitive); - active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_cat)); - gtk_widget_set_sensitive(data->PO_cat, active); + sensitive = (radio_get_active (GTK_CONTAINER(data->RA_cat)) > 0) ? TRUE : FALSE; + gtk_widget_set_sensitive(data->LB_cat, sensitive); + gtk_widget_set_sensitive(data->PO_cat, sensitive); - //active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_mod)); - //gtk_widget_set_sensitive(data->NU_mod, active); + sensitive = (radio_get_active (GTK_CONTAINER(data->RA_mod)) > 0) ? TRUE : FALSE; + gtk_widget_set_sensitive(data->LB_mod, sensitive); + gtk_widget_set_sensitive(data->NU_mod, sensitive); } @@ -426,7 +459,6 @@ GtkTreeModel *model; GtkTreeIter iter; gboolean selected, sensitive; guint32 key; -//todo: for stock assign //gboolean is_new; DB( g_print("\n(ui_asg_manage_update)\n") ); @@ -443,16 +475,10 @@ guint32 key; sensitive = (selected == TRUE) ? TRUE : FALSE; - gtk_widget_set_sensitive(data->CY_field, sensitive); - gtk_widget_set_sensitive(data->ST_text, sensitive); - gtk_widget_set_sensitive(data->CM_exact, sensitive); - - gtk_widget_set_sensitive(data->CM_pay, sensitive); - gtk_widget_set_sensitive(data->CM_cat, sensitive); - - gtk_widget_set_sensitive(data->PO_pay, sensitive); - gtk_widget_set_sensitive(data->PO_cat, sensitive); - + gtk_widget_set_sensitive(data->GR_condition, sensitive); + gtk_widget_set_sensitive(data->GR_pay, sensitive); + gtk_widget_set_sensitive(data->GR_cat, sensitive); + gtk_widget_set_sensitive(data->GR_mod, sensitive); //sensitive = (data->action == 0) ? TRUE : FALSE; //gtk_widget_set_sensitive(data->LV_rul, sensitive); @@ -491,7 +517,7 @@ Assign *item; DB( g_print("\n(ui_asg_manage_add) (data=%x)\n", (guint)data) ); item = da_asg_malloc(); - item->name = g_strdup_printf( _("(assignment %d)"), da_asg_length()+1); + item->text = g_strdup_printf( _("(assignment %d)"), da_asg_length()+1); da_asg_append(item); ui_asg_listview_add(GTK_TREE_VIEW(data->LV_rul), item); @@ -500,22 +526,39 @@ Assign *item; } /* -** remove the selected assign to our treeview and temp GList +** delete the selected assign to our treeview and temp GList */ -static void ui_asg_manage_remove(GtkWidget *widget, gpointer user_data) +static void ui_asg_manage_delete(GtkWidget *widget, gpointer user_data) { struct ui_asg_manage_data *data; guint32 key; -gboolean do_remove; +gint result; data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); DB( g_print("\n(ui_asg_manage_remove) (data=%x)\n", (guint)data) ); - do_remove = TRUE; key = ui_asg_listview_get_selected_key(GTK_TREE_VIEW(data->LV_rul)); if( key > 0 ) { - if( do_remove ) + Assign *item = da_asg_get(key); + gchar *title = NULL; + gchar *secondtext; + + title = g_strdup_printf ( + _("Are you sure you want to permanently delete '%s'?"), item->text); + + secondtext = _("If you delete an assignment, it will be permanently lost."); + + result = ui_dialog_msg_confirm_alert( + GTK_WINDOW(data->window), + title, + secondtext, + _("_Delete") + ); + + g_free(title); + + if( result == GTK_RESPONSE_OK ) { da_asg_remove(key); ui_asg_listview_remove_selected(GTK_TREE_VIEW(data->LV_rul)); @@ -531,33 +574,45 @@ static void ui_asg_manage_rename(GtkWidget *widget, gpointer user_data) { struct ui_asg_manage_data *data; guint32 key; -gboolean ok; +gboolean error; gchar *txt; data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data"); DB( g_print("\n(ui_asg_manage_rename) (data=%x)\n", (guint)data) ); + error = FALSE; + key = ui_asg_listview_get_selected_key(GTK_TREE_VIEW(data->LV_rul)); if( key > 0 ) { - Assign *item = da_asg_get(key); + Assign *item = da_asg_get(key); + txt = (gchar *)gtk_entry_get_text(GTK_ENTRY(data->ST_text)); - if (txt && *txt) + if( txt == NULL || *txt == '\0' ) + { + error = TRUE; + goto end; + } + + if( strcmp(txt, item->text) ) { - ok = assign_rename(item, txt); - if(ok) + if( assign_rename(item, txt) == TRUE ) { + //todo: review this count + data->change++; gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_rul)); } - + else + error = TRUE; } - - data->change++; } -} - +end: + gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET(data->ST_text)), GTK_STYLE_CLASS_ERROR); + if( error == TRUE ) + gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(data->ST_text)), GTK_STYLE_CLASS_ERROR); +} /* @@ -600,7 +655,7 @@ gboolean doupdate = FALSE; LST_DEFASG_DATAS, &item, -1); - DB( g_print(" -> check rul %d, pos is %d, %s\n", i, item->pos, item->name) ); + DB( g_print(" -> check rul %d, pos is %d, %s\n", i, item->pos, item->text) ); if(item->pos != i) data->change++; @@ -637,6 +692,15 @@ static void ui_asg_manage_setup(struct ui_asg_manage_data *data) ui_cat_comboboxentry_populate(GTK_COMBO_BOX(data->PO_cat), GLOBALS->h_cat); } +static gchar *CYA_ASG_ACTION[] = { + N_("Disabled"), + N_("If empty"), + N_("Overwrite"), + NULL +}; + + + /* ** */ @@ -644,47 +708,49 @@ GtkWidget *ui_asg_manage_dialog (void) { struct ui_asg_manage_data data; GtkWidget *window, *content, *mainbox; +GtkWidget *content_grid, *group_grid; GtkWidget *table, *label, *entry1; GtkWidget *scrollwin; -GtkWidget *hpaned; -GtkWidget *alignment, *widget; -gint row; +GtkWidget *widget, *hpaned; +gint w, h, crow, row; window = gtk_dialog_new_with_buttons (_("Manage Assignments"), GTK_WINDOW(GLOBALS->mainwindow), 0, - GTK_STOCK_CLOSE, + _("_Close"), GTK_RESPONSE_ACCEPT, NULL); data.window = window; //set the window icon - //homebank_window_set_icon_from_file(GTK_WINDOW (window), "assign.svg"); - gtk_window_set_icon_name(GTK_WINDOW (window), HB_STOCK_ASSIGN); + gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_ASSIGN); //set a nice dialog size - //gint w, h; - //gtk_window_get_size(GTK_WINDOW(GLOBALS->mainwindow), &w, &h); - //gtk_window_set_default_size (GTK_WINDOW(window), w/PHI, h/PHI); + gtk_window_get_size(GTK_WINDOW(GLOBALS->mainwindow), &w, &h); + gtk_window_set_default_size (GTK_WINDOW(window), -1, h/PHI); //store our window private data g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data); DB( g_print("(ui_asg_manage_) window=%x, inst_data=%x\n", (guint)window, (guint)&data) ); //window contents - content = gtk_dialog_get_content_area(GTK_DIALOG (window)); - mainbox = gtk_hbox_new (FALSE, HB_BOX_SPACING); + content = gtk_dialog_get_content_area(GTK_DIALOG (window)); // return a vbox + + + mainbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL); gtk_box_pack_start (GTK_BOX (content), mainbox, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER(mainbox), HB_MAINBOX_SPACING); + gtk_container_set_border_width (GTK_CONTAINER(mainbox), SPACING_MEDIUM); - hpaned = gtk_hpaned_new(); + hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (mainbox), hpaned, TRUE, TRUE, 0); /* left area */ - table = gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING); - gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING); + 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_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0); + gtk_widget_set_margin_right(table, SPACING_SMALL); gtk_paned_pack1 (GTK_PANED(hpaned), table, FALSE, FALSE); row = 0; @@ -694,89 +760,154 @@ gint row; data.LV_rul = ui_asg_listview_new(FALSE); gtk_widget_set_size_request(data.LV_rul, HB_MINWIDTH_LIST, -1); gtk_container_add(GTK_CONTAINER(scrollwin), data.LV_rul); - gtk_table_attach_defaults (GTK_TABLE (table), scrollwin, 0, 2, row, row+1); + gtk_widget_set_vexpand (scrollwin, TRUE); + gtk_widget_set_hexpand (scrollwin, TRUE); + gtk_grid_attach (GTK_GRID(table), scrollwin, 0, row, 2, 1); - // tools buttons row++; - widget = gtk_button_new_from_stock(GTK_STOCK_ADD); + widget = gtk_button_new_with_mnemonic(_("_Add")); data.BT_add = widget; - gtk_table_attach (GTK_TABLE (table), widget, 0, 1, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); - widget = gtk_button_new_from_stock(GTK_STOCK_REMOVE); + gtk_grid_attach (GTK_GRID(table), widget, 0, row, 1, 1); + + widget = gtk_button_new_with_mnemonic(_("_Delete")); data.BT_rem = widget; - gtk_table_attach (GTK_TABLE (table), widget, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); + gtk_grid_attach (GTK_GRID(table), widget, 1, row, 1, 1); /* right area */ - table = gtk_table_new (12, 4, FALSE); - //gtk_container_set_border_width (GTK_CONTAINER (table), SP_BORDER); - gtk_table_set_row_spacings (GTK_TABLE (table), HB_TABROW_SPACING); - gtk_table_set_col_spacings (GTK_TABLE (table), HB_TABCOL_SPACING); - - // gtk_alignment_new(xalign, yalign, xscale, yscale) - alignment = gtk_alignment_new(0.5, 0.0, 1.0, 0.0); - gtk_container_add(GTK_CONTAINER(alignment), table); - //gtk_box_pack_start (GTK_BOX (mainbox), alignment, TRUE, TRUE, 0); - gtk_paned_pack2 (GTK_PANED(hpaned), alignment, FALSE, FALSE); + content_grid = gtk_grid_new(); + gtk_grid_set_row_spacing (GTK_GRID (content_grid), SPACING_LARGE); + gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL); + //gtk_container_set_border_width (GTK_CONTAINER(content_grid), SPACING_MEDIUM); + gtk_widget_set_margin_left(content_grid, SPACING_SMALL); + gtk_paned_pack2 (GTK_PANED(hpaned), content_grid, FALSE, FALSE); + + // group :: Condition + crow = 0; + group_grid = gtk_grid_new (); + data.GR_condition = group_grid; + gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL); + gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM); + gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow, 1, 1); row = 0; - label = make_label(_("Condition"), 0.0, 0.5); - gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1); - gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, row, row+1); - + label = make_label_group(_("Condition")); + gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 3, 1); + row++; - label = make_label(_("_Field:"), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); - widget = make_radio(label, CYA_ASG_FIELD, GTK_ORIENTATION_VERTICAL); + label = make_label_widget(_("Search _in:")); + gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1); + widget = make_radio(CYA_ASG_FIELD, FALSE, GTK_ORIENTATION_HORIZONTAL); data.CY_field = widget; - gtk_table_attach (GTK_TABLE (table), widget, 2, 4, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1); row++; - label = make_label(_("Con_tains:"), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); + //label = make_label_widget(_("Con_tains:")); + label = make_label_widget(_("Fi_nd:")); + gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1); entry1 = make_string(label); data.ST_text = entry1; - gtk_table_attach (GTK_TABLE (table), entry1, 2, 4, row, row+1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); + gtk_widget_set_hexpand(entry1, TRUE); + gtk_grid_attach (GTK_GRID (group_grid), entry1, 2, row, 2, 1); row++; - widget = gtk_check_button_new_with_mnemonic (_("Case _sensitive")); + widget = gtk_check_button_new_with_mnemonic (_("Match _case")); data.CM_exact = widget; - gtk_table_attach (GTK_TABLE (table), widget, 1, 4, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1); + + row++; + widget = gtk_check_button_new_with_mnemonic (_("Use _regular expressions")); + data.CM_re = widget; + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1); + + // Assignments + + // group :: Assign payee + crow++; + group_grid = gtk_grid_new (); + data.GR_pay = group_grid; + gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL); + gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM); + gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow, 1, 1); + + row = 0; + label = make_label_group(_("Assign payee")); + gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 3, 1); + + row++; + widget = make_radio(CYA_ASG_ACTION, FALSE, GTK_ORIENTATION_HORIZONTAL); + data.RA_pay = widget; + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1); + + row++; + label = make_label_widget (_("_Payee:")); + data.LB_pay = label; + gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1); + + widget = ui_pay_comboboxentry_new(label); + data.PO_pay = widget; + gtk_widget_set_hexpand(widget, TRUE); + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1); + + + //gtk_widget_set_tooltip_text(widget, _("Autocompletion and direct seizure\nis available for Payee")); + + crow++; + group_grid = gtk_grid_new (); + data.GR_cat = group_grid; + gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL); + gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM); + gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow, 1, 1); + + row = 0; + label = make_label_group(_("Assign category")); + gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 3, 1); - - //other row++; - label = make_label(NULL, 0.0, 0.5); - gtk_label_set_markup (GTK_LABEL(label), _("Assignments")); - gimp_label_set_attributes(GTK_LABEL(label), PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, -1); - gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 4, row, row+1); + widget = make_radio(CYA_ASG_ACTION, FALSE, GTK_ORIENTATION_HORIZONTAL); + data.RA_cat = widget; + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1); row++; - label = gtk_label_new_with_mnemonic (_("_Category:")); - gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); - widget = gtk_check_button_new(); - data.CM_cat = widget; - gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); + label = make_label_widget (_("_Category:")); + data.LB_cat = label; + gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1); + widget = ui_cat_comboboxentry_new(label); data.PO_cat = widget; - gtk_table_attach (GTK_TABLE (table), widget, 3, 4, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); + gtk_widget_set_hexpand(widget, TRUE); + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1); - gtk_widget_set_tooltip_text(widget, _("Autocompletion and direct seizure\nis available for Category")); + //gtk_widget_set_tooltip_text(widget, _("Autocompletion and direct seizure\nis available for Category")); + + crow++; + group_grid = gtk_grid_new (); + data.GR_mod = group_grid; + gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL); + gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM); + gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow, 1, 1); + + row = 0; + label = make_label_group(_("Assign payment")); + gtk_grid_attach (GTK_GRID (group_grid), label, 0, row, 3, 1); - row++; - label = gtk_label_new_with_mnemonic (_("_Payee:")); - gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 1, 2, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); - widget = gtk_check_button_new(); - data.CM_pay = widget; - gtk_table_attach (GTK_TABLE (table), widget, 2, 3, row, row+1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); - widget = ui_pay_comboboxentry_new(label); - data.PO_pay = widget; - gtk_table_attach_defaults (GTK_TABLE (table), widget, 3, 4, row, row+1); + widget = make_radio(CYA_ASG_ACTION, FALSE, GTK_ORIENTATION_HORIZONTAL); + data.RA_mod = widget; + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1); + + row++; + label = make_label_widget (_("Pay_ment:")); + data.LB_mod = label; + gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1); - gtk_widget_set_tooltip_text(widget, _("Autocompletion and direct seizure\nis available for Payee")); + widget = make_paymode_nointxfer (label); + data.NU_mod = widget; + gtk_widget_set_hexpand(widget, TRUE); + gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1); + //ugly hack + //gtk_widget_set_tooltip_text(widget, _("Internal transfer unsupported\nin auto assignments")); //connect all our signals @@ -786,11 +917,20 @@ gint row; g_signal_connect (G_OBJECT (data.ST_text), "changed", G_CALLBACK (ui_asg_manage_rename), NULL); - g_signal_connect (G_OBJECT (data.CM_cat), "toggled", G_CALLBACK (ui_asg_manage_update_assignments), NULL); - g_signal_connect (G_OBJECT (data.CM_pay), "toggled", G_CALLBACK (ui_asg_manage_update_assignments), NULL); + widget = radio_get_nth_widget(GTK_CONTAINER(data.RA_pay), 0); + if(widget) + g_signal_connect (widget, "toggled", G_CALLBACK (ui_asg_manage_update_assignments), NULL); + + widget = radio_get_nth_widget(GTK_CONTAINER(data.RA_cat), 0); + if(widget) + g_signal_connect (widget, "toggled", G_CALLBACK (ui_asg_manage_update_assignments), NULL); + + widget = radio_get_nth_widget(GTK_CONTAINER(data.RA_mod), 0); + if(widget) + g_signal_connect (widget, "toggled", G_CALLBACK (ui_asg_manage_update_assignments), NULL); g_signal_connect (G_OBJECT (data.BT_add), "clicked", G_CALLBACK (ui_asg_manage_add), NULL); - g_signal_connect (G_OBJECT (data.BT_rem), "clicked", G_CALLBACK (ui_asg_manage_remove), NULL); + g_signal_connect (G_OBJECT (data.BT_rem), "clicked", G_CALLBACK (ui_asg_manage_delete), NULL); //setup, init and show window ui_asg_manage_setup(&data);