summaryrefslogtreecommitdiffstats
path: root/developer-doc/phb/coding.docbook
diff options
context:
space:
mode:
Diffstat (limited to 'developer-doc/phb/coding.docbook')
-rw-r--r--developer-doc/phb/coding.docbook413
1 files changed, 413 insertions, 0 deletions
diff --git a/developer-doc/phb/coding.docbook b/developer-doc/phb/coding.docbook
new file mode 100644
index 0000000..ca7da82
--- /dev/null
+++ b/developer-doc/phb/coding.docbook
@@ -0,0 +1,413 @@
+<chapter id="coding-std">
+<title>Coding Rules</title>
+<para>
+Where-ever possible this document should be referred to when questions
+ regarding the format of the source code are raised.
+</para>
+
+<para>
+By the way, we know the code doesn't always conform to the standards at
+the moment, but work is underway to change the code and all new code
+submitted should conform to the standards.
+</para>
+
+<!-- SECTION =================================================== -->
+<sect1 id="general">
+<title>General</title>
+<para>
+The following list shows the general rules that should be regarded by any
+developer working on &app;.
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+Each file should contain only one declaration or implementation and the
+filename should reflect the class name. e.g ksomethingdlg.h would contain a
+declaration for the KSomethingDlg class.
+</para>
+</listitem>
+
+<listitem>
+<para>
+A tab width of 2 spaces should be used and if your editor supports it, the
+tabs should be changed into spaces. (KDevelop/KWrite supports tab
+translation).
+</para>
+</listitem>
+
+<listitem>
+<para>
+All dialogs should be located in the kmymoney2/dialogs directory.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Each class should be as self contained as possible. If for instance, you
+are creating a dialog, then all the signals and slots should be connected
+within that dialog class. Where access is needed to the class details
+methods should be used. This enhances readability and makes maintenance a
+lot easier with each object having it's own state, indentity and behaviour,
+(see Object Oriented Analysis &amp; Design using UML, Bennet &amp; Co).
+</para>
+</listitem>
+
+<listitem>
+<para>
+All user visible text should be wrapped in the i18n internationalisation
+wrapper for translation.
+</para>
+</listitem>
+</itemizedlist>
+
+</sect1>
+
+
+<!-- SECTION =================================================== -->
+<sect1 id="header-files">
+<title>Header Files</title>
+<para>
+The following rules apply to all header files.
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+Header files shall end with the extension .h not .hpp.
+</para>
+</listitem>
+
+<listitem>
+<para>
+All header files shall begin with a comment block as generated by KDevelop.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The remainder of the header file shall be surrounded by include stoppers.
+The name of the macro used should be the capitalized filename with the dot
+replaced by an underbar (e.g. KSettingsDlg.h --\> KSETTINGSDLG_H)
+<example>
+<title>Using include stoppers</title>
+<screen>
+
+ #ifndef KSETTINGSDLG_H
+ #define KSETTINGSDLG_H
+ /* remainder of header file */
+ #endif // KSETTINGSDLG_H
+
+
+</screen>
+</example>
+
+</para>
+</listitem>
+
+<listitem>
+<para>
+All classes designed for use by the KDE interface should begin with a
+<emphasis>K</emphasis>
+with each separate word beginning with an uppercase letter e.g
+KSomethingDlg.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The header file will include other header files in the following fashion
+and same order:
+</para>
+
+<example>
+<title>Including other header files</title>
+<screen>
+
+ //-----------------------------------------------------------------------
+ // QT Headers
+ #include &lt;qtlabel.h&gt;
+
+ //-----------------------------------------------------------------------
+ // KDE Headers
+ #include &lt;kcombobox.h&gt;
+
+ //-----------------------------------------------------------------------
+ // Project Headers
+ #include "mymoney/mymoneyfile.h"
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Each class should have a kdoc compatable comment header to describe the
+class and it's function within kmymoney2.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Classes shall begin their declaration as such:
+</para>
+
+<example>
+<title>Class declaration</title>
+<screen>
+
+ class KSomethingDlg : public KBaseClass {
+
+
+</screen>
+</example>
+
+<para>
+with an appopriate access declared.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Access modifiers should be left flushed in the class declaration with all
+attributes and methods indented by one tab. The access methods will be in
+order starting with private. The access identifier should exist even if no
+attributes or methods exist. Only one identifier can exist of the same
+type.
+</para>
+
+<example>
+<title>Complete class declaration</title>
+<screen>
+
+ class KSomethingDlg : public KBaseClass {
+ private:
+ QString m_szSomeString;
+ void useString(void);
+
+ private slots:
+
+ protected:
+
+ protected slots:
+
+ public:
+ KSomethingDlg();
+
+ public slots:
+
+ signals:
+ };
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+All slot methods should begin with slot and signal methods should start with
+signal. e.g
+</para>
+
+<example>
+<title>Declaration of slot and signal methods</title>
+<screen>
+
+ signalFoundTransaction();
+ slotFoundTransaction();
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+<anchor id="attribute-names"/>
+Attribute names should begin with the m_ prefix to indicate that they are
+member variables. The variable name should begin with a descriptive
+identifier such as qcomboboxMethod. Explicit hungarian notation is also
+fine. Examples of valid variable names can be found below:
+</para>
+
+<example>
+<title>Attribute naming convention</title>
+<screen>
+
+ QComboBox m_qcomboboxMethod;
+ int m_intCounter;
+ int m_nCounter;
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Method names should specify a return and argument(s) unless used in a slot
+or signal where the argument list can be left blank if necessary. The
+method should start with a lower case letter with each subsequent word
+having an upper case start letter.
+</para>
+</listitem>
+</itemizedlist>
+
+</sect1>
+
+<!-- SECTION =================================================== -->
+<sect1 id="source-files">
+<title>Source Files</title>
+<para>
+The following rules apply to all source code files.
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+C++ source files shall end with the extension .cpp not .cc or .cxx
+</para>
+</listitem>
+
+<listitem>
+<para>
+As with header files these should start with a header block similar to the
+one generated by KDevelop.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Include files shall be included in the same format as for header file e.g
+</para>
+
+<example>
+<title>Including header files in source files</title>
+<screen>
+ //-----------------------------------------------------------------------
+ // QT Headers
+ #include &lt;qtlabel.h&gt;
+
+ //-----------------------------------------------------------------------
+ // KDE Headers
+ #include &lt;kcombobox.h&gt;
+
+ //-----------------------------------------------------------------------
+ // Project Headers
+ #include "mymoney/mymoneyfile.h"
+ #include "ksomethingdlg.h"
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Methods should be implemented as such:
+</para>
+
+<example>
+<title>Method implementation</title>
+<screen>
+
+ void KSomethingDlg::useString(void)
+ {
+ .. function body
+ }
+
+
+</screen>
+</example>
+
+<para>
+with the function body indented by one tab (equals two spaces).
+</para>
+</listitem>
+
+<listitem>
+<para>
+Flow control statements should preferably follow the Kernighan &amp; Ritchie
+style as such:
+</para>
+
+<example>
+<title>Kernighan &amp; Ritchie flow control style</title>
+<screen>
+
+ while (something_is_true) {
+ operate on something;
+ }
+
+
+</screen>
+</example>
+
+<para>
+although the following Allman style is acceptable:
+</para>
+
+<example>
+<title>Allman flow control style</title>
+<screen>
+
+ while (something_is_true)
+ {
+ operate on something;
+ }
+
+
+</screen>
+</example>
+
+<para>
+It is also acceptable for one line body statements to omit the curly braces
+as such:
+</para>
+
+<example>
+<title>One line body flow control style</title>
+<screen>
+
+ while (something_is_true)
+ operate;
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Local variables should not be prefixed by the m_ member prefix and should
+start with a prefix as discussed for the
+<link linkend="attribute-names">header file</link>.
+For example:
+</para>
+
+<example>
+<title>Local variable nameing convention</title>
+<screen>
+
+ QString qstringTemp;
+ char *pszTemp;
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Each method should have a comment block preceeding it in a suitable format
+for other developers to see how the method works and what types of return
+and arguments it expects. It does not have to be kdoc compatable because
+kdoc only parses the header files. All kdoc comment blocks should be in the
+header files.
+</para>
+</listitem>
+</itemizedlist>
+</sect1>
+</chapter>