[Gnucash-changes] 2004-05-05 Joshua Sled <jsled@asynchronous.org> *

Joshua Sled jsled at cvs.gnucash.org
Wed May 5 22:18:31 EDT 2004


Log Message:
-----------
2004-05-05  Joshua Sled  <jsled at asynchronous.org>

	* src/report/report-gnome/window-report.h: Comment interface with
	recon about usage in the source tree.

	* src/report/report-gnome/gnc-plugin-page-report.c: Copy
	window-report.c implementation over to here, rename, and get
	somewhat working again. At this point, report-menu invocations
	result in a tab being created, and displaying the error message.

Tags:
----
gnucash-gnome2-dev

Modified Files:
--------------
    gnucash/src/report/report-gnome:
        gnc-plugin-page-report.c
        window-report.c
        window-report.h

Revision Data
-------------
Index: window-report.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/report/report-gnome/window-report.c,v
retrieving revision 1.15.4.8
retrieving revision 1.15.4.9
diff -Lsrc/report/report-gnome/window-report.c -Lsrc/report/report-gnome/window-report.c -u -r1.15.4.8 -r1.15.4.9
--- src/report/report-gnome/window-report.c
+++ src/report/report-gnome/window-report.c
@@ -43,12 +43,16 @@
 #include "gnc-gui-query.h"
 #include "gnc-html-history.h"
 #include "gnc-html.h"
+#include "gnc-plugin-page.h"
 #include "gnc-report.h"
+#include "gnc-main-window.h"
 #include "gnc-ui.h"
 #include "option-util.h"
 #include "window-report.h"
 #include "guile-mappings.h"
 
+#include "gnc-plugin-page-report.h"
+
 #define WINDOW_REPORT_CM_CLASS "window-report"
 
 struct gnc_report_window_s
@@ -235,18 +239,37 @@
 void
 gnc_main_window_open_report(int report_id, gint toplevel)
 {
+
+  GncMainWindow *mainWin;
+  GncPluginPage *reportPage;
+
+  mainWin = GNC_MAIN_WINDOW( gnc_ui_get_toplevel() );
+  reportPage = gnc_plugin_page_report_new( report_id );
+  gnc_main_window_open_page( mainWin, reportPage );
+
+#if 0
   // [+JSLED] id_name=[id=1]
   // [+JSLED] url: gnc-report:id=1
   char * id_name = g_strdup_printf("id=%d", report_id);  
   char * child_name = gnc_build_url (URL_TYPE_REPORT, id_name, NULL);
   g_free (id_name);
   gnc_main_window_open_report_url(child_name, toplevel);
+#endif /* 0 */
 }
 
-
 void
 gnc_main_window_open_report_url(const char * url, gint toplevel)
 {
+  GncMainWindow *mainWin;
+  GncPluginPage *reportPage;
+
+  printf( "report url: [%s]\n", url );
+
+  mainWin = GNC_MAIN_WINDOW( gnc_ui_get_toplevel() );
+  reportPage = gnc_plugin_page_report_new( 42 /* url? */ );
+  gnc_main_window_open_page( mainWin, reportPage );
+
+#if 0 
   GnomeMDIChild * reportchild = gnc_report_window_create_child(url);
   GNCMDIInfo   * maininfo = gnc_mdi_get_current();
   
@@ -266,6 +289,7 @@
     if (childwin && childwin->app && GTK_WIDGET (childwin->app)->window)
       gdk_window_raise (GTK_WIDGET (childwin->app)->window);
   }
+#endif /* 0 */
 }
 
 
@@ -620,16 +644,16 @@
   }
 }
 
-/********************************************************************
- * gnc_report_window_load_cb
- * called after a report is loaded into the gnc_html widget 
- ********************************************************************/
-
 static void
 gnc_report_window_refresh (gpointer data)
 {
   gnc_mdi_child_refresh (data);
 }
