diff --git a/src/doc/design/top-level.texinfo b/src/doc/design/top-level.texinfo index cf15e0e530..1d1a54bc76 100644 --- a/src/doc/design/top-level.texinfo +++ b/src/doc/design/top-level.texinfo @@ -5,8 +5,8 @@ GnuCash currently consists of the following modules. @section The Engine -The @dfn{Engine} (located under the src/engine directory in the GnuCash -codebase) provides an interface for creating, manipulating, and +The @dfn{Engine} (located under the @file{src/engine} directory in the +GnuCash codebase) provides an interface for creating, manipulating, and destroying three basic financial entities: Accounts, Transactions (known as Journal Entries in accounting practice), and Splits (known as Ledger Entries). These three entities are the central data structures of the @@ -15,10 +15,25 @@ GnuCash financial data model. The Engine code contains no GUI code whatsoever, and is essentially OS-neutral. +@subsection Query + +The @dfn{Query} module (@file{src/engine/Query.*}) provides an interface +into the engine for finding transactions based on a set of criteria, +such as description, date posted, account membership, etc. Simple +queries can be combined using standard boolean operators. + +@subsection File I/O + +The @dfn{File I/O} module (@file{src/engine/FileIO.*}) provides an +interface for reading and writing a set of Accounts, Transactions, and +Splits to a binary file. This module is being deprecated. A text-based +format using scheme forms is being developed as a replacement. This new +module will be separate from the Engine. + @section The Register -The @dfn{Register} (located under src/register) implements a ledger-like +The @dfn{Register} (@file{src/register}) implements a ledger-like GUI that allows the user to dynamically enter dates, prices, memos descriptions, etc. in an intuitive fashion that should be obvious to anyone who's used a checkbook register. The code is highly configurable, @@ -28,9 +43,9 @@ example, one can define a ledger with three date fields, one price field, and four memo fields in a straightforward fashion. Cell handling objects support and automatically validate date entry, memo entry (w/auto-completion), prices, combo-boxes (pull-down menus), and -multi-state check-boxes. Cells can be marked read-write, or output-only. -Cells can be assigned unique colors. The currently active ledger -row-block can be highlighted with a unique color. +multi-state check-boxes. Cells can be marked read-write, or +output-only. Cells can be assigned unique colors. The currently +active ledger row-block can be highlighted with a unique color. The register code is completely independent of the engine code, knows nothing about accounting or any of the other GnuCash subsystems. It @@ -40,38 +55,80 @@ accounting. @section Reports -The @dfn{Reports} module (src/reports) is a scheme (guile) based system -to create balance sheets, profit & loss statements, etc. by using the -engine API's to fetch and display data. +The @dfn{Reports} module (@file{src/scm/report.scm}, +@file{src/scm/reports}) is a scheme (guile) based system to create +balance sheets, profit & loss statements, etc. by using the engine +API to fetch and display data formatted in HTML. + +This module is being redesigned to use the Query API to fetch the engine +information instead of using the raw engine interface. The new reporting +design will use Queries to extract the data and assemble it into a +view-independent format. This data will then be converted to HTML +reports and/or graphs such as bar and pie charts. + + +@section Graphs + +The @dfn{Graphs} module will be a future module implementing GUI graphs +such as bar and pie charts. These graphs will be interactive in that the +user can, for example, move pie wedges, and 'live' in that the user will +be able to click on graph subsections to see a detail graph or report of +that particular subsection. + +This module will be implemented using the GUPPI library being developed +by Jon Trowbridge (@url{http://www.gnome.org/guppi}). + + +@section Price Quotes + +The @dfn{Price Quotes} module (@file{src/quotes}) is a Perl system to +fetch stock price data off the Internet and insert it into the GnuCash +Engine. This module requires the functionality of the Finance::Quote +module available at SourceForge. The Finance::Quote module can fetch +price quotes from many different sources including Yahoo, Yahoo Europe, +and some international exchanges. + +The Finance::Quote module also supports fetching currency exchange +rates. GnuCash will be extended to allow the fetching and use of +currency exchange rates. + + +@section User Preferences +The @dfn{User Preferences} module (@file{src/scm/options.scm}, +@file{src/scm/prefs.scm}) provides an infrastructure for defining both +user-configurable and internal preferences. Preferences are defined in +scheme using several predefined preference types such as boolean, +string, date, etc. Preferences are 'implemented' by providing a GUI +which allows the user to see and change preference values. An API +is provided to query preference values and to register callbacks +which will be invoked when preferences change. -@section Quotes +Preference values which are different from the default values +are stored as scheme forms in a user-specific preferences file +(@file{~/.gnucash/config.auto}). This file is automatically +loaded upon startup. -The @dfn{Quotes} module (src/quotes) is a perl system to fetch stock -price data off the Internet and insert it into the GnuCash Engine. This -is now a separate project called Finance::Quote available at -SourceForge. +@section QIF Import -@section Options +The @dfn{QIF Import} module (@file{src/scm/qif-import}) provides +functionality for importing QIF (Quicken Interchange Format) data +into GnuCash. -The @dfn{Options} module (src/scm/options.scm) provides an -infrastructure for defining both user-configurable and internal options -or 'preferences'. User-configurable options are 'implemented' by -providing a GUI which allows the user to see and change option values. @section GnuCash -The GnuCash module (src/gnome, src/register/gnome and src/*.[ch]) is the -main GUI application. It consists of a collection of miscellaneous GUI -code to glue together all of the pieces above into a coherent, -point-and-click whole. It is meant to be easy to use and intuitive to -the novice user without sacrificing the power and flexibility that a -professional might expect. When people say that GnuCash is trying to be -a "Quicken or MSMoney look/work/act-alike", this is the piece that they -are referring to. It really is meant to be a personal-finance manager -with enough power for the power user and the ease of use for the -beginner. +The GnuCash module (@file{src/gnome}, @file{src/register/gnome} and +@file{src/*.[ch]}) is the main GUI application. It consists of a +collection of miscellaneous GUI code to glue together all of the pieces +above into a coherent, point-and-click whole. It is meant to be easy to +use and intuitive to the novice user without sacrificing the power and +flexibility that a professional might expect. When people say that +GnuCash is trying to be a "Quicken or MS Money look/work/act-alike", +this is the piece that they are referring to. It really is meant to +be a personal-finance manager with enough power for the power user +and the ease of use for the beginner. Currently, the Gnome interface is the only operational interface. There is an obsolete Motif interface which is not maintained. The Qt code