/** * @name insert_seam * * Add another seam to a collection of seams at a particular location * in the seam array. */ void insert_seam(const TWERD* word, int index, SEAM *seam, GenericVector<SEAM*>* seam_array) { SEAM *test_seam; int list_length = seam_array->size(); for (int test_index = 0; test_index < index; ++test_index) { test_seam = seam_array->get(test_index); if (test_index + test_seam->widthp >= index) { test_seam->widthp++; /*got in the way */ } else if (test_seam->widthp + test_index == index - 1) { test_seam->widthp = account_splits(test_seam, word, test_index + 1, 1); if (test_seam->widthp < 0) { tprintf("Failed to find any right blob for a split!\n"); print_seam("New dud seam", seam); print_seam("Failed seam", test_seam); } } } for (int test_index = index; test_index < list_length; test_index++) { test_seam = seam_array->get(test_index); if (test_index - test_seam->widthn < index) { test_seam->widthn++; /*got in the way */ } else if (test_index - test_seam->widthn == index) { test_seam->widthn = account_splits(test_seam, word, test_index + 1, -1); if (test_seam->widthn < 0) { tprintf("Failed to find any left blob for a split!\n"); print_seam("New dud seam", seam); print_seam("Failed seam", test_seam); } } } seam_array->insert(seam, index); }
/** * @name test_insert_seam * * @returns true if insert_seam will succeed. */ bool test_insert_seam(const GenericVector<SEAM*>& seam_array, TWERD *word, int index) { SEAM *test_seam; int list_length = seam_array.size(); for (int test_index = 0; test_index < index; ++test_index) { test_seam = seam_array[test_index]; if (test_index + test_seam->widthp < index && test_seam->widthp + test_index == index - 1 && account_splits(test_seam, word, test_index + 1, 1) < 0) return false; } for (int test_index = index; test_index < list_length; test_index++) { test_seam = seam_array[test_index]; if (test_index - test_seam->widthn >= index && test_index - test_seam->widthn == index && account_splits(test_seam, word, test_index + 1, -1) < 0) return false; } return true; }
/******************************************************* * csv_transactions_export * * write a list of transactions to a text file *******************************************************/ void csv_transactions_export (CsvExportInfo *info) { FILE *fh; Account *acc; GList *ptr; gboolean num_action = qof_book_use_split_action_for_num_field (gnc_get_current_book()); ENTER(""); DEBUG("File name is : %s", info->file_name); info->failed = FALSE; /* Set up separators */ if (info->use_quotes) { info->end_sep = "\""; info->mid_sep = g_strconcat ("\"", info->separator_str, "\"", NULL); } else { info->end_sep = ""; info->mid_sep = g_strconcat (info->separator_str, NULL); } /* Open File for writing */ fh = g_fopen (info->file_name, "w" ); if (fh != NULL) { gchar *header; int i; /* Header string */ if (info->simple_layout) { header = g_strconcat (info->end_sep, _("Date"), info->mid_sep, _("Account Name"), info->mid_sep, (num_action ? _("Transaction Number") : _("Number")), info->mid_sep, _("Description"), info->mid_sep, _("Full Category Path"), info->mid_sep, _("Reconcile"), info->mid_sep, _("Amount With Sym"), info->mid_sep, _("Amount Num."), info->mid_sep, _("Rate/Price"), info->end_sep, EOLSTR, NULL); } else { header = g_strconcat (info->end_sep, _("Date"), info->mid_sep, _("Transaction Type"), info->mid_sep, _("Second Date"), info->mid_sep, _("Account Name"), info->mid_sep, (num_action ? _("Transaction Number") : _("Number")), info->mid_sep, _("Description"), info->mid_sep, _("Notes"), info->mid_sep, _("Memo"), info->mid_sep, _("Full Category Path"), info->mid_sep, _("Category"), info->mid_sep, _("Row Type"), info->mid_sep, (num_action ? _("Number/Action") : _("Action")), info->mid_sep, _("Reconcile"), info->mid_sep, _("Amount With Sym"), info->mid_sep, _("Commodity Mnemonic"), info->mid_sep, _("Commodity Namespace"), info->mid_sep, _("Amount Num."), info->mid_sep, _("Rate/Price"), info->end_sep, EOLSTR, NULL); } DEBUG("Header String: %s", header); /* Write header line */ if (!write_line_to_file (fh, header)) { info->failed = TRUE; g_free (header); return; } g_free (header); /* Go through list of accounts */ for (ptr = info->csva.account_list, i = 0; ptr; ptr = g_list_next(ptr), i++) { acc = ptr->data; DEBUG("Account being processed is : %s", xaccAccountGetName (acc)); account_splits (info, acc, fh); } g_list_free (info->trans_list); // free trans_list } else info->failed = TRUE; if (fh) fclose (fh); LEAVE(""); }