mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Merge remote-tracking branch 'origin/maint'
This commit is contained in:
commit
21f053398f
@ -87,6 +87,7 @@ static void gcrd_show (GncCellRendererPopup *cell,
|
||||
gint y1,
|
||||
gint x2,
|
||||
gint y2);
|
||||
|
||||
static void gcrd_hide (GncCellRendererPopup *cell);
|
||||
|
||||
|
||||
@ -215,7 +216,6 @@ gcrd_class_init (GncCellRendererDateClass *klass)
|
||||
NULL,
|
||||
TRUE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@ -224,11 +224,10 @@ gcrd_set_property (GObject *object,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GncCellRendererDate *date;
|
||||
GncCellRendererDate *date = GNC_CELL_RENDERER_DATE(object);
|
||||
|
||||
date = GNC_CELL_RENDERER_DATE (object);
|
||||
|
||||
switch (param_id) {
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_USE_BUTTONS:
|
||||
date->use_buttons = g_value_get_boolean (value);
|
||||
|
||||
@ -250,11 +249,10 @@ gcrd_get_property (GObject *object,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GncCellRendererDate *date;
|
||||
GncCellRendererDate *date = GNC_CELL_RENDERER_DATE (object);
|
||||
|
||||
date = GNC_CELL_RENDERER_DATE (object);
|
||||
|
||||
switch (param_id) {
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_USE_BUTTONS:
|
||||
g_value_set_boolean (value, date->use_buttons);
|
||||
break;
|
||||
@ -307,7 +305,7 @@ gcrd_show (GncCellRendererPopup *cell,
|
||||
gint x2,
|
||||
gint y2)
|
||||
{
|
||||
GncCellRendererDate *date;
|
||||
GncCellRendererDate *date = GNC_CELL_RENDERER_DATE (cell);
|
||||
gint year = 0;
|
||||
gint month = 0;
|
||||
gint day = 0;
|
||||
@ -320,8 +318,6 @@ gcrd_show (GncCellRendererPopup *cell,
|
||||
x2, y2);
|
||||
}
|
||||
|
||||
date = GNC_CELL_RENDERER_DATE (cell);
|
||||
|
||||
text = gnc_popup_entry_get_text (GNC_POPUP_ENTRY (GNC_CELL_RENDERER_POPUP (cell)->editable));
|
||||
|
||||
if (!(g_strcmp0(text, "")))
|
||||
@ -373,9 +369,7 @@ gcrd_today_clicked (GtkWidget *button, GncCellRendererDate *cell)
|
||||
static void
|
||||
gcrd_selected_double_click (GtkWidget *calendar, GncCellRendererDate *cell)
|
||||
{
|
||||
GncCellRendererPopup *popup;
|
||||
|
||||
popup = GNC_CELL_RENDERER_POPUP (cell);
|
||||
GncCellRendererPopup *popup = GNC_CELL_RENDERER_POPUP(cell);
|
||||
|
||||
gcrd_ok_clicked (popup->popup_window, cell);
|
||||
}
|
||||
@ -383,9 +377,7 @@ gcrd_selected_double_click (GtkWidget *calendar, GncCellRendererDate *cell)
|
||||
static void
|
||||
gcrd_cancel_clicked (GtkWidget *popup_window, GncCellRendererDate *cell)
|
||||
{
|
||||
GncCellRendererPopup *popup;
|
||||
|
||||
popup = GNC_CELL_RENDERER_POPUP (cell);
|
||||
GncCellRendererPopup *popup = GNC_CELL_RENDERER_POPUP(cell);
|
||||
|
||||
popup->editing_canceled = TRUE;
|
||||
gnc_cell_renderer_popup_hide (popup);
|
||||
@ -394,9 +386,7 @@ gcrd_cancel_clicked (GtkWidget *popup_window, GncCellRendererDate *cell)
|
||||
static void
|
||||
gcrd_ok_clicked (GtkWidget *popup_window, GncCellRendererDate *cell)
|
||||
{
|
||||
GncCellRendererPopup *popup;
|
||||
|
||||
popup = GNC_CELL_RENDERER_POPUP (cell);
|
||||
GncCellRendererPopup *popup = GNC_CELL_RENDERER_POPUP(cell);
|
||||
|
||||
gcrd_day_selected (popup_window, cell);
|
||||
|
||||
@ -460,7 +450,6 @@ gcrd_dmy2time (gint day, gint month, gint year)
|
||||
return gnc_mktime (&when);
|
||||
}
|
||||
|
||||
|
||||
/* This function converts a time64 value date to a string */
|
||||
static gchar *
|
||||
gcrd_time2dmy_string (time64 raw_time)
|
||||
@ -468,7 +457,6 @@ gcrd_time2dmy_string (time64 raw_time)
|
||||
return qof_print_date (raw_time);
|
||||
}
|
||||
|
||||
|
||||
/* This function converts a string date to a time64 value */
|
||||
static time64
|
||||
gcrd_string_dmy2time (const gchar *date_string)
|
||||
|
@ -43,12 +43,28 @@ static void gpw_cell_editable_init (GtkCellEditableIface *iface);
|
||||
static gboolean gpw_key_press_event (GtkWidget *box,
|
||||
GdkEventKey *key_event);
|
||||
|
||||
static void gpw_set_property (GObject *object,
|
||||
guint param_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
|
||||
static void gpw_get_property (GObject *object,
|
||||
guint param_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
|
||||
enum
|
||||
{
|
||||
ARROW_CLICKED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_EDITING_CANCELED,
|
||||
};
|
||||
|
||||
static GtkEventBoxClass *parent_class;
|
||||
static guint signals[LAST_SIGNAL];
|
||||
|
||||
@ -97,6 +113,8 @@ gnc_popup_entry_init (GncPopupEntry *widget)
|
||||
{
|
||||
GtkWidget *arrow;
|
||||
|
||||
widget->editing_canceled = FALSE;
|
||||
|
||||
widget->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
gtk_box_set_homogeneous (GTK_BOX(widget->hbox), FALSE);
|
||||
gtk_widget_show (widget->hbox);
|
||||
@ -130,11 +148,19 @@ static void
|
||||
gnc_popup_entry_class_init (GncPopupEntryClass *klass)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
|
||||
|
||||
widget_class->key_press_event = gpw_key_press_event;
|
||||
|
||||
gobject_class->set_property = gpw_set_property;
|
||||
gobject_class->get_property = gpw_get_property;
|
||||
|
||||
parent_class = GTK_EVENT_BOX_CLASS (g_type_class_peek_parent (klass));
|
||||
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_EDITING_CANCELED,
|
||||
"editing-canceled");
|
||||
|
||||
signals[ARROW_CLICKED] = g_signal_new
|
||||
("arrow-clicked",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
@ -146,6 +172,42 @@ gnc_popup_entry_class_init (GncPopupEntryClass *klass)
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gpw_set_property (GObject *object, guint param_id,
|
||||
const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
GncPopupEntry *pe = GNC_POPUP_ENTRY(object);
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_EDITING_CANCELED:
|
||||
pe->editing_canceled = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gpw_get_property (GObject *object, guint param_id,
|
||||
GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
GncPopupEntry *pe = GNC_POPUP_ENTRY(object);
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_EDITING_CANCELED:
|
||||
g_value_set_boolean (value, pe->editing_canceled);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gpw_arrow_clicked (GtkWidget *button, GncPopupEntry *widget)
|
||||
{
|
||||
|
@ -44,21 +44,23 @@ enum {
|
||||
static void gcrp_init (GncCellRendererPopup *popup);
|
||||
static void gcrp_class_init (GncCellRendererPopupClass *klass);
|
||||
|
||||
static GtkCellEditable *
|
||||
gcrp_start_editing (GtkCellRenderer *cell,
|
||||
static GtkCellEditable *gcrp_start_editing (GtkCellRenderer *cell,
|
||||
GdkEvent *event,
|
||||
GtkWidget *widget,
|
||||
const gchar *path,
|
||||
const GdkRectangle *background_area,
|
||||
const GdkRectangle *cell_area,
|
||||
GtkCellRendererState flags);
|
||||
|
||||
static void gcrp_show_popup (GncCellRendererPopup *cell,
|
||||
const gchar *path,
|
||||
gint x1,
|
||||
gint y1,
|
||||
gint x2,
|
||||
gint y2);
|
||||
|
||||
static void gcrp_hide_popup (GncCellRendererPopup *cell);
|
||||
|
||||
static void gcrp_get_size (GtkCellRenderer *cell,
|
||||
GtkWidget *widget,
|
||||
const GdkRectangle *cell_area,
|
||||
@ -66,17 +68,19 @@ static void gcrp_get_size (GtkCellRenderer *cell,
|
||||
gint *y_offset,
|
||||
gint *width,
|
||||
gint *height);
|
||||
|
||||
static void gcrp_style_set (GtkWidget *widget,
|
||||
GtkStyle *old_style,
|
||||
GncCellRendererPopup *popup);
|
||||
|
||||
static gboolean gcrp_key_press_event (GtkWidget *popup_window,
|
||||
GdkEventKey *event,
|
||||
GncCellRendererPopup *cell);
|
||||
|
||||
static gboolean gcrp_button_press_event (GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
GncCellRendererPopup *popup);
|
||||
|
||||
|
||||
void gnc_marshal_VOID__STRING_INT_INT_INT_INT (GClosure *closure,
|
||||
GValue *return_value,
|
||||
guint n_param_values,
|
||||
@ -192,14 +196,12 @@ gcrp_editing_done (GtkCellEditable *editable,
|
||||
|
||||
path = g_object_get_data (G_OBJECT(editable),
|
||||
GNC_CELL_RENDERER_POPUP_PATH);
|
||||
|
||||
new_text = gnc_popup_entry_get_text (GNC_POPUP_ENTRY(editable));
|
||||
|
||||
gtk_cell_renderer_stop_editing (GTK_CELL_RENDERER(cell), FALSE);
|
||||
|
||||
g_signal_emit_by_name (cell,
|
||||
"edited",
|
||||
path,
|
||||
new_text);
|
||||
g_signal_emit_by_name (cell, "edited", path, new_text);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -310,9 +312,11 @@ gcrp_show_popup (GncCellRendererPopup *cell,
|
||||
#endif
|
||||
|
||||
/* Check if it fits in the available height. */
|
||||
if (alloc.height > screen_height) {
|
||||
if (alloc.height > screen_height)
|
||||
{
|
||||
/* It doesn't fit, so we see if we have the minimum space needed. */
|
||||
if (alloc.height > screen_height && y - button_height > screen_height) {
|
||||
if (alloc.height > screen_height && y - button_height > screen_height)
|
||||
{
|
||||
/* We don't, so we show the popup above the cell
|
||||
instead of below it. */
|
||||
y -= (alloc.height + button_height);
|
||||
@ -325,14 +329,13 @@ gcrp_show_popup (GncCellRendererPopup *cell,
|
||||
/* We try to line it up with the right edge of the column, but we don't
|
||||
* want it to go off the edges of the screen.
|
||||
*/
|
||||
if (x > screen_width) {
|
||||
if (x > screen_width)
|
||||
x = screen_width;
|
||||
}
|
||||
|
||||
x -= alloc.width;
|
||||
if (x < 0) {
|
||||
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
}
|
||||
|
||||
gtk_grab_add (cell->popup_window);
|
||||
|
||||
@ -351,16 +354,14 @@ gcrp_hide_popup (GncCellRendererPopup *cell)
|
||||
gtk_grab_remove (cell->popup_window);
|
||||
gtk_widget_hide (cell->popup_window);
|
||||
|
||||
if (cell->editable) {
|
||||
if (cell->editable)
|
||||
gtk_cell_editable_editing_done (GTK_CELL_EDITABLE(cell->editable));
|
||||
}
|
||||
|
||||
/* This may look weird (the test), but the weak pointer will actually be
|
||||
* nulled out for some cells, like the date cell.
|
||||
*/
|
||||
if (cell->editable) {
|
||||
if (cell->editable)
|
||||
gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(cell->editable));
|
||||
}
|
||||
|
||||
cell->shown = FALSE;
|
||||
cell->editing_canceled = FALSE;
|
||||
@ -374,7 +375,8 @@ gcrp_arrow_clicked (GtkCellEditable *entry,
|
||||
gint x, y;
|
||||
const gchar *path;
|
||||
|
||||
if (cell->shown) {
|
||||
if (cell->shown)
|
||||
{
|
||||
cell->editing_canceled = TRUE;
|
||||
gnc_cell_renderer_popup_hide (cell);
|
||||
return;
|
||||
@ -416,18 +418,16 @@ gcrp_start_editing (GtkCellRenderer *cell,
|
||||
const GdkRectangle *cell_area,
|
||||
GtkCellRendererState flags)
|
||||
{
|
||||
GncCellRendererPopup *popup;
|
||||
GncCellRendererPopup *popup = GNC_CELL_RENDERER_POPUP(cell);
|
||||
GtkWidget *editable;
|
||||
gchar *text;
|
||||
gboolean iseditable;
|
||||
|
||||
popup = GNC_CELL_RENDERER_POPUP (cell);
|
||||
|
||||
g_object_get (G_OBJECT (popup), "editable", &iseditable, NULL);
|
||||
|
||||
/* If the cell isn't editable we return NULL. */
|
||||
if (iseditable == FALSE) {
|
||||
if (iseditable == FALSE)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
editable = g_object_new (GNC_TYPE_POPUP_ENTRY, NULL);
|
||||
|
||||
@ -485,9 +485,7 @@ gcrp_get_size (GtkCellRenderer *cell,
|
||||
gint *width,
|
||||
gint *height)
|
||||
{
|
||||
GncCellRendererPopup *popup;
|
||||
|
||||
popup = GNC_CELL_RENDERER_POPUP (cell);
|
||||
GncCellRendererPopup *popup = GNC_CELL_RENDERER_POPUP (cell);
|
||||
|
||||
if (GTK_CELL_RENDERER_CLASS(parent_class)->get_size) {
|
||||
(* GTK_CELL_RENDERER_CLASS(parent_class)->get_size) (cell,
|
||||
@ -500,9 +498,8 @@ gcrp_get_size (GtkCellRenderer *cell,
|
||||
}
|
||||
|
||||
/* We cache this because it takes really long to get the width. */
|
||||
if (popup->button_width == -1) {
|
||||
if (popup->button_width == -1)
|
||||
popup->button_width = gnc_popup_get_button_width ();
|
||||
}
|
||||
|
||||
*width += popup->button_width;
|
||||
}
|
||||
@ -540,9 +537,8 @@ gcrp_button_press_event (GtkWidget *widget,
|
||||
gint x1, y1;
|
||||
gint x2, y2;
|
||||
|
||||
if (event->button != 1) {
|
||||
if (event->button != 1)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* If the event happened outside the popup, cancel editing.
|
||||
*/
|
||||
@ -565,9 +561,8 @@ gcrp_button_press_event (GtkWidget *widget,
|
||||
x2 = x1 + alloc.width;
|
||||
y2 = y1 + alloc.height;
|
||||
|
||||
if (x > x1 && x < x2 && y > y1 && y < y2) {
|
||||
if (x > x1 && x < x2 && y > y1 && y < y2)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
popup->editing_canceled = TRUE;
|
||||
gnc_cell_renderer_popup_hide (popup);
|
||||
@ -594,6 +589,7 @@ gnc_marshal_VOID__STRING_INT_INT_INT_INT (GClosure *closure,
|
||||
gint arg_4,
|
||||
gint arg_5,
|
||||
gpointer data2);
|
||||
|
||||
register GMarshalFunc_VOID__STRING_INT_INT_INT_INT callback;
|
||||
register GCClosure *cc = (GCClosure*) closure;
|
||||
register gpointer data1, data2;
|
||||
@ -620,4 +616,3 @@ gnc_marshal_VOID__STRING_INT_INT_INT_INT (GClosure *closure,
|
||||
g_marshal_value_peek_int (param_values + 5),
|
||||
data2);
|
||||
}
|
||||
|
||||
|
@ -59,6 +59,8 @@ typedef struct
|
||||
GtkWidget *sub_label;
|
||||
|
||||
gboolean jump_close;
|
||||
gchar *saved_filter_text;
|
||||
gint event_handler_id;
|
||||
|
||||
}FindAccountDialog;
|
||||
|
||||
@ -194,7 +196,7 @@ fill_model (GtkTreeModel *model, Account *account)
|
||||
}
|
||||
|
||||
static void
|
||||
get_account_info (FindAccountDialog *facc_dialog)
|
||||
get_account_info (FindAccountDialog *facc_dialog, gboolean use_saved_filter)
|
||||
{
|
||||
Account *root;
|
||||
GList *accts;
|
||||
@ -214,6 +216,9 @@ get_account_info (FindAccountDialog *facc_dialog)
|
||||
|
||||
accts = gnc_account_get_descendants_sorted (root);
|
||||
|
||||
if (use_saved_filter)
|
||||
filter_text = g_ascii_strdown (facc_dialog->saved_filter_text, -1);
|
||||
else
|
||||
filter_text = g_ascii_strdown (gtk_entry_get_text (GTK_ENTRY(facc_dialog->filter_text_entry)), -1);
|
||||
|
||||
/* disconnect the model from the treeview */
|
||||
@ -250,12 +255,55 @@ get_account_info (FindAccountDialog *facc_dialog)
|
||||
static void
|
||||
filter_button_cb (GtkButton *button, FindAccountDialog *facc_dialog)
|
||||
{
|
||||
get_account_info (facc_dialog);
|
||||
get_account_info (facc_dialog, FALSE);
|
||||
|
||||
if (facc_dialog->saved_filter_text)
|
||||
g_free (facc_dialog->saved_filter_text);
|
||||
|
||||
// save the filter incase of an account event
|
||||
facc_dialog->saved_filter_text = g_strdup (gtk_entry_get_text
|
||||
(GTK_ENTRY(facc_dialog->filter_text_entry)));
|
||||
|
||||
// Clear the filter
|
||||
gtk_entry_set_text (GTK_ENTRY(facc_dialog->filter_text_entry), "");
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_find_account_event_handler (QofInstance *entity,
|
||||
QofEventId event_type,
|
||||
FindAccountDialog *facc_dialog,
|
||||
gpointer evt_data)
|
||||
{
|
||||
Account *account = NULL;
|
||||
|
||||
g_return_if_fail (facc_dialog); /* Required */
|
||||
|
||||
if (!GNC_IS_ACCOUNT(entity))
|
||||
return;
|
||||
|
||||
ENTER("entity %p of type %d, dialog %p, event_data %p",
|
||||
entity, event_type, facc_dialog, evt_data);
|
||||
|
||||
account = GNC_ACCOUNT(entity);
|
||||
|
||||
switch (event_type)
|
||||
{
|
||||
case QOF_EVENT_ADD:
|
||||
case QOF_EVENT_REMOVE:
|
||||
case QOF_EVENT_MODIFY:
|
||||
DEBUG("account change on %p (%s)", account, xaccAccountGetName (account));
|
||||
get_account_info (facc_dialog, TRUE);
|
||||
LEAVE(" ");
|
||||
break;
|
||||
|
||||
default:
|
||||
LEAVE("unknown event type");
|
||||
return;
|
||||
}
|
||||
LEAVE(" ");
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_find_account_dialog_create (GtkWidget *parent, FindAccountDialog *facc_dialog)
|
||||
{
|
||||
@ -280,6 +328,7 @@ gnc_find_account_dialog_create (GtkWidget *parent, FindAccountDialog *facc_dialo
|
||||
|
||||
facc_dialog->session = gnc_get_current_session();
|
||||
facc_dialog->parent = parent;
|
||||
facc_dialog->saved_filter_text = g_strdup ("");
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW(facc_dialog->window), _("Find Account"));
|
||||
|
||||
@ -400,7 +449,11 @@ gnc_find_account_dialog_create (GtkWidget *parent, FindAccountDialog *facc_dialo
|
||||
// Set the filter to Wildcard
|
||||
gtk_entry_set_text (GTK_ENTRY(facc_dialog->filter_text_entry), "");
|
||||
|
||||
get_account_info (facc_dialog);
|
||||
// add a handler to listen for account events
|
||||
facc_dialog->event_handler_id = qof_event_register_handler
|
||||
((QofEventHandler)gnc_find_account_event_handler, facc_dialog);
|
||||
|
||||
get_account_info (facc_dialog, FALSE);
|
||||
LEAVE(" ");
|
||||
}
|
||||
|
||||
@ -410,6 +463,16 @@ close_handler (gpointer user_data)
|
||||
FindAccountDialog *facc_dialog = user_data;
|
||||
|
||||
ENTER(" ");
|
||||
|
||||
if (facc_dialog->event_handler_id)
|
||||
{
|
||||
qof_event_unregister_handler (facc_dialog->event_handler_id);
|
||||
facc_dialog->event_handler_id = 0;
|
||||
}
|
||||
|
||||
if (facc_dialog->saved_filter_text)
|
||||
g_free (facc_dialog->saved_filter_text);
|
||||
|
||||
gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(facc_dialog->window));
|
||||
gtk_widget_destroy (GTK_WIDGET(facc_dialog->window));
|
||||
LEAVE(" ");
|
||||
|
@ -107,7 +107,8 @@
|
||||
|
||||
(define (gnc:html-document-tree-collapse . tree)
|
||||
(let lp ((e tree) (accum '()))
|
||||
(cond ((list? e) (fold lp accum e))
|
||||
(cond ((null? e) accum)
|
||||
((pair? e) (fold lp accum e))
|
||||
((string? e) (cons e accum))
|
||||
(else (cons (object->string e) accum)))))
|
||||
|
||||
@ -142,6 +143,7 @@
|
||||
;;<guile-sitedir>/gnucash/reports/data/balsheet-eg.eguile.scm:<html>
|
||||
;;<guile-sitedir>/gnucash/reports/data/receipt.eguile.scm:<html>
|
||||
|
||||
(push "<!DOCTYPE html>\n")
|
||||
(push "<html dir='auto'>\n")
|
||||
(push "<head>\n")
|
||||
(push "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n")
|
||||
|
@ -60,12 +60,9 @@
|
||||
|
||||
;; Registers font options
|
||||
(define (register-font-options options)
|
||||
(let*
|
||||
(
|
||||
(opt-register
|
||||
(lambda (opt) (gnc:register-option options opt)))
|
||||
(font-family (gnc-get-default-report-font-family))
|
||||
)
|
||||
(define (opt-register opt)
|
||||
(gnc:register-option options opt))
|
||||
(let ((font-family (gnc-get-default-report-font-family)))
|
||||
(opt-register
|
||||
(gnc:make-font-option
|
||||
(N_ "Fonts")
|
||||
@ -99,65 +96,60 @@
|
||||
(opt-register
|
||||
(gnc:make-font-option
|
||||
(N_ "Fonts")
|
||||
(N_ "Total number cell") "g" (N_ "Font info for number cells containing a total.")
|
||||
(N_ "Total number cell") "g"
|
||||
(N_ "Font info for number cells containing a total.")
|
||||
(string-append font-family " Bold 12")))
|
||||
(opt-register
|
||||
(gnc:make-font-option
|
||||
(N_ "Fonts")
|
||||
(N_ "Total label cell") "h" (N_ "Font info for cells containing total labels.")
|
||||
(N_ "Total label cell") "h"
|
||||
(N_ "Font info for cells containing total labels.")
|
||||
(string-append font-family " Bold 12")))
|
||||
(opt-register
|
||||
(gnc:make-font-option
|
||||
(N_ "Fonts")
|
||||
(N_ "Centered label cell") "i" (N_ "Font info for centered label cells.")
|
||||
(string-append font-family " Bold 12")))
|
||||
)
|
||||
)
|
||||
(string-append font-family " Bold 12")))))
|
||||
|
||||
;; Adds CSS style information to an html document
|
||||
(define (add-css-information-to-doc options ssdoc doc)
|
||||
(let*
|
||||
((opt-val
|
||||
(lambda (section name)
|
||||
(gnc:option-value (gnc:lookup-option options section name))))
|
||||
(negative-red? (opt-val "Fonts" "Negative Values in Red"))
|
||||
(define (opt-font-val name)
|
||||
(gnc:option-value (gnc:lookup-option options "Fonts" name)))
|
||||
(define (opt-style-info name) (font-name-to-style-info (opt-font-val name)))
|
||||
(let* ((negative-red? (opt-font-val "Negative Values in Red"))
|
||||
(alternate-row-color
|
||||
(gnc:color-option->html
|
||||
(gnc:lookup-option options
|
||||
"Colors"
|
||||
"Alternate Table Cell Color")))
|
||||
(title-font-info (font-name-to-style-info (opt-val "Fonts" "Title")))
|
||||
(account-link-font-info (font-name-to-style-info (opt-val "Fonts" "Account link")))
|
||||
(number-cell-font-info (font-name-to-style-info (opt-val "Fonts" "Number cell")))
|
||||
(number-header-font-info (font-name-to-style-info (opt-val "Fonts" "Number header")))
|
||||
(text-cell-font-info (font-name-to-style-info (opt-val "Fonts" "Text cell")))
|
||||
(total-number-cell-font-info (font-name-to-style-info (opt-val "Fonts" "Total number cell")))
|
||||
(total-label-cell-font-info (font-name-to-style-info (opt-val "Fonts" "Total label cell")))
|
||||
(centered-label-cell-font-info (font-name-to-style-info (opt-val "Fonts" "Centered label cell"))))
|
||||
(gnc:lookup-option options "Colors" "Alternate Table Cell Color")))
|
||||
(title-info (opt-style-info "Title"))
|
||||
(account-link-info (opt-style-info "Account link"))
|
||||
(number-cell-info (opt-style-info "Number cell"))
|
||||
(number-header-info (opt-style-info "Number header"))
|
||||
(text-cell-info (opt-style-info "Text cell"))
|
||||
(total-number-cell-info (opt-style-info "Total number cell"))
|
||||
(total-label-cell-info (opt-style-info "Total label cell"))
|
||||
(centered-label-cell-info (opt-style-info "Centered label cell")))
|
||||
|
||||
(gnc:html-document-set-style-text!
|
||||
ssdoc
|
||||
(string-append
|
||||
"h3 { " title-font-info " }\n"
|
||||
"a { " account-link-font-info " }\n"
|
||||
"body, p, table, tr, td { vertical-align: top; " text-cell-font-info " }\n"
|
||||
"h3 { " title-info " }\n"
|
||||
"a { " account-link-info " }\n"
|
||||
"body, p, table, tr, td { vertical-align: top; " text-cell-info " }\n"
|
||||
"tr.alternate-row { background: " alternate-row-color " }\n"
|
||||
"tr { page-break-inside: avoid !important;}\n"
|
||||
"th.column-heading-left { text-align: left; " number-header-font-info " }\n"
|
||||
"th.column-heading-center { text-align: center; " number-header-font-info " }\n"
|
||||
"th.column-heading-right { text-align: right; " number-header-font-info " }\n"
|
||||
"html, body { height: 100vh; margin: 0; }\n"
|
||||
"td, th { border-color: grey }\n"
|
||||
"th.column-heading-left { text-align: left; " number-header-info " }\n"
|
||||
"th.column-heading-center { text-align: center; " number-header-info " }\n"
|
||||
"th.column-heading-right { text-align: right; " number-header-info " }\n"
|
||||
"td.neg { " (if negative-red? "color: red; " "") " }\n"
|
||||
"td.number-cell, td.total-number-cell { text-align: right; white-space: nowrap; }\n"
|
||||
"td.date-cell { white-space: nowrap; }\n"
|
||||
"td.anchor-cell { white-space: nowrap; " text-cell-font-info " }\n"
|
||||
"td.number-cell { " number-cell-font-info " }\n"
|
||||
"td.number-header { text-align: right; " number-header-font-info " }\n"
|
||||
"td.text-cell { " text-cell-font-info " }\n"
|
||||
"td.total-number-cell { " total-number-cell-font-info " }\n"
|
||||
"td.total-label-cell { " total-label-cell-font-info " }\n"
|
||||
"td.centered-label-cell { text-align: center; " centered-label-cell-font-info " }\n"
|
||||
(or (gnc:html-document-style-text doc) "")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
"td.anchor-cell { white-space: nowrap; " text-cell-info " }\n"
|
||||
"td.number-cell { " number-cell-info " }\n"
|
||||
"td.number-header { text-align: right; " number-header-info " }\n"
|
||||
"td.text-cell { " text-cell-info " }\n"
|
||||
"td.total-number-cell { " total-number-cell-info " }\n"
|
||||
"td.total-label-cell { " total-label-cell-info " }\n"
|
||||
"td.centered-label-cell { text-align: center; " centered-label-cell-info " }\n"
|
||||
(or (gnc:html-document-style-text doc) "")))))
|
||||
|
@ -247,6 +247,8 @@
|
||||
|
||||
(define (add-owner-table table splits acc start-date end-date date-type
|
||||
used-columns payable? link-option)
|
||||
(define (AP-negate num)
|
||||
(if payable? (- num) num))
|
||||
(define currency (xaccAccountGetCommodity acc))
|
||||
(define link-cols (assq-ref '((none . 0) (simple . 1) (detailed . 3)) link-option))
|
||||
(define (print-totals total debit credit tax sale)
|
||||
@ -313,8 +315,9 @@
|
||||
(cons (list (gnc:make-html-table-cell/size 1 2 (_ "Outstanding"))
|
||||
(make-cell
|
||||
(gnc:make-gnc-monetary
|
||||
currency (gnc-lot-get-balance
|
||||
(gncInvoiceGetPostedLot invoice)))))
|
||||
currency
|
||||
(AP-negate (gnc-lot-get-balance
|
||||
(gncInvoiceGetPostedLot invoice))))))
|
||||
result))))
|
||||
(else
|
||||
(let* ((lot-split (car invoice-splits))
|
||||
@ -328,7 +331,7 @@
|
||||
(let* ((tfr-split (car tfr-splits))
|
||||
(tfr-acct (xaccSplitGetAccount tfr-split))
|
||||
(tfr-curr (xaccAccountGetCommodity tfr-acct))
|
||||
(tfr-amt (xaccSplitGetAmount tfr-split)))
|
||||
(tfr-amt (AP-negate (xaccSplitGetAmount tfr-split))))
|
||||
(lp1 (cdr tfr-splits)
|
||||
(cons (list
|
||||
(qof-print-date (xaccTransGetDate lot-txn))
|
||||
@ -371,7 +374,7 @@
|
||||
(let* ((payment-split (car payment-splits))
|
||||
(inv (car payment-split))
|
||||
(inv-split (cadr payment-split))
|
||||
(inv-amount (xaccSplitGetAmount inv-split)))
|
||||
(inv-amount (AP-negate (xaccSplitGetAmount inv-split))))
|
||||
(lp (cdr payment-splits)
|
||||
(- amount inv-amount)
|
||||
(cons (list
|
||||
|
@ -349,6 +349,12 @@
|
||||
'("-$23.00")
|
||||
(get-row-col sxml -1 -1)))
|
||||
|
||||
(set-option! options "Filter" "Transaction Filter excludes matched strings" #t)
|
||||
(let ((sxml (options->sxml options "negate transaction filter not.s?")))
|
||||
(test-equal "transaction filter in bank to 'not.s?' and switch regex, sum = -$23.00"
|
||||
'("$24.00")
|
||||
(get-row-col sxml -1 -1)))
|
||||
|
||||
;; Test Reconcile Status Filters
|
||||
(set! options (default-testing-options))
|
||||
(set-option! options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 01 01 1969)))
|
||||
|
@ -213,7 +213,7 @@
|
||||
|
||||
(let ((headline (or (gnc:html-document-headline doc)
|
||||
(gnc:html-document-title doc))))
|
||||
(if headline
|
||||
(if (and headline (not (equal? headline "")))
|
||||
(gnc:html-document-add-object!
|
||||
ssdoc
|
||||
(gnc:make-html-text
|
||||
|
@ -45,7 +45,8 @@
|
||||
)
|
||||
|
||||
(define html-doc-header-no-title
|
||||
"<html dir='auto'>\n\
|
||||
"<!DOCTYPE html>
|
||||
<html dir='auto'>\n\
|
||||
<head>\n\
|
||||
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\
|
||||
</head><body>")
|
||||
@ -87,7 +88,8 @@
|
||||
|
||||
(gnc:html-document-set-title! test-doc "HTML Document Title")
|
||||
(test-equal "HTML Document - Render with title"
|
||||
"<html dir='auto'>\n\
|
||||
"<!DOCTYPE html>
|
||||
<html dir='auto'>\n\
|
||||
<head>\n\
|
||||
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\
|
||||
<title>\n\
|
||||
|
@ -89,6 +89,8 @@
|
||||
(define optname-transaction-matcher (N_ "Transaction Filter"))
|
||||
(define optname-transaction-matcher-regex
|
||||
(N_ "Use regular expressions for transaction filter"))
|
||||
(define optname-transaction-matcher-exclude
|
||||
(N_ "Transaction Filter excludes matched strings"))
|
||||
(define optname-reconcile-status (N_ "Reconcile Status"))
|
||||
(define optname-void-transactions (N_ "Void Transactions"))
|
||||
(define optname-closing-transactions (N_ "Closing transactions"))
|
||||
@ -604,6 +606,13 @@ enable full POSIX regular expressions capabilities. '#work|#family' will match b
|
||||
tags within description, notes or memo. ")
|
||||
#f))
|
||||
|
||||
(gnc:register-trep-option
|
||||
(gnc:make-simple-boolean-option
|
||||
pagename-filter optname-transaction-matcher-exclude
|
||||
"i3"
|
||||
(_ "If this option is selected, transactions matching filter are excluded.")
|
||||
#f))
|
||||
|
||||
(gnc:register-trep-option
|
||||
(gnc:make-multichoice-option
|
||||
pagename-filter optname-reconcile-status
|
||||
@ -1969,6 +1978,8 @@ be excluded from periodic reporting.")
|
||||
(lambda () (make-regexp transaction-matcher))
|
||||
(const 'invalid-transaction-regex))
|
||||
'no-guile-regex-support)))
|
||||
(transaction-filter-exclude?
|
||||
(opt-val pagename-filter optname-transaction-matcher-exclude))
|
||||
(reconcile-status-filter
|
||||
(keylist-get-info reconcile-status-list
|
||||
(opt-val pagename-filter optname-reconcile-status)
|
||||
@ -2044,6 +2055,11 @@ be excluded from periodic reporting.")
|
||||
(define (date-comparator? X Y)
|
||||
(generic-less? X Y 'date 'none #t))
|
||||
|
||||
(define (transaction-filter-match split)
|
||||
(or (match? (xaccTransGetDescription (xaccSplitGetParent split)))
|
||||
(match? (xaccTransGetNotes (xaccSplitGetParent split)))
|
||||
(match? (xaccSplitGetMemo split))))
|
||||
|
||||
(cond
|
||||
((or (null? c_account_1)
|
||||
(symbol? account-matcher-regexp)
|
||||
@ -2129,9 +2145,9 @@ be excluded from periodic reporting.")
|
||||
((include) (is-filter-member split c_account_2))
|
||||
((exclude) (not (is-filter-member split c_account_2))))
|
||||
(or (string-null? transaction-matcher)
|
||||
(match? (xaccTransGetDescription trans))
|
||||
(match? (xaccTransGetNotes trans))
|
||||
(match? (xaccSplitGetMemo split)))
|
||||
(if transaction-filter-exclude?
|
||||
(not (transaction-filter-match split))
|
||||
(transaction-filter-match split)))
|
||||
(or (not custom-split-filter)
|
||||
(custom-split-filter split)))))
|
||||
splits))
|
||||
|
@ -207,7 +207,7 @@ account_id_handler (xmlNodePtr node, gpointer act_pdata)
|
||||
|
||||
xaccAccountSetGUID (pdata->account, guid);
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -384,7 +384,7 @@ account_parent_handler (xmlNodePtr node, gpointer act_pdata)
|
||||
|
||||
gnc_account_append_child (parent, pdata->account);
|
||||
|
||||
g_free (gid);
|
||||
guid_free (gid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ set_parent_child (xmlNodePtr node, struct billterm_pdata* pdata,
|
||||
gncBillTermSetGUID (term, guid);
|
||||
gncBillTermCommitEdit (term);
|
||||
}
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (term, FALSE);
|
||||
func (pdata->term, term);
|
||||
|
||||
@ -318,7 +318,7 @@ billterm_guid_handler (xmlNodePtr node, gpointer billterm_pdata)
|
||||
gncBillTermSetGUID (pdata->term, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ book_id_handler (xmlNodePtr node, gpointer book_pdata)
|
||||
|
||||
guid = dom_tree_to_guid (node);
|
||||
qof_instance_set_guid (QOF_INSTANCE (book), guid);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ budget_id_handler (xmlNodePtr node, gpointer bgt)
|
||||
guid = dom_tree_to_guid (node);
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
qof_instance_set_guid (QOF_INSTANCE (bgt), guid);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -205,7 +205,7 @@ customer_guid_handler (xmlNodePtr node, gpointer cust_pdata)
|
||||
gncCustomerSetGUID (pdata->customer, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -237,7 +237,7 @@ customer_terms_handler (xmlNodePtr node, gpointer cust_pdata)
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
term = gnc_billterm_xml_find_or_create (pdata->book, guid);
|
||||
g_assert (term);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
gncCustomerSetTerms (pdata->customer, term);
|
||||
|
||||
return TRUE;
|
||||
@ -353,7 +353,7 @@ customer_taxtable_handler (xmlNodePtr node, gpointer cust_pdata)
|
||||
gncTaxTableDecRef (taxtable);
|
||||
|
||||
gncCustomerSetTaxTable (pdata->customer, taxtable);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -178,7 +178,7 @@ employee_guid_handler (xmlNodePtr node, gpointer employee_pdata)
|
||||
gncEmployeeSetGUID (pdata->employee, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -282,7 +282,7 @@ employee_ccard_handler (xmlNodePtr node, gpointer employee_pdata)
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
|
||||
ccard_acc = xaccAccountLookup (guid, pdata->book);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
g_return_val_if_fail (ccard_acc, FALSE);
|
||||
gncEmployeeSetCCard (pdata->employee, ccard_acc);
|
||||
|
@ -283,7 +283,7 @@ set_account (xmlNodePtr node, struct entry_pdata* pdata,
|
||||
guid = dom_tree_to_guid (node);
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
acc = xaccAccountLookup (guid, pdata->book);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (acc, FALSE);
|
||||
|
||||
if (func)
|
||||
@ -314,7 +314,7 @@ set_taxtable (xmlNodePtr node, struct entry_pdata* pdata,
|
||||
gncTaxTableDecRef (taxtable);
|
||||
|
||||
func (pdata->entry, taxtable);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -339,7 +339,7 @@ entry_guid_handler (xmlNodePtr node, gpointer entry_pdata)
|
||||
gncEntrySetGUID (pdata->entry, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -579,7 +579,7 @@ entry_order_handler (xmlNodePtr node, gpointer entry_pdata)
|
||||
gncOrderAddEntry (order, pdata->entry);
|
||||
gncOrderCommitEdit (order);
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -604,7 +604,7 @@ entry_invoice_handler (xmlNodePtr node, gpointer entry_pdata)
|
||||
gncInvoiceAddEntry (invoice, pdata->entry);
|
||||
gncInvoiceCommitEdit (invoice);
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -629,7 +629,7 @@ entry_bill_handler (xmlNodePtr node, gpointer entry_pdata)
|
||||
gncBillAddEntry (invoice, pdata->entry);
|
||||
gncInvoiceCommitEdit (invoice);
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -214,7 +214,7 @@ invoice_guid_handler (xmlNodePtr node, gpointer invoice_pdata)
|
||||
gncInvoiceSetGUID (pdata->invoice, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -296,7 +296,7 @@ invoice_terms_handler (xmlNodePtr node, gpointer invoice_pdata)
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
term = gnc_billterm_xml_find_or_create (pdata->book, guid);
|
||||
g_assert (term);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
gncInvoiceSetTerms (pdata->invoice, term);
|
||||
|
||||
return TRUE;
|
||||
@ -312,7 +312,7 @@ invoice_posttxn_handler (xmlNodePtr node, gpointer invoice_pdata)
|
||||
guid = dom_tree_to_guid (node);
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
txn = xaccTransLookup (guid, pdata->book);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (txn, FALSE);
|
||||
|
||||
gncInvoiceSetPostedTxn (pdata->invoice, txn);
|
||||
@ -329,7 +329,7 @@ invoice_postlot_handler (xmlNodePtr node, gpointer invoice_pdata)
|
||||
guid = dom_tree_to_guid (node);
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
lot = gnc_lot_lookup (guid, pdata->book);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (lot, FALSE);
|
||||
|
||||
gncInvoiceSetPostedLot (pdata->invoice, lot);
|
||||
@ -346,7 +346,7 @@ invoice_postacc_handler (xmlNodePtr node, gpointer invoice_pdata)
|
||||
guid = dom_tree_to_guid (node);
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
acc = xaccAccountLookup (guid, pdata->book);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (acc, FALSE);
|
||||
|
||||
gncInvoiceSetPostedAcc (pdata->invoice, acc);
|
||||
|
@ -146,7 +146,7 @@ job_guid_handler (xmlNodePtr node, gpointer job_pdata)
|
||||
gncJobSetGUID (pdata->job, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ lot_id_handler (xmlNodePtr node, gpointer p)
|
||||
guid = dom_tree_to_guid (node);
|
||||
gnc_lot_set_guid (pdata->lot, *guid);
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
LEAVE ("");
|
||||
return TRUE;
|
||||
|
@ -161,7 +161,7 @@ order_guid_handler (xmlNodePtr node, gpointer order_pdata)
|
||||
gncOrderSetGUID (pdata->order, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -182,11 +182,11 @@ owner_id_handler (xmlNodePtr node, gpointer owner_pdata)
|
||||
}
|
||||
default:
|
||||
PWARN ("Invalid owner type: %d\n", gncOwnerGetType (pdata->owner));
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ price_parse_xml_sub_node (GNCPrice* p, xmlNodePtr sub_node, QofBook* book)
|
||||
GncGUID* c = dom_tree_to_guid (sub_node);
|
||||
if (!c) return FALSE;
|
||||
gnc_price_set_guid (p, c);
|
||||
g_free (c);
|
||||
guid_free (c);
|
||||
}
|
||||
else if (g_strcmp0 ("price:commodity", (char*)sub_node->name) == 0)
|
||||
{
|
||||
|
@ -593,7 +593,7 @@ sx_templ_acct_handler (xmlNodePtr node, gpointer sx_pdata)
|
||||
|
||||
account = xaccAccountLookup (templ_acct_guid, pdata->book);
|
||||
sx_set_template_account (sx, account);
|
||||
g_free (templ_acct_guid);
|
||||
guid_free (templ_acct_guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ ttentry_acct_handler (xmlNodePtr node, gpointer ttentry_pdata)
|
||||
guid = dom_tree_to_guid (node);
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
acc = xaccAccountLookup (guid, pdata->book);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (acc, FALSE);
|
||||
|
||||
gncTaxTableEntrySetAccount (pdata->ttentry, acc);
|
||||
@ -257,7 +257,7 @@ set_parent_child (xmlNodePtr node, struct taxtable_pdata* pdata,
|
||||
gncTaxTableSetGUID (table, guid);
|
||||
gncTaxTableCommitEdit (table);
|
||||
}
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
g_return_val_if_fail (table, FALSE);
|
||||
func (pdata->table, table);
|
||||
|
||||
@ -285,7 +285,7 @@ taxtable_guid_handler (xmlNodePtr node, gpointer taxtable_pdata)
|
||||
gncTaxTableSetGUID (pdata->table, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ spl_id_handler (xmlNodePtr node, gpointer data)
|
||||
|
||||
xaccSplitSetGUID (pdata->split, tmp);
|
||||
|
||||
g_free (tmp);
|
||||
guid_free (tmp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -316,7 +316,7 @@ spl_account_handler (xmlNodePtr node, gpointer data)
|
||||
|
||||
xaccAccountInsertSplit (account, pdata->split);
|
||||
|
||||
g_free (id);
|
||||
guid_free (id);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -340,7 +340,7 @@ spl_lot_handler (xmlNodePtr node, gpointer data)
|
||||
|
||||
gnc_lot_add_split (lot, pdata->split);
|
||||
|
||||
g_free (id);
|
||||
guid_free (id);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -455,7 +455,7 @@ trn_id_handler (xmlNodePtr node, gpointer trans_pdata)
|
||||
|
||||
xaccTransSetGUID ((Transaction*)trn, tmp);
|
||||
|
||||
g_free (tmp);
|
||||
guid_free (tmp);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -190,7 +190,7 @@ vendor_guid_handler (xmlNodePtr node, gpointer vendor_pdata)
|
||||
gncVendorSetGUID (pdata->vendor, guid);
|
||||
}
|
||||
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -222,7 +222,7 @@ vendor_terms_handler (xmlNodePtr node, gpointer vendor_pdata)
|
||||
g_return_val_if_fail (guid, FALSE);
|
||||
term = gnc_billterm_xml_find_or_create (pdata->book, guid);
|
||||
g_assert (term);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
gncVendorSetTerms (pdata->vendor, term);
|
||||
|
||||
return TRUE;
|
||||
@ -298,7 +298,7 @@ vendor_taxtable_handler (xmlNodePtr node, gpointer vendor_pdata)
|
||||
gncTaxTableDecRef (taxtable);
|
||||
|
||||
gncVendorSetTaxTable (pdata->vendor, taxtable);
|
||||
g_free (guid);
|
||||
guid_free (guid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -251,7 +251,7 @@ test_dom_tree_to_guid (void)
|
||||
|
||||
xmlFreeNode (test_node);
|
||||
g_free (test_guid1);
|
||||
g_free (test_guid2);
|
||||
guid_free (test_guid2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -209,12 +209,12 @@ equals_node_val_vs_guid (xmlNodePtr node, const GncGUID* id)
|
||||
|
||||
if (guid_compare (cmpid, id) == 0)
|
||||
{
|
||||
g_free (cmpid);
|
||||
guid_free (cmpid);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_free (cmpid);
|
||||
guid_free (cmpid);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ find_appropriate_node (xmlNodePtr node, Split* spl)
|
||||
{
|
||||
account_guid_good = TRUE;
|
||||
}
|
||||
g_free (accid);
|
||||
guid_free (accid);
|
||||
}
|
||||
|
||||
if (account_guid_good && amount_good)
|
||||
@ -116,10 +116,10 @@ equals_node_val_vs_split_internal (xmlNodePtr node, Split* spl)
|
||||
|
||||
if (!guid_equal (id, xaccSplitGetGUID (spl)))
|
||||
{
|
||||
g_free (id);
|
||||
guid_free (id);
|
||||
return "ids differ";
|
||||
}
|
||||
g_free (id);
|
||||
guid_free (id);
|
||||
}
|
||||
else if (g_strcmp0 ((char*)mark->name, "split:memo") == 0)
|
||||
{
|
||||
@ -191,10 +191,10 @@ equals_node_val_vs_split_internal (xmlNodePtr node, Split* spl)
|
||||
|
||||
if (!guid_equal (id, xaccAccountGetGUID (account)))
|
||||
{
|
||||
g_free (id);
|
||||
guid_free (id);
|
||||
return "accounts differ";
|
||||
}
|
||||
g_free (id);
|
||||
guid_free (id);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
@ -211,14 +211,14 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; flattens an arbitrary deep nested list into simple list. this is
|
||||
;; probably the most efficient algorithm available. '(1 2 (3 4)) -->
|
||||
;; '(1 2 3 4)
|
||||
;; '(1 2 3 4) thanks to manumanumanu on #guile
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
(define (gnc:list-flatten . lst)
|
||||
(reverse
|
||||
(let lp ((e lst) (accum '()))
|
||||
(if (list? e)
|
||||
(fold lp accum e)
|
||||
(cons e accum)))))
|
||||
(let loop ((lst lst) (acc '()))
|
||||
(cond
|
||||
((null? lst) acc)
|
||||
((pair? lst) (loop (car lst) (loop (cdr lst) acc)))
|
||||
(else (cons lst acc)))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; compatibility hack for fixing guile-2.0 string handling. this code
|
||||
|
Loading…
Reference in New Issue
Block a user