+
+/********************************************************************
+ * gnc_report_window_load_cb
+ * called after a report is loaded into the gnc_html widget 
+ ********************************************************************/
 
 static void 
 gnc_report_window_load_cb(gnc_html * html, URLType type, 
Index: window-report.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/report/report-gnome/window-report.h,v
retrieving revision 1.2.4.1
retrieving revision 1.2.4.2
diff -Lsrc/report/report-gnome/window-report.h -Lsrc/report/report-gnome/window-report.h -u -r1.2.4.1 -r1.2.4.2
--- src/report/report-gnome/window-report.h
+++ src/report/report-gnome/window-report.h
@@ -33,34 +33,62 @@
 
 /** PROTOTYPES ******************************************************/
 
+// "private"
 gnc_report_window * gnc_report_window_new(GNCMDIChildInfo * mc);
+// private; attached as 'destroy' signal
 void       gnc_report_window_destroy(gnc_report_window * rep);
+// private
 void       gnc_report_window_show_report(gnc_report_window * rw, int id);
+// scm-exposed
 void       gnc_report_window_reload(gnc_report_window * rw);
+// private
 gnc_html   * gnc_report_window_get_html(gnc_report_window * rw);
+// private
 GtkWidget  * gnc_report_window_get_container(gnc_report_window * rw);
+// private / unused[!]
 SCM        gnc_report_window_get_report(gnc_report_window * rw);
 
+// private
 void       gnc_report_window_create_menu(gnc_report_window * report, 
                                          GNCMDIChildInfo * child);
+// private
 void       gnc_report_window_create_toolbar(gnc_report_window * report, 
                                             GNCMDIChildInfo * child);
 
+// scm-exposed
 GtkWidget * gnc_report_window_default_params_editor(SCM options, SCM report);
 
+// entry-point from scm menu-extension callback [gnc:menu-extension].
 void       gnc_main_window_open_report (int report_id, gint toplevel);
+// directly called through from above
 void       gnc_main_window_open_report_url (const char * url, gint toplevel);
 
+// called from window-main, otherwise private [early in g_m_w_o_report[_url]
+// statisfaction path]
 GnomeMDIChild * gnc_report_window_create_child(const gchar * url);
+
+/**
+ * jsled:
+ * gnc_main_window_open_report_url + gnc_report_window_create_child
+ * => GtkNotebook + gnc_plugin_page stuff.
+ **/
+
+
+// called from multiple places
+// [business-gnome/dialog-invoice.c;gnome/window-register.c]; and
+// scm-exposed; 3-liner which calls gnc_main_window_open_report after handling busy-cursor.
 void       reportWindow(int id);
+// window-register; scm-exposed
 void       gnc_print_report (int report_id);
-
+// scm-exposed; ~priv
 void       gnc_report_window_add_edited_report(gnc_report_window * win, 
                                                SCM report);
+// private
 void       gnc_report_window_remove_edited_report(gnc_report_window * win, 
                                                   SCM report);
+// scm-exposed; ~priv
 void       gnc_report_raise_editor(SCM report);
-
+// module[/plugin]-init
 void       gnc_report_init (void);
 
 #endif
Index: gnc-plugin-page-report.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/report/report-gnome/Attic/gnc-plugin-page-report.c,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -Lsrc/report/report-gnome/gnc-plugin-page-report.c -Lsrc/report/report-gnome/gnc-plugin-page-report.c -u -r1.1.2.1 -r1.1.2.2
--- src/report/report-gnome/gnc-plugin-page-report.c
+++ src/report/report-gnome/gnc-plugin-page-report.c
@@ -2,6 +2,13 @@
  *
  * Copyright (C) 2004 Joshua Sled <jsled at asynchronous.org>
  *
+ * Originally from window-report.c:
+ * Copyright (C) 1997 Robin D. Clark
+ * Copyright (C) 1998 Linas Vepstas
+ * Copyright (C) 1999 Jeremy Collins ( gtk-xmhtml port )
+ * Copyright (C) 2000 Dave Peticolas
+ * Copyright (C) 2000 Bill Gribble
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
  * published by the Free Software Foundation; either version 2 of
@@ -23,14 +30,23 @@
 #include "config.h"
 
 #include <gtk/gtk.h>
+#include <g-wrap-wct.h>
+#include <libguile.h>
 
+#include "gnc-component-manager.h"
 #include "egg-menu-merge.h"
 #include "gnc-plugin-page-report.h"
 #include "messages.h"
+#include "gnc-html.h"
+#include "gnc-html-history.h"
+#include "gnc-ui.h"
 #include "gnc-ui-util.h"
 #include "gnc-engine-util.h"
+#include "option-util.h"
+
+#define WINDOW_REPORT_CM_CLASS "window-report"
 
-static short module = MOD_GUI;
+static short module = MOD_TEST; // MOD_GUI; // MOD_REPORT;?
 
 static GObjectClass *parent_class = NULL;
 static GList *active_pages = NULL;
@@ -39,15 +55,59 @@
 static void gnc_plugin_page_report_init( GncPluginPageReport *plugin_page );
 static void gnc_plugin_page_report_finalize (GObject *object);
 
+static void gnc_plugin_page_report_set_report_id( GncPluginPageReport *page, int reportId );
+
 static GtkWidget* gnc_plugin_page_report_create_widget( GncPluginPage *plugin_page );
 static void gnc_plugin_page_report_destroy_widget( GncPluginPage *plugin_page );
 static void gnc_plugin_page_report_merge_actions( GncPluginPage *plugin_page, EggMenuMerge *merge );
 static void gnc_plugin_page_report_unmerge_actions( GncPluginPage *plugin_page, EggMenuMerge *merge );
 static void gnc_plugin_page_report_destroy_widget( GncPluginPage *plugin_page );
 
+static int gnc_plugin_page_report_check_urltype(URLType t);
+static void gnc_plugin_page_report_load_cb(gnc_html * html, URLType type,
+                                      const gchar * location, const gchar * label,
+                                      gpointer data);
+static void gnc_plugin_page_report_draw_cb(GtkWidget *unused, GdkRectangle *unused1, gpointer data);
+static void gnc_plugin_page_report_refresh (gpointer data);
+static void gnc_plugin_page_report_set_fwd_button(GncPluginPageReportPrivate * win, int enabled);
+static void gnc_plugin_page_report_set_back_button(GncPluginPageReportPrivate * win, int enabled);
+static void gnc_plugin_page_report_history_destroy_cb(gnc_html_history_node * node, gpointer user_data);
+static void close_handler(gpointer user_data);
+void gnc_plugin_page_report_destroy(GncPluginPageReportPrivate * win);
+static void gnc_plugin_page_report_option_change_cb(gpointer data);
+
+void gnc_plugin_page_report_remove_edited_report(GncPluginPageReportPrivate * win, SCM report);
+void gnc_plugin_page_report_add_edited_report(GncPluginPageReportPrivate * win, SCM report);
+void gnc_plugin_page_report_raise_editor(SCM report);
+
 struct GncPluginPageReportPrivate
 {
-        //ExtensionInfo *extInf;
+        /// The report-id
+        int reportId;
+
+        /// The report which this Page is satisifying
+        SCM cur_report;
+        /// The Option DB for this report.
+        GNCOptionDB *cur_odb;
+        SCM option_change_cb_id;
+
+        /* initial_report is special; it's the one that's saved and 
+         * restored.  The name_change_callback only gets called when
+         * the initial_report name is changed. */
+        SCM          initial_report; 
+        GNCOptionDB  * initial_odb;
+        SCM          name_change_cb_id;
+        
+        SCM          edited_reports;
+
+        /* This is set to mark the fact that we need to reload the html */
+        gboolean	need_reload;
+
+        /// the gnc_html abstraction this PluginPage contains
+        gnc_html *html;
+
+        /// the container the above HTML widget is in.
+        GtkContainer *container;
 };
 
 GType
@@ -128,12 +188,282 @@
 
 static
 GtkWidget*
-gnc_plugin_page_report_create_widget( GncPluginPage *plugin_page )
+gnc_plugin_page_report_create_widget( GncPluginPage *page )
 {
-        // FIXME: add a notebook tab to the window; display the report.
-        return NULL;
+        GncPluginPageReportPrivate *report;
+        URLType            type;
+        char * id_name;
+        char * child_name;
+        char               * url_location = NULL;
+        char               * url_label = NULL;
+
+        g_assert( GNC_PLUGIN_PAGE_REPORT( page ) );
+        g_assert( page->priv != NULL );
+
+        report = (GncPluginPageReportPrivate*)page->priv;
+
+        DEBUG( "creating widget for %p / %d", page, report->reportId  );
+        
+        report->html              = gnc_html_new( GTK_WINDOW(gnc_ui_get_toplevel()) );
+        report->cur_report        = SCM_BOOL_F;
+        report->initial_report    = SCM_BOOL_F;
+        report->edited_reports    = SCM_EOL;
+        report->name_change_cb_id = SCM_BOOL_F;
+
+        scm_protect_object(report->cur_report);
+        scm_protect_object(report->initial_report);
+        scm_protect_object(report->edited_reports);
+
+        gnc_html_history_set_node_destroy_cb(gnc_html_get_history(report->html),
+                                             gnc_plugin_page_report_history_destroy_cb,
+                                             (gpointer)report);
+  
+        report->container = GTK_CONTAINER(gtk_frame_new(NULL));
+        gtk_frame_set_shadow_type(GTK_FRAME(report->container), GTK_SHADOW_NONE);
+  
+        gtk_container_add(GTK_CONTAINER(report->container), 
+                          gnc_html_get_widget(report->html));
+  
+        gnc_register_gui_component( WINDOW_REPORT_CM_CLASS, NULL,
+                                    close_handler, report );
+  
+        gnc_html_set_urltype_cb(report->html, gnc_plugin_page_report_check_urltype);
+        gnc_html_set_load_cb(report->html, gnc_plugin_page_report_load_cb, report);
+
+        // FIXME.  This is f^-1(f(x)), isn't it?
+        DEBUG( "id=%d", report->reportId );
+        id_name = g_strdup_printf("id=%d", report->reportId );
+        child_name = gnc_build_url( URL_TYPE_REPORT, id_name, NULL );
+        type = gnc_html_parse_url( report->html, child_name, &url_location, &url_label);
+        DEBUG( "passing id_name=[%s] child_name=[%s] type=[%s], location=[%s], label=[%s]",
+               id_name, child_name, type, url_location, url_label );
+        gnc_html_show_url(report->html, type, url_location, url_label, 0);
+
+        gtk_signal_connect(GTK_OBJECT(report->container), "draw",
+                           GTK_SIGNAL_FUNC(gnc_plugin_page_report_draw_cb), report);
+  
+        gtk_widget_show_all( GTK_WIDGET(report->container) );
+
+        return GTK_WIDGET( report->container );
+}
+
+/********************************************************************
+ * gnc_plugin_page_report_check_urltype
+ * is it OK to show a certain URLType in this window?
+ ********************************************************************/
+static int
+gnc_plugin_page_report_check_urltype(URLType t)
+{
+  if (!safe_strcmp (t, URL_TYPE_REPORT)) {
+    return TRUE;
+  } else {
+    return FALSE;
+  }
+}
+
+
+/********************************************************************
+ * gnc_plugin_page_report_load_cb
+ * called after a report is loaded into the gnc_html widget 
+ ********************************************************************/
+static void 
+gnc_plugin_page_report_load_cb(gnc_html * html, URLType type, 
+                               const gchar * location, const gchar * label, 
+                               gpointer data)
+{
+        GncPluginPageReportPrivate *win = data;
+        int  report_id;
+        SCM  find_report    = scm_c_eval_string("gnc:find-report");
+        SCM  get_options    = scm_c_eval_string("gnc:report-options");
+        SCM  set_needs_save = scm_c_eval_string("gnc:report-set-needs-save?!");
+        SCM  inst_report;
+
+        ENTER( "load_cb: type=[%s], location=[%s], label=[%s]",
+               type, location, label );
+        
+        /* we get this callback if a new report is requested to be loaded OR
+         * if any URL is clicked.  If an options URL is clicked, we want to
+         * know about it */
+        if (!safe_strcmp (type, URL_TYPE_REPORT)
+            && location
+            && (strlen(location) > 3)
+            && !strncmp("id=", location, 3)) {
+                sscanf(location+3, "%d", &report_id);
+                DEBUG( "parsed id=%d", report_id );
+        }
+        else if (!safe_strcmp( type, URL_TYPE_OPTIONS)
+                 && location
+                 && (strlen(location) > 10)
+                 && !strncmp("report-id=", location, 10)) {
+                sscanf(location+10, "%d", &report_id);
+                inst_report = scm_call_1(find_report, scm_int2num(report_id));
+                if (inst_report != SCM_BOOL_F) {
+                        gnc_plugin_page_report_add_edited_report(win, inst_report);
+                }
+                LEAVE( "a" );
+                return;
+        } else {
+                LEAVE( " unknown URL type [%s] location [%s]", type, location );
+                return;
+        }
+        
+        /* get the inst-report from the Scheme-side hash, and get its
+         * options and editor thunk */
+        if ((inst_report = scm_call_1(find_report, scm_int2num(report_id)))
+            == SCM_BOOL_F) {
+                LEAVE( "error getting inst_report" );
+                return;
+        }
+        
+        if (win->initial_report == SCM_BOOL_F) {    
+                scm_unprotect_object(win->initial_report);
+                win->initial_report = inst_report;
+                scm_protect_object(win->initial_report);
+                
+                scm_call_2(set_needs_save, inst_report, SCM_BOOL_T);
+                
+                win->initial_odb = gnc_option_db_new(scm_call_1(get_options, inst_report));  
+                win->name_change_cb_id = 
+                        gnc_option_db_register_change_callback(win->initial_odb,
+                                                               gnc_plugin_page_report_refresh,
+                                                               //win->mc,
+                                                               win,
+                                                               "General", "Report name");
+        }
+        
+        if ((win->cur_report != SCM_BOOL_F) && (win->cur_odb != NULL)) {
+                gnc_option_db_unregister_change_callback_id(win->cur_odb,
+                                                            win->option_change_cb_id);
+                gnc_option_db_destroy(win->cur_odb);
+                win->cur_odb = NULL;
+        }
+        
+        if (win->cur_report != SCM_BOOL_F)
+                scm_unprotect_object(win->cur_report);
+        win->cur_report = inst_report;
+        scm_protect_object(win->cur_report);
+        
+        win->cur_odb = gnc_option_db_new(scm_call_1(get_options, inst_report));  
+        win->option_change_cb_id = 
+                gnc_option_db_register_change_callback(win->cur_odb,
+                                                       gnc_plugin_page_report_option_change_cb,
+                                                       win, NULL, NULL);
+        
+        if (gnc_html_history_forward_p(gnc_html_get_history(win->html))) {
+                gnc_plugin_page_report_set_fwd_button(win, TRUE); 
+        } else {
+                gnc_plugin_page_report_set_fwd_button(win, FALSE); 
+        }
+        
+        if(gnc_html_history_back_p(gnc_html_get_history(win->html))) {
+                gnc_plugin_page_report_set_back_button(win, TRUE); 
+        } else {
+                gnc_plugin_page_report_set_back_button(win, FALSE); 
+        }
+
+        LEAVE( "done" );
 }
 
+static void
+gnc_plugin_page_report_option_change_cb(gpointer data)
+{
+        GncPluginPageReportPrivate * report = data;
+        SCM               dirty_report = scm_c_eval_string("gnc:report-set-dirty?!");
+
+        if (report->cur_report != SCM_BOOL_F) {
+                /* it's probably already dirty, but make sure */
+                scm_call_2(dirty_report, report->cur_report, SCM_BOOL_T);
+
+                /* Now queue the fact that we need to reload this report */
+                report->need_reload = TRUE;
+                gtk_widget_queue_draw(GTK_WIDGET(report->container));
+        }
+}
+
+static void 
+gnc_plugin_page_report_history_destroy_cb(gnc_html_history_node * node, 
+                                          gpointer user_data)
+{
+        static SCM         remover = SCM_BOOL_F;
+        int                report_id;
+  
+        if(remover == SCM_BOOL_F) {
+                remover = scm_c_eval_string("gnc:report-remove-by-id");
+        }
+  
+        if(node && 
+           !safe_strcmp (node->type, URL_TYPE_REPORT) && 
+           !strncmp("id=", node->location, 3)) {
+                sscanf(node->location+3, "%d", &report_id);
+                /*    printf("unreffing report %d and children\n", report_id);
+                      scm_call_1(remover, scm_int2num(report_id)); */
+        }
+        else {
+                return;
+        }
+}
+
+/* We got a draw event.  See if we need to reload the report */
+static void
+gnc_plugin_page_report_draw_cb(GtkWidget *unused, GdkRectangle *unused1, gpointer data)
+{
+        GncPluginPageReportPrivate *win = data;
+
+        DEBUG( "drawin'" );
+        ENTER( "report_draw" );
+        if (!win->need_reload)
+        {
+                LEAVE( "no reload needed" );
+                return;
+        }
+
+        win->need_reload = FALSE;
+        gnc_html_reload(win->html);
+        LEAVE( "reload forced" );
+}
+
+// @param data is actually GncPluginPageReportPrivate
+static void
+gnc_plugin_page_report_refresh (gpointer data)
+{
+        // FIXME
+        DEBUG( "report-refresh called" );
+        return;
+}
+
+static void
+gnc_plugin_page_report_set_fwd_button(GncPluginPageReportPrivate * win, int enabled)
+{
+#if 0 /* as it says -- broken code. */
+        GnomeApp    * app = win->mc->app;
+        GnomeUIInfo * info;
+
+        /* the code below is broken, so just return */
+        return;
+
+        if(app) {
+                info = gnome_mdi_get_child_menu_info(app);
+                if(info) gtk_widget_set_sensitive(info[1].widget, enabled);
+        }
+#endif /* 0 -- broken */
+}
+
+static void
+gnc_plugin_page_report_set_back_button(GncPluginPageReportPrivate * win, int enabled)
+{
+#if 0 /* as is says: broken */
+        GnomeApp    * app = win->mc->app;
+        GnomeUIInfo * info;
+
+        /* the code below is broken, so just return */
+        return;
+
+        if(app) {
+                info = gnome_mdi_get_child_menu_info(app);
+                if(info) gtk_widget_set_sensitive(info[0].widget, enabled);
+        }
+#endif /* 0 */
+}
 
 static
 void
@@ -142,12 +472,55 @@
         // FIXME: cleanup resources.
 }
 
