KMyMoney Project Handbook

Version 1.2

Dipl.Ing. Thomas Baumgart

Michael Edwardes

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 no Invariant Sections, with no Front-Cover texts, and with no Back-Cover Texts. A copy of the license is included in the appendix entitled "GNU Free Documentation License".

As for any software development project, certain rules regulate the development process of KMyMoney. These rules cover things like coding standards, configuration management and error reporting, just to name a few. The focus of this document is on configuration management and coding standards. More information about the KMyMoney project can be found on the project's hompage.

If you have any comments to raise about this document please send an email to , the project's developer mailing list and we will try to rectify it. Please note that the most up-to-date version of this document can be found in the source tree and is online on the project's homepage. A PDF version is also available for download.

A prerequisite for this document is a basic understanding on the work with CVS. Even though this document covers some of the more special topics of CVS in more detail it is not intended as an introduction to CVS in general.

Table of Contents

History of this document
1. Configuration Management
Version Control Tool
Access to the repository
Read-Only access
Read-Write access
Version controlled files
Files that must be stored in the repository
Files that should not be stored in the repository
Version management
Layout of the version numbers
2. Release Management
Creating a new source version
Creating a new stable version
Announce a new version
Announce new version via File Release System
Update information about release on web-sites
Announce new version on mailing lists
Creating a new binary/installable version
Creating an RPM file
Copying the tar-ball to the RPM structure
Test building
Setting up the SPEC file
Building the package
Testing the package
Signing the package
3. Coding Rules
Header Files
Source Files
4. Creating dialog boxes in KMyMoney
Naming the dialog
Designing the dialog
Naming widgets
i18n considerations
Saving the UI
Writing code
Header (.h) file
Code (.cpp) file
Updating the Makefile
5. Settings
How to create a settings page
How to add the setting items
6. Unit Testing
Why unit testing?
Unit testing in KMyMoney
Unit testing HOWTO
Integration of CPPUNIT into the KMyMoney project
Naming conventions
Necessary include files
Accessing private members
Standard methods for each testcase
7. Documentation
Style Guide
Style Guide
Producing Final Documents
Man Pages (UNIX only)
8. Patch Submissions
Steps to create a patch
If you modified existing Files
If you have added new Files
Final Steps
9. Translation
How to get your po file
Test your work
Merging an old po file with an updated pot file
10. Problem Management
Reporting problems
Referencing problems
Problem attributes
Reported By
Severity level
A. CVS examples
Checking out from the repository
Checking in to the repository
Updateing changes performed by other developers
Dismissing changes
Keeping different branches on the same machine
Promoting bug-fixes to the main branch
Creating a new stable release
B. Source and Header Examples
Header File Example
Source File Example
C. Unit Test Examples
Unit Test Header File Example
Unit Test Source File Example
Unit Test Container Source File Example
D. RPM SPEC file example
E. Licence
Free Documentation Licence

List of Tables

1.1. Definition of version control related terms
10.1. Available problem status values
10.2. Available problem resolution values

List of Examples

2.1. Revisions on the head of a stable branch
3.1. Using include stoppers
3.2. Including other header files
3.3. Class declaration
3.4. Complete class declaration
3.5. Declaration of slot and signal methods
3.6. Attribute naming convention
3.7. Including header files in source files
3.8. Method implementation
3.9. Kernighan & Ritchie flow control style
3.10. Allman flow control style
3.11. One line body flow control style
3.12. Local variable nameing convention
7.1. Using include stoppers
A.1. Filling the sandbox for the first time
A.2. Filling the sandbox for the first time with a specific version
A.3. Promote changes to the repository
A.4. Updating the sandbox
A.5. Checking the status of files in the sandbox
A.6. Reverting changes made to the sandbox
A.7. Keeping stable and development branch on one machine
A.8. Checking out the stable branch for the first time
A.9. Promoting a change from the release to the development branch
A.10. Creating a new stable branch