mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-20 11:48:30 -06:00
[import-main-matcher] further refinement to edit multiple rows
but is only enabled iff the desc/notes/memo to be renamed are identical.
This commit is contained in:
parent
892b80f685
commit
fac0cde7a2
@ -894,6 +894,30 @@ typedef enum
|
|||||||
NOTES,
|
NOTES,
|
||||||
} edit_field;
|
} edit_field;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Split *split;
|
||||||
|
Transaction *trans;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
} RowInfo;
|
||||||
|
|
||||||
|
static void rowinfo_free (RowInfo* info)
|
||||||
|
{
|
||||||
|
g_free (info);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RowInfo * row_get_info (gpointer row, GNCImportMainMatcher *info)
|
||||||
|
{
|
||||||
|
GNCImportTransInfo *trans_info;
|
||||||
|
GtkTreeModel *model = gtk_tree_view_get_model (info->view);
|
||||||
|
RowInfo *retval = g_new (RowInfo, 1);
|
||||||
|
gtk_tree_model_get_iter (model, &retval->iter, row);
|
||||||
|
gtk_tree_model_get (model, &retval->iter, DOWNLOADED_COL_DATA, &trans_info, -1);
|
||||||
|
retval->trans = gnc_import_TransInfo_get_trans (trans_info);
|
||||||
|
retval->split = gnc_import_TransInfo_get_fsplit (trans_info);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_gen_trans_edit_fields (GtkMenuItem *menuitem, GNCImportMainMatcher *info,
|
gnc_gen_trans_edit_fields (GtkMenuItem *menuitem, GNCImportMainMatcher *info,
|
||||||
edit_field field)
|
edit_field field)
|
||||||
@ -901,12 +925,9 @@ gnc_gen_trans_edit_fields (GtkMenuItem *menuitem, GNCImportMainMatcher *info,
|
|||||||
GtkTreeView *treeview;
|
GtkTreeView *treeview;
|
||||||
GtkTreeSelection *selection;
|
GtkTreeSelection *selection;
|
||||||
GtkTreeModel *model;
|
GtkTreeModel *model;
|
||||||
GList *selected_rows;
|
GList *selected_rows, *row_info_list;
|
||||||
GList *refs = NULL;
|
|
||||||
GtkTreeStore* store;
|
GtkTreeStore* store;
|
||||||
GNCImportTransInfo *trans_info;
|
|
||||||
Transaction* trans;
|
Transaction* trans;
|
||||||
GtkTreeIter iter;
|
|
||||||
|
|
||||||
g_return_if_fail (info != NULL);
|
g_return_if_fail (info != NULL);
|
||||||
ENTER("assign_transfer_account_to_selection_cb");
|
ENTER("assign_transfer_account_to_selection_cb");
|
||||||
@ -923,18 +944,8 @@ gnc_gen_trans_edit_fields (GtkMenuItem *menuitem, GNCImportMainMatcher *info,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected_rows->next)
|
row_info_list = gnc_g_list_map (selected_rows, (GncGMapFunc) row_get_info, info);
|
||||||
{
|
trans = ((RowInfo*)row_info_list->data)->trans;
|
||||||
LEAVE ("User selected multiple rows, not supported");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_return_if_fail (gtk_tree_model_get_iter (model, &iter,
|
|
||||||
selected_rows->data));
|
|
||||||
|
|
||||||
gtk_tree_model_get (model, &iter, DOWNLOADED_COL_DATA,
|
|
||||||
&trans_info, -1);
|
|
||||||
trans = gnc_import_TransInfo_get_trans (trans_info);
|
|
||||||
|
|
||||||
switch (field)
|
switch (field)
|
||||||
{
|
{
|
||||||
@ -945,24 +956,33 @@ gnc_gen_trans_edit_fields (GtkMenuItem *menuitem, GNCImportMainMatcher *info,
|
|||||||
_("Enter new Description"),
|
_("Enter new Description"),
|
||||||
xaccTransGetDescription (trans));
|
xaccTransGetDescription (trans));
|
||||||
if (!new_field) break;
|
if (!new_field) break;
|
||||||
xaccTransSetDescription (trans, new_field);
|
for (GList *n = row_info_list; n; n = g_list_next (n))
|
||||||
gtk_tree_store_set (store, &iter, DOWNLOADED_COL_DESCRIPTION,
|
{
|
||||||
new_field, -1);
|
RowInfo *info = n->data;
|
||||||
|
xaccTransSetDescription (info->trans, new_field);
|
||||||
|
gtk_tree_store_set (store, &info->iter,
|
||||||
|
DOWNLOADED_COL_DESCRIPTION, new_field,
|
||||||
|
-1);
|
||||||
|
}
|
||||||
g_free (new_field);
|
g_free (new_field);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MEMO:
|
case MEMO:
|
||||||
{
|
{
|
||||||
Split *first_split =
|
Split *first_split = xaccTransGetSplit (trans, 0);
|
||||||
gnc_import_TransInfo_get_fsplit (trans_info);
|
|
||||||
char *new_field =
|
char *new_field =
|
||||||
gnc_input_dialog_with_entry(info->main_widget, "",
|
gnc_input_dialog_with_entry(info->main_widget, "",
|
||||||
_("Enter new Memo"),
|
_("Enter new Memo"),
|
||||||
xaccSplitGetMemo (first_split));
|
xaccSplitGetMemo (first_split));
|
||||||
if (!new_field) break;
|
if (!new_field) break;
|
||||||
xaccSplitSetMemo (first_split, new_field);
|
for (GList *n = row_info_list; n; n = g_list_next (n))
|
||||||
gtk_tree_store_set (store, &iter,
|
{
|
||||||
DOWNLOADED_COL_MEMO, new_field, -1);
|
RowInfo *info = n->data;
|
||||||
|
xaccSplitSetMemo (info->split, new_field);
|
||||||
|
gtk_tree_store_set (store, &info->iter,
|
||||||
|
DOWNLOADED_COL_MEMO, new_field,
|
||||||
|
-1);
|
||||||
|
}
|
||||||
g_free (new_field);
|
g_free (new_field);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -973,11 +993,16 @@ gnc_gen_trans_edit_fields (GtkMenuItem *menuitem, GNCImportMainMatcher *info,
|
|||||||
_("Enter new Notes"),
|
_("Enter new Notes"),
|
||||||
xaccTransGetNotes (trans));
|
xaccTransGetNotes (trans));
|
||||||
if (!new_field) break;
|
if (!new_field) break;
|
||||||
xaccTransSetNotes (trans, new_field);
|
for (GList *n = row_info_list; n; n = g_list_next (n))
|
||||||
|
{
|
||||||
|
RowInfo *info = n->data;
|
||||||
|
xaccTransSetNotes (info->trans, new_field);
|
||||||
|
}
|
||||||
g_free (new_field);
|
g_free (new_field);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
g_list_free_full (row_info_list, (GDestroyNotify)rowinfo_free);
|
||||||
g_list_free_full (selected_rows, (GDestroyNotify)gtk_tree_path_free);
|
g_list_free_full (selected_rows, (GDestroyNotify)gtk_tree_path_free);
|
||||||
LEAVE("");
|
LEAVE("");
|
||||||
}
|
}
|
||||||
@ -1092,6 +1117,11 @@ gnc_gen_trans_view_popup_menu (GtkTreeView *treeview,
|
|||||||
{
|
{
|
||||||
GtkWidget *menu, *menuitem;
|
GtkWidget *menu, *menuitem;
|
||||||
GdkEventButton *event_button;
|
GdkEventButton *event_button;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
GtkTreeSelection *selection;
|
||||||
|
GList *selected_rows;
|
||||||
|
const char *desc, *memo, *notes;
|
||||||
|
gboolean edit_desc = TRUE, edit_notes = TRUE, edit_memo = TRUE;
|
||||||
|
|
||||||
ENTER ("");
|
ENTER ("");
|
||||||
menu = gtk_menu_new();
|
menu = gtk_menu_new();
|
||||||
@ -1104,7 +1134,31 @@ gnc_gen_trans_view_popup_menu (GtkTreeView *treeview,
|
|||||||
DEBUG("Callback to assign destination account to selection connected");
|
DEBUG("Callback to assign destination account to selection connected");
|
||||||
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
|
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
|
||||||
|
|
||||||
if (show_edit_actions)
|
model = gtk_tree_view_get_model (treeview);
|
||||||
|
selection = gtk_tree_view_get_selection (treeview);
|
||||||
|
selected_rows = gtk_tree_selection_get_selected_rows (selection, &model);
|
||||||
|
for (GList *n = selected_rows; (edit_desc || edit_notes || edit_memo) && n;
|
||||||
|
n = g_list_next(n))
|
||||||
|
{
|
||||||
|
RowInfo *rowinfo = row_get_info (n->data, info);
|
||||||
|
if (!n->prev) /* only the first row */
|
||||||
|
{
|
||||||
|
desc = xaccTransGetDescription (rowinfo->trans);
|
||||||
|
notes = xaccTransGetNotes (rowinfo->trans);
|
||||||
|
memo = xaccSplitGetMemo (rowinfo->split);
|
||||||
|
rowinfo_free (rowinfo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (edit_desc && g_strcmp0 (desc, xaccTransGetDescription (rowinfo->trans)))
|
||||||
|
edit_desc = FALSE;
|
||||||
|
if (edit_notes && g_strcmp0 (notes, xaccTransGetNotes (rowinfo->trans)))
|
||||||
|
edit_notes = FALSE;
|
||||||
|
if (edit_memo && g_strcmp0 (memo, xaccSplitGetMemo (rowinfo->split)))
|
||||||
|
edit_memo = FALSE;
|
||||||
|
rowinfo_free (rowinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (edit_desc)
|
||||||
{
|
{
|
||||||
menuitem = gtk_menu_item_new_with_label (
|
menuitem = gtk_menu_item_new_with_label (
|
||||||
_("Edit description."));
|
_("Edit description."));
|
||||||
@ -1113,7 +1167,10 @@ gnc_gen_trans_view_popup_menu (GtkTreeView *treeview,
|
|||||||
info);
|
info);
|
||||||
DEBUG("Callback to edit description");
|
DEBUG("Callback to edit description");
|
||||||
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
|
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (edit_memo)
|
||||||
|
{
|
||||||
menuitem = gtk_menu_item_new_with_label (
|
menuitem = gtk_menu_item_new_with_label (
|
||||||
_("Edit memo."));
|
_("Edit memo."));
|
||||||
g_signal_connect (menuitem, "activate",
|
g_signal_connect (menuitem, "activate",
|
||||||
@ -1121,7 +1178,10 @@ gnc_gen_trans_view_popup_menu (GtkTreeView *treeview,
|
|||||||
info);
|
info);
|
||||||
DEBUG("Callback to edit memo");
|
DEBUG("Callback to edit memo");
|
||||||
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
|
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (edit_notes)
|
||||||
|
{
|
||||||
menuitem = gtk_menu_item_new_with_label (
|
menuitem = gtk_menu_item_new_with_label (
|
||||||
_("Edit notes."));
|
_("Edit notes."));
|
||||||
g_signal_connect (menuitem, "activate",
|
g_signal_connect (menuitem, "activate",
|
||||||
@ -1135,6 +1195,7 @@ gnc_gen_trans_view_popup_menu (GtkTreeView *treeview,
|
|||||||
/* Note: event can be NULL here when called from view_onPopupMenu; */
|
/* Note: event can be NULL here when called from view_onPopupMenu; */
|
||||||
gtk_menu_popup_at_pointer (GTK_MENU(menu), (GdkEvent*)event);
|
gtk_menu_popup_at_pointer (GTK_MENU(menu), (GdkEvent*)event);
|
||||||
|
|
||||||
|
g_list_free_full (selected_rows, (GDestroyNotify)gtk_tree_path_free);
|
||||||
LEAVE ("");
|
LEAVE ("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1160,9 +1221,7 @@ gnc_gen_trans_onButtonPressed_cb (GtkTreeView *treeview,
|
|||||||
// or the selected transaction is an ADD.
|
// or the selected transaction is an ADD.
|
||||||
selection = gtk_tree_view_get_selection (treeview);
|
selection = gtk_tree_view_get_selection (treeview);
|
||||||
count = gtk_tree_selection_count_selected_rows (selection);
|
count = gtk_tree_selection_count_selected_rows (selection);
|
||||||
if (count > 1)
|
if (count > 0)
|
||||||
gnc_gen_trans_view_popup_menu (treeview, event, info, FALSE);
|
|
||||||
else if (count > 0)
|
|
||||||
{
|
{
|
||||||
GList* selected;
|
GList* selected;
|
||||||
GtkTreeModel *model;
|
GtkTreeModel *model;
|
||||||
|
Loading…
Reference in New Issue
Block a user