]> Dogcows Code - chaz/homebank/blobdiff - src/ui-assign.c
Merge branch 'upstream'
[chaz/homebank] / src / ui-assign.c
index d462d88e00ab8694415d3a6831300fa35fb3733b..d592c295af46bebc32139f074f148e865a23dc3d 100644 (file)
@@ -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);
This page took 0.034211 seconds and 4 git commands to generate.