+/********************************************************************
+ * gnc_report_window_destroy 
+ * free and destroy a window 
+ ********************************************************************/
+void
+gnc_plugin_page_report_destroy(GncPluginPageReportPrivate * win)
+{
+        SCM  get_editor = scm_c_eval_string("gnc:report-editor-widget");
+        SCM  set_editor = scm_c_eval_string("gnc:report-set-editor-widget!");
+        SCM  edited, editor; 
+
+        gnc_unregister_gui_component_by_data (WINDOW_REPORT_CM_CLASS, win);
+
+        /* close any open editors */
+        for(edited = scm_list_copy(win->edited_reports); !SCM_NULLP(edited); 
+            edited = SCM_CDR(edited)) {
+                editor = scm_call_1(get_editor, SCM_CAR(edited));
+                scm_call_2(set_editor, SCM_CAR(edited), SCM_BOOL_F);
+                if(editor != SCM_BOOL_F) {
+                        gtk_widget_destroy(GTK_WIDGET(gw_wcp_get_ptr(editor)));
+                }
+        }
+
+        if(win->initial_odb) {
+                gnc_option_db_unregister_change_callback_id(win->initial_odb, 
+                                                            win->name_change_cb_id);
+    
+                gnc_option_db_destroy(win->initial_odb);
+                win->initial_odb = NULL;
+        }
+
+        gnc_html_destroy(win->html);
+  
+        win->container     = NULL;
+        win->html          = NULL;
+  
+        scm_unprotect_object(win->cur_report);
+        scm_unprotect_object(win->edited_reports);
+  
+        g_free(win);
+}
+
 static
 void
 gnc_plugin_page_report_merge_actions( GncPluginPage *plugin_page,
                                       EggMenuMerge *merge )
 {
         // FIXME: ui-merge
+        // toolbar, primarily
 }
 
 static
