This is gnucash-design.info, produced by makeinfo version 4.0 from gnucash-design.texinfo. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * gnucash: (gnucash-design). Design of the GnuCash program END-INFO-DIR-ENTRY This file documents the design of the GnuCash program. Copyright 2000 Gnumatic Incorporated This is Edition 1.7.0, last updated 13 August 2001, of the `GnuCash Design Document', version 1.7.0. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".  File: gnucash-design.info, Node: Iterating over Components, Prev: Finding Components, Up: Component Manager Iterating over Components ========================= The Component Manager API provides a function for iterating over all components in a class as well as all registered components regardless of class. In either case, a generic component handler is invoked for each component. The handler has the following signature: - Data type: GNCComponentHandler void (*) (const char * CLASS, gint COMPONENT_ID, gpointer ITER_DATA) The component handler is invoked with the CLASS, COMPONENT_ID of a particular component, as well as the ITER_DATA supplied in the iteration API call. - Function: void gnc_forall_gui_components (const char * COMPONENT_CLASS, GNCComponentHandler HANDLER, gpointer ITER_DATA) Apply HANDLER to every component in COMPONENT_CLASS. If COMPONENT_CLASS is `NULL', then iteration is performed over every registered component. ITER_DATA is supplied to HANDLER as the third argument.  File: gnucash-design.info, Node: Register, Next: Reports, Prev: Component Manager, Up: Top Register ******** The register is an infrastructure for building a modular matrix of cells in which each cell may be specialized to perform a particular function, e.g., to read dates, numerical amounts, or text. The register has been designed to be easy to extend, modular, easy to maintain, and memory efficient. It is intended to be used for building financial apps and spread-sheets. The register object should not have any 'knowledge' of the accounting model of GnuCash or of the workings of the main application. The register should not be specific to a particular GUI (such as Gnome/GTK). It should be possible to use the register in a stand-alone fashion. The register is built from several types of components: Cells, Cellblocks, Cursors, the Table, and the Split Register. * Menu: * Cells:: * Cellblocks:: * Table:: * Split Register::  File: gnucash-design.info, Node: Cells, Next: Cellblocks, Prev: Register, Up: Register Cells ===== A "Cell" is an active object which is designed to read a specific kind of user input. A Cell object has callbacks that are called when the user enters the cell (e.g. by mouse-clicking on a cell in a table, or tabbing into it), when the user attempts to modify text in the cell (e.g. by typing in it), and when the user leaves the cell (e.g. by mouse-clicking elsewhere, or tabbing away). Special-purpose cells can be created by "inheriting" from the basic cell object. Thus, there are special-purpose cells for handling dates, pull-down menus, text fields with auto-completion from a list of alternatives, monetary amounts, etc. Cells implementations may or may not contain GUI code. Cells which require only that text be displayed are completely "GUI-independent", that is, they depend on the underlying table to display the text. Cells which require additional GUI elements (such as pull-down menus) must implement the proper GUI handling on their own (using, e.g., GTK). * Menu: * BasicCell::  File: gnucash-design.info, Node: BasicCell, Prev: Cells, Up: Cells BasicCell --------- The "BasicCell" interface defines the core functionality that all cells must implement. A BasicCell contains the following data members. `char *value' The 'value' of the cell stored as a character string. `GdkWChar *w_value' The 'value' of the cell stores as a wide character string. `gint value_len' The length of w_value. `guint32 changed' This member is set to have all 1-bits (2^32 - 1) to indicate the cell contents have been changed from the register value. `guint32 conditionally_changed' This member is set to have all 1-bits (2^32 - 1) to indicate the cell contents have been changed from the register value, but that the register should not be considered to be changed unless other cells have been changed (not conditionally). `char * blank_help' This member is a text string which may be used by a GUI implementation to display an informative help string when the value of a cell is empty (perhaps prompting the user to enter a particular kind of value).  File: gnucash-design.info, Node: Cellblocks, Next: Table, Prev: Cells, Up: Register Cellblocks ========== A "Cellblock" is an array of active cells. The cells are laid out in rows and columns. The cellblock serves as a convenient container for organizing active cells in an array. Through the mechanism of Cursors (defined below), it allows a group of cells to be treated as a single transactional entity. That is, the cursor/cellblock allows all edits to a groups of cells to be simultaneously committed or rejected by underlying engines. This makes it appropriate for use as a GUI for transaction-processing applications with two-phase commit requirements.  File: gnucash-design.info, Node: Table, Next: Split Register, Prev: Cellblocks, Up: Register Table ===== The "Table" is a displayed matrix. The table is a complex object; it is _not_ merely a cellblock. The table provides all of the GUI infrastructure for displaying a row-column matrix of strings. The table provides one very important function for minimizing memory usage for large matrixes - the notion of a "Cursor". The cursor is a cellblock (an array of active cells) that is moved to the location that the user is currently editing. The cursor "virtualizes" cell functions; that is, it makes it seem to the user as if all cells in the table are active, when in fact the only cell that actually needs to be active is the one that the user is currently editing. The table design allows multiple cursors to be defined. When a user enters a cell, the appropriate cursor is positioned within the table. Cursors cannot overlap: any given cell can be mapped to at most one cursor. Multiple-cursor support allows tables to be designed that have a non-uniform layout. For example, the multiple-cursor support can be used to define a tree structure of headings and sub-headings, where the layout/format of the heading is different from the sub-headings. A financial example is a table which lists splits underneath their parent transaction. This is very different from a checkbook register, where all entries are uniform, and can be handled with a single repeated cursor. Users of the table must provide a TableView object which provides an API the table uses to obtain information about the data it is displaying such as strings, colors, etc. Thus, the table represents the non-GUI portion of the View object in the Model-View-Controller paradigm.  File: gnucash-design.info, Node: Split Register, Prev: Table, Up: Register Split Register ============== The split register is a special-purpose object aimed at the display of financial transactions. It includes cells for the date, prices, balances, transfer accounts, etc. The register is where the cells, cursor and table get put together into a unified whole. The register defines specific, actual layouts and widths of the date, price, etc. cells in a table. It includes a table header, and defines more than ten specific layouts: bank, credit-card, stock, general ledger, etc. The split register implementation is divided into two components. The first component (src/register/splitreg.[ch]) defines the basic structure and implementation of a split register, but does not specifically use or depend on the other GnuCash modules, including the Engine. Of course, this implementation was created with the engine financial structures in mind. The second component (src/SplitLedger.[ch]) implements the full register behavior (the Controller in MVC) and makes full use of the Engine API. This component is responsible for loading transactions and splits into the register, modifying transactions and splits according to user input, and accomplishing tasks such as performing automatic completion.  File: gnucash-design.info, Node: Reports, Next: User Preferences, Prev: Register, Up: Top Reports ******* The reporting infrastructure is designed facilitate the creation of sophisticated reports including tables, graphs, and hyperlinks. The infrastructure includes functionality to support the following: * Creation of tables, with headings, subheadings, totals, and subtotals. * Formatting of dates & numbers. * Currency conversions. * Create of graphs such as pie and bar charts. * Creation of hyperlinks to other reports and to other GnuCash objects such as registers. * Menu: * Creating a Report::  File: gnucash-design.info, Node: Creating a Report, Prev: Reports, Up: Reports Creating a Report ================= To define a report, your report must have `(gnc:support )' and should have `(gnc:depend "report-utilities.scm")' as well as `(gnc:depend "report-html.scm")' if you wish to use the html generation facilities. You should avoid creating HTML directly wherever possible. To autoload your report, you should add the line `(gnc:depend )' to the file `src/scm/report/report-list.scm'. `(gnc:depend "date-utilities.scm")' has lots of date-manipulation functions you'll almost certainly need. To define a report, you call `(gnc:define-report)'. This function can accept a variable number of arguments, but at the moment four distinct arguments are recognised, as in the following from the transaction report: (gnc:define-report 'version 1 'name (N_ "Transaction Report") 'options-generator trep-options-generator 'renderer trep-renderer) `version' This is the version number of the report, which is currently ignored. `name' This is the name of the report. It should be marked as translatable, but the name should be given in untranslated form, hence the use of `(N_ )'. `options-generator' This should be a function that takes no arguments and returns an options structure with the options for the report. The options interface is currently not fully documented, but should be. `renderer' This is the function which renders the HTML.  File: gnucash-design.info, Node: User Preferences, Next: Function Index, Prev: Reports, Up: Top User Preferences **************** The options system is used to obtain user preferences, both globally, and when displaying a report. A wide variety of option types are supported, so it should be possible to create an option for just about any property the user might wish to specify. New option types can be added if necessary, but as the process requires detailed knowledge of GnuCash internals and GTK+/GNOME, it is not documented here. At present, users are most likely to come across the options system when designing custom reports, and are consequently mostly going to use the Scheme interface. There is also a C interface to much of the options system which is used to access preferences for the UI, but it is not yet documented. * Menu: * Option Databases:: * Option Types:: * Option Creation:: * Option Values::  File: gnucash-design.info, Node: Option Databases, Next: Option Types, Prev: User Preferences, Up: User Preferences Option Databases ================ The options for a particular report are placed in an "options database". For doing a report, the option-generator function must return an options database. The function `(gnc:new-option)' returns a new, empty options database that you can then add options to. Options are organised into sections, which are each given a title string such as "Register" or "International". The UI displays each section on a seperate page. Each section has a number of options. Each option has a name that uniquely identifies it in that section, and an alphabetic "sort tag" that determines the relative ordering of the options for display.  File: gnucash-design.info, Node: Option Types, Next: Option Creation, Prev: Option Databases, Up: User Preferences Option Types ============ Sometimes, GnuCash requires the user to specify true/false properties. Others properties most easily specified by selections from a list, others from a number, others still by selecting dates, or one or more accounts in the account hierachy, or even colors. GnuCash supports all of these and more: `boolean' These are displayed as a checkbox by the UI. They are used to specify yes/no answers. `string' The UI provides a text entry box where arbitrary text may be entered. `font' This allows users to select fonts from those available on the system. `currency' For specifying a currency such as "USD", "AUD", "UKP" etc. `date' For specifying dates. Depending on exactly what is required, you can choose to let the user specify an "absolute" date, a "relative" date such as "one month ago", or "start of the current accounting period", or let the user choose how whether to specify the required date in relative or absolute terms. `account-list' For selecting a particular account or accounts. The UI displays a tree of the account hierachy. `multichoice' For selecting one of a group of choices. `list' Similar to the multichoice option, but allows the selection of one or more items from the group. `number-range' For specifying a numeric quantity. The programmer can bound the range and precision of the quantity. `pixmap' For selecting a pixmap located on the filesystem. `color' For selecting a color value. `internal' An option that isn't specified through an options dialog box. For instance, this is used to store the window dimensions so that they are preserved along with other preferences.  File: gnucash-design.info, Node: Option Creation, Next: Option Values, Prev: Option Types, Up: User Preferences Option Creation =============== To add an option to an options database, you first create that option, then register it with the database. For example, to create a simple checkbox-style boolean option, you would use `gnc:make-simple-boolean-option' to create the option. Once created, you can then register the option. With `gnc:register-option'. - Function: gnc:register-option database option Register OPTION in options database DATABASE The example below shows how to create an options database, then register a boolean option with it: (define gnc:*hello-world-options* (gnc:new-options)) (gnc:register-option gnc:*hello-world-options* (gnc:make-simple-boolean-option "Hello, World!" "Boolean Option" "a" "This is a boolean option." #t)) Option Creation Functions ------------------------- - Function: gnc:make-simple-boolean-option section name sort-tag documentation-string default-value Creates a boolean option, with option section SECTION and name NAME specified as strings. Note that the section and name strings uniquely specify the option for the option database that they get registered to, and are used for looking up the option when the value is required. SORT-TAG is a string tag that specifies the relative order when displaying the options. Options are displayed top to bottom in case-sensitive alphabetical order. DOCUMENTATION-STRING is a string containing a short string describing the purpose of the option, which the UI displays as a tooltip. DEFAULT-VALUE should be a boolean value indicating the default value of this option. Note that SECTION, NAME, SORT-TAG, and DOCUMENTATION-STRING are common to all the following functions. - Function: gnc:make-complex-boolean-option section name sort-tag documentation-string default-value setter-function-called-cb option-widget-changed-cb As above, but the function specified in OPTION-WIDGET-CHANGED-CB is called when the GUI widget representing the option is changed (the user clicks on the toggle button), and SETTER-FUNCTION-CALLED-CB is called when the option's setter is called (when the user selects "OK" or "Apply"). One use for having a non-false OPTION-WIDGET-CHANGED-CB is to make another option mutable (in concert with `gnc:option-set-sensitive', discussed later). - Function: gnc:make-string-option section name sort-tag documentation-string default-value Make an option where the user can specify a string. - Function: gnc:make-date-option section name sort-tag documentation-string default-getter show-time subtype relative-date-list Create a date option. There are three different variations of date options, specified by the variable SUBTYPE, which should be one of `'relative', `'absolute', or `both'. `absolute' date options allow the selection of a specific day/month/year combination. `relative' date options allow the selection from a list of different dates specified in relation to the current date, such as "today", "start of the current month", or "six months ago". Finally `both' allows the user to choose either using absolute or relative date options. DEFAULT-GETTER should be a "thunk" (Scheme function taking no arguments) that returns a pair. The car of the pair should contain either `'relative' or `'absolute', to indicate whether the default value is relative or absolute. If the car is `relative', then the cdr should be a one of the relative date symbols listed in RELATIVE-DATE-LIST. If the car is `absolute', it should be a timepair containing the default date/time. SHOW-TIME is a boolean that indicates whether when selecting an absolute date, the user can specify a time. It is ignored if the SUBTYPE is `relative'. RELATIVE-DATE-LIST is a list of symbols that indicate the relative dates permitted. The symbols used must have been previously defined as indicating a particular relative date. GNC:RELATIVE-DATES contains a list of symbols that have already been set up for the most common relative dates. FIXME: document relative date system. - Function: gnc:make-multichoice-option section name sort-tag documentation-string default-value value-list Create a multichoice option. VALUE-LIST is a list of vectors of length 3, each representing a different choice. Each vector should contain - in the following order: * A symbol identifying this choice. * A string naming this choice - this string will be the main one displayed. * A string describing this choice slightly more fully. This string will appear as a tooltip. - Function: gnc:make-list-option section name sort-key documentation-string default-values value-list Like a multichoice option, but users can select one or more values from a list. DEFAULT-VALUES is a list of selected values instead of just one. - Function: gnc:make-font-option section name sort-tag documentation-string default-value Allow the user to specify the font. Font options store font descriptions as strings, like the X Logical Font Description. You must provide a default value, as there is unfortunately no easy way for the GUI to pick a default value. - Function: gnc:make-color-option section name sort-key documentation-string default-value scale use-alpha? Allow the user to select a color. The default value should be a list of length 4 containing the red, green, blue, and alpha channel values for the color. The scale is the maximum value for a channel, and the use-alpha? is a boolean that, if false, disregards the alpha channel (note: if you don't know what an alpha channel is, you don't need it). - Function: gnc:make-currency-option section name sort-tag documentation-string default-value Let the user specify a currency using a currency code. The GUI provides a specialised widget for currency selection. - Function: gnc:make-account-list-option section name sort-tag documentation-string default-getter value-validator multiple-selection - Function: gnc:make-internal-option section name sort-key documentation-string default-value Create an option that isn't controlled through the options GUI. This is used mainly by the GUI to store state that should be preserved from session to session but isn't really configurable from a dialog box, such as the size of the GnuCash main window. - Function: gnc:make-number-range-option section name sort-tag documentation-string default-value lower-bound upper-bound num-decimals step-size Create an option for selecting a numerical quantity. lower-bound and upper-bound specify the domain of acceptable figures, and num-decimals specifies the range to which the option will be displayed (FIXME:and rounded to?). Step-size specifies the step size for the UI's up/down buttons.  File: gnucash-design.info, Node: Option Values, Prev: Option Creation, Up: User Preferences Option Values ============= To get the value of an option, you must first lookup the option in the options database. - Function: gnc:lookup-option options section name Looks up the option in section SECTION and name NAME in the options database OPTIONS. Once you have looked up the option, you can get its value using the function `gnc:option-value'. - Function: gnc:option-value option Get the value of an option. Option values returned are of the same type as how the default values are specified (except the date option which needs to be fixed).  File: gnucash-design.info, Node: Function Index, Next: Data Type Index, Prev: User Preferences, Up: Top Function Index ************** * Menu: * double_to_gnc_numeric: Numeric Floating Point Conversion. * gnc:lookup-option: Option Values. * gnc:make-account-list-option: Option Creation. * gnc:make-color-option: Option Creation. * gnc:make-complex-boolean-option: Option Creation. * gnc:make-currency-option: Option Creation. * gnc:make-date-option: Option Creation. * gnc:make-font-option: Option Creation. * gnc:make-internal-option: Option Creation. * gnc:make-list-option: Option Creation. * gnc:make-multichoice-option: Option Creation. * gnc:make-number-range-option: Option Creation. * gnc:make-simple-boolean-option: Option Creation. * gnc:make-string-option: Option Creation. * gnc:option-value: Option Values. * gnc:register-option: Option Creation. * gnc_book_begin: GNCBook API. * gnc_book_destroy: GNCBook API. * gnc_book_end: GNCBook API. * gnc_book_get_error: GNCBook API. * gnc_book_get_error_message: GNCBook API. * gnc_book_get_file_path: GNCBook API. * gnc_book_get_group: GNCBook API. * gnc_book_load: GNCBook API. * gnc_book_new: GNCBook API. * gnc_book_pop_error: GNCBook API. * gnc_book_save: GNCBook API. * gnc_book_save_may_clobber_data: GNCBook API. * gnc_book_set_group: GNCBook API. * gnc_commodity_destroy: General Commodity API. * gnc_commodity_equiv: General Commodity API. * gnc_commodity_get_exchange_code: Commodity Getters. * gnc_commodity_get_fraction: Commodity Getters. * gnc_commodity_get_fullname: Commodity Getters. * gnc_commodity_get_mnemonic: Commodity Getters. * gnc_commodity_get_namespace: Commodity Getters. * gnc_commodity_get_printname: Commodity Getters. * gnc_commodity_get_unique_name: Commodity Getters. * gnc_commodity_new: General Commodity API. * gnc_commodity_set_exchange_code: Commodity Setters. * gnc_commodity_set_fraction: Commodity Setters. * gnc_commodity_set_fullname: Commodity Setters. * gnc_commodity_set_mnemonic: Commodity Setters. * gnc_commodity_set_namespace: Commodity Setters. * gnc_commodity_table_add_namespace: Commodity Table Modification API. * gnc_commodity_table_delete_namespace: Commodity Table Modification API. * gnc_commodity_table_destroy: General Commodity Table API. * gnc_commodity_table_find_full: Commodity Table Access API. * gnc_commodity_table_get_commodities: Commodity Table Access API. * gnc_commodity_table_get_namespaces: Commodity Table Access API. * gnc_commodity_table_get_number_of_namespaces: Commodity Table Access API. * gnc_commodity_table_get_size: Commodity Table Access API. * gnc_commodity_table_has_namespace: Commodity Table Access API. * gnc_commodity_table_insert: Commodity Table Modification API. * gnc_commodity_table_lookup: Commodity Table Access API. * gnc_commodity_table_new: General Commodity Table API. * gnc_commodity_table_remove: Commodity Table Modification API. * gnc_commodity_table_remove_non_iso: Commodity Table Modification API. * gnc_component_manager_init: CM Initialization and Shutdown. * gnc_component_manager_shutdown: CM Initialization and Shutdown. * gnc_engine_commodities: General Commodity Table API. * gnc_engine_register_event_handler: Event API. * gnc_engine_resume_events: Event API. * gnc_engine_suspend_events: Event API. * gnc_engine_unregister_event_handler: Event API. * gnc_find_first_gui_component: Finding Components. * gnc_find_gui_components: Finding Components. * gnc_forall_gui_components: Iterating over Components. * gnc_gui_component_clear_watches: Watching Engine Objects. * gnc_gui_component_watch_entity: Watching Engine Objects. * gnc_gui_component_watch_entity_type: Watching Engine Objects. * gnc_gui_get_entity_events: Refresh Handlers. * gnc_gui_refresh_all: Controlling Refreshes. * gnc_gui_refresh_suspended: Controlling Refreshes. * gnc_numeric_abs: Basic Arithmetic Operations. * gnc_numeric_add: Basic Arithmetic Operations. * gnc_numeric_add_fixed: Basic Arithmetic Operations. * gnc_numeric_add_with_error: Basic Arithmetic Operations. * gnc_numeric_check: Numeric Error Handling. * gnc_numeric_compare: Numeric Comparisons and Predicates. * gnc_numeric_convert: Numeric Denominator Conversion. * gnc_numeric_convert_with_error: Numeric Denominator Conversion. * gnc_numeric_create: Creating Numeric Objects. * gnc_numeric_div: Basic Arithmetic Operations. * gnc_numeric_div_with_error: Basic Arithmetic Operations. * gnc_numeric_eq: Numeric Comparisons and Predicates. * gnc_numeric_equal: Numeric Comparisons and Predicates. * gnc_numeric_error: Numeric Error Handling. * gnc_numeric_mul: Basic Arithmetic Operations. * gnc_numeric_mul_with_error: Basic Arithmetic Operations. * gnc_numeric_neg: Basic Arithmetic Operations. * gnc_numeric_negative_p: Numeric Comparisons and Predicates. * gnc_numeric_positive_p: Numeric Comparisons and Predicates. * gnc_numeric_reduce: Numeric Denominator Conversion. * gnc_numeric_same: Numeric Comparisons and Predicates. * gnc_numeric_sub: Basic Arithmetic Operations. * gnc_numeric_sub_fixed: Basic Arithmetic Operations. * gnc_numeric_sub_with_error: Basic Arithmetic Operations. * gnc_numeric_to_double: Numeric Floating Point Conversion. * gnc_numeric_to_string: Numeric String Conversion. * gnc_numeric_zero: Creating Numeric Objects. * gnc_numeric_zero_p: Numeric Comparisons and Predicates. * gnc_price_begin_edit: Price Setters. * gnc_price_clone: General Price API. * gnc_price_commit_edit: Price Setters. * gnc_price_create: General Price API. * gnc_price_get_commodity: Price Getters. * gnc_price_get_currency: Price Getters. * gnc_price_get_guid: Price Getters. * gnc_price_get_source: Price Getters. * gnc_price_get_time: Price Getters. * gnc_price_get_type: Price Getters. * gnc_price_get_value: Price Getters. * gnc_price_get_version: Price Getters. * gnc_price_list_destroy: Price Lists. * gnc_price_list_insert: Price Lists. * gnc_price_list_remove: Price Lists. * gnc_price_lookup: General Price API. * gnc_price_ref: General Price API. * gnc_price_set_commodity: Price Setters. * gnc_price_set_currency: Price Setters. * gnc_price_set_source: Price Setters. * gnc_price_set_time: Price Setters. * gnc_price_set_type: Price Setters. * gnc_price_set_value: Price Setters. * gnc_price_set_version: Price Setters. * gnc_price_unref: General Price API. * gnc_pricedb_add_price: General Price Database API. * gnc_pricedb_create: General Price Database API. * gnc_pricedb_destroy: General Price Database API. * gnc_pricedb_remove_price: General Price Database API. * gnc_register_gui_component: Registering and Unregistering Components. * gnc_resume_gui_refresh: Controlling Refreshes. * gnc_suspend_gui_refresh: Controlling Refreshes. * gnc_unregister_gui_component: Registering and Unregistering Components. * gnc_unregister_gui_component_by_data: Registering and Unregistering Components. * guid_compare: How to use GUIDs. * guid_equal: How to use GUIDs. * guid_hash_table_new: How to use GUIDs. * guid_hash_to_guint: How to use GUIDs. * guid_init: The GUID Generator. * guid_init_only_salt: The GUID Generator. * guid_init_with_salt: The GUID Generator. * guid_new: The GUID Generator. * guid_to_string: How to use GUIDs. * guid_to_string_buff: How to use GUIDs. * kvp_frame_copy: kvp_frame. * kvp_frame_delete: kvp_frame. * kvp_frame_get_frame: kvp_frame. * kvp_frame_get_frame_gslist: kvp_frame. * kvp_frame_get_frame_slash: kvp_frame. * kvp_frame_get_slot: kvp_frame. * kvp_frame_get_slot_path: kvp_frame. * kvp_frame_get_slot_path_gslist: kvp_frame. * kvp_frame_new: kvp_frame. * kvp_frame_set_slot: kvp_frame. * kvp_frame_set_slot_nc: kvp_frame. * kvp_frame_set_slot_path: kvp_frame. * kvp_frame_set_slot_path_gslist: kvp_frame. * kvp_list_car: kvp_list. * kvp_list_cdr: kvp_list. * kvp_list_cons: kvp_list. * kvp_list_copy: kvp_list. * kvp_list_delete: kvp_list. * kvp_list_new: kvp_list. * kvp_list_null_p: kvp_list. * kvp_value_copy: kvp_value. * kvp_value_delete: kvp_value. * kvp_value_get_binary: kvp_value. * kvp_value_get_float64: kvp_value. * kvp_value_get_frame: kvp_value. * kvp_value_get_guid: kvp_value. * kvp_value_get_int64: kvp_value. * kvp_value_get_list: kvp_value. * kvp_value_get_string: kvp_value. * kvp_value_get_type: kvp_value. * kvp_value_new_binary: kvp_value. * kvp_value_new_float64: kvp_value. * kvp_value_new_frame: kvp_value. * kvp_value_new_guid: kvp_value. * kvp_value_new_int64: kvp_value. * kvp_value_new_list: kvp_value. * kvp_value_new_string: kvp_value. * string_to_gnc_numeric: Numeric String Conversion. * string_to_guid: How to use GUIDs. * xaccAccountBeginEdit: General Account API. * xaccAccountCommitEdit: General Account API. * xaccAccountDestroy: General Account API. * xaccAccountGetBalance: Account Getters. * xaccAccountGetBalanceAsOfDate: Account Getters. * xaccAccountGetChildren: Account Getters. * xaccAccountGetClearedBalance: Account Getters. * xaccAccountGetCode: Account Getters. * xaccAccountGetCurrency: Account Getters. * xaccAccountGetCurrencySCU: Account Getters. * xaccAccountGetDescription: Account Getters. * xaccAccountGetEffectiveSecurity: Account Getters. * xaccAccountGetFullName: Account Getters. * xaccAccountGetGUID: General Account API. * xaccAccountGetName: Account Getters. * xaccAccountGetNotes: Account Getters. * xaccAccountGetParent: Account Getters. * xaccAccountGetParentAccount: Account Getters. * xaccAccountGetReconciledBalance: Account Getters. * xaccAccountGetSecurity: Account Getters. * xaccAccountGetSecuritySCU: Account Getters. * xaccAccountGetShareBalance: Account Getters. * xaccAccountGetShareBalanceAsOfDate: Account Getters. * xaccAccountGetShareClearedBalance: Account Getters. * xaccAccountGetShareReconciledBalance: Account Getters. * xaccAccountGetSlots: General Account API. * xaccAccountGetSplitList: Account Getters. * xaccAccountGetTaxRelated: Account Tax API. * xaccAccountGetTaxUSCode: Account Tax API. * xaccAccountGetTaxUSPayerNameSource: Account Tax API. * xaccAccountGetType: Account Getters. * xaccAccountGetTypeStr: Account Type API. * xaccAccountGroupCommitEdit: General Account Group API. * xaccAccountInsertSubAccount: Account Group Account API. * xaccAccountLookup: General Account API. * xaccAccountRemoveGroup: Account Group Account API. * xaccAccountSetSlots_nc: General Account API. * xaccAccountSetTaxRelated: Account Tax API. * xaccAccountSetTaxUSCode: Account Tax API. * xaccAccountSetTaxUSPayerNameSource: Account Tax API. * xaccAccountStringToEnum: Account Type API. * xaccAccountStringToType: Account Type API. * xaccAccountTypeEnumAsString: Account Type API. * xaccAccountTypesCompatible: Account Type API. * xaccCloneAccountSimple: General Account API. * xaccFreeAccountGroup: General Account Group API. * xaccGroupConcatGroup: General Account Group API. * xaccGroupGetAccount: Account Group Account API. * xaccGroupGetAccountList: Account Group Account API. * xaccGroupGetDepth: Account Group Account API. * xaccGroupGetNumAccounts: Account Group Account API. * xaccGroupGetNumSubAccounts: Account Group Account API. * xaccGroupGetSubAccounts: Account Group Account API. * xaccGroupInsertAccount: Account Group Account API. * xaccGroupMarkDoFree: General Account Group API. * xaccGroupMarkNotSaved: General Account Group API. * xaccGroupMarkSaved: General Account Group API. * xaccGroupMergeAccounts: General Account Group API. * xaccGroupNotSaved: General Account Group API. * xaccGroupRemoveAccount: Account Group Account API. * xaccGUIDFree: How to use GUIDs. * xaccGUIDMalloc: How to use GUIDs. * xaccGUIDNew: GUIDs and GnuCash Entities. * xaccGUIDNull: GUID Types. * xaccGUIDType: GUID Types. * xaccLookupEntity: GUIDs and GnuCash Entities. * xaccMallocAccount: General Account API. * xaccMallocAccountGroup: General Account Group API. * xaccMallocSplit: General Split API. * xaccMallocTransaction: General Transaction API. * xaccRemoveEntity: GUIDs and GnuCash Entities. * xaccSplitDestroy: General Split API. * xaccSplitGetAccount: Split Getters. * xaccSplitGetAction: Split Getters. * xaccSplitGetBalance: Split Getters. * xaccSplitGetBaseValue: Split Getters. * xaccSplitGetClearedBalance: Split Getters. * xaccSplitGetDateReconciledTS: Split Getters. * xaccSplitGetGUID: General Split API. * xaccSplitGetMemo: Split Getters. * xaccSplitGetParent: Split Getters. * xaccSplitGetReconcile: Split Getters. * xaccSplitGetReconciledBalance: Split Getters. * xaccSplitGetShareAmount: Split Getters. * xaccSplitGetShareBalance: Split Getters. * xaccSplitGetShareClearedBalance: Split Getters. * xaccSplitGetSharePrice: Split Getters. * xaccSplitGetShareReconciledBalance: Split Getters. * xaccSplitGetType: Split Getters. * xaccSplitGetValue: Split Getters. * xaccSplitLookup: General Split API. * xaccSplitMakeStockSplit: General Split API. * xaccSplitSetAction: Split Setters. * xaccSplitSetBaseValue: Split Setters. * xaccSplitSetDateReconciledSecs: Split Setters. * xaccSplitSetDateReconciledTS: Split Setters. * xaccSplitSetMemo: Split Setters. * xaccSplitSetReconcile: Split Setters. * xaccSplitSetShareAmount: Split Setters. * xaccSplitSetSharePrice: Split Setters. * xaccSplitSetSharePriceAndAmount: Split Setters. * xaccSplitSetValue: Split Setters. * xaccStoreEntity: GUIDs and GnuCash Entities. * xaccTransAppendSplit: General Transaction API. * xaccTransBeginEdit: General Transaction API. * xaccTransCommitEdit: General Transaction API. * xaccTransCountSplits: Transaction Getters. * xaccTransDestroy: General Transaction API. * xaccTransGetDate: Transaction Getters. * xaccTransGetDateEnteredTS: Transaction Getters. * xaccTransGetDateL: Transaction Getters. * xaccTransGetDateStr: Transaction Getters. * xaccTransGetDateTS: Transaction Getters. * xaccTransGetDescription: Transaction Getters. * xaccTransGetGUID: General Transaction API. * xaccTransGetNum: Transaction Getters. * xaccTransGetSlot: General Transaction API. * xaccTransGetSplit: Transaction Getters. * xaccTransGetSplitList: Transaction Getters. * xaccTransIsOpen: General Transaction API. * xaccTransLookup: General Transaction API. * xaccTransRollbackEdit: General Transaction API. * xaccTransSetDate: Transaction Setters. * xaccTransSetDateEnteredSecs: Transaction Setters. * xaccTransSetDateEnteredTS: Transaction Setters. * xaccTransSetDateSecs: Transaction Setters. * xaccTransSetDateToday: Transaction Setters. * xaccTransSetDateTS: Transaction Setters. * xaccTransSetDescription: Transaction Setters. * xaccTransSetNum: Transaction Setters. * xaccTransSetSlot: General Transaction API.  File: gnucash-design.info, Node: Data Type Index, Next: Concept Index, Prev: Function Index, Up: Top Date Type Index *************** * Menu: * Account: Accounts. * AccountGroup: Account Groups. * BasicCell: BasicCell. * EventInfo: Refresh Handlers. * gnc_commodity: Commodities. * gnc_commodity_table: Commodity Tables. * gnc_numeric: Numeric Library. * GNCAccountType: Account Types. * GNCBook: GNCBooks. * GNCComponentCloseHandler: Close Handlers. * GNCComponentFindHandler: Finding Components. * GNCComponentHandler: Iterating over Components. * GNCComponentRefreshHandler: Refresh Handlers. * GNCEngineEventHandler: Event API. * GNCEngineEventType: Event API. * GNCIdType: GUID Types. * GNCPrice: Prices. * GNCPriceDB: Price Databases. * GUID: Globally Unique Identifiers. * kvp_frame: kvp_frame. * kvp_list: kvp_list. * kvp_value: kvp_value. * kvp_value_t: kvp_value. * Split: Splits. * Transaction: Transactions.  File: gnucash-design.info, Node: Concept Index, Prev: Data Type Index, Up: Top Concept Index ************* * Menu: * Basic Arithmetic Operations: Basic Arithmetic Operations. * Component Manager: Component Manager. * Creating Numeric Objects: Creating Numeric Objects. * Globally Unique Identifier: Globally Unique Identifiers. * Key-Value Pairs: Key-Value Pair Frames. * Key-Value Policy: Key-Value Policy. * Numeric Comparisons and Predicates: Numeric Comparisons and Predicates. * Numeric Denominator Conversion: Numeric Denominator Conversion. * Numeric Error Handling: Numeric Error Handling. * Numeric Example: Numeric Example. * Numeric Floating Point Conversion: Numeric Floating Point Conversion. * Numeric Library: Numeric Library. * Numeric String Conversion: Numeric String Conversion. * Option Creation: Option Creation. * Option Databases: Option Databases. * Option Values: Option Values. * Refresh Mechanism: Refresh Mechanism. * Register: Register. * Reports: Reports. * Standard Numeric Arguments: Standard Numeric Arguments. * The Engine: Engine. * The GUID Generator: The GUID Generator. * User Preferences: User Preferences. * When to use GUIDs: When to use GUIDs.