[Gnucash-changes] Add saving of reports.

Christian Stimming cstim at cvs.gnucash.org
Mon Jun 21 16:25:14 EDT 2004


Log Message:
-----------
Add saving of reports.

2004-06-18  Christian Stimming  <stimming at tuhh.de>

	* src/scm/main-window.scm, src/scm/main.scm: Added example Menu
	item "File -> Save all reports" that will call the new report
	saving function for all reports. Reports are appended to
	~/.gnucash/saved-reports-1.8 . This would need more work so that
	not all reports are saved but only the currently selected one --
	any volunteer may feel free to add that.

	* src/report/report-system/report.scm, report-system.scm: Added
	gnc:report-generate-saved-forms that will generate the scheme code
	necessary to create a new report from the saved options of an old
	report (merged from 1-8-branch).

Modified Files:
--------------
    gnucash:
        ChangeLog
    gnucash/src/scm:
        main-window.scm
        main.scm
    gnucash/src/report/report-system:
        report-system.scm
        report.scm

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1816
retrieving revision 1.1817
diff -LChangeLog -LChangeLog -u -r1.1816 -r1.1817
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,17 @@
+2004-06-18  Christian Stimming  <stimming at tuhh.de>
+
+	* src/scm/main-window.scm, src/scm/main.scm: Added example Menu
+	item "File -> Save all reports" that will call the new report
+	saving function for all reports. Reports are appended to
+	~/.gnucash/saved-reports-1.8 . This would need more work so that
+	not all reports are saved but only the currently selected one --
+	any volunteer may feel free to add that.
+
+	* src/report/report-system/report.scm, report-system.scm: Added
+	gnc:report-generate-saved-forms that will generate the scheme code
+	necessary to create a new report from the saved options of an old
+	report (merged from 1-8-branch).
+
 2004-06-18  Derek Atkins  <derek at ihtfp.com>
 
 	* src/scm/paths.scm: create gnc:current-saved-reports, as
Index: main.scm
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/scm/main.scm,v
retrieving revision 1.123
retrieving revision 1.124
diff -Lsrc/scm/main.scm -Lsrc/scm/main.scm -u -r1.123 -r1.124
--- src/scm/main.scm
+++ src/scm/main.scm
@@ -78,6 +78,7 @@
 (export gnc:make-new-acct-tree-window)  
 (export gnc:free-acct-tree-window)
 (export gnc:main-window-save-state)
+(export gnc:main-window-save-report)
 
 ;; from printing/print-check.scm
 (export make-print-check-format)
@@ -508,6 +509,15 @@
     (lambda ()
       (gnc:main-window-open-report (gnc:make-welcome-report) #f))))
 
+  ;; The "save current report" entry
+  (gnc:add-extension
+   (gnc:make-menu-item
+    (N_ "_Save all current reports")
+    (N_ "Save all the current report in ~/.gnucash/saved-reports-1.8 so that they are accessible as menu entries in the report menu. Effects are only visible at next startup of gnucash.")
+    (list gnc:window-name-main "_File" "_Export")
+    (lambda ()
+      (gnc:main-window-save-report))))
+
   (gnc:hook-run-danglers gnc:*startup-hook*)
 
   (if (gnc:config-var-value-get gnc:*loglevel*)
Index: main-window.scm
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/scm/main-window.scm,v
retrieving revision 1.26
retrieving revision 1.27
diff -Lsrc/scm/main-window.scm -Lsrc/scm/main-window.scm -u -r1.26 -r1.27
--- src/scm/main-window.scm
+++ src/scm/main-window.scm
@@ -162,6 +162,18 @@
               (force-output)))
           (gnc:mdi-save (gnc:mdi-get-current) book-url)))))
 
+(define (gnc:main-window-save-report)
+  (let ((conf-file-name gnc:current-saved-reports))
+    ;;(display conf-file-name)
+    (with-output-to-port (open-file conf-file-name "a")
+      (lambda ()
+	(hash-fold
+	 (lambda (k v p)
+	   (display
+	    (gnc:report-generate-saved-forms v)))
+	 #t *gnc:_reports_*)
+	(force-output)))))
+
 (define (gnc:main-window-book-close-handler session)
     (gnc:main-window-save-state session)
 
Index: report-system.scm
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/report/report-system/report-system.scm,v
retrieving revision 1.21
retrieving revision 1.22
diff -Lsrc/report/report-system/report-system.scm -Lsrc/report/report-system/report-system.scm -u -r1.21 -r1.22
--- src/report/report-system/report-system.scm
+++ src/report/report-system/report-system.scm
@@ -105,6 +105,7 @@
 (export *gnc:_reports_*)
 (export gnc:report-template-new-options/name)
 (export gnc:report-template-menu-name/name)
+(export gnc:report-template-renderer/name)
 (export gnc:report-template-new-options)
 (export gnc:report-template-version)
 (export gnc:report-template-name)
@@ -146,6 +147,7 @@
 (export gnc:find-report)
 (export gnc:find-report-template)
 (export gnc:report-generate-restore-forms)
+(export gnc:report-generate-saved-forms)
 (export gnc:report-render-html)
 (export gnc:report-run)
 (export gnc:report-templates-for-each)
Index: report.scm
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/report/report-system/report.scm,v
retrieving revision 1.12
retrieving revision 1.13
diff -Lsrc/report/report-system/report.scm -Lsrc/report/report-system/report.scm -u -r1.12 -r1.13
--- src/report/report-system/report.scm
+++ src/report/report-system/report.scm
@@ -135,6 +135,12 @@
 	    (gnc:report-template-name templ))
         #f)))
 
+(define (gnc:report-template-renderer/name template-name)
+  (let ((templ (hash-ref *gnc:_report-templates_* template-name)))
+    (if templ
+	(gnc:report-template-renderer templ)
+        #f)))
+
 (define (gnc:report-template-new-options report-template)
   (let ((generator (gnc:report-template-options-generator report-template))
         (namer 
@@ -353,6 +359,31 @@
     #f "  (gnc:restore-report ~S ~S options))\n"
     (gnc:report-id report) (gnc:report-type report))))
 
+(define (gnc:report-generate-saved-forms report)
+  ;; clean up the options if necessary.  this is only needed 
+  ;; in special cases.  
+  (let* ((template 
+          (hash-ref  *gnc:_report-templates_* 
+                     (gnc:report-type report)))
+         (thunk (gnc:report-template-options-cleanup-cb template)))
+    (if thunk 
+        (thunk report)))
+  
+  ;; save them 
+  (string-append 
+   ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+   (simple-format #f ";; Options for saved report ~S, based on template ~S\n"
+		  (gnc:report-name report) (gnc:report-type report))
+   (simple-format
+    #f "(let ()\n (define (options-gen)\n  (let ((options (gnc:report-template-new-options/name ~S)))\n"
+    (gnc:report-type report))
+   (gnc:generate-restore-forms (gnc:report-options report) "options")
+   "  options))\n"
+   (simple-format 
+    #f " (gnc:define-report \n  'version 1\n  'name ~S\n  'options-generator options-gen\n  'renderer (gnc:report-template-renderer/name ~S)))\n\n"
+    (gnc:report-name report)
+    (gnc:report-type report))))
+
 (define (gnc:report-render-html report headers?)
   (if (and (not (gnc:report-dirty? report))
            (gnc:report-ctext report))


More information about the gnucash-changes mailing list