@@ -155,7 +528,17 @@
 gnc_plugin_page_report_unmerge_actions( GncPluginPage *plugin_page,
                                         EggMenuMerge *merge )
 {
-        // FIXME: ui-merge
+        // FIXME: ui-unmerge
+}
+
+static void
+gnc_plugin_page_report_set_report_id( GncPluginPageReport *page, int reportId )
+{
+        GncPluginPageReportPrivate *priv;
+        priv = page->priv;
+        priv->reportId = reportId;
+        DEBUG( "setting reportid = %d / %d",
+               reportId, priv->reportId );
 }
 
 static void
@@ -201,8 +584,43 @@
 gnc_plugin_page_report_new( int reportId )
 {
 	GncPluginPageReport *plugin_page;
-	plugin_page = g_object_new (GNC_TYPE_PLUGIN_PAGE_REPORT, NULL);
-        DEBUG( "creating report with id %d", reportId );
-	return GNC_PLUGIN_PAGE (plugin_page);
+
+	plugin_page = g_object_new( GNC_TYPE_PLUGIN_PAGE_REPORT, NULL );
+        gnc_plugin_page_report_set_report_id( plugin_page, reportId );
+        DEBUG( "set %d on page %p", reportId, plugin_page );
+	return GNC_PLUGIN_PAGE( plugin_page );
+}
+
+void
+gnc_plugin_page_report_remove_edited_report(GncPluginPageReportPrivate * win, SCM report)
+{ 
+        SCM new_edited = scm_delete(win->edited_reports, report);
+        scm_unprotect_object(win->edited_reports);
+        win->edited_reports = new_edited;
+        scm_protect_object(win->edited_reports);
+}
+
+void
+gnc_plugin_page_report_add_edited_report(GncPluginPageReportPrivate * win, SCM report)
+{
+        SCM new_edited = scm_cons(report, win->edited_reports);
+        scm_unprotect_object(win->edited_reports);
+        win->edited_reports = new_edited;
+        scm_protect_object(win->edited_reports);
+}
+
+void
+gnc_plugin_page_report_raise_editor(SCM report)
+{
+        SCM get_editor = scm_c_eval_string("gnc:report-editor-widget");
+        SCM editor = scm_call_1(get_editor, report);
+        gtk_window_present(gw_wcp_get_ptr(editor));
 }
 
+static void
+close_handler (gpointer user_data)
+{
+        GncPluginPageReportPrivate *win = user_data;  
+        DEBUG("in close handler\n");
+        gnc_plugin_page_report_destroy (win);
+}


More information about the Gnucash-changes mailing list