From e657b59b2c2b3a42f49e766a857c1b14d2a250b8 Mon Sep 17 00:00:00 2001 From: Dave Peticolas Date: Thu, 13 Sep 2001 10:02:03 +0000 Subject: [PATCH] Refactor options url handler. Refactor report menu setup. Fix missing gnc:make-welcome report export. Fix missing slib use-module. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5368 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/gnome-utils/gnc-html.c | 31 +------ src/gnome/top-level.c | 50 ++++++++++- src/report/report-system/report-system.scm | 13 +++ src/report/report-system/report.scm | 84 +------------------ .../utility-reports/utility-reports.scm | 1 + src/report/utility-reports/view-column.scm | 3 + src/scm/main.scm | 80 ++++++++++++++++++ 7 files changed, 151 insertions(+), 111 deletions(-) diff --git a/src/gnome-utils/gnc-html.c b/src/gnome-utils/gnc-html.c index 962a126947..51404b971e 100644 --- a/src/gnome-utils/gnc-html.c +++ b/src/gnome-utils/gnc-html.c @@ -863,30 +863,6 @@ gnc_html_submit_cb(GtkHTML * html, const gchar * method, } -/******************************************************************** - * gnc_html_open_options - * open an editor for report parameters - ********************************************************************/ - -static void -gnc_html_open_options(gnc_html * html, const gchar * location) { - int report_id; - SCM find_report = gh_eval_str("gnc:find-report"); - SCM start_editor = gh_eval_str("gnc:report-edit-options"); - SCM report; - - /* href="gnc-options:report-id=2676" */ - if(!strncmp("report-id=", location, 10)) { - sscanf(location+10, "%d", &report_id); - report = gh_call1(find_report, gh_int2scm(report_id)); - gh_call1(start_editor, report); - } - else { - gnc_warning_dialog(_("Badly formed options URL.")); - } -} - - /******************************************************************** * gnc_html_open_help * open a help window @@ -1033,10 +1009,6 @@ gnc_html_show_url(gnc_html * html, URLType type, } switch(type) { - case URL_TYPE_OPTIONS: - gnc_html_open_options(html, location); - break; - case URL_TYPE_HELP: gnc_html_open_help(html, location, label, new_window); break; @@ -1080,8 +1052,7 @@ gnc_html_show_url(gnc_html * html, URLType type, case URL_TYPE_ACTION: gnc_html_history_append(html->history, - gnc_html_history_node_new(type, - location, label)); + gnc_html_history_node_new(type, location, label)); gnc_html_submit_cb(GTK_HTML(html->html), "get", gnc_build_url(type, location, label), NULL, (gpointer)html); diff --git a/src/gnome/top-level.c b/src/gnome/top-level.c index dca67b6b2e..9a17b5e5bf 100644 --- a/src/gnome/top-level.c +++ b/src/gnome/top-level.c @@ -325,6 +325,54 @@ gnc_html_report_url_cb (const char *location, const char *label, return TRUE; } +static gboolean +gnc_html_options_url_cb (const char *location, const char *label, + gboolean new_window, GNCURLResult *result) +{ + SCM find_report = gh_eval_str ("gnc:find-report"); + SCM start_editor = gh_eval_str ("gnc:report-edit-options"); + SCM report; + int report_id; + + g_return_val_if_fail (location != NULL, FALSE); + g_return_val_if_fail (result != NULL, FALSE); + + result->load_to_stream = FALSE; + + /* href="gnc-options:report-id=2676" */ + if (strncmp ("report-id=", location, 10) == 0) + { + if (sscanf (location + 10, "%d", &report_id) != 1) + { + result->error_message = + g_strdup_printf (_("Badly formed options URL: %s"), location); + + return FALSE; + } + + report = gh_call1 (find_report, gh_int2scm (report_id)); + if (report == SCM_UNDEFINED || + report == SCM_BOOL_F) + { + result->error_message = + g_strdup_printf (_("Badly report id: %s"), location); + + return FALSE; + } + + gh_call1 (start_editor, report); + + return TRUE; + } + else + { + result->error_message = + g_strdup_printf (_("Badly formed options URL: %s"), location); + + return FALSE; + } +} + /* ============================================================== */ /* These gnucash_ui_init and gnucash_ui functions are just hacks to get @@ -473,8 +521,8 @@ gnucash_ui_init(void) gnc_html_register_url_handler (URL_TYPE_REGISTER, gnc_html_register_url_cb); - gnc_html_register_url_handler (URL_TYPE_REPORT, gnc_html_report_url_cb); + gnc_html_register_url_handler (URL_TYPE_OPTIONS, gnc_html_options_url_cb); /* initialize gnome MDI and set up application window defaults */ app = gnc_main_window_new(); diff --git a/src/report/report-system/report-system.scm b/src/report/report-system/report-system.scm index 34e04cc875..240ad49d8d 100644 --- a/src/report/report-system/report-system.scm +++ b/src/report/report-system/report-system.scm @@ -102,6 +102,18 @@ (export gnc:report-template-new-options/name) (export gnc:report-template-menu-name/name) (export gnc:report-template-new-options) +(export gnc:report-template-version) +(export gnc:report-template-name) +(export gnc:report-template-options-generator) +(export gnc:report-template-options-editor) +(export gnc:report-template-options-cleanup-cb) +(export gnc:report-template-options-changed-cb) +(export gnc:report-template-renderer) +(export gnc:report-template-in-menu?) +(export gnc:report-template-menu-path) +(export gnc:report-template-menu-name) +(export gnc:report-template-menu-tip) +(export gnc:report-template-export-thunk) (export gnc:report-type) (export gnc:report-set-type!) (export gnc:report-id) @@ -132,6 +144,7 @@ (export gnc:report-generate-restore-forms) (export gnc:report-render-html) (export gnc:report-run) +(export gnc:report-templates-for-each) ;; html-barchart.scm diff --git a/src/report/report-system/report.scm b/src/report/report-system/report.scm index 92339db2fe..015ab6c92a 100644 --- a/src/report/report-system/report.scm +++ b/src/report/report-system/report.scm @@ -47,84 +47,6 @@ (define gnc:pagename-display (N_ "Display")) (define gnc:optname-reportname (N_ "Report name")) -(define (gnc:report-menu-setup) - ;; since this menu gets added to every child window, we say it - ;; comes after the "_File" menu. - (define menu (gnc:make-menu gnc:menuname-reports (list "_File"))) - (define menu-namer (gnc:new-menu-namer)) - (define tax-menu (gnc:make-menu gnc:menuname-taxes - (list gnc:menuname-reports ""))) - (define income-expense-menu - (gnc:make-menu gnc:menuname-income-expense - (list gnc:menuname-reports ""))) - (define asset-liability-menu - (gnc:make-menu gnc:menuname-asset-liability - (list gnc:menuname-reports ""))) - (define utility-menu - (gnc:make-menu gnc:menuname-utility - (list gnc:menuname-reports ""))) - (define menu-hash (make-hash-table 23)) - - (define (add-report-menu-item name report) - (if (gnc:report-template-in-menu? report) - (let ((title (string-append (_ "Report") ": " (_ name))) - (menu-path (gnc:report-template-menu-path report)) - (menu-name (gnc:report-template-menu-name report)) - (menu-tip (gnc:report-template-menu-tip report)) - (item #f)) - - (if (not menu-path) - (set! menu-path '("")) - (set! menu-path - (append menu-path '("")))) - - (set! menu-path (append (list gnc:menuname-reports) menu-path)) - - (if menu-name (set! name menu-name)) - - (if (not menu-tip) - (set! menu-tip - (sprintf #f (_ "Display the %s report") (_ name)))) - - (set! item - (gnc:make-menu-item - ((menu-namer 'add-name) name) - menu-tip - menu-path - (lambda () - (let ((rept (gnc:make-report - (gnc:report-template-name report)))) - (gnc:main-window-open-report rept #f))))) - (gnc:add-extension item)))) - - (gnc:add-extension menu) - - ;; add the menu option to edit style sheets - (gnc:add-extension - (gnc:make-menu-item - ((menu-namer 'add-name) (_ "Style Sheets...")) - (_ "Edit report style sheets.") - (list "_Settings" "") - (lambda () - (gnc:style-sheet-dialog-open)))) - -; (gnc:add-extension tax-menu) - (gnc:add-extension income-expense-menu) - (gnc:add-extension asset-liability-menu) - (gnc:add-extension utility-menu) - - ;; push reports (new items added on top of menu) - (hash-for-each add-report-menu-item *gnc:_report-templates_*) - - ;; the Welcome to Gnucash-1.6 extravaganza - (gnc:add-extension - (gnc:make-menu-item - ((menu-namer 'add-name) (_ "Welcome Extravaganza")) - (_ "Welcome-to-GnuCash screen") - (list gnc:menuname-reports gnc:menuname-utility "") - (lambda () - (gnc:make-welcome-report))))) - (define (make-record-type "" ;; The data items in a report record @@ -485,5 +407,7 @@ ;; (display html) (newline) html) #f))))) - -(gnc:hook-add-dangler gnc:*ui-startup-hook* gnc:report-menu-setup) + +(define (gnc:report-templates-for-each thunk) + (hash-for-each (lambda (name template) (thunk name template)) + *gnc:_report-templates_*)) diff --git a/src/report/utility-reports/utility-reports.scm b/src/report/utility-reports/utility-reports.scm index 9d8040516d..b5d1192559 100644 --- a/src/report/utility-reports/utility-reports.scm +++ b/src/report/utility-reports/utility-reports.scm @@ -12,3 +12,4 @@ (use-modules (gnucash report view-column)) (use-modules (gnucash report welcome-to-gnucash)) +(export gnc:make-welcome-report) diff --git a/src/report/utility-reports/view-column.scm b/src/report/utility-reports/view-column.scm index 333e65eddc..874f92809c 100644 --- a/src/report/utility-reports/view-column.scm +++ b/src/report/utility-reports/view-column.scm @@ -28,6 +28,9 @@ (define-module (gnucash report view-column)) +(use-modules (ice-9 slib)) +(require 'printf) + (use-modules (gnucash gnc-module)) (gnc:module-load "gnucash/report/report-system" 0) diff --git a/src/scm/main.scm b/src/scm/main.scm index cdf3f39940..dcb1e6ed9f 100644 --- a/src/scm/main.scm +++ b/src/scm/main.scm @@ -34,6 +34,84 @@ val))) (setenv pathname new-value))) +(define (gnc:report-menu-setup) + ;; since this menu gets added to every child window, we say it + ;; comes after the "_File" menu. + (define menu (gnc:make-menu gnc:menuname-reports (list "_File"))) + (define menu-namer (gnc:new-menu-namer)) + (define tax-menu (gnc:make-menu gnc:menuname-taxes + (list gnc:menuname-reports ""))) + (define income-expense-menu + (gnc:make-menu gnc:menuname-income-expense + (list gnc:menuname-reports ""))) + (define asset-liability-menu + (gnc:make-menu gnc:menuname-asset-liability + (list gnc:menuname-reports ""))) + (define utility-menu + (gnc:make-menu gnc:menuname-utility + (list gnc:menuname-reports ""))) + (define menu-hash (make-hash-table 23)) + + (define (add-template-menu-item name template) + (if (gnc:report-template-in-menu? template) + (let ((title (string-append (_ "Report") ": " (_ name))) + (menu-path (gnc:report-template-menu-path template)) + (menu-name (gnc:report-template-menu-name template)) + (menu-tip (gnc:report-template-menu-tip template)) + (item #f)) + + (if (not menu-path) + (set! menu-path '("")) + (set! menu-path + (append menu-path '("")))) + + (set! menu-path (append (list gnc:menuname-reports) menu-path)) + + (if menu-name (set! name menu-name)) + + (if (not menu-tip) + (set! menu-tip + (sprintf #f (_ "Display the %s report") (_ name)))) + + (set! item + (gnc:make-menu-item + ((menu-namer 'add-name) name) + menu-tip + menu-path + (lambda () + (let ((report (gnc:make-report + (gnc:report-template-name template)))) + (gnc:main-window-open-report report #f))))) + (gnc:add-extension item)))) + + (gnc:add-extension menu) + + ;; add the menu option to edit style sheets + (gnc:add-extension + (gnc:make-menu-item + ((menu-namer 'add-name) (_ "Style Sheets...")) + (_ "Edit report style sheets.") + (list "_Settings" "") + (lambda () + (gnc:style-sheet-dialog-open)))) + +; (gnc:add-extension tax-menu) + (gnc:add-extension income-expense-menu) + (gnc:add-extension asset-liability-menu) + (gnc:add-extension utility-menu) + + ;; push reports (new items added on top of menu) + (gnc:report-templates-for-each add-template-menu-item) + + ;; the Welcome to Gnucash-1.6 extravaganza + (gnc:add-extension + (gnc:make-menu-item + ((menu-namer 'add-name) (_ "Welcome Extravaganza")) + (_ "Welcome-to-GnuCash screen") + (list gnc:menuname-reports gnc:menuname-utility "") + (lambda () + (gnc:make-welcome-report))))) + (define (gnc:startup) (gnc:debug "starting up.") (gnc:setup-debugging) @@ -90,6 +168,8 @@ ;; Clear the change flags caused by loading the configs (gnc:global-options-clear-changes) + (gnc:report-menu-setup) + (gnc:hook-run-danglers gnc:*startup-hook*) ;; Initialize the C side options code. Must come after the